{"id":7041,"date":"2023-07-18T10:29:57","date_gmt":"2023-07-18T09:29:57","guid":{"rendered":"https:\/\/www.quantum-bits.org\/?p=7041"},"modified":"2023-07-18T10:53:29","modified_gmt":"2023-07-18T09:53:29","slug":"on-retro-computing-null-modem-communication","status":"publish","type":"post","link":"https:\/\/www.quantum-bits.org\/?p=7041","title":{"rendered":"On retro-computing: null modem communication"},"content":{"rendered":"<p>In a <a href=\"https:\/\/www.quantum-bits.org\/?p=6217\" target=\"_blank\" rel=\"noopener\">previous post<\/a>, I presented the restoration of an <strong>Apple IIc<\/strong> that I acquired a couple of months ago.&nbsp; Since it was my first steps with an Apple II computer, I tried to explore many aspects of it, including <strong>null modem communication<\/strong> for bootstrapping, disk image transfer and terminal access to a GNU\/Linux gateway.<\/p>\n<p>This made me wonder: <strong>how about null modem communication with other vintage computers<\/strong> ?<\/p>\n<p>In this blog post, I will attempt:<\/p>\n<ul>\n<li>to explore (in general terms) what <strong>null modem<\/strong> communication is<\/li>\n<li>to summarize what I already did with the <strong>Apple IIc<\/strong> (null modem cable creation, terminal access to a gateway via VT emulation, and data transfer), extend this work to use <strong>virtual drives<\/strong> and explore <strong>TCP\/IP<\/strong> stacks<\/li>\n<li>to explore null modem communication for the <strong>Atari 1040 STF<\/strong> and the <strong>Macintosh Plus <\/strong>(Terminal access, Data Transfer, TCP\/IP stack, Web browsing)<strong><br \/>\n<\/strong><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-2854\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2022\/01\/quantum-retrocomputing-pixels.jpg\" alt=\"\" width=\"850\" height=\"448\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2022\/01\/quantum-retrocomputing-pixels.jpg 768w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2022\/01\/quantum-retrocomputing-pixels-300x158.jpg 300w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><strong>Null Modem communication<\/strong><\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Null_modem\" target=\"_blank\" rel=\"noopener\">Null modem<\/a> is a <strong>communication<\/strong> <strong>method<\/strong> to directly connect two devices using an <a href=\"https:\/\/en.wikipedia.org\/wiki\/RS-232\" target=\"_blank\" rel=\"noopener\">RS-232<\/a> <a href=\"https:\/\/en.wikipedia.org\/wiki\/Serial_cable\" target=\"_blank\" rel=\"noopener\">serial cable<\/a>. The term refers to using a crossed-over RS-232 cable to connect the devices <strong>directly<\/strong> to one another <strong>without a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Modem\" target=\"_blank\" rel=\"noopener\">modem<\/a><\/strong>. By extension, a <strong>null modem cable<\/strong> is a <strong>RS-232 serial cable<\/strong> where the <strong>transmit<\/strong> and <strong>receive<\/strong> <strong>lines<\/strong> are <strong>cross-linked<\/strong>. In some cables there are also <a href=\"https:\/\/en.wikipedia.org\/wiki\/Handshake_(computing)\" target=\"_blank\" rel=\"noopener\">handshake<\/a> lines cross-linked.<\/p>\n<p>As an <strong>example<\/strong>, here is a common <strong>wiring diagram<\/strong> for a null modem cable to interconnect two terminals providing full handshake (for DB-9 and DB-25 connectors):<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7057\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/common-wiring.png\" alt=\"\" width=\"645\" height=\"358\"><\/p>\n<p style=\"text-align: center;\">[Table copied from Wikipedia&#8217;s page on Null Modem]<\/p>\n<p>Of course, there are <strong>many other possible wiring diagrams<\/strong>, depending on the <strong>type of connectors<\/strong> (<a href=\"https:\/\/en.wikipedia.org\/wiki\/D-subminiature\" target=\"_blank\" rel=\"noopener\">DB<\/a>-9, DB-25, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Mini-DIN_connector\" target=\"_blank\" rel=\"noopener\">mini-DIN<\/a> 8, <a href=\"https:\/\/en.wikipedia.org\/wiki\/DIN_connector\" target=\"_blank\" rel=\"noopener\">DIN<\/a>-5, etc.) and the <strong>types<\/strong> <strong>of devices<\/strong> on <strong>both sides<\/strong>, as well as the <strong>type<\/strong> <strong>of<\/strong> <strong>handshake<\/strong> (no hardware handshake, loop back handshake, partial handshake and full handshake).<\/p>\n<p>The <strong>original application<\/strong> of a null modem was to <strong>connect two devices<\/strong> directly without using a modem. As the RS-232 standard was adopted by other types of equipment, the scope of <strong>applications expanded<\/strong>. Null modems were <strong>commonly use<\/strong> for <strong>file transfer<\/strong> or <strong>remote operations:<\/strong><\/p>\n<ul>\n<li>connecting a <strong>character-oriented terminal<\/strong> (<a href=\"https:\/\/en.wikipedia.org\/wiki\/VT52\" target=\"_blank\" rel=\"noopener\">VT52<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/VT100\" target=\"_blank\" rel=\"noopener\">VT100<\/a>, &#8230;) to a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Mainframe_computer\" target=\"_blank\" rel=\"noopener\">mainframe<\/a> computer or a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Terminal_server\" target=\"_blank\" rel=\"noopener\">terminal server<\/a><\/li>\n<li>on <a href=\"https:\/\/en.wikipedia.org\/wiki\/MS-DOS\" target=\"_blank\" rel=\"noopener\">MS-DOS<\/a> or <a href=\"https:\/\/en.wikipedia.org\/wiki\/Microsoft_Windows\" target=\"_blank\" rel=\"noopener\">MS Windows<\/a>, using software like <a href=\"https:\/\/en.wikipedia.org\/wiki\/Laplink\" target=\"_blank\" rel=\"noopener\">Laplink<\/a> or <a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_DOS_commands#INTERSVR_and_INTERLNK\" target=\"_blank\" rel=\"noopener\">InterLnk<\/a> to map a disk of one PC as a network drive on another one, or transfer files between PCs<\/li>\n<li>on <a href=\"https:\/\/en.wikipedia.org\/wiki\/Amiga\" target=\"_blank\" rel=\"noopener\">Amiga<\/a> computer, using a null modem connection as a way of playing multiplayer games between two machines<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p>Of course, the availability of faster means of wired communication like <a href=\"https:\/\/en.wikipedia.org\/wiki\/Token_Ring\" target=\"_blank\" rel=\"noopener\">Token Ring<\/a> or <a href=\"https:\/\/en.wikipedia.org\/wiki\/Ethernet\" target=\"_blank\" rel=\"noopener\">Ethernet<\/a> and &#8211; much later on &#8211; wireless communication (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Wi-Fi\" target=\"_blank\" rel=\"noopener\">Wi-Fi<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Bluetooth\" target=\"_blank\" rel=\"noopener\">Bluetooth<\/a>, &#8230;) made the use of null modem cable <strong>less and less common<\/strong>.<\/p>\n<p><strong>Vintage computers as terminals<\/strong><\/p>\n<p>In this blog post, I will use <strong>three vintage computers as terminals<\/strong>:<\/p>\n<ul>\n<li>An <a href=\"https:\/\/en.wikipedia.org\/wiki\/Apple_IIc\" target=\"_blank\" rel=\"noopener\">Apple IIc<\/a><\/li>\n<li>An <a href=\"https:\/\/en.wikipedia.org\/wiki\/Atari_ST\" target=\"_blank\" rel=\"noopener\">Atari 1040 STF<\/a><\/li>\n<li>An <a href=\"https:\/\/en.wikipedia.org\/wiki\/Macintosh_Plus\" target=\"_blank\" rel=\"noopener\">Apple Macintosh Plus<\/a><\/li>\n<\/ul>\n<p>We will have to use <strong>three different null modem cables<\/strong>, because:<\/p>\n<ul>\n<li>The <strong>Apple IIc<\/strong> uses a <strong>DIN-5 female connector<\/strong> (thus, a DIN-5 male connector will be needed for this side of the Apple IIc null modem cable)<\/li>\n<li>The <strong>Atari ST<\/strong> uses a <strong>DB-25 female connector<\/strong> (thus, a DB-25 male connector will be needed for this side of the Atari ST null modem cable)<\/li>\n<li>The <strong>Macintosh Plus<\/strong> uses a <strong>mini DIN-8 female connector<\/strong> (thus, a mini DIN-8 male connector will be needed for this side of the Macintosh Plus modem cable)<\/li>\n<\/ul>\n<p>To keep thing (more of less) simple, the other end of the null modem cables will be a <strong>standard serial female DIN-9 connector.<\/strong><\/p>\n<p>We will also explore what kind of <strong>software<\/strong> will be needed (<strong>terminal<\/strong> <strong>emulators<\/strong>, specific software to <strong>transfer<\/strong> files, communication <strong>stacks<\/strong>, &#8230;) and explore a few network <strong>applications<\/strong><\/p>\n<p><strong>Gateway<\/strong><\/p>\n<p>The terminals are only <strong>one of the sides<\/strong> of the equations. For our experiments, we will need <strong>another<\/strong> <strong>computer<\/strong> to which these terminals will be connected to. This device will be referred in this post as the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Gateway_(telecommunications)\" target=\"_blank\" rel=\"noopener\">gateway<\/a>. For its convenience and versatility I will use a <strong>GNU\/Linux<\/strong> system running on a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Raspberry_Pi\" target=\"_blank\" rel=\"noopener\">Raspberry Pi<\/a>.<\/p>\n<p>The <strong>advantage<\/strong> of a <strong>GNU\/Linux<\/strong> system on a <strong>Raspberry<\/strong> <strong>Pi<\/strong>, is that it will <strong>easy<\/strong> to <strong>build<\/strong> and will be <strong>portable<\/strong>. Moreover, it will be easy to <strong>add<\/strong> and <strong>configure<\/strong> the necessary <strong>software<\/strong> <strong>stacks<\/strong> for our tests.<\/p>\n<p>The <strong>disadvantage<\/strong> of this solution &#8230; is that <strong>today&#8217;s computers don&#8217;t use<\/strong> <strong>old-style serial DIN-9 connectors<\/strong>. In the case of the Raspberry Pi, they use <strong>USB ports<\/strong>. So, a&nbsp;male <strong>RS232 (DIN-9 male) to USB<\/strong> <strong>connector<\/strong> &#8211; to which the 3 null modem cables will be hooked &#8211; will be required. I used this <strong>PL2303RA<\/strong>-based adapter, that was <strong>cheap<\/strong> and <strong>easy<\/strong> to find online :<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7059\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/nm-usb.png\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/nm-usb.png 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/nm-usb-768x576.png 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><strong>Note<\/strong>:<\/p>\n<ul>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Raspberry_Pi_OS\" target=\"_blank\" rel=\"noopener\">Raspberry OS<\/a> recognized this RS232 to USB connector right away (as <span style=\"font-family: Andale Mono, Times;\">\/dev\/ttyUSB0<\/span> in my case), no configuration was needed.<\/li>\n<li>Technical details about the gateway are presented later on, in a dedicated paragraph.<\/li>\n<\/ul>\n<p><strong>VT terminals and VT emulation<\/strong><\/p>\n<p>A computer terminal is a device which can be used for entering data into and displaying data from a host computer like a terminal server or a mainframe. A terminal that depends on the host computer for its processing power is often called a &#8220;thin client&#8221; (or a &#8220;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Computer_terminal#Dumb_terminal\" target=\"_blank\" rel=\"noopener\">dumb terminal<\/a>&#8220;), contrary to &#8220;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Rich_client\" target=\"_blank\" rel=\"noopener\">fat clients<\/a>&#8221; (or &#8220;smart terminals&#8221;) which have significant local capabilities and are able to process data.<\/p>\n<p>In the 40-50&#8217;s, early terminals were electromechanical <a href=\"https:\/\/en.wikipedia.org\/wiki\/Teleprinter\" target=\"_blank\" rel=\"noopener\">teleprinters<\/a>\/telewriters (often called <strong>TTY<\/strong>&#8216;s for <strong>T<\/strong>ele<strong>TY<\/strong>pewriters). In the late 50&#8217;s early 60&#8217;s came Video Display Units (<strong>VDU<\/strong>), that could displays information on a screen rather than printing text to paper.<\/p>\n<p>Then, in the 70&#8217;s came a next generation of VDU&#8217;s. They went beyond teletype emulation with an <strong>addressable<\/strong> <strong>cursor<\/strong> that gave them the ability to render and interact in 2 dimensions rather than line by line.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7068\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/dec-vt100-terminal.jpg\" alt=\"\" width=\"850\" height=\"755\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/dec-vt100-terminal.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/dec-vt100-terminal-768x682.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p style=\"text-align: center;\">[DEC VT100 terminal, from Wikipedia]<\/p>\n<p>In the late 70&#8217;s up to the 80&#8217;s emerged standards around character sets (ASCII\/ANSI), RS-232 ports and 72 (or 80) columns&nbsp; x 24 (or 25) lines displays with <a href=\"https:\/\/en.wikipedia.org\/wiki\/VT52\" target=\"_blank\" rel=\"noopener\">VT52<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/VT100\" target=\"_blank\" rel=\"noopener\">VT100<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/VT220\" target=\"_blank\" rel=\"noopener\">VT220<\/a> terminals, and <a href=\"https:\/\/en.wikipedia.org\/wiki\/Termcap\" target=\"_blank\" rel=\"noopener\">termcap<\/a> \/ <a href=\"https:\/\/en.wikipedia.org\/wiki\/Terminfo\" target=\"_blank\" rel=\"noopener\">terminfo<\/a> for <a href=\"https:\/\/en.wikipedia.org\/wiki\/Unix-like\" target=\"_blank\" rel=\"noopener\">Unix-like<\/a> systems.<\/p>\n<p>I remember, in the early 90&#8217;s, as a particle physics student, using <strong>VT100<\/strong> terminals to access <a href=\"https:\/\/en.wikipedia.org\/wiki\/VM_(operating_system)\" target=\"_blank\" rel=\"noopener\">VM\/CMS<\/a> virtual machines on <a href=\"https:\/\/en.wikipedia.org\/wiki\/CERN\" target=\"_blank\" rel=\"noopener\">CERN<\/a>&#8216;s or CC-<a href=\"https:\/\/en.wikipedia.org\/wiki\/Institut_national_de_physique_nucl%C3%A9aire_et_de_physique_des_particules\" target=\"_blank\" rel=\"noopener\">IN2P3<\/a>&#8216;s IBM mainframes for <a href=\"https:\/\/en.wikipedia.org\/wiki\/Fortran\" target=\"_blank\" rel=\"noopener\">Fortran<\/a> \/ <a href=\"https:\/\/en.wikipedia.org\/wiki\/CERN_Program_Library\" target=\"_blank\" rel=\"noopener\">CERNLIB<\/a> programming and running <a href=\"https:\/\/en.wikipedia.org\/wiki\/Physics_Analysis_Workstation\" target=\"_blank\" rel=\"noopener\">PAW<\/a> and <a href=\"https:\/\/en.wikipedia.org\/wiki\/GEANT-3\" target=\"_blank\" rel=\"noopener\">GEANT<\/a> simulations. Later on, I used them to get access to <a href=\"https:\/\/en.wikipedia.org\/wiki\/IBM_RS\/6000\" target=\"_blank\" rel=\"noopener\">RS\/6000<\/a> farms. By the end of my PhD, in the late 90&#8217;s, these old-school terminals were all replaced by <a href=\"https:\/\/en.wikipedia.org\/wiki\/X_terminal\" target=\"_blank\" rel=\"noopener\">X Terminals<\/a>, or full <a href=\"https:\/\/en.wikipedia.org\/wiki\/Oracle_Solaris\" target=\"_blank\" rel=\"noopener\">Solaris<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/HP-UX\" target=\"_blank\" rel=\"noopener\">HP-UX<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/IBM_AIX\" target=\"_blank\" rel=\"noopener\">AIX<\/a> or GNU\/<a href=\"https:\/\/en.wikipedia.org\/wiki\/Linux\" target=\"_blank\" rel=\"noopener\">Linux<\/a> workstations.<\/p>\n<p>For the sake of <strong>exploring 80&#8217;s computers<\/strong> network capabilities, we will therefore need:<\/p>\n<ul>\n<li><strong>TTY<\/strong> <strong>capabilities<\/strong> on the computer sides, through <strong>VT<\/strong> <strong>emulation<\/strong><\/li>\n<li>&#8220;<strong>Get TTY<\/strong>&#8221; capabilities on the gateway side, via <a href=\"https:\/\/en.wikipedia.org\/wiki\/Getty_(Unix)\" target=\"_blank\" rel=\"noopener\">getty<\/a><\/li>\n<\/ul>\n<p><strong>Data transfer<\/strong><\/p>\n<p><strong>Data transfer<\/strong> over serial cable has been one of the first null modem communication applications. The null modem <strong>cable<\/strong> is actually just the <strong>physical<\/strong> <strong>channel<\/strong> on which data transits. To achieve data transfer, one has to select a <strong>protocol<\/strong>: a <strong>convention<\/strong> that describe how to <strong>transfer<\/strong> data between <strong>endpoints<\/strong>, <strong>breaking<\/strong> <strong>up<\/strong> the original data into <strong>series<\/strong> <strong>of<\/strong> <strong>packets<\/strong> to be sent to the receiver along with <strong>additional<\/strong> <strong>information<\/strong> to indicated whether <strong>packets<\/strong> are <strong>correctly<\/strong> <strong>received<\/strong>, and, if not, how to manage <strong>transmission<\/strong> <strong>errors, <\/strong>and so on.<\/p>\n<p>Over the years, many different protocols have been created: <a href=\"https:\/\/en.wikipedia.org\/wiki\/XMODEM\" target=\"_blank\" rel=\"noopener\">XMODEM<\/a> (1977), <a href=\"https:\/\/en.wikipedia.org\/wiki\/Kermit_(protocol)\" target=\"_blank\" rel=\"noopener\">Kermit<\/a> (1981), <a href=\"https:\/\/en.wikipedia.org\/wiki\/YMODEM\" target=\"_blank\" rel=\"noopener\">YMODEM<\/a> (1985), <a href=\"https:\/\/en.wikipedia.org\/wiki\/ZMODEM\" target=\"_blank\" rel=\"noopener\">ZMODEM<\/a> (1986), etc. Some of these protocols can be proprietary and \/ or specific to a specific hardware or specific to an operating system.<\/p>\n<p>We will explore a few of these data transfer protocols in this blog post.&nbsp;<\/p>\n<p><strong>TCP\/IP over null modem<\/strong><\/p>\n<p>The <strong>Internet<\/strong> <strong>Protocol<\/strong> Suite (often referred as <strong>TCP\/IP<\/strong>) is a framework of communication protocols commonly used nowadays in local networks and in the Internet. Born in the early 70&#8217;s, what is now taken for granted is actually quite old (I believe I have to the month the exact same age as the FTP protocol).<\/p>\n<p>A minimal IPv4 suite include the following protocols (IPv6 is a tad more complex): &nbsp;<a title=\"Internet Protocol\" href=\"https:\/\/en.wikipedia.org\/wiki\/Internet_Protocol\" target=\"_blank\" rel=\"noopener\">Internet Protocol<\/a>&nbsp;(IP),&nbsp;<a title=\"Address Resolution Protocol\" href=\"https:\/\/en.wikipedia.org\/wiki\/Address_Resolution_Protocol\">Address Resolution Protocol<\/a>&nbsp;(ARP),&nbsp;<a title=\"Internet Control Message Protocol\" href=\"https:\/\/en.wikipedia.org\/wiki\/Internet_Control_Message_Protocol\">Internet Control Message Protocol<\/a>&nbsp;(ICMP),&nbsp;<a title=\"Transmission Control Protocol\" href=\"https:\/\/en.wikipedia.org\/wiki\/Transmission_Control_Protocol\">Transmission Control Protocol<\/a>&nbsp;(TCP),&nbsp;<a title=\"User Datagram Protocol\" href=\"https:\/\/en.wikipedia.org\/wiki\/User_Datagram_Protocol\">User Datagram Protocol<\/a>&nbsp;(UDP), and&nbsp;<a title=\"Internet Group Management Protocol\" href=\"https:\/\/en.wikipedia.org\/wiki\/Internet_Group_Management_Protocol\">Internet Group Management Protocol<\/a> (IGMP).<\/p>\n<p>The Internet protocol suite does not presume any specific hardware or operating system. It only requires that hardware and a software layer exists that is capable of sending and receiving packets on a computer network. Networking capabilities are so important that, nowadays, the suite is implemented on all new system\/hardware. This, of course, <strong>wasn&#8217;t<\/strong> always the case for our beloved vintage computers from the <strong>70&#8217;s<\/strong> and <strong>80&#8217;s<\/strong>. In this little experiment, I will<\/p>\n<ul>\n<li>start by exploring whether <strong>TCP\/IP stacks<\/strong> exists for our 3 systems<\/li>\n<li>then I will explore whether it can be used over null modem<\/li>\n<li>if so, I will explorer how far we can use (today&#8217;s) common applications like a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Web_browser\" target=\"_blank\" rel=\"noopener\">Web browser<\/a><\/li>\n<\/ul>\n<hr>\n<p><strong>GNU\/Linux gateway (Raspberry Pi)<\/strong><\/p>\n<p>Raspberry Pi&#8217;s are unfortunately hard to find and expensive since the global shortage of semiconductor components. It seems thing are getting back to normal (yeah !), but I had the chance to have bought over the years many Raspberry Pi&#8217;s. So, to build the GNU\/Linux gateway, I resurrected <a href=\"https:\/\/www.quantum-bits.org\/?p=1327\" target=\"_blank\" rel=\"noopener\">an old Raspberry Pi 2<\/a> along with its touchscreen and stand (bought in <strong>2015<\/strong> on <a href=\"http:\/\/www.element14.com\" target=\"_blank\" rel=\"noopener\">element14<\/a> and <a href=\"https:\/\/shop.pimoroni.com\/\" target=\"_blank\" rel=\"noopener\">Pimoroni<\/a>):<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7082\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/raspi-2-scren-pimoroni.jpg\" alt=\"\" width=\"850\" height=\"668\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/raspi-2-scren-pimoroni.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/raspi-2-scren-pimoroni-768x604.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>I took a brand new <strong>SD card<\/strong>, installed <strong>Raspberry OS 11.7<\/strong> and configured the following <strong>hardware<\/strong> setup:<\/p>\n<ul>\n<li>a cheap Belkin <strong>USB WiFi dongle<\/strong> I had handy (configured to get access to my home network and the Internet)<\/li>\n<li>a <strong>USB 3&#8243; floppy disk drive<\/strong> (the one I used to <a href=\"https:\/\/www.quantum-bits.org\/?p=3624\" target=\"_blank\" rel=\"noopener\">create Atari ST diskettes<\/a>), on <span style=\"font-family: Andale Mono, Times;\">\/dev\/sda<\/span><\/li>\n<li>a <strong>Digitus USB to RS232<\/strong> adapter (no driver needed, using <span style=\"font-family: Andale Mono, Times;\">\/dev\/ttyUSB0<\/span>)<\/li>\n<\/ul>\n<p>On the <strong>network<\/strong> <strong>service<\/strong> front, to drive remotely the gateway, I configured the Raspberry Pi to launch the following remote access services<\/p>\n<ul>\n<li><span style=\"font-family: Andale Mono, Times;\">SSHd<\/span><\/li>\n<li><span style=\"font-family: Andale Mono, Times;\">VNCserver<\/span><\/li>\n<\/ul>\n<p>I created a simple <strong>account<\/strong> named <span style=\"font-family: Andale Mono, Times;\">fred<\/span>, to be used to <strong>log remotely<\/strong> into the gateway and sudo <strong>commands<\/strong>. This account has the following configuration:<\/p>\n<ul>\n<li>defaults using the <span style=\"font-family: Andale Mono, Times;\">tcsh<\/span> shell (I found out it worked better than the default <span style=\"font-family: Andale Mono, Times;\">bash<\/span> shell for most VT emulators)<\/li>\n<li>a very simple (to avoid mangled characters at the prompt) <span style=\"font-family: Andale Mono, Times;\">.tcshc<\/span> file:&nbsp;<tt>set prompt=\"%M:%~&gt;\"<\/tt><\/li>\n<\/ul>\n<p>On the <strong>software<\/strong> front, I added via <span style=\"font-family: Andale Mono, Times;\">apt-get install<\/span>:<\/p>\n<ul>\n<li><span style=\"font-family: Andale Mono, Times;\">openJDK Runtime Environment<\/span> 17.0.7 (for <span style=\"font-family: Andale Mono, Times;\">ADTPro<\/span>, more on this later)<\/li>\n<li><span style=\"font-family: Andale Mono, Times;\">dosbox<\/span> 0.74 (for <span style=\"font-family: Andale Mono, Times;\">Ghostlink<\/span>, more on this later)<\/li>\n<\/ul>\n<p>On top of this, I added (for convenience) the <a href=\"https:\/\/hatari.tuxfamily.org\/\" target=\"_blank\" rel=\"noopener\">Hatari<\/a> and <a href=\"https:\/\/www.gryphel.com\/c\/minivmac\/dnld_std.html\" target=\"_blank\" rel=\"noopener\">Mini vMac<\/a> emulators. These are <strong>not required<\/strong>, but they can be <strong>handy<\/strong> for <strong>testing<\/strong> <strong>purposes<\/strong> before experimenting on real hardware.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7058\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/nm-gateway.png\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/nm-gateway.png 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/nm-gateway-768x576.png 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<hr>\n<p><span style=\"font-family: apple-ii;\">Apple IIc<\/span><\/p>\n<p>This part is mainly a <strong>summary<\/strong> of the work done in a previous post on an <a href=\"https:\/\/www.quantum-bits.org\/?p=6217\" target=\"_blank\" rel=\"noopener\">Apple IIc restoration<\/a>, which contains <strong>detailed information<\/strong>. Here is the general setup for the <strong>first<\/strong> <strong>set of experiments<\/strong>:<\/p>\n<ul>\n<li>Connect the <strong>Apple IIc to the Raspberry Pi<\/strong> via a <strong>null modem cable <\/strong>(from the <strong>DIN-5 serial port<\/strong> of the Apple IIc to the <strong>RS232 adapter<\/strong>, plugged into a <strong>USB port<\/strong> on the Raspberry Pi)<\/li>\n<li>Use the <strong>Raspberry Pi<\/strong> as a <strong>gateway<\/strong> for internet access<\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7044\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/apple-ii-internet.png\" alt=\"\" width=\"677\" height=\"272\"><\/p>\n<p>The <strong>null modem cable<\/strong> plugs into the <strong>2nd serial port<\/strong> of the Apple IIc (<span style=\"font-family: Andale Mono, Times;\">IN#2<\/span>):<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7052\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/apple-ii-c-ports.png\" alt=\"\" width=\"671\" height=\"181\"><\/p>\n<p>The first thing is therefore to <strong>get a proper null modem cable<\/strong> for Apple IIc<\/p>\n<p><strong>Apple IIc null modem cable<\/strong><\/p>\n<p>It is easy to buy a <strong>DIN-5 (male) to RS232 DE-9 (female) null modem cable<\/strong> online. But I decided to build it myself, which was much cheaper and faster. Here is the wiring (see <a href=\"https:\/\/www.quantum-bits.org\/?p=6217#p18\" target=\"_blank\" rel=\"noopener\">here<\/a> for details):<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7056\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/apple-IIc-null-modem-wiring.png\" alt=\"\" width=\"800\" height=\"174\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/apple-IIc-null-modem-wiring.png 800w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/apple-IIc-null-modem-wiring-768x167.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p>\n<p>Here is the resulting <strong>null modem cable<\/strong> for the <strong>Apple IIc<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7087\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-null-modem-cable.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-null-modem-cable.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-null-modem-cable-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><strong>VT terminal: MODEM MGR (Apple IIc) and getty (GNU\/Linux gateway)<br \/>\n<\/strong><\/p>\n<p>In our very first experiment, I wanted to use the Apple IIc as a &#8220;dumb&#8221; terminal. The setup is the following;<\/p>\n<ul>\n<li>Run <strong>MODEM MGR<\/strong> (PRODOS version) on the <strong>Apple IIc<\/strong> side<\/li>\n<li>Run <strong>getty<\/strong> on the <strong>gateway<\/strong> side<\/li>\n<\/ul>\n<p><strong>MODEM MGR<\/strong> is a communications program for the Apple II+, IIe and IIc personal computers. It supports receiving and transmitting text \/ data between the computer and other systems over phone line or with over null modem. It supports VT emulation on the <strong>PRODOS version<\/strong>, available <a href=\"https:\/\/mirrors.apple2.org.za\/ftp.apple.asimov.net\/images\/communications\/Modem%20MGR%20Disks.zip\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-6814\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/apple-modem-mgr-prodos.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/apple-modem-mgr-prodos.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/apple-modem-mgr-prodos-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><strong>Note<\/strong>: details on how to create and setup MODEM MGR are available <a href=\"https:\/\/www.quantum-bits.org\/?p=6217#p25\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<p>On the <strong>GNU\/Linux side<\/strong>, I created the following &#8220;<span style=\"font-family: Andale Mono, Times;\">server_vt100.sh<\/span>&#8221; <strong>script<\/strong>:<\/p>\n<pre>#!\/bin\/bash\n\nwhile true\ndo\n\/sbin\/getty -L 9600 ttyUSB0 vt100\ndone<\/pre>\n<p>Here is an <strong>explanation<\/strong>&nbsp;of this script:<\/p>\n<ul>\n<li><strong>getty<\/strong>&nbsp;(short for \u201cget TTY\u201d) is a&nbsp;<strong>Unix<\/strong>&nbsp;program that manages physical or virtual&nbsp;<strong>terminals<\/strong><\/li>\n<li>When it&nbsp;<strong>detects a connection<\/strong>, it&nbsp;<strong>prompts<\/strong>&nbsp;for a&nbsp;<strong>username<\/strong>&nbsp;an runs the&nbsp;login&nbsp;program to authenticate the user<\/li>\n<li>It is set to use device <span style=\"font-family: Andale Mono, Times;\">\/dev\/ttyUSB0<\/span> (used by the RS232-to-USB adapter)<\/li>\n<li>The \u201c-L\u201d options controls the&nbsp;<strong>line flag<\/strong><\/li>\n<li>The&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Baud\" target=\"_blank\" rel=\"noopener\">Baud<\/a>&nbsp;rate (speed) is set to <strong>9600<\/strong><\/li>\n<li>It is configured as a&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/VT100\" target=\"_blank\" rel=\"noopener\">VT100<\/a>&nbsp;terminal<\/li>\n<\/ul>\n<p>To log into the GNU\/Linux gateway:<\/p>\n<ul>\n<li><strong>Boot<\/strong>&nbsp;the Apple IIc with the&nbsp;<strong>Modem MGR floppy disk<\/strong>&nbsp;(\u201cWork\u201d side)<\/li>\n<li>On the&nbsp;<strong>Apple IIc side<\/strong>, when the Modem MGT&nbsp;<strong>menu&nbsp;<\/strong>appears, type&nbsp;<tt>ESC-M<\/tt>, then&nbsp;<tt>N<\/tt>&nbsp;to&nbsp;set the <strong>speed<\/strong> to <strong>9600<\/strong> bauds<\/li>\n<li>Once done, type&nbsp;<tt>ESC-:<\/tt>, then&nbsp;<tt>V<\/tt> to choose the <strong>VT<\/strong>&nbsp;<strong>terminal emulation&nbsp;<\/strong><\/li>\n<li>On the&nbsp;<strong>GNU\/Linux side<\/strong>, start the server script (as&nbsp;root):&nbsp;<tt>sudo .\/server.sh<\/tt><\/li>\n<\/ul>\n<p>The <strong>login<\/strong> process <strong>initiates<\/strong> right away:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7096\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-login.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-login.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-login-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>Here is a screenshot of the <strong>Apple IIc<\/strong> accessing <strong>Wikipedia<\/strong>&#8216;s page on the Apple IIc:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7097\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-wikipedia.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-wikipedia.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-wikipedia-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>In the very early 90&#8217;s, using a character-oriented terminal was actually the way I experienced the web for the very first time.<\/p>\n<p>Here is a last screenshot of the <strong>Apple IIc<\/strong>, logged into my MacBook (from the gateway, via <span style=\"font-family: Andale Mono, Times;\">SSH<\/span>) and using the <span style=\"font-family: Andale Mono, Times;\">tgpt<\/span> CLI wrapper for <strong>ChatGPT<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-6861\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/apple-chatgpt.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/apple-chatgpt.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/apple-chatgpt-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><strong>Transferring disk images with ADTPro<br \/>\n<\/strong><\/p>\n<p>In this second experiment with the Apple IIc, I used <strong>ADTPro<\/strong> to <strong>transfer<\/strong> <strong>disk<\/strong> <strong>images<\/strong> between the Apple IIc and the Raspberry Pi gateway. This part is a summary of what was detailed <a href=\"https:\/\/www.quantum-bits.org\/?p=6217#p18\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<p><strong>Apple Disk Transfer ProDOS<\/strong>&nbsp;(<a href=\"https:\/\/adtpro.com\/index.html\" target=\"_blank\" rel=\"noopener\">ADTPro<\/a>) is a&nbsp;<strong>fantastic<\/strong>&nbsp;software that can be used to&nbsp;<strong>transfer<\/strong>&nbsp;physical&nbsp;<strong>disks<\/strong>&nbsp;and disk images&nbsp;<strong>between<\/strong>&nbsp;<strong>Apple II<\/strong> computers and a modern host running <strong>Java<\/strong>.<\/p>\n<p>I downloaded&nbsp;<strong>ADTPro version 2.1.0<\/strong> (from here: <a href=\"https:\/\/github.com\/ADTPro\/adtpro\/releases\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/ADTPro\/adtpro\/releases<\/a>) and created a floppy disk, with <strong>ADTPro<\/strong> on one side, and <strong>VDRIVE<\/strong> on the other (more on this later)<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7101\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-diskette.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-diskette.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-diskette-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>On the <strong>Apple IIc side<\/strong>, it is just a matter of <strong>booting<\/strong> from the <strong>ADTPro<\/strong> disks and selecting the &#8220;(S)ERIAL&#8221; connection type:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7095\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-start.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-start.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-start-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>On the <strong>gateway side<\/strong>, once Java (17.x) installed via <span style=\"font-family: Andale Mono, Times;\">apt-get<\/span>, ADTPro is launched on the Raspberry Pi using the <span style=\"font-family: Andale Mono, Times;\">adtpro.sh<\/span> script. From there, it just a matter of clicking the &#8220;<strong>Serial<\/strong>&#8221; <strong>button<\/strong> and selecting the proper <strong>port<\/strong> (<span style=\"font-family: Andale Mono, Times;\">\/dev\/ttyUSB0<\/span>), <strong>speed<\/strong> (115200 bauds):<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7091\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro.jpg\" alt=\"\" width=\"834\" height=\"1066\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro.jpg 834w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-768x982.jpg 768w\" sizes=\"(max-width: 834px) 100vw, 834px\" \/><\/p>\n<p>Back to the <strong>Apple IIc side<\/strong>:<\/p>\n<ul>\n<li>hit &#8220;<strong>(R)ECEIVE<\/strong>&#8221; to select and transfer a disk image (stored in the &#8220;<strong>disks<\/strong>&#8221; <strong>folder<\/strong> on the gateway) from the gateway to the Apple II and write it to a floppy disk<\/li>\n<li>hit &#8220;<strong>(S)END<\/strong>&#8221; to read a floppy disk, transfer its image from the Apple IIc to the gateway and stored it in the &#8220;<strong>disks<\/strong>&#8221; <strong>folder<\/strong><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7094\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-r.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-r.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-r-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7102\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-transfer.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-transfer.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-transfer-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>It is as simple as that to transfer new disk images from the gateway to the Apple IIc and create sets of floppy disks:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-6625\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/05\/apple-software2.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/05\/apple-software2.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/05\/apple-software2-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><strong>Accessing a ADTPro Virtual Drives over null modem cable<br \/>\n<\/strong><\/p>\n<p>Up to now, I only used <strong>half<\/strong> of <strong>ADTPro<\/strong> capabilities. Not only can ADTPro transfer disk images over a serial null modem cable, it can also <strong>host two virtual drives<\/strong> through a specific <strong>VDRIVE<\/strong> driver running on the <strong>Apple IIc computer.<\/strong><\/p>\n<p>When this <strong>driver<\/strong> is loaded (booting from the <strong>VDRIVE<\/strong> disk I created earlier on), one can <strong>access from the Apple IIc computer<\/strong>, over the <strong>serial cable<\/strong>, two remote disk images (located into the &#8220;<strong>disks<\/strong>&#8221; folder of ADTPro):<\/p>\n<ul>\n<li><span style=\"font-family: Andale Mono, Times;\">virtual.po<\/span><\/li>\n<li><span style=\"font-family: Andale Mono, Times;\">virtual2.po<\/span><\/li>\n<\/ul>\n<p>These two <strong>800K<\/strong> empty <strong>virtual<\/strong> <strong>disk<\/strong> images come pre-built with the ADTPro distribution. Of course, I didn&#8217;t want to use empty images. By a happy coincidence, <strong>Apple II Desktop 1.3<\/strong> was just <strong>released<\/strong> <strong>two<\/strong> <strong>days<\/strong> <strong>ago<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7113\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/appleII-a2desktop-release.png\" alt=\"\" width=\"850\" height=\"829\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/appleII-a2desktop-release.png 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/appleII-a2desktop-release-768x749.png 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>I <strong>downloaded<\/strong> the French version of Apple II Desktop, <strong>unzipped<\/strong> it on my MacBook, and<\/p>\n<ul>\n<li><strong>transferred<\/strong> the <span style=\"font-family: Andale Mono, Times;\">A2DeskTop-1.3-fr_800k.2mg<\/span> file to the gateway via <span style=\"font-family: Andale Mono, Times;\">SCP<\/span><\/li>\n<li><strong>renamed<\/strong> the file it into &#8220;<span style=\"font-family: Andale Mono, Times;\">virtual.po<\/span>&#8221; and <strong>copied<\/strong> it over the &#8220;<span style=\"font-family: Andale Mono, Times;\">virtual.po<\/span>&#8221; image into ADTPro &#8220;<strong>disks<\/strong>&#8221; folder<\/li>\n<li><strong>left<\/strong> the &#8220;<span style=\"font-family: Andale Mono, Times;\">virtual2.po<\/span>&#8221; file <strong>unchanged<\/strong><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7111\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/appleII-a2desktop.png\" alt=\"\" width=\"750\" height=\"398\"><\/p>\n<p>Then I <strong>launched<\/strong> <strong>ADTPro<\/strong> on the gateway, hit the &#8220;<strong>Serial<\/strong>&#8221; button, and <strong>booted<\/strong> the <strong>Apple<\/strong> <strong>IIc<\/strong> on the <strong>VDRIVE<\/strong> diskette:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7104\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive1.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive1.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive1-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>I <strong>typed<\/strong> in:<\/p>\n<ul>\n<li><span style=\"font-family: Andale Mono, Times;\">-VSDRIVE<\/span> to <strong>load<\/strong> the <strong>driver<\/strong>, then<\/li>\n<li><span style=\"font-family: Andale Mono, Times;\">CAT,S1<\/span> to <strong>list<\/strong> the content of the <strong>first<\/strong> <strong>virtual<\/strong> <strong>drive<\/strong><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7105\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive2.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive2.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive2-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>And it freakin&#8217;<strong> worked !<\/strong><\/p>\n<p>Since, I am still not totally familiar with Apple II commands, I typed in &#8220;<span style=\"font-family: Andale Mono, Times;\">BYE<\/span>&#8221; to get an interactive access to files, selected the &#8220;<span style=\"font-family: Andale Mono, Times;\">DESKTOP.SYSTEM<\/span>&#8221; file and hit the <span style=\"font-family: Andale Mono, Times;\">enter<\/span> key:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7106\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive3.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive3.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive3-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>It <strong>launched the Apple II Desktop<\/strong> right away, <strong>over the serial cable !<\/strong><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7107\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive4.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive4.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive4-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>How <strong>cool<\/strong> is that ? The <strong>two virtual ADTPro disks<\/strong> appeared:<\/p>\n<ul>\n<li>As &#8220;<strong>A2.Desktop<\/strong>&#8221; (for <span style=\"font-family: Andale Mono, Times;\">virtual.po<\/span>), containing the Apple II desktop files<\/li>\n<li>As &#8220;<strong>Hosted.Vdrive2<\/strong>&#8221; (for <span style=\"font-family: Andale Mono, Times;\">virtual2.po<\/span>), empty, but ready to be used to store new files<\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7108\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive5.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive5.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive5-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>Here are a few other <strong>screenshots<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7109\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive6.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive6.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive6-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7110\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive7.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive7.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-adtpro-vdrive7-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>This is <strong>very cool<\/strong> !<\/p>\n<p><strong>TCP\/IP stack<\/strong><\/p>\n<p>Can we do <strong>better<\/strong> ? The next level challenge is <strong>a TCP\/IP stack on the Apple IIc<\/strong> and use it <strong>over a serial null modem cable<\/strong>.<\/p>\n<p>Indeed, there are <strong>TCP\/IP stacks available<\/strong> for the Apple IIc:<\/p>\n<ul>\n<li><strong>Contiki OS<\/strong>: this OS by <a href=\"https:\/\/a2retro.de\/\" target=\"_blank\" rel=\"noopener\">Olivier Schmidt<\/a> targets 6502 based computers (C64, C128, Atari XL and <strong>Apple<\/strong> <strong>II<\/strong>). Amazingly, it includes a <strong>TCP\/IP stack<\/strong> as well as a <strong>text-based web browser<\/strong> and <a href=\"https:\/\/en.wikipedia.org\/wiki\/Internet_Relay_Chat\" target=\"_blank\" rel=\"noopener\">IRC<\/a> client. Alas, Contiki OS <strong>requires Ethernet hardware<\/strong> (Uthernet, Uthernet II or LANceGS). There is <strong>no support for TCP\/IP over serial connections<\/strong> in the standard build. There is experimental support for <strong>SLIP<\/strong> instead of Ethernet when building the environment with the proper <span style=\"font-family: Andale Mono, Times;\">SLIP<\/span> flag defined. Unfortunately, I could not find a pre-built version of Contiki OS with this option (last release was in 2019), and building Contiki OS from source is out of the scope of my little experiment&#8230;You can nevertheless <strong>watch<\/strong> this video of Contiki OS in (retro) action here: <a href=\"https:\/\/www.youtube.com\/watch?v=NentMKyVGog\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=NentMKyVGog<\/a><\/li>\n<li><strong>IP65<\/strong>: this project (now also maintained by Olivier Schmidt) is a TCP\/IP stack for C64, Atari XL and Apple II. It consists of TCP\/IP libraries as well as ready-to-run TCP\/IP programs using these libraries. Just like Contiki, there is <strong>no support for TCP\/IP over serial connections<\/strong> unfortunately&#8230;<\/li>\n<li><strong>Marina<\/strong>: the now defunct Marina project started in 2012 with low-level routines for the Uthernet card and expanded to a TCP\/IP stack a few years later, with ARP, IP, UDP, ICPM, DHCP, DNS resolution and Uthernet II support. A <strong>SLIP<\/strong> interface was <strong>planned<\/strong> &#8230; but, alas, <strong>never came to fruition<\/strong>.<\/li>\n<\/ul>\n<p>Then, I came across the <a href=\"https:\/\/github.com\/A2osX\/A2osX\" target=\"_blank\" rel=\"noopener\">A2osX<\/a> project. It is a <strong>multi-user, multi-tasking OS<\/strong> for the <strong>Apple II<\/strong>, Unix-like in spirit. By itself, this is quite amazing ! And A2oSX comes &#8230; with a <strong>TCP\/IP stack<\/strong>, and <strong>drivers<\/strong> for LANceGS, Uthernet, Uthernet II and <strong>Apple Super Serial Card<\/strong>. Now, there is (some) hope !<\/p>\n<p>I downloaded the <span style=\"font-family: Andale Mono, Times;\">STABLE.140.po<\/span> image disk (version 0.93, Feb-2020) and tried it in <a href=\"https:\/\/www.virtualii.com\/\" target=\"_blank\" rel=\"noopener\">Virtual II emulator<\/a> to familiarize myself with it and start messing with network configurations:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7119\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-a2osx.jpg\" alt=\"\" width=\"750\" height=\"1034\"><\/p>\n<p>I was <strong>very<\/strong> impressed and wanted to test it on real hardware. I created a <strong>floppy<\/strong> <strong>disk<\/strong> and <strong>booted<\/strong> the system, crossing fingers:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7103\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-a2osx.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-a2osx.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/apple-ii-internet-a2osx-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>But &#8230; it got <strong>stuck<\/strong> on the <strong>Stage 3 init<\/strong> step, right after the <strong>CPU Speed test<\/strong> and didn&#8217;t go any further on my hardware. Maybe a ROM problem (the one of my Apple IIc is ROM 255\/ Model 1).<\/p>\n<p>So &#8230; I am <strong>kinda stuck too<\/strong> right now, but the project is <strong>alive<\/strong> (there were commits in the main branch only 3 weeks ago). I&#8217;m going to watch the <strong>A2osX<\/strong> project very closely, I have the gut feeling it may be the right path for our little experiment !<\/p>\n<hr>\n<p><span style=\"font-family: atari-st; font-size: 14pt;\">Atari 1040STF<\/span><\/p>\n<p>Let&#8217;s move on and mess with networking on an <a href=\"https:\/\/www.quantum-bits.org\/?p=3624\" target=\"_blank\" rel=\"noopener\">Atari 1040 STF<\/a>. Just like for the Apple IIc, I will:<\/p>\n<ul>\n<li>Connect the <strong>Atari ST to the Raspberry Pi<\/strong> via a <strong>null modem cable <\/strong>(from the <strong>DB-25 serial port<\/strong> of the Atari ST to the <strong>RS232 adapter<\/strong>, plugged into a <strong>USB port<\/strong> on the Raspberry Pi)<\/li>\n<li>Use the <strong>Raspberry Pi<\/strong> as a <strong>gateway<\/strong> for internet access<\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7045\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/atari-st-internet.png\" alt=\"\" width=\"653\" height=\"258\"><\/p>\n<p>The <strong>null modem<\/strong> cable plugs into the <strong>modem port (serial)<\/strong> of the <strong>Atari ST<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7053\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/atari-st-ports.png\" alt=\"\" width=\"688\" height=\"143\"><\/p>\n<p><strong>Atari ST null modem cable<\/strong><\/p>\n<p>The Atari ST uses a <strong>DB-25<\/strong> <strong>male<\/strong> connector for its serial interface. Here is its <strong>pinout<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7130\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-db25.jpg\" alt=\"\" width=\"587\" height=\"256\"><\/p>\n<p>Since the Atari ST uses rather <strong>standard<\/strong> ports, building a serial null modem cable is easier than for the Apple IIc. It was just a matter of <strong>assembling<\/strong> <strong>standard<\/strong> <strong>components<\/strong>. I bought online:<\/p>\n<ul>\n<li>A <strong>standard RS232 null modem cable<\/strong> (<strong>DB-9<\/strong>, <strong>male<\/strong> \/ <strong>female<\/strong>)<\/li>\n<li>A <strong>DB-25<\/strong> (<strong>female<\/strong>) to <strong>DB-9<\/strong> (male) <strong>converter<\/strong><\/li>\n<\/ul>\n<p>And &#8230; here is the <strong>result<\/strong> :<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7128\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-null-modem-cable.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-null-modem-cable.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-null-modem-cable-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>Easy peasy:<\/p>\n<ul>\n<li>the <strong>female DB-25<\/strong> end of the cable plugs into the <strong>Atari ST serial port<br \/>\n<\/strong><\/li>\n<li>the <strong>male DB-9<\/strong> end plugs into the <strong>RS232-to-USB connector<\/strong> of the <strong>gateway<\/strong>.<\/li>\n<\/ul>\n<p><strong>VT terminal, take one: VT52 accessory (Atari ST) and getty (GNU\/Linux gateway)<br \/>\n<\/strong><\/p>\n<p>Let&#8217;s try something easy: using the standard Atari ST <a href=\"https:\/\/en.wikipedia.org\/wiki\/VT52\" target=\"_blank\" rel=\"noopener\">VT52<\/a> emulator accessory. For this, I created a floppy disk image named &#8220;<span style=\"font-family: Andale Mono, Times;\">network.st<\/span>&#8221; with the the standard <span style=\"font-family: Andale Mono, Times;\">TERMINAL.ACC<\/span> VT52 accessory and a few other utilities likes <span style=\"font-family: Andale Mono, Times;\">SYSINFO<\/span>.<\/p>\n<p>For this, I used my <strong>usual workflow<\/strong> (see <a href=\"https:\/\/www.quantum-bits.org\/?p=3624\" target=\"_blank\" rel=\"noopener\">here<\/a> for more details):<\/p>\n<ul>\n<li><strong>Format<\/strong> a <strong>floppy<\/strong> <strong>disk<\/strong> on the <strong>Atari ST<\/strong><\/li>\n<li><strong>Mount<\/strong> the <strong>floppy<\/strong> <strong>disk<\/strong> on the <strong>gateway<\/strong>: <span style=\"font-family: Andale Mono, Times;\">sudo mount -t msdos \/dev\/sda \/mnt<\/span><\/li>\n<li><strong>Download<\/strong> the needed <strong>.st image<\/strong> to the <strong>gateway<\/strong><\/li>\n<li><strong>Mount<\/strong> the <strong>.st image<\/strong> disk on the <strong>gateway<\/strong>: <span style=\"font-family: Andale Mono, Times;\">sudo mount -o loop -t msdos xxxx.st \/home\/fred\/image\/<\/span> (where <span style=\"font-family: Andale Mono, Times;\">xxxx.st<\/span> is the name of the image disk)<\/li>\n<li><strong>Copy<\/strong> the needed file from <span style=\"font-family: Andale Mono, Times;\">\/home\/fred\/image<\/span> to <span style=\"font-family: Andale Mono, Times;\">\/mnt<\/span><\/li>\n<li>Unmount the disks: <span style=\"font-family: Andale Mono, Times;\">sudo umount \/mnt<\/span> and <span style=\"font-family: Andale Mono, Times;\">sudo umount \/home\/fred\/image<\/span><\/li>\n<\/ul>\n<p>I booted the Atari ST on this newly created disk, and setup the <strong>RS232 port configuration<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7137\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt1.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt1.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt1-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>Once done, I <strong>launched the VT52 emulator<\/strong> from the <strong>Desktop<\/strong> pull down menu:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7138\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt2.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt2.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt2-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7139\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt3.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt3.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt3-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>On the <strong>gateway side<\/strong>, I launched the <span style=\"font-family: Andale Mono, Times;\">server_vt100.sh<\/span> script I used for the Apple IIc:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7147\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-vt100.png\" alt=\"\" width=\"814\" height=\"526\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-vt100.png 814w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-vt100-768x496.png 768w\" sizes=\"(max-width: 814px) 100vw, 814px\" \/><\/p>\n<p>&#8230; and the <strong>login screen<\/strong> showed up, allowing me to <strong>access<\/strong> <strong>the gateway<\/strong> on the <strong>Atari ST as a terminal<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7140\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt4.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt4.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt4-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><strong>Not that bad !<\/strong> But the VT52 accessory is <strong>not<\/strong> a great terminal emulator. As told by its name, it <strong>cannot emulate a VT100<\/strong>. There are actually &#8220;patches&#8221; that are supposed to extend its capabilities to VT100 or even ANSI, but I didn&#8217;t find the results convincing. Though it is working, the <strong>user experience is mediocre<\/strong>: no backspace, no arrows, clearing the screen doesn&#8217;t properly work. This make using lynx to browse the web a terrible experience. <strong>So &#8230; close, but no cigar<\/strong>.<\/p>\n<p><strong>VT terminal, take two: TAZ (Atari ST) and getty (GNU\/Linux gateway)<br \/>\n<\/strong><\/p>\n<p>Let&#8217;s find <strong>another<\/strong> VT terminal emulator. I tried a few (Uniterm, Minicom, ANSIterm, etc.) which turned out to have a not much better user experience than the VT 52 accessory. Sometimes even worse, with a lot of flickering.<\/p>\n<p>Most forums were pointing to another terminal emulator: <strong>TAZ&nbsp;<\/strong>(available <a href=\"http:\/\/ftp.lip6.fr\/pub\/atari\/Telecomm\/\" target=\"_blank\" rel=\"noopener\">here<\/a> for example). TAZ is a full featured terminal emulator for the Atari ST, with VT100 and ANSI compatibility. I downloaded it, added it the the floppy disk and launched it.<\/p>\n<p>There are quite a list of configuration options:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7141\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt5.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt5.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt5-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>Hitting <tt>Alt-P<\/tt>, I configured the <strong>Communication Parameters<\/strong> (Serial port, 9600 bauds, etc.):<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7142\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt6.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt6.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt6-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>Hitting <tt>Alt-T<\/tt>, I configured the <strong>Terminal Setting<\/strong> (ANSI, Backspace configuration, etc.):<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7143\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt7.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt7.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt7-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>Surprisingly, when the ANSI option is selected, the screen changes its frequency and inverts colors (I had to slightly adjust my Samsung TV zoom parameters so the image was not cropped)<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7148\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt11.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt11.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt11-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>Since TAZ is ANSI capable, on the <strong>GNU\/Linux side<\/strong>, I created the following &#8220;<span style=\"font-family: Andale Mono, Times;\">server_ansi.sh<\/span>&#8221; <strong>script<\/strong> on the gateway:<\/p>\n<pre>#!\/bin\/bash\n\nwhile true\ndo\n\/sbin\/getty -L 9600 ttyUSB0 ansi\ndone<\/pre>\n<p><strong>Note<\/strong>:<\/p>\n<ul>\n<li>this is basically the <strong>same<\/strong> script as <span style=\"font-family: Andale Mono, Times;\">server_vt100.sh<\/span>, with the <span style=\"font-family: Andale Mono, Times;\">ansi<\/span> option added<\/li>\n<li>I could have set the baud speed higher, but since the null modem cable I bought was long (6m), I chose a conservative setting<\/li>\n<\/ul>\n<p>Once the <span style=\"font-family: Andale Mono, Times;\">server_ansi.sh<\/span> script launched, the <strong>prompt showed up<\/strong> in TAZ, allowing me to <strong>log into the gateway<\/strong> from the Atari ST:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7144\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt8.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt8.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt8-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>It is so much better than the VT52 accessory, and it manages colors. Here are a few screenshot (Wikipedia&#8217;s page on the Atari ST, Google search engine):&nbsp;<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7145\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt9.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt9.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt9-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7146\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt10.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt10.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-vt10-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>Though it was <strong>not<\/strong> <strong>perfect<\/strong> (there are a few artifacts, French accents are mangled for example), <strong>I call this a win<\/strong> !<\/p>\n<p><strong>Transferring files with Ghostlink<br \/>\n<\/strong><\/p>\n<p>Let&#8217;s move on to a new experiment: <strong>transferring files<\/strong> between the gateway and the Atari ST, over serial cable. There are plenty of possibilities, including using TAZ for file transfers. But I wanted to experiment with something a bit more user friendly, and chose to use <strong>Ghostlink<\/strong> (available <a href=\"http:\/\/www.chebucto.ns.ca\/Services\/PDA\/AtariSTMisc.shtml\" target=\"_blank\" rel=\"noopener\">here<\/a>). It allows to <strong>mount a remote folder<\/strong> as an extra <strong>drive on the Atari ST GEM Desktop<\/strong>. Nice !<\/p>\n<p><strong>Ghostlink<\/strong> is therefore a two-part software:<\/p>\n<ul>\n<li>On the Atari ST side runs the <strong>Ghostlink client<\/strong>: <span style=\"font-family: Andale Mono, Times;\">STMASTER.PRG<\/span><\/li>\n<li>On the gateway side runs the <strong>Ghostlink server<\/strong>: <span style=\"font-family: Andale Mono, Times;\">PCSLAVE.EXE<\/span><\/li>\n<\/ul>\n<p>The Atari ST part was quite simple: I just had to add the STMASTER.PRG file to the floppy disk I already prepared for <span style=\"font-family: Andale Mono, Times;\">TAZ<\/span>.<\/p>\n<p>The gateway part is a bit trickier: <span style=\"font-family: Andale Mono, Times;\">PCSLAVE.EXE<\/span> is de MS-DOS program. And it doesn&#8217;t play nice with current versions of MS Windows. The problem nevertheless is easily solved with <span style=\"font-family: Andale Mono, Times;\">DOSBOX<\/span>:<\/p>\n<ul>\n<li>to install <span style=\"font-family: Andale Mono, Times;\">DOSBOX<\/span> (version 0.74-3): <span style=\"font-family: Andale Mono, Times;\">sudo apt-get install dosbox<\/span><\/li>\n<li>to configure <span style=\"font-family: Andale Mono, Times;\">DOSBOX<\/span>, edit <span style=\"font-family: Andale Mono, Times;\">\/home\/fred\/.dosbox-0.74-3.conf<\/span>, find the <span style=\"font-family: Andale Mono, Times;\">[serial]<\/span> section and add: <span style=\"font-family: Andale Mono, Times;\">serial1=directserial realport:ttyUSB0<\/span>. This will tell <span style=\"font-family: Andale Mono, Times;\">DOSBOX<\/span> to use the host <span style=\"font-family: Andale Mono, Times;\">\/dev\/ttyUSB0<\/span> for <span style=\"font-family: Andale Mono, Times;\">COM1<\/span>.<\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7163\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox0-1.jpg\" alt=\"\" width=\"814\" height=\"526\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox0-1.jpg 814w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox0-1-768x496.jpg 768w\" sizes=\"(max-width: 814px) 100vw, 814px\" \/><\/p>\n<p>Once done, I launched <span style=\"font-family: Andale Mono, Times;\">DOSBOX<\/span> and setup the <span style=\"font-family: Andale Mono, Times;\">C:<\/span> drive to point to the folder where <span style=\"font-family: Andale Mono, Times;\">GHOSTLINK<\/span> is installed (in my case, <span style=\"font-family: Andale Mono, Times;\">\/home\/fred\/DOS\/GHOSTLNK<\/span>):<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7151\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox1.jpg\" alt=\"\" width=\"814\" height=\"526\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox1.jpg 814w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox1-768x496.jpg 768w\" sizes=\"(max-width: 814px) 100vw, 814px\" \/><\/p>\n<p>In this folder, I copied the <span style=\"font-family: Andale Mono, Times;\">PCSLAVE.EXE<\/span> file, and created a directory named <span style=\"font-family: Andale Mono, Times;\">GATEWAY<\/span> with two Atari ST programs (<span style=\"font-family: Andale Mono, Times;\">SYSINFO<\/span> and <span style=\"font-family: Andale Mono, Times;\">FCOPY3<\/span>):<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7152\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox2.jpg\" alt=\"\" width=\"814\" height=\"526\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox2.jpg 814w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox2-768x496.jpg 768w\" sizes=\"(max-width: 814px) 100vw, 814px\" \/><\/p>\n<p>Let&#8217;s <strong>start<\/strong> the <span style=\"font-family: Andale Mono, Times;\">GHOSTLINK<\/span> <strong>server<\/strong>, and configure the <strong>speed<\/strong> to <strong>9600 bauds<\/strong> (using function keys):<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7153\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox3.jpg\" alt=\"\" width=\"814\" height=\"526\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox3.jpg 814w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox3-768x496.jpg 768w\" sizes=\"(max-width: 814px) 100vw, 814px\" \/><\/p>\n<p>On the <strong>ATARI ST<\/strong> side:<\/p>\n<ul>\n<li>Launch <strong>STMASTER.PRG<\/strong><\/li>\n<li>On the &#8220;<strong>Partitions<\/strong>&#8221; section, <strong>remove<\/strong> all pre-configured partitions (if any)<\/li>\n<li>Click &#8220;<strong>Add<\/strong>&#8220;, then select <strong>&#8220;Z&#8221;<\/strong> as <strong>local drive<\/strong> and <strong>&#8220;C&#8221;<\/strong> as <strong>remote drive<\/strong><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7157\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-gl2.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-gl2.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-gl2-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>The <span style=\"font-family: Andale Mono, Times;\">GHOSTLINK<\/span> client is now configured to use the <strong>Serial Port (Channel 1)<\/strong>, and <strong>map<\/strong> the remote <strong>C:<\/strong> drive of the <strong>gateway<\/strong> to the local <strong>Z:<\/strong> drive of the <strong>Atari ST<\/strong>. Click &#8220;<strong>Install<\/strong>&#8221; to proceed to the next steps.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7158\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-gl3.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-gl3.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-gl3-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>The next step is to <strong>install a new Z: drive<\/strong> on the GEM Desktop (I called it &#8220;GHOSTLNK&#8221;, but any name will do):<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7159\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-gl4.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-gl4.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-gl4-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>And &#8230; <strong>that&#8217;s it !<\/strong> The newly installed local <strong>Z:<\/strong> drive maps the content of the remote <strong>C: <\/strong>drive of the <strong>gateway<\/strong> !<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7160\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-gl5.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-gl5.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-gl5-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>On the <strong>gateway<\/strong> side, <span style=\"font-family: Andale Mono, Times;\">PCSLAVE.EXE<\/span> displays the current operation (listing <span style=\"font-family: Andale Mono, Times;\">C:\\*.*<\/span>):<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7154\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox4.jpg\" alt=\"\" width=\"814\" height=\"526\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox4.jpg 814w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox4-768x496.jpg 768w\" sizes=\"(max-width: 814px) 100vw, 814px\" \/><\/p>\n<p>The <strong>GEM Desktop<\/strong> can be used to <strong>drag \/ drop<\/strong> files between the gateway and the Atari ST:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7162\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-gl7.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-gl7.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-gl7-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>You can see here <span style=\"font-family: Andale Mono, Times;\">PCSLAVE.EXE<\/span> ouputs showing <span style=\"font-family: Andale Mono, Times;\">FCOPY_3.PRG<\/span> being transferred:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7155\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox5.jpg\" alt=\"\" width=\"814\" height=\"526\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox5.jpg 814w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-dosbox5-768x496.jpg 768w\" sizes=\"(max-width: 814px) 100vw, 814px\" \/><\/p>\n<p>Great !<\/p>\n<p><strong>TCP\/IP over null modem<br \/>\n<\/strong><\/p>\n<p>Let&#8217;s move on to the <strong>next level<\/strong>: adding a <strong>TCP\/IP stack<\/strong> to the <strong>Atari ST<\/strong>, and connect it to the <strong>Internet<\/strong> via the <strong>gateway<\/strong>. Here is a little schema of my <strong>setup<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7174\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-sting.png\" alt=\"\" width=\"758\" height=\"437\"><\/p>\n<ul>\n<li>My <strong>router<\/strong> (<span style=\"font-family: Andale Mono, Times;\">192.168.1.1<\/span>) provides <strong>broadband<\/strong> <strong>access<\/strong> (FFTH) and <strong>Wi-Fi<\/strong> network<\/li>\n<li>The <strong>gateway<\/strong> (<span style=\"font-family: Andale Mono, Times;\">192.168.1.78<\/span>) is connected to the <strong>Wi-Fi network<\/strong> (<span style=\"font-family: Andale Mono, Times;\">wlan0<\/span>) on one hand, and is connected to the <strong>Atari ST<\/strong> via a serial null modem cable on the other hand. It runs a <strong>PPP<\/strong> daemon, and provides <strong>NAT<\/strong> (to <span style=\"font-family: Andale Mono, Times;\">wlan 0<\/span>) and <strong>IP Forwarding<\/strong><\/li>\n<li>The <strong>Atari ST<\/strong> (<span style=\"font-family: Andale Mono, Times;\">192.168.1.150<\/span>) runs the <strong>STinG TCP\/IP stack<\/strong> and gets it&#8217;s internet access via <strong>PPP<\/strong><\/li>\n<li>My <strong>MacBook Pro<\/strong> (<span style=\"font-family: Andale Mono, Times;\">192.168.1.18<\/span>) is used to get access to the Raspberry Pi (via <strong>SSH<\/strong> and <strong>VNC<\/strong>) and test network connectivity<\/li>\n<\/ul>\n<p><strong>Note<\/strong>: in this experiment, to keep things simple, the <strong>gateway<\/strong>, the <strong>router<\/strong> and the <strong>Atari<\/strong> <strong>ST<\/strong> are configured to have <strong>fixed IP addresses.<\/strong><\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Point-to-Point_Protocol\" target=\"_blank\" rel=\"noopener\">PPP<\/a> (Point-to-Point Protocol) is a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Data_link_layer\" target=\"_blank\" rel=\"noopener\">layer 2<\/a> (data link layer) communication protocol between two hosts. It was widely used by Internet Service Providers for customer <strong>dial-up access to the internet<\/strong>. PPP can be used over many types of <strong>physical<\/strong> <strong>network<\/strong>, including <strong>serial<\/strong> <strong>cable<\/strong>. It works with numerous <a href=\"https:\/\/en.wikipedia.org\/wiki\/Data_link_layer\" target=\"_blank\" rel=\"noopener\">layer 3<\/a> protocols (network layer), including <strong>IP<\/strong>.<\/p>\n<p>For this to work, we will need to run a PPP daemon (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Point-to-Point_Protocol_daemon\" target=\"_blank\" rel=\"noopener\">pppd<\/a>) on the <strong>gateway<\/strong>. On the <strong>Atari ST<\/strong> side, we will configure the<strong> TCP\/IP stack<\/strong> to use <strong>PPP as a serial Point-to-Point link<\/strong>.<\/p>\n<p>Let&#8217;s take a closer look at the <strong>Atari ST configuration<\/strong>. <a href=\"https:\/\/github.com\/th-otto\/STinG\" target=\"_blank\" rel=\"noopener\">STinG<\/a> is a TCP\/IP stack for Atari ST computers running TOS, created by P. Rottengarter and R. Andersson. For this experiment, I used <span style=\"font-family: Andale Mono, Times;\">STinG<\/span> version 1.26, available here: <a href=\"https:\/\/www.chebucto.ns.ca\/Services\/PDA\/AtariSTComm.shtml\" target=\"_blank\" rel=\"noopener\">https:\/\/www.chebucto.ns.ca\/Services\/PDA\/AtariSTComm.shtml<\/a><\/p>\n<p><strong>Note<\/strong>: there are other TCP\/IP stacks available, like STiK, MintNet or PPP-Connect. But STinG is the only stack that would run on my old TOS 1.0-based Atari ST and provide PPP capabilities.<\/p>\n<p>I created a <strong>floppy<\/strong> <strong>disk<\/strong> with:<\/p>\n<ul>\n<li><span style=\"font-family: Andale Mono, Times;\">STinG<\/span> 1.26<\/li>\n<li><span style=\"font-family: Courier New, Courier;\"><span style=\"font-family: Arial, Helvetica;\"><span style=\"font-family: Andale Mono, Times;\">XCONTROL<\/span> 1.31<br \/>\n<\/span><\/span><\/li>\n<li><span style=\"font-family: Andale Mono, Times;\">PING<\/span> (to test network reachability)<\/li>\n<\/ul>\n<p>Here is the layout of the disk:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7185\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-sting-disk-layout.png\" alt=\"\" width=\"522\" height=\"556\"><\/p>\n<p>The <strong>Serial Port<\/strong> and <strong>STinG<\/strong> TCP\/IP stack are configured via the <span style=\"font-family: Andale Mono, Times;\">XCONTROL<\/span> accessory:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7344\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-screen3.png\" alt=\"\" width=\"550\" height=\"451\"><\/p>\n<p>Here is the Atari ST <strong>configuration<\/strong>:<\/p>\n<ul>\n<li><strong>Serial Port &#8211; Speed<\/strong> set to <strong>9600<\/strong> bauds (I tried higher settings, but its induced too many errors \/ lost packets)<\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7346\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-screen4.png\" alt=\"\" width=\"550\" height=\"451\"><\/p>\n<ul>\n<li><strong>STinG<\/strong> (Port Setup, <strong>Addressing<\/strong>) &#8211; I fixed the Atari ST&#8217;s IP to <span style=\"font-family: Andale Mono, Times;\">192.168.1.150<\/span><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7348\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-screen5.png\" alt=\"\" width=\"550\" height=\"451\"><\/p>\n<ul>\n<li><strong>STinG<\/strong> (Port Setup, <strong>General<\/strong>) &#8211; <strong>PPP setting<\/strong><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7350\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-screen6.png\" alt=\"\" width=\"550\" height=\"451\"><\/p>\n<ul>\n<li><strong>STinG<\/strong> (Protocols \/ <strong>Resolver<\/strong>) &#8211; I used Google&#8217;s <strong>DNS<\/strong> <span style=\"font-family: Andale Mono, Times;\">8.8.8.8<\/span><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7351\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-screen7.png\" alt=\"\" width=\"550\" height=\"451\"><\/p>\n<ul>\n<li><strong>Routing<\/strong> <strong>table<\/strong> (<span style=\"font-family: Andale Mono, Times;\">ROUTE.TAB<\/span>) &#8211; Setting the gateway to be <span style=\"font-family: Andale Mono, Times;\">192.168.1.78<\/span> and setting a <span style=\"font-family: Andale Mono, Times;\">default<\/span> route:<\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7202\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atarist-routetab.jpg\" alt=\"\" width=\"612\" height=\"444\"><\/p>\n<p><strong>Note<\/strong>: in <span style=\"font-family: Andale Mono, Times;\">ROUTE.TAB<\/span>, make sure to leave the <strong>CR\/LF<\/strong> at the end of the lines, and make sure to only use <strong>tabs<\/strong> and not spaces between columns.<\/p>\n<p>Now, let&#8217;s take a look at the <strong>gateway side<\/strong>. I created the following &#8220;<span style=\"font-family: Andale Mono, Times;\">ppp.sh<\/span>&#8221; script:<\/p>\n<pre>sysctl -w net\/ipv4\/ip_forward=1\niptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE\npppd \/dev\/ttyUSB0 9600 local noauth nodetach proxyarp netmask 255.255.255.0 192.\n168.1.78:192.168.1.150<\/pre>\n<p>Here is an explanation:<\/p>\n<ul>\n<li>The gateway will act as a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Network_address_translation\" target=\"_blank\" rel=\"noopener\">NAT<\/a> device, thus, it will need to be capable of<strong> forwarding packets<\/strong> (a.k.a IP forwarding) that are meant for other destinations (other than itself). Linux uses the <span style=\"font-family: Andale Mono, Times;\">net.ipv4.ip_forward<\/span> kernel variable to toggle this setting on or off. The first line of the script tells the Linux kernel to <strong>enable IP forwarding.<\/strong><\/li>\n<li><strong>IP Masquerading<\/strong> is a network function using NAT, allowing devices connected to the gateway (via <strong>PPP<\/strong> for example) to&nbsp; <strong>reach<\/strong> <strong>the<\/strong> <strong>Internet<\/strong> through it. The second line uses <a href=\"https:\/\/en.wikipedia.org\/wiki\/Iptables\" target=\"_blank\" rel=\"noopener\">iptables<\/a> for IP Masquerading via the <span style=\"font-family: Andale Mono, Times;\">wlan0<\/span> link (Wi-Fi)<\/li>\n<li>The third line invokes the <span style=\"font-family: Andale Mono, Times;\">PPP<\/span> daemon, over the <strong>serial<\/strong> <strong>port<\/strong> (<span style=\"font-family: Andale Mono, Times;\">\/dev\/ttyUSB0<\/span>), at <strong>9600<\/strong> baud, <strong>without<\/strong> <strong>authentication<\/strong>, linking the <strong>local<\/strong> gateway IP (<span style=\"font-family: Andale Mono, Times;\">192.168.1.78<\/span>) to <strong>remote<\/strong> Atari ST IP (fixed to <span style=\"font-family: Andale Mono, Times;\">192.168.1.150<\/span>)<\/li>\n<\/ul>\n<p>This is a rather <strong>crude<\/strong> script, meant for experimentation, without <strong>any error management<\/strong> (timeouts, etc.) that would re-spawn <span style=\"font-family: Andale Mono, Times;\">pppd<\/span> if needed. Therefore, this script has to be <strong>manually launched at the proper time<\/strong>, i.e, at the <strong>end of the boot sequence<\/strong>, after STinG installation message:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7352\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-screen8.png\" alt=\"\" width=\"550\" height=\"451\"><\/p>\n<p>A few <strong>seconds<\/strong> <strong>after the GEM Desktop appeared<\/strong> on the Atari ST screen, I was greeted by this on the gateway side:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7203\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-pppd-ip.jpg\" alt=\"\" width=\"615\" height=\"447\"><\/p>\n<p><strong>Wow, this seems to work<\/strong> ! Let&#8217;s test basic connectivity:<\/p>\n<ul>\n<li><span style=\"font-family: Andale Mono, Times;\">PING<\/span> from the <strong>Gateway<\/strong> to the <strong>Atari ST<\/strong>: <span style=\"color: #99cc00;\"><strong>check<\/strong><\/span><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7204\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atarist-ping1.jpg\" alt=\"\" width=\"610\" height=\"446\"><\/p>\n<ul>\n<li><span style=\"font-family: Andale Mono, Times;\">PING<\/span> from <strong>MacBook Pro<\/strong> to the <strong>Atari ST<\/strong>: <span style=\"color: #99cc00;\"><strong>check<\/strong><\/span><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7205\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atarist-ping2.jpg\" alt=\"\" width=\"617\" height=\"449\"><\/p>\n<ul>\n<li>PING from the <strong>Atari ST<\/strong> to <strong>Google&#8217;s DNS<\/strong>: <span style=\"color: #99cc00;\"><strong>check<\/strong><\/span><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7354\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-screen9.png\" alt=\"\" width=\"550\" height=\"451\"><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7355\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-screen10.png\" alt=\"\" width=\"550\" height=\"451\"><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7356\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-screen11.png\" alt=\"\" width=\"550\" height=\"451\"><\/p>\n<ul>\n<li><span style=\"font-family: Andale Mono, Times;\">PING<\/span> from the <strong>Atari ST<\/strong> to the <strong>gateway<\/strong> (for good measure): <span style=\"color: #99cc00;\"><strong>check<\/strong><\/span><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7357\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-screen12.png\" alt=\"\" width=\"550\" height=\"451\"><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7358\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-screen13.png\" alt=\"\" width=\"550\" height=\"451\"><\/p>\n<p>Houston, <strong>this Atari ST has access to the LAN and to the Internet<\/strong> ! <strong>Hurray !<\/strong><\/p>\n<p>Let&#8217;s move on an try to find a proper <strong>web browser<\/strong>. And &#8230; I <strong>struggled<\/strong> a lot. There are not that many web browsers for TOS. <strong>Crystal Atari Browser<\/strong> (also known as <strong>CAB<\/strong>), created by <strong>Alexander Clauss<\/strong>, appears to be the best one. Alas, I comes in a <strong>variety of versions<\/strong>. All these versions are still available online: <span style=\"font-family: Andale Mono, Times;\">0.30<\/span> (beta), <span style=\"font-family: Andale Mono, Times;\">1.x<\/span> (freeware), <span style=\"font-family: Andale Mono, Times;\">2.0<\/span> (demo), <span style=\"font-family: Andale Mono, Times;\">2.7<\/span> (shareware), <span style=\"font-family: Andale Mono, Times;\">2.8<\/span> (shareware).<\/p>\n<p><strong>CAB<\/strong> renders (old) <strong>HTML<\/strong> fine as long as they are stored locally. It <strong>needs<\/strong> a <strong>specific<\/strong> <strong>module<\/strong> &#8211; called an &#8220;<strong>overlay<\/strong>&#8221; (<span style=\"font-family: Andale Mono, Times;\">CAB.OVL<\/span>) &#8211; <strong>to get HTML content over HTTP<\/strong>, via a TCP\/IP stack. And &#8230; there is a <strong>dozen of versions<\/strong> of this module, written by different people, for different versions of CAB, and for various TCP\/IP stacks. This &#8230; <strong>is a lot of possible combinations<\/strong>, and I tried <strong>a lot<\/strong> of them ! Some <span style=\"font-family: Andale Mono, Times;\">CAB.OVL<\/span> do not load at all with incompatible CAB version, some combinations fails with errors when trying to retrieve an HTML content, some seems to work &#8230; then bombs.<\/p>\n<p>In the end, the only combination that worked for me (my Atari ST runs an old <strong>TOS 1.0<\/strong>, this is a strong constraint) was found here:<\/p>\n<ul>\n<li><span style=\"font-family: Andale Mono, Times;\">ftp:\/\/kurobox.serveftp.net:3021<\/span><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7211\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-ftp.jpg\" alt=\"\" width=\"850\" height=\"676\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-ftp.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-ftp-768x611.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>The &#8220;<span style=\"font-family: Andale Mono, Times;\">www131.zip<\/span>&#8221; package contains:<\/p>\n<ul>\n<li>network utilities: <span style=\"font-family: Andale Mono, Times;\">Telnet<\/span>, <span style=\"font-family: Andale Mono, Times;\">IRC<\/span>, <span style=\"font-family: Andale Mono, Times;\">Finger<\/span>, <span style=\"font-family: Andale Mono, Times;\">AntMail<\/span><\/li>\n<li>the <span style=\"font-family: Andale Mono, Times;\">STik<\/span> TCP\/IP stack<\/li>\n<li><span style=\"font-family: Andale Mono, Times;\">CAB 1.3<\/span><\/li>\n<li><span style=\"font-family: Andale Mono, Times;\">CAB.OVL<\/span> (from Dan Ackerman, version 1.1800)<\/li>\n<\/ul>\n<p>I created a new floppy disk with the following layout:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7213\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-cab11-tree-.jpg\" alt=\"\" width=\"615\" height=\"447\"><\/p>\n<p>I did the following, using the content of <span style=\"font-family: Andale Mono, Times;\">CAB<\/span> from <span style=\"font-family: Andale Mono, Times;\">www131.zip<\/span> as a starting point:<\/p>\n<ul>\n<li><strong>Copied<\/strong> <span style=\"font-family: Andale Mono, Times;\">CAB_E.RSC<\/span> over <span style=\"font-family: Andale Mono, Times;\">CAB.RSC<\/span> resource file (<span style=\"font-family: Andale Mono, Times;\">CAB<\/span> defaults in German, <span style=\"font-family: Andale Mono, Times;\">CAB_E.RSC<\/span> is the English resource file)<\/li>\n<li><strong>Copied<\/strong> <span style=\"font-family: Andale Mono, Times;\">CAB.OVL<\/span> at the root of the disk<\/li>\n<li><strong>Customized<\/strong> the landing page <span style=\"font-family: Andale Mono, Times;\">HOME.HTM <\/span>(my German being &#8230; not that great)<\/li>\n<li><strong>Created<\/strong> the <span style=\"font-family: Andale Mono, Times;\">CACHE<\/span> folder (more on this later)<\/li>\n<li><strong>Removed<\/strong> documentation and unnecessary resource files, so that all <strong>would fit into a single floppy disc<\/strong><\/li>\n<\/ul>\n<p><strong>Note<\/strong>: I did not use the <span style=\"font-family: Andale Mono, Times;\">STik<\/span> TCP\/IP stack, nor the network utilities from <span style=\"font-family: Andale Mono, Times;\">www131.zip<\/span>, but only the <span style=\"font-family: Andale Mono, Times;\">CAB<\/span> related files<\/p>\n<p>Once done, I <strong>launched<\/strong> CAB and set the <strong>cache folder path<\/strong> to <span style=\"font-family: Andale Mono, Times;\">A:\\CACHE\\<\/span> (it defaults on <span style=\"font-family: Andale Mono, Times;\">C:<\/span>):<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7359\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-screen14.png\" alt=\"\" width=\"550\" height=\"451\"><\/p>\n<p>And &#8230; <strong>there you go !<\/strong><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7222\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-cab-1.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-cab-1.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-cab-1-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>Here is <span style=\"font-family: Andale Mono, Times;\">CAB<\/span> <strong>loading<\/strong> the customized <span style=\"font-family: Andale Mono, Times;\">HOME.HTM<\/span> <strong>landing<\/strong> page from disk:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7221\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-cab-2.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-cab-2.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-cab-2-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>Here is picture of CAB in actions, <strong>browsing the Internet<\/strong> via <a href=\"http:\/\/frogfind.com\" target=\"_blank\" rel=\"noopener\">http:\/\/frogfind.com<\/a> (the search engine for retro computers, by <a href=\"https:\/\/www.youtube.com\/ActionRetro\" target=\"_blank\" rel=\"noopener\">ActionRetro<\/a>):<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7183\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-cab-frogfind.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-cab-frogfind.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-cab-frogfind-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>Internet on the Atari ST (at 9600 bauds) is &#8230; <strong>slow as hell<\/strong>, but still, it <strong>rocks !!<\/strong><\/p>\n<p>To celebrate, I created three stickers to these newly created <strong>Atari ST networking diskettes<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7230\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-floppies.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-floppies.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/atari-st-internet-floppies-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<hr>\n<p><span style=\"font-family: macintosh; font-size: 8pt;\">Macintosh Plus<\/span><\/p>\n<p>Let&#8217;s move on and work on adding <strong>network<\/strong> <strong>capabilities<\/strong> to my <a href=\"https:\/\/www.quantum-bits.org\/?p=3293\" target=\"_blank\" rel=\"noopener\">Macintosh Plus<\/a>:<\/p>\n<ul>\n<li>Connect the <strong>Macintosh to the Raspberry Pi<\/strong> via a <strong>null modem cable <\/strong>(from the mini<strong> DIN-8 port<\/strong> of the Mac to the <strong>DB9 RS232 adapter<\/strong>, plugged into a <strong>USB port<\/strong> on the Raspberry Pi)<\/li>\n<li>Use the <strong>Raspberry Pi<\/strong> as a <strong>gateway<\/strong> for internet access<\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7048\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/mac-plus-internet.png\" alt=\"\" width=\"696\" height=\"286\"><\/p>\n<p>The <strong>null modem<\/strong> cable plugs into the <strong>modem port (serial)<\/strong>, located on the <strong>back of the Macintosh Plus<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7054\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/06\/mac-plus-ports.png\" alt=\"\" width=\"667\" height=\"487\"><\/p>\n<p><strong>Macintosh Plus null modem cable<\/strong><\/p>\n<p>To build a Macintosh Plus serial null modem cable, I bought online:<\/p>\n<ul>\n<li>A 5 meter <strong>male-male mini DIN-8 cable<\/strong>,<\/li>\n<li>A <strong>RS232<\/strong> female D-Sub (DE-9) <strong>connector<\/strong><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7247\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable1.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable1.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable1-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>I started by <strong>cutting<\/strong> the mini DIN-8 in half, and <strong>identified<\/strong> the pins \/ wires with a multi-meter in continuity mode:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7255\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable2.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable2.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable2-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>Let\u2019s take a look at the <strong>wiring<\/strong> for our needs:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7261\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-nullmodem-wiring-color.png\" alt=\"\" width=\"552\" height=\"221\"><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7257\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-serial-pinout.png\" alt=\"\" width=\"480\" height=\"168\"><\/p>\n<p><strong>Note<\/strong>:<\/p>\n<ul>\n<li>There are many wiring schematics floating around, but I could not find one that suited my needs. So I created this one, based on Apple&#8217;s documentation of the serial port pinout.<\/li>\n<li>The <strong>Macintosh Plus serial port<\/strong> is actually a <a href=\"https:\/\/en.wikipedia.org\/wiki\/RS-422\" target=\"_blank\" rel=\"noopener\">RS-422<\/a> <strong>interface<\/strong> (<strong>not<\/strong> an RS-232). The signals come in a balanced pair, a positive (plus) and a negative (minus), for each data signal (RxD-\/RxD+, TxD-\/TxD+). Moreover, the <strong>GPIn<\/strong> (General Purpose Input, pin 7) is <strong>not implemented on early Macintosh Plus<\/strong>.<\/li>\n<li><strong>To emulate a RS-232 interface<\/strong>, <strong>pin 8<\/strong> (RxD+) on the Mini DIN-8 connector has to be <strong>grounded<\/strong> (connected to <strong>pin 4<\/strong>\/GND on the DIN-8 connector and to <strong>pin 5<\/strong>\/GND on the DE-9 connector)<\/li>\n<li>TxD- (<strong>pin 3<\/strong>) and RxD- (<strong>pin 5<\/strong>) are used for <strong>Transmit<\/strong> \/ <strong>Receive<\/strong> signals, respectively connected to <strong>pin 2<\/strong> and <strong>pin 3<\/strong> on the <strong>DE-9<\/strong> connector<\/li>\n<li>To <strong>disable hardware handshake<\/strong>, on the DE-9 side, pins <strong>1, 4&nbsp; &amp; 6<\/strong> are connected together and pin <strong>7 &amp; 8<\/strong> are connected together<\/li>\n<\/ul>\n<p>Let&#8217;s start with the wiring on the <strong>DE-9 side<\/strong>, <strong>connecting pin 7 to pin 8<\/strong> and <strong>soldering pins 1, 4, &amp; 6 together<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7265\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable3.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable3.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable3-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>Once done, it is just a matter of:<\/p>\n<ul>\n<li>connecting <strong>pin 4 &amp; 8<\/strong> (yellow and brown wire) to <strong>pin 5<\/strong><\/li>\n<li>connecting <strong>pin 3<\/strong> (blue wire) to <strong>pin 2<\/strong><\/li>\n<li>connecting <strong>pin 5<\/strong> (green wire) to <strong>pin 3<\/strong><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7264\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable4.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable4.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable4-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>There you go ! A brand new <strong>serial null modem cable for the Macintosh Plus:<\/strong><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7263\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable5.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable5.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable5-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>The male <strong>mini DIN-8<\/strong> plugs into the <strong>serial<\/strong> <strong>port<\/strong> of the Macintosh Plus:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7262\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable6.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable6.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macplus-nulmodem-cable6-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>And the female DE-9 connector plugs into the RS-232 USB adapter, connected to the gateway (Raspberry Pi):<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7282\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-setup1.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-setup1.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-setup1-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><strong>VT Terminal<br \/>\n<\/strong><\/p>\n<p>We are now ready to test terminal emulation on a Macintosh Plus \/ System 6. There are many terminal emulators available. I tried the following ones:<\/p>\n<ul>\n<li><strong>ZTerm 1.0<\/strong>: <a href=\"https:\/\/macintoshgarden.org\/apps\/zterm\" target=\"_blank\" rel=\"noopener\">ZTerm<\/a> is a <strong>terminal emulator<\/strong> that can run on <strong>System 6<\/strong>. It includes a lot of features, but &#8211; for some reasons &#8211; the key mapping was wrong: mapped to a QWERTY keyboard, and I am using a French Mac Plus. I was working well, but, for this practical reason, I did not use it.&nbsp;<\/li>\n<li><strong>Kermit 0.98<\/strong>: <a href=\"https:\/\/macintoshgarden.org\/apps\/kermit\" target=\"_blank\" rel=\"noopener\">Kermit<\/a> is a networking tool focused &#8230; on the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Kermit_(protocol)\" target=\"_blank\" rel=\"noopener\">Kermit file transfer protocol<\/a> (more on that later on). But it also includes <strong>excellent<\/strong> terminal emulation features.<\/li>\n<li><strong>Smartcom II 3.3<\/strong>: <a href=\"https:\/\/macintoshgarden.org\/apps\/smartcom-ii\" target=\"_blank\" rel=\"noopener\">Smartcom<\/a> is a suite of tools that allows the user to communicate with other personal computers, mainframes, bulletin boards, &#8230; It provides both terminal emulation and file transfer features.<\/li>\n<\/ul>\n<p>Both Kermit and Smartcom are easily configured:<\/p>\n<ul>\n<li>Direct communication (no modem)<\/li>\n<li>Serial \/ Phone port<\/li>\n<li>Speed set to 9600<\/li>\n<li>Terminal emulation: VT100 and \/ or ANSI<\/li>\n<\/ul>\n<p>On the <strong>gateway side<\/strong>, all I had to do was launching the <span style=\"font-family: Andale Mono, Times;\">server_vt100.sh<\/span> script (or <span style=\"font-family: Andale Mono, Times;\">server_ansi.sh<\/span> for ANSI compatibility)<\/p>\n<p>Here is a (bad) picture of <strong>Smartcom II<\/strong> logged into the gateway:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7286\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-term1.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-term1.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-term1-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>And here is another (bad) picture, using lynx on the gateway to access to <span style=\"font-family: Andale Mono, Times;\">http:\/\/info.cern.ch<\/span>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7285\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-term2.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-term2.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-term2-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p><strong>Kermit<\/strong> was actually <strong>a bit better<\/strong> at terminal emulation. Since I am really bad at taking picture of CRTs, here are a few screenshot (spoiler alert: these screenshots were transferred from the Macintosh Plus via the serial cable, more on this in the following paragraph):<\/p>\n<ul>\n<li><strong>Logging<\/strong> into the gateway<\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7288\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot9.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<ul>\n<li>Playing <strong>TermTris<\/strong><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7287\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot10.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p><strong>Transferring files<\/strong><\/p>\n<p>For file transfers, I choose to go the old fashion way: using the <strong>Kermit protocol<\/strong>. Born at the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Columbia_University\" target=\"_blank\" rel=\"noopener\">Columbia University<\/a> in the early 80&#8217;s, it supports <strong>text<\/strong> and <strong>binary<\/strong> <strong>file<\/strong> <strong>transfer<\/strong> between computers <strong>over<\/strong> <strong>serial<\/strong> <strong>connection<\/strong>.<\/p>\n<p>Over time, Kermit has been implemented on hundreds of computer systems, including:<\/p>\n<ul>\n<li><strong>C-Kermit<\/strong> (on GNU\/Linux)<\/li>\n<li><strong>Kermit<\/strong> and <strong>Smartcomm II<\/strong> (on Macintosh \/ System 6)<\/li>\n<\/ul>\n<p>On the gateway side, I installed C-Kermit via: <span style=\"font-family: Andale Mono, Times;\">sudo apt-get install ckermit<\/span><\/p>\n<p>I launch <span style=\"font-family: Andale Mono, Times;\">kermit<\/span> and and configured it:<\/p>\n<ul>\n<li>to use a <strong>null modem<\/strong><\/li>\n<li>to use device <span style=\"font-family: Andale Mono, Times;\">\/dev\/ttyUSB0<\/span> (the RS232 USB adapter)<\/li>\n<li>to set the speed to <strong>9600 baud<\/strong><\/li>\n<\/ul>\n<p>Then, I typed in the &#8220;<span style=\"font-family: Andale Mono, Times;\">receive<\/span>&#8221; command to initiate a file transfer from the Macintosh Plus to the gateway:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7289\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-kermit1.jpg\" alt=\"\" width=\"823\" height=\"526\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-kermit1.jpg 823w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-kermit1-768x491.jpg 768w\" sizes=\"(max-width: 823px) 100vw, 823px\" \/><\/p>\n<p>Meanwhile, <strong>on the Macintosh side<\/strong>, I used <strong>Smartcomm II<\/strong> (which I found to be the more reliable for file transfer). In the <strong>File Transfer Protocol settings<\/strong>, I chose:<\/p>\n<ul>\n<li>The <strong>Kermit<\/strong> protocol<\/li>\n<li>To send and receive files as <strong>MacBinary<\/strong> (more on this later)<\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7296\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-k2.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>I clicked on the &#8220;<strong>Send<\/strong>&#8221; icon, then<\/p>\n<ul>\n<li>I selected one of the screenshot files (&#8220;<strong>Ecran 0<\/strong>&#8220;, MacPaint format)<\/li>\n<li>Clicked on the &#8220;<strong>Add<\/strong>&#8221; button<\/li>\n<li>Clicked on the &#8220;<strong>Send List<\/strong>&#8221; button<\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7295\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-k3.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>After a brief <strong>handshake<\/strong> with the gateway, the transfer started:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7298\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-k4.png\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>Here is the corresponding screenshot on the <strong>gateway<\/strong> <strong>side<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7290\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-kermit6.jpg\" alt=\"\" width=\"811\" height=\"531\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-kermit6.jpg 811w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-kermit6-768x503.jpg 768w\" sizes=\"(max-width: 811px) 100vw, 811px\" \/><\/p>\n<p>I repeated this process to retrieve more screenshots taken on the Macintosh Plus. Here is a (blurry) screenshot showing both sides during the transfers:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7297\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-kermit-transfer.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-kermit-transfer.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-kermit-transfer-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>Now, let&#8217;s take look at the <strong>retrieved<\/strong> files. I transferred them from the gateway to my MacBook Pro and copied them into a <a href=\"https:\/\/www.emaculation.com\/doku.php\/basilisk_ii\" target=\"_blank\" rel=\"noopener\">Basilisk II<\/a> emulator shared folder (named &#8220;\/<span style=\"font-family: Andale Mono, Times;\">Unix\/kermit\/<\/span>&#8221; in the next screenshots).<\/p>\n<p>I launched the emulator (running System 7.5.5) to see if I could open the screenshot files. Since I <strong>created<\/strong> them on the <strong>Macintosh<\/strong> <strong>Plus<\/strong> (pressing <span style=\"font-family: Andale Mono, Times;\">command-shift-3<\/span>), these should be <strong>MacPaint<\/strong> files:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7309\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/basilisk-emu-scr1.jpg\" alt=\"\" width=\"837\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/basilisk-emu-scr1.jpg 837w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/basilisk-emu-scr1-768x585.jpg 768w\" sizes=\"(max-width: 837px) 100vw, 837px\" \/><\/p>\n<p>Alas, <strong>I could not open them<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7308\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/basilisk-emu-scr2.jpg\" alt=\"\" width=\"837\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/basilisk-emu-scr2.jpg 837w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/basilisk-emu-scr2-768x585.jpg 768w\" sizes=\"(max-width: 837px) 100vw, 837px\" \/><\/p>\n<p>Were they <strong>corrupted<\/strong> during transfer ? Well &#8230; <strong>no<\/strong> ! To understand this, we have to <strong>learn<\/strong> a bit more about <strong>HFS<\/strong> and the <strong>MacBinary<\/strong> format<strong>.<\/strong><\/p>\n<p>Starting with <strong>System 2.1<\/strong>, classic Macs use the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Hierarchical_File_System_(Apple)\" target=\"_blank\" rel=\"noopener\">HFS<\/a> filesystem. In a computer filesytem, a <strong>fork<\/strong> is a <strong>set<\/strong> <strong>of<\/strong> <strong>data<\/strong> associated with one filesystem object. Filesystems without forks only allow a single set of data for the content, while <strong>filesystems<\/strong> <strong>with<\/strong> <strong>forks<\/strong> allow <strong>multiple<\/strong> such contents. With <strong>HFS<\/strong>, files have two forks: <strong>data fork<\/strong> and <strong>resource fork<\/strong>. A data fork contains unstructured binary data. A resource fork contains structured data in a specific format, to store information such as icon bitmaps, shape of windows, file association, etc. <strong>Physically<\/strong>, these are <strong>separate<\/strong> <strong>files<\/strong>, but the OS <strong>transparently<\/strong> ensures the <strong>two<\/strong> <strong>separate<\/strong> <strong>files<\/strong> are <strong>treated as a one<\/strong>.<\/p>\n<p>In order to losslessly <strong>transfer<\/strong> HFS files or for <strong>storage<\/strong> purpose on <strong>non HFS-aware<\/strong> systems (i.e almost all systems, including <strong>GNU\/Linux<\/strong> and &#8230; current <strong>mac OS<\/strong> versions) the <strong>MacBinary<\/strong> <strong>combines<\/strong> <strong>the<\/strong> <strong>two<\/strong> <strong>forks<\/strong> <strong>into one<\/strong> file, suitable for transfer. That is why I <strong>selected<\/strong> the <strong>MacBinary<\/strong> format when configuring the <strong>Kermit<\/strong> setup.<\/p>\n<p>To use the transferred files, one has to &#8220;<strong>decode<\/strong>&#8221; these files. Fortunately, current mac OS versions bundle the <span style=\"font-family: Andale Mono, Times;\">macbinary<\/span> tool:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7310\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-binary-help.jpg\" alt=\"\" width=\"606\" height=\"744\"><\/p>\n<p><strong>Note<\/strong>: there are also similar tools available for GNU\/Linux (and MS Windows, I guess), but I have not tried them yet.<\/p>\n<p>I used the <span style=\"font-family: Andale Mono, Times;\">CLI<\/span> to decode the transferred files:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7311\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-binary-1.jpg\" alt=\"\" width=\"611\" height=\"449\"><\/p>\n<p>Using <strong>Basilisk II<\/strong> emulator, we can see that the <strong>decoded<\/strong> <strong>files<\/strong> are now <strong>properly<\/strong> <strong>recognized<\/strong> and can be used in <strong>MacPaint<\/strong> (or <strong>PhotoShop<\/strong>):<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7307\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/basilisk-emu-scr3.jpg\" alt=\"\" width=\"837\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/basilisk-emu-scr3.jpg 837w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/basilisk-emu-scr3-768x585.jpg 768w\" sizes=\"(max-width: 837px) 100vw, 837px\" \/><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7306\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/basilisk-emu-scr4.jpg\" alt=\"\" width=\"837\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/basilisk-emu-scr4.jpg 837w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/basilisk-emu-scr4-768x585.jpg 768w\" sizes=\"(max-width: 837px) 100vw, 837px\" \/><\/p>\n<p>Great ! From there, I could <strong>convert<\/strong> them into a <strong>modern<\/strong> <strong>format<\/strong> &#8230; and use them in this very blog post !<\/p>\n<p><strong>Note<\/strong>: of course, this <strong>works both ways<\/strong>, and I could also use the Kermit protocol to <strong>send<\/strong> files from the <strong>gateway<\/strong> to the <strong>Macintosh<\/strong> <strong>plus<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7313\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-k5.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p><strong>TCP\/IP over null modem<br \/>\n<\/strong><\/p>\n<p>Let&#8217;s tackle our <strong>last<\/strong> challenge: <strong>using the Internet on a Macintosh Plus running System 6, over a serial null modem cable<\/strong>. For this, I used the very <strong>same<\/strong> kind of setup that I used for the <strong>Atari ST<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7181\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/macintosh-tcp.png\" alt=\"\" width=\"681\" height=\"447\"><\/p>\n<ul>\n<li>The <strong>router<\/strong> (<span style=\"font-family: Andale Mono, Times;\">192.168.1.1<\/span>) provides <strong>broadband<\/strong> <strong>access<\/strong> (FFTH) and <strong>Wi-Fi<\/strong> network<\/li>\n<li>The <strong>gateway<\/strong> (<span style=\"font-family: Andale Mono, Times;\">192.168.1.78<\/span>) is connected to the <strong>Wi-Fi network<\/strong> (<span style=\"font-family: Andale Mono, Times;\">wlan0<\/span>) on one hand, and is connected to the <strong>Macintosh<\/strong> <strong>Plus<\/strong> via a serial null modem cable on the other hand. It runs a <strong>PPP<\/strong> daemon, and provides <strong>NAT<\/strong> (to wlan 0) and <strong>IP Forwarding<\/strong><\/li>\n<li>The<strong> Macintosh Plus<\/strong> (<span style=\"font-family: Andale Mono, Times;\">192.168.1.150<\/span>) runs a <strong>TCP\/IP stack<\/strong> and gets it\u2019s internet access via <strong>PPP<\/strong><\/li>\n<li>My <strong>MacBook Pro<\/strong> (<span style=\"font-family: Andale Mono, Times;\">192.168.1.18<\/span>) is used to get access to the Raspberry Pi (via <strong>SSH<\/strong> and <strong>VNC<\/strong>) and test network connectivity<\/li>\n<\/ul>\n<p><strong>Note<\/strong>: to keep things simple, the <strong>gateway<\/strong>, the <strong>router<\/strong> and the <strong>Macintosh Plus<\/strong> are configured to have <strong>fixed IP addresses.<\/strong><\/p>\n<p>Let&#8217;s start with the <strong>TCP\/IP stack<\/strong>. To properly run a TCP\/IP stack, I found out that I needed to <strong>upgrade<\/strong> my Mac Plus system to <strong>at<\/strong> <strong>least<\/strong> <strong>System 6.0.3. <\/strong>This wasn&#8217;t a straightforward task, since I couldn&#8217;t not find a proper <em>French<\/em> version for it. I ended up using a <em>French\/Canadian<\/em> version of <strong>System 6.0.5<\/strong>.<\/p>\n<p>But, <strong>before breaking<\/strong> anything on my venerable Mac, I did a <strong>dry<\/strong> <strong>run<\/strong> test using the <a href=\"https:\/\/www.gryphel.com\/c\/minivmac\/\" target=\"_blank\" rel=\"noopener\">Mini vMac<\/a> emulator. For this, I extracted and backed-up the current <span style=\"font-family: Andale Mono, Times;\">.hda<\/span> image from the SD card of the <strong>BlueSCSI<\/strong> device my Mac Plus uses as a SCSI Disk Drive:<strong><br \/>\n<\/strong><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7332\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-bluescsi-upgrade.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-bluescsi-upgrade.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-bluescsi-upgrade-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>I used the <strong>incredibly<\/strong> <strong>useful<\/strong> <a href=\"https:\/\/diskjockey.onegeekarmy.eu\/\" target=\"_blank\" rel=\"noopener\">Disk Jockey<\/a> application to <strong>convert<\/strong> back and forth disk images for <a href=\"https:\/\/github.com\/erichelgeson\/BlueSCSI\" target=\"_blank\" rel=\"noopener\">BlueSCSI<\/a>, Mini vMac and Basilisk II:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7331\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-disk-jockey.jpg\" alt=\"\" width=\"850\" height=\"576\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-disk-jockey.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-disk-jockey-768x520.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>I took the <strong><span style=\"font-family: Andale Mono, Times;\">.hda<\/span><\/strong> image from my BlueSCSI and mounted it into Basilisk. From there, I could add the software I wanted to test. Then I converted the image into a volume image suitable for Mini vMac, messed with configurations, found I needed other versions &#8230; and repeated this cumbersome process until it worked. This allowed me for test various configurations (<strong>System<\/strong>, <strong>MacTCP<\/strong>, <strong>MacPPP<\/strong>, <strong>settings<\/strong>, &#8230;);<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7325\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-minivmac-1.jpg\" alt=\"\" width=\"532\" height=\"391\"><\/p>\n<p>A couple of days later, I found the right combination and put a working setup back to the SD card. I now have a <strong>Macintosh Plus running System 6.0.5 (French\/Canadian)<\/strong> !<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7269\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot1.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>This procedure also allowed me to find and test a TCP\/IP setup. I needed these two components:<\/p>\n<ul>\n<li><strong>MacTCP<\/strong>: MacTCP was developed by <strong>Apple<\/strong> to provide <strong>TCP\/IP networking for System 6.0.3 and later<\/strong>. At the time (1988), it was the first implementation of a TCP stack for a non-Unix platform (and cost a whooping 2500$). It had reliability issues, and was replaced in 1995 with <a href=\"https:\/\/en.wikipedia.org\/wiki\/Open_Transport\" target=\"_blank\" rel=\"noopener\">Open Transport<\/a>. MacTCP is configured via the <strong>Control Panel<\/strong>. For my setup, I used <a href=\"https:\/\/www.macintoshrepository.org\/2612-mactcp\" target=\"_blank\" rel=\"noopener\">MacTCP<\/a> 2.0.6 (<span style=\"font-family: Andale Mono, Times;\">MacTCP-2-0.6.dsk<\/span>).<\/li>\n<li><strong>MacPPP<\/strong>: MacPPP was a freeware developed by <a href=\"https:\/\/en.wikipedia.org\/wiki\/Merit_Network\" target=\"_blank\" rel=\"noopener\">Merit Network<\/a> (for the University of Michigan). It implements <strong>Point-to-Point Protocol<\/strong>, which allows to use <strong>TCP\/IP over serial lines<\/strong>. MacPPP is configured via the <strong>Control<\/strong> <strong>Panel<\/strong>. There are 2 parts (<strong>PPP &#8211;<\/strong> which adds features to MacTCP &#8211; and <strong>Config PPP<\/strong>). For my setup, I used <a href=\"https:\/\/www.macintoshrepository.org\/9737-macppp\" target=\"_blank\" rel=\"noopener\">MacPPP<\/a> 2.1SD (<span style=\"font-family: Andale Mono, Times;\">MacPPP.dsk<\/span>)<\/li>\n<\/ul>\n<p><strong>Note<\/strong>: during the tests with Mini vMac, <strong>Config PPP<\/strong> kept <strong>crashing<\/strong> or displayed <strong>errors<\/strong> whenever I clicked on the configuration icon. I <a href=\"https:\/\/68kmla.org\/bb\/index.php?threads\/config-ppp-error-opening-preferences.37907\/\" target=\"_blank\" rel=\"noopener\">found out<\/a> that this was caused by a <strong>localization<\/strong> problem. Renaming &#8220;Dossier Syst\u00e8me&#8221; into &#8220;System Folder&#8221; solved the problem:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7315\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot15.png\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>Indeed, <strong>MacTCP<\/strong>, <strong>PPP<\/strong> and <strong>Config<\/strong> <strong>PPP<\/strong> files are to be <strong>dropped<\/strong> into the &#8220;<strong>System Folder<\/strong>&#8220;:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7335\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot2-extenions.png\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>Once the Macintosh Plus <strong>rebooted<\/strong>, the TCP\/IP stack could be configured through the <strong>Control Panel<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7271\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot3.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>First, bring up the <strong>MacTCP<\/strong> panel, select <strong>PPP<\/strong> and click on the <strong>&#8220;More&#8230;&#8221;<\/strong> button:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7272\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot4-0.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>This brings up these new settings:<\/p>\n<ul>\n<li><strong>Obtain Address<\/strong>: select <strong>Manually<\/strong><\/li>\n<li><strong>Routing Information<\/strong>: enter the <strong>gateway<\/strong> address (<span style=\"font-family: Andale Mono, Times;\">192.168.1.78<\/span>)<\/li>\n<li><strong>IP Address<\/strong>: select a <strong>class C<\/strong> address:<\/li>\n<li><strong>Domain Name Server Information<\/strong>: <strong>add<\/strong> Google&#8217;s DNS (<span style=\"font-family: Andale Mono, Times;\">8.8.8.8<\/span>) and tick the &#8220;<strong>Default<\/strong>&#8221; selector<\/li>\n<li>Click on the &#8220;<strong>OK<\/strong>&#8221; button<\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7273\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot5.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>Now, in the <strong>IP address box<\/strong>, enter the (fixed) IP address of the Macintosh Plus: <span style=\"font-family: Andale Mono, Times;\">192.168.1.150<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7274\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot4.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>The next step is to bring up the <strong>Config PPP<\/strong> panel:<\/p>\n<ul>\n<li><strong>Port Name<\/strong>: select &#8220;<strong>Modem Port<\/strong>&#8220;<\/li>\n<li><strong>PPP Server<\/strong>: click on &#8220;<strong>New&#8230;<\/strong>&#8220;<\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7275\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot6.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>In the <strong>PPP server panel<\/strong>:<\/p>\n<ul>\n<li><strong>PPP Server Name<\/strong>: enter the name on the new configuration (<strong>Gateway<\/strong>)<\/li>\n<li><strong>Port Speed<\/strong>: select <strong>9600<\/strong><\/li>\n<li>Click on the &#8220;<strong>Done<\/strong>&#8221; button<\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7276\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot7.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p><strong>We are all set !<\/strong> Let&#8217;s try !<\/p>\n<p>Clicking the &#8220;<strong>Open<\/strong>&#8221; button from the <strong>Config<\/strong> <strong>PPP<\/strong> panel initiates the protocol:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7318\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot14.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>On the gateway, I launched the &#8220;<span style=\"font-family: Andale Mono, Times;\">ppp.sh<\/span>&#8221; script:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7339\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-ppp-1.jpg\" alt=\"\" width=\"604\" height=\"439\"><\/p>\n<p>It freakin&#8217; <strong>worked<\/strong> ! The following screenshot is taken from the Config TCP panel (clicking on the &#8220;<strong>Stats &#8230;<\/strong>&#8221; button):<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7321\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot11.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>Let&#8217;s <strong>test<\/strong> the network <strong>connectivity<\/strong>:<\/p>\n<ul>\n<li><span style=\"font-family: Andale Mono, Times;\">PING<\/span> from the <strong>gateway<\/strong> to the <strong>Macintosh Plus<\/strong>: <span style=\"color: #99cc00;\"><strong>check<\/strong><\/span><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7338\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-ppp-2.jpg\" alt=\"\" width=\"605\" height=\"442\"><\/p>\n<ul>\n<li><span style=\"font-family: Andale Mono, Times;\">PING<\/span> from my <strong>MacBook<\/strong> pro to the <strong>Macintosh Plus<\/strong>: <span style=\"color: #99cc00;\"><strong>check<\/strong><\/span><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7337\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-ppp-3.jpg\" alt=\"\" width=\"603\" height=\"443\"><\/p>\n<ul>\n<li>Using <a href=\"https:\/\/macintoshgarden.org\/apps\/mactcp-ping\" target=\"_blank\" rel=\"noopener\">MacTCP Ping<\/a> to <span style=\"font-family: Andale Mono, Times;\">PING<\/span> from the <strong>Macintosh Plus<\/strong> to the <strong>gateway<\/strong>: <span style=\"color: #99cc00;\"><strong>check<\/strong><\/span><\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7316\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot17.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p><strong>Cool !<\/strong> This <strong>Macintosh Plus<\/strong> has a <strong>working<\/strong> <strong>MacTCP<\/strong> stack and is using <strong>MacPPP<\/strong> via the <strong>gateway<\/strong> !<\/p>\n<p>Let\u2019s move on an try to find a <strong>web browser<\/strong>. Just like for the Atari ST, this wasn&#8217;t an easy task. There are very few web browsers actually working with System 6. For example, the venerable <a href=\"https:\/\/macintoshgarden.org\/apps\/ncsa-mosaic\" target=\"_blank\" rel=\"noopener\">NCSA Mosaic<\/a> (which was the first graphical Web Browser I ever used, on HP\/UX, around 1994), though is supposed to work on System 6 &#8230; does <strong>not<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7326\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-minivmac-2.jpg\" alt=\"\" width=\"540\" height=\"396\"><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7327\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-minivmac-3.jpg\" alt=\"\" width=\"534\" height=\"388\"><\/p>\n<p>I could find 3 web browsers that could (up to a point) be launched on System 6:<\/p>\n<ul>\n<li><strong>MacLynx<\/strong>: <a href=\"https:\/\/www.macintoshrepository.org\/794-maclynx-2-7-1b1\" target=\"_blank\" rel=\"noopener\">MacLynx<\/a> is the Macintosh port of the text-based <a href=\"https:\/\/en.wikipedia.org\/wiki\/Lynx_(web_browser)\" target=\"_blank\" rel=\"noopener\">Lynx<\/a> web browser. The beta version runs on System 6 &#8230; but bombs each time I try to open an URL.<\/li>\n<li><strong>MacWeb<\/strong>: <a href=\"https:\/\/macintoshgarden.org\/apps\/macweb\" target=\"_blank\" rel=\"noopener\">MacWeb<\/a> is an early web browser, first released in 1994. Early versions runs on System 6 &#8230; but bombed also.<\/li>\n<li><strong>MacWWW<\/strong>: Also known as <a href=\"https:\/\/macintoshgarden.org\/apps\/macwww\" target=\"_blank\" rel=\"noopener\">Samba<\/a>, this web browser was released in 1992. It was co-written by none other than <a href=\"https:\/\/en.wikipedia.org\/wiki\/Robert_Cailliau\" target=\"_blank\" rel=\"noopener\">Robert Cailliau<\/a> himself and bears the <a href=\"https:\/\/en.wikipedia.org\/wiki\/CERN\" target=\"_blank\" rel=\"noopener\">CERN<\/a> logo ! As a former particle physicist, who studied and worked at CERN in the early\/mid 90&#8217;s and witnessed the birth of the web there, this had to be my web browser of choice for the Macintosh !<\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7320\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot12.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>Version 1.00 was released on 12 May 1993 with the commentary: &#8220;<em>We know there is much to be improved, but it works well on system 7 and system 6.0.5<\/em>&#8220;. <strong>Let&#8217;s take this beast for a spin !<\/strong><\/p>\n<p>Samba is very <strong>finicky<\/strong> and prone to <strong>crash<\/strong>. Moreover, it was released with <strong>old standards<\/strong> in mind. It does <strong>not<\/strong> support <strong>HTTPS<\/strong>. This rules out most of today&#8217;s web. Moreover, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Virtual_hosting\" target=\"_blank\" rel=\"noopener\">Virtual host names<\/a> (which is needed to host multiple websites on a single IP address) are <strong>not<\/strong> <strong>supported<\/strong>. This means that for most (if not all) web sites, Samba will <strong>respond<\/strong> with <strong>URL redirection <\/strong>or a <strong>Not Found<\/strong> <strong>error<\/strong> <strong>messages<\/strong>.<\/p>\n<p>This includes <strong>unfortunately<\/strong> both sites I wanted to use: <span style=\"font-family: Andale Mono, Times;\">http:\/\/frogfind.com<\/span> and <span style=\"font-family: Andale Mono, Times;\">http:\/\/info.cern.ch<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7317\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot16.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>Thus &#8230; to get something working, I installed and configured an <a href=\"https:\/\/en.wikipedia.org\/wiki\/Apache_HTTP_Server\" target=\"_blank\" rel=\"noopener\">Apache server<\/a> on the gateway, and created a <strong>landing<\/strong> <strong>page<\/strong> with the content of the very <strong>first web page<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7319\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot13.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>And &#8230; yes, this <strong>worked<\/strong>. Web browsing from a <strong>Macintosh Plus,<\/strong> running <strong>System<\/strong> <strong>6<\/strong>, over <strong>serial<\/strong> <strong>null<\/strong> <strong>modem<\/strong> cable <strong>is<\/strong> <strong>possible<\/strong>. But most certainly <strong>very<\/strong> <strong>limited<\/strong> and <strong>very frustrating<\/strong>.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7406\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-www.jpg\" alt=\"\" width=\"850\" height=\"638\" srcset=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-www.jpg 850w, https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-www-768x576.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/p>\n<p>But seeing <strong>this<\/strong> web page, on a browser written by <strong>Robert<\/strong> <strong>Cailliau<\/strong>, on my <strong>beloved<\/strong> Macintosh Plus &#8230; was <strong>glorious !<\/strong><\/p>\n<p>Since the web browsing user experience was &#8230; <strong>frustrating<\/strong>, I wanted to test another Internet tool. I chose the <a href=\"https:\/\/en.wikipedia.org\/wiki\/File_Transfer_Protocol\" target=\"_blank\" rel=\"noopener\">FTP<\/a> protocol, which was <strong>easy<\/strong> to setup:<\/p>\n<ul>\n<li>On the <strong>gateway side<\/strong>, I chose to install the <a href=\"https:\/\/en.wikipedia.org\/wiki\/ProFTPD\" target=\"_blank\" rel=\"noopener\">proFTPd<\/a> server: <span style=\"font-family: Andale Mono, Times;\">sudo apt-get install proftpd<\/span><\/li>\n<li>On the <strong>Macintosh Plus side<\/strong>, I chose to use the <a href=\"https:\/\/macintoshgarden.org\/apps\/fetch-212\" target=\"_blank\" rel=\"noopener\">Fetch<\/a> 2.1.2 FTP client:<\/li>\n<\/ul>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7386\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot20.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>I created a empty <span style=\"font-family: Andale Mono, Times;\">ftp<\/span> folder in the home directory of the <span style=\"font-family: Andale Mono, Times;\">fred<\/span> <strong>account<\/strong>, and used this account to <strong>log into the gateway FTP server<\/strong>:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7385\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot21.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7384\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot22.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>Once <strong>connected<\/strong> to the FTP server, I chose a few files (screenshots) on the Macintosh Plus. I selected the <strong>MacBinary II<\/strong> format for binary transfer:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7382\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot24.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7383\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot23.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7381\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/mac-screenshot25.jpg\" alt=\"\" width=\"542\" height=\"372\"><\/p>\n<p>It <strong>worked very well<\/strong>, and was much faster and easier to setup than for Kermit. The <strong>MacBinary II<\/strong> format used by Fetch is an evolution of the MacBinary format. Fortunately, the MacOSX <span style=\"font-family: Andale Mono, Times;\">macbinary<\/span> tool can also decode this format and I could read and convert the screenshots into JPEG files (and use them to illustrate the Fetch usage)<\/p>\n<hr>\n<p><strong>Conclusion<\/strong><\/p>\n<p>We are coming to the end of this little network experiment on vintage computers. This was a fun ride ! Some goals were reached, some were missed. Here is a little score board that sums up the results so far:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-7380\" src=\"https:\/\/www.quantum-bits.org\/wp-content\/uploads\/2023\/07\/scoreboard.png\" alt=\"\" width=\"750\" height=\"182\"><\/p>\n<p>It is unfortunate that I could not find a TCP\/IP stack for the <strong>Apple IIc<\/strong> that could manage null modem communication. Some stacks are actually running great, but require an Ethernet port. I will most certainly follow the work of the <a href=\"https:\/\/github.com\/A2osX\/A2osX\" target=\"_blank\" rel=\"noopener\">A2osX<\/a> project that I discovered during this experiment.&nbsp;<\/p>\n<p>The <strong>Atari ST<\/strong> results are probably the best, but it may come from the fact that this is the system I am the more familiar with !<\/p>\n<p>As for the <strong>Macintosh Plus<\/strong>, the web browsing user experience was very limited and very frustrating. But it is most probably because of the constraint of using <strong>System 6<\/strong>. Upgrading to System 7 would allow to run other web browsers, like <a href=\"https:\/\/en.wikipedia.org\/wiki\/Mosaic_(web_browser)\" target=\"_blank\" rel=\"noopener\">NCSA Mosaic<\/a>, or early versions of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Netscape_Navigator\" target=\"_blank\" rel=\"noopener\">Netscape Navigator<\/a>. But this would probably require a <strong>RAM upgrade<\/strong> for my Macintosh Plus (up to now, I wasn&#8217;t able to run System 7, lacking enough memory).<\/p>\n<p>On the subject of the Macintosh Plus, I&#8217;d love to explore sharing data via <strong>AppleTalk<\/strong>, but I am not sure this can be done over PPP (first investigations suggest it won&#8217;t work). <strong>AppleShare<\/strong> would be nice &#8230; but requires at least System 7 from what I read.<\/p>\n<p>It seems more experiments are on their way !<\/p>\n<hr>\n<p><strong>Acknowledgment and links<\/strong><\/p>\n<p>Here are a few links that really helped during these experiments:<\/p>\n<p>Software repositories:<\/p>\n<ul>\n<li><strong>[Apple IIc]<\/strong> &#8211; <a href=\"https:\/\/mirrors.apple2.org.za\/ftp.apple.asimov.net\/\" target=\"_blank\" rel=\"noopener\">https:\/\/mirrors.apple2.org.za\/ftp.apple.asimov.net\/<\/a> (Software)<\/li>\n<li><strong>[Apple IIc]<\/strong> &#8211; <a href=\"https:\/\/github.com\/A2osX\/A2osX\/\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/A2osX\/A2osX\/<\/a> (A2osX)<\/li>\n<li><strong>[Apple IIc]<\/strong> &#8211; <a href=\"https:\/\/adtpro.com\/index.html\" target=\"_blank\" rel=\"noopener\">https:\/\/adtpro.com\/index.html<\/a> (ADT Pro)<\/li>\n<li><strong>[Atari ST]<\/strong> &#8211; <a href=\"http:\/\/www.atarimania.com\/pgemainsoft.awp?type=U&amp;system=S\" target=\"_blank\" rel=\"noopener\">http:\/\/www.atarimania.com\/pgemainsoft.awp?type=U&amp;system=S<\/a> (Software)<\/li>\n<li><strong>[Atari ST]<\/strong> &#8211; <a href=\"http:\/\/www.chebucto.ns.ca\/Services\/PDA\/AtariSTMisc.shtml\" target=\"_blank\" rel=\"noopener\">http:\/\/www.chebucto.ns.ca\/Services\/PDA\/AtariSTMisc.shtml<\/a> (Ghostlink, various utilities)<\/li>\n<li><strong>[Atari ST]<\/strong> &#8211; <a href=\"https:\/\/www.chebucto.ns.ca\/Services\/PDA\/AtariSTComm.shtml\" target=\"_blank\" rel=\"noopener\">https:\/\/www.chebucto.ns.ca\/Services\/PDA\/AtariSTComm.shtml<\/a> (STinG, various network tools)<\/li>\n<li><strong>[Atari ST]<\/strong> &#8211; <a href=\"https:\/\/www.chebucto.ns.ca\/Services\/PDA\/AtariSTBrowsers.shtml\" target=\"_blank\" rel=\"noopener\">https:\/\/www.chebucto.ns.ca\/Services\/PDA\/AtariSTBrowsers.shtml<\/a> (CAB, CAB.OVL)<\/li>\n<li><strong>[Macintosh Plus]<\/strong> &#8211; <a href=\"https:\/\/macintoshgarden.org\/\" target=\"_blank\" rel=\"noopener\">https:\/\/macintoshgarden.org\/<\/a> (Software)<\/li>\n<li><strong>[Macintosh Plus]<\/strong> &#8211;&nbsp;<a href=\"https:\/\/www.macintoshrepository.org\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.macintoshrepository.org\/<\/a> (Software)<\/li>\n<\/ul>\n<p>Web sites \/ tutorials:<\/p>\n<ul>\n<li><strong>[Atari ST]<\/strong> &#8211; <a href=\"https:\/\/paradize.final-memory.org\/sting1.shtml\" target=\"_blank\" rel=\"noopener\">STing Nullmodem Network HOWTO<\/a><\/li>\n<li><strong>[Atari ST]<\/strong> &#8211; <a href=\"https:\/\/www.atari-forum.com\/viewtopic.php?t=11134\" target=\"_blank\" rel=\"noopener\">Sting + Nullmodem to PC (Atari-Forum)<\/a><\/li>\n<li><strong>[Apple IIc]<\/strong> &#8211; <a href=\"https:\/\/www.callapple.org\/tag\/a2osx\/\" target=\"_blank\" rel=\"noopener\">A2osX updates<\/a> (Call-A.P.P.L.E.)<\/li>\n<li><strong>[Macintosh Plus]<\/strong> &#8211; <a href=\"http:\/\/www.math.utah.edu\/lab\/mac\/ppp.html\" target=\"_blank\" rel=\"noopener\">Setting up an internet connection via modem with PPP<\/a><\/li>\n<li><strong>[Macintosh Plus]<\/strong> &#8211; <a href=\"https:\/\/macgui.com\/news\/article.php?t=435\" target=\"_blank\" rel=\"noopener\">Bootstrapping with Smartcom and BinHex<\/a><strong><br \/>\n<\/strong><\/li>\n<li><strong>[Macintosh Plus]<\/strong> &#8211; <a href=\"https:\/\/happymacs.wordpress.com\/2018\/04\/01\/networking-your-system-6-mac\/\" target=\"_blank\" rel=\"noopener\">Networking Your System 6 Mac<\/a><\/li>\n<\/ul>\n<p>Youtubers:<\/p>\n<ul>\n<li><strong>Adrian\u2019s Digital Basement<\/strong>: <a href=\"https:\/\/www.youtube.com\/c\/adriansdigitalbasement\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/c\/adriansdigitalbasement<\/a><\/li>\n<li><strong>Action Retro<\/strong>: <a href=\"https:\/\/www.youtube.com\/@ActionRetro\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/@ActionRetro<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In a previous post, I presented the restoration of an Apple IIc that I acquired a couple of months ago.&nbsp; Since it was my first steps with an Apple II &#8230;<\/p>\n","protected":false},"author":1,"featured_media":7399,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0},"categories":[21,23],"tags":[],"_links":{"self":[{"href":"https:\/\/www.quantum-bits.org\/index.php?rest_route=\/wp\/v2\/posts\/7041"}],"collection":[{"href":"https:\/\/www.quantum-bits.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.quantum-bits.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.quantum-bits.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.quantum-bits.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7041"}],"version-history":[{"count":0,"href":"https:\/\/www.quantum-bits.org\/index.php?rest_route=\/wp\/v2\/posts\/7041\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.quantum-bits.org\/index.php?rest_route=\/wp\/v2\/media\/7399"}],"wp:attachment":[{"href":"https:\/\/www.quantum-bits.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7041"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.quantum-bits.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7041"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.quantum-bits.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7041"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}