Search This Blog

Wednesday, January 17, 2018

The AppleTalk experience: Mac OS 9 on SheepShaver and Netatalk on Ubuntu (Classic Power Macintosh 9500 PowerPC G4)

Mac OS 9 running in SheepShaver accessing shared files on three Ubuntu nodes over AppleTalk via netatalk
Apple Mac OS 9 in SheepShaver communicating over AppleTalk network protocol with Ubuntu Linux nodes via Netatalk

With 10 DECnet nodes connected to the global hobbyist HECnet network stable and staying up, I started to wonder what other non-Internet Protocol (non-TCP/IP) networking experiment I could run. Apple's classic AppleTalk protocol came to mind.


Originally released as AppleNet in 1983 for the Apple II and Lisa, AppleTalk has roots in Xerox XNS. AppleTalk's ancestry is no less illustrious than DECnet.

Despite phenomenal rise of the Internet Protocol (TCP/IP), AppleTalk was supported all the way to the 2009 release of Mac OS X Snow Leopard. Interoperability with TCP/IP was introduced as far back as 1988 with MacTCP and later MacIP (Wikipedia) which basically piggybacked IP over AppleTalk. However, my objective here was to stay away from IP completely, and focus on pure AppleTalk.

I had zero experience with AppleTalk networking. Fortunately, there is still enough reading material out on the 'net to get a feel for it. "Inside Macintosh: Networking" is a great book. The Netatalk 2.0 documentation is fabulous. And Cisco's Protocol Filter appendix is handy in deciphering stuff like 0x809b ether-type packets that suddenly pop up in packet dumps once AppleTalk kicks in. 0x809b is EtherTalk, "an Apple AppleTalk networking protocol that enables AppleTalk to communicate over Ethernet cabling."

Supratim Sanyal's Blog: AppleTalk Protocol EtherTalk (ethertype 0x809b) frames captured by iptraf-ng packet capture tool
EtherTalk (ethertype 0x809b) frames captured by iptraf-ng on Ubuntu Linux

Objectives


After reading around a bit, and not being a AppleTalk expert, I set myself the simplest of objectives of this experiment:

  1. Bring up a classic Macintosh virtual machine running Mac OS with Ubuntu Linux as host
  2. Configure Mac OS and the virtual machine to support AppleTalk networking
  3. Add AppleTalk support to Ubuntu Linux host machine
  4. Have the Mac OS virtual machine access files on Ubuntu host machine via AppleTalk
  5. Bring in more Ubuntu Linux boxes supporting AppleTalk to the happy AppleTalk island
As the screenshot at the top of this post demonstrates, this experiment is pretty successful. In summary, the objectives were met respectively by:
  1. SheepShaver on Ubuntu running Mac OS 9, with sheep_net kernel network module
  2. The Mac OS 9 installation procedure installs AppleTalk
  3. Netatalk 2.0
    • Netatalk version 2.2.5 on Ubuntu 17
    • Netatalk version 2.2.2 on Ubuntu 14
  4. Editing configuration files of Netatalk daemons
  5. Same as 4
A note of caution: I had initially grabbed and built Netatalk 3.0 from source, but fell back to Netatalk 2.0 because support for AppleTalk was discarded in Netatalk 3.0.

Configuring SheepShaver to run a virtual Classic Apple Power Macintosh 9500 / PowerPC G4 CPU with MacOS 9 on Ubuntu Linux

Build SheepShaver from Source


There is some documentation here and here which boil down to the following. The Ubuntu version I built and run SheepShaver on is Ubuntu 17.04.

First, make sure the required packages are installed.

$ sudo apt-get install build-essential autoconf git libx11-dev libesd0-dev gtk+3.0-dev libsdl-dev libgtk+2.0-dev

Then, with root privileges, edit the file /etc/sysctl.conf to add the following lines at the bottom (this allows SheepShaver to run from a non-root account):

# --

# Needed for SheepShaver Mac Classic emulator
# --
vm.mmap_min_addr=0


Still with root privileges, enter the following command (or reboot):

service procps start


The following script fetches the SheepShaver source code and builds it.


I found various packages, all from standard Ubuntu repositories, to get a autoconfig result of:

SDL support ...................... : none
BINCUE support ................... : no
LIBVHD support ................... : no
FBDev DGA support ................ : yes
XFree86 DGA support .............. : yes
XFree86 VidMode support .......... : yes
Using PowerPC emulator ........... : yes
Enable JIT compiler .............. : yes
Enable video on SEGV signals ..... : yes
ESD sound support ................ : yes
GTK user interface ............... : gtk2
mon debugger support ............. : no
Addressing mode .................. : real
Bad memory access recovery type .. : siginfo

Once the main SheepShaver program has been built, the following script builds the sheep_net.ko kernel module.



The following script installs the sheep_net.ko kernel module and creates the /dev/sheep_net network device with the right ownership:



Configure and run SheepShaver


I created a directory ~/sheepshaver.run/ and copied over the SheepShaver binary from the build location (~/sheepshaver.build/macemu/SheepShaver/src/Unix/SheepShaver). I then looked around the internet to locate a "New World" ROM (newworld86.rom) and a Mac OS 9 bootable installer image (Mac OS 9.toast). There are pointers to where they can be obtained from at "Setting up SheepShaver for Mac OS X". I placed both these items in the same directory as the SheepShaver binary.

I created a subdirectory called "shared" to share files between the Ubuntu host and SheepShaver's Mac desktop. This directory is configured to be the "Unix Root" on SheepShaver and shows up as the drive "Unix" on the virtual Mac desktop. It simplifies transfer of files between Ubuntu host and Mac OS 9 virtual machines guest; anything copied into "shared" shows up in the "Unix" drive on Mac OS desktop though they cannot be executed directly from there, requiring me to copy executable installers from "Unix" to a local place on Mac OS first.

Finally I fired up SheepShaver, added the boot disk image, created two disk drives of 250 MB each, disabled sound (I do not want audio!), set the network interface and launched the emulated PowerMac G4. Here is a series of pictures of the options I configured in each tab:

Supratim Sanyal's Blog: SheepShaver Mac OS 9 Disk Configuration on Ubuntu Linux
SheepShaver Mac OS 9 Disk Volume and Shared Directory configuration

Supratim Sanyal's Blog: SheepShaver Mac OS 9 Graphics and Sound configuration Ubuntu Linux
SheepShaver Mac OS 9 Graphics and Sound configuration

Supratim Sanyal's Blog: SheepShaver Mac OS 9 Keyboard and Mouse configuration Ubuntu Linux
SheepShaver Mac OS 9 Keyboard and Mouse configuration

Supratim Sanyal's Blog: SheepShaver Mac OS 9 Serial Ports and Network Adapter configuration AppleTalk Ubuntu Linux
SheepShaver Mac OS 9 Serial Ports and Network Adapter configuration
I used a port on a VDE (Virtual Distributed Ethernet)  switch already configured and used by my DECnet nodes

Supratim Sanyal's Blog: SheepShaver Mac OS 9 Memory and Misc configuration Ubuntu Linux
SheepShaver Mac OS 9 Memory and Misc. configuration

Supratim Sanyal's Blog: Supratim Sanyal's Blog: SheepShaver Mac OS 9 JIT Compiler configuration Linux Ubuntu
SheepShaver Mac OS 9 JIT Compiler configuration


When the "Start" button is clicked, SheepShaver saves the configuration out to a dotted (hidden) text file called ".sheepshaver_prefs" in the home directory, i.e. "~/.sheepshaver_prefs". It then launches the virtual Power Macintosh and boots from the CD image.

On examining ~/.sheepshaver_prefs I found a time-saving trick - setting "nogui" to "true" does not launch the heavy graphical configuration tool first but boots up the Mac OS 9 virtual machine directly. It is much easier to directly edit ~/.sheepshaver_prefs instead of having to deal with a GUI. Here is my  ~/.sheepshaver_prefs:

disk SANYALnet-MacOS9-Disk1.dsk
disk SANYALnet-MacOS9-Disk2.dsk
extfs shared
screen win/800/600
windowmodes 0
screenmodes 0
seriala /dev/null
serialb /dev/null
rom newworld86.rom
bootdrive 0
bootdriver 0
ramsize 536870912
frameskip 12
gfxaccel false
nocdrom true
nonet false
nosound true
nogui true
noclipconversion false
ignoresegv true
ignoreillegal true
jit true
jit68k false
keyboardtype 5
ether vde-decnet-tap2
keycodes false
mousewheelmode 1
mousewheellines 3
dsp /dev/dsp
mixer /dev/mixer
ignoresegv true
idlewait true


I use the following script to start the Mac OS 9 SheepShaver application with the X11 GUI going to a detached virtual X11 display screen using the "xpra" tool.



Install Mac OS 9 in SheepShaver


Supratim Sanyal's Blog: Mac OS 9 booting up from CD ROM installer image in SheepShaver on Ubuntu Linux
Mac OS 9 Installation CD Boot in SheepShaver
As expected for new disks, the installer asks to initialize them. I decided to initialize the two disks with "Mac OS Extended" file system instead of the default "Mac OS Standard". It appears from the literature around the internet that "Mac OS Extended" is actually a journaling file system with better performance for normal use.

More importantly, the "Update Apple Hard Disk Drivers" checkbox in the "Options" screen accessible via the "Options..." button needs to be unchecked (cleared) for successful SheepShaver installation; SheepShaver hangs if this button is checked.

Supratim Sanyal's Blog: Mac OS 9 installation options: "Update Apple Hard Disk Drivers" must be unchecked for SheepShaver
Mac OS 9 installation options: "Update Apple Hard Disk Drivers" must be unchecked for SheepShaver
As far as "Customize" is concerned, I pretty much selected everything except Speech-related features.

Supratim Sanyal's Blog: Mac OS 9 Customized Installation Example: Selecting "All" Internet Access Features
Mac OS 9 Customized Installation Example: Selecting "All" Internet Access Features

I then proceeded with the installation by clicking "Start".

Supratim Sanyal's Blog: Mac OS 9 on SheepShaver CD ROM image installation progress
Mac OS 9 on SheepShaver CD ROM image installation progress

Once installation completed (it takes about 7 - 8 minutes), I shut Mac OS 9 down and restarted SheepShaver to get back to the launcher options GUI. I then removed the CD ROM from the list of volumes and booted up Mac OS 9 from the hard disk.

Supratim Sanyal's Blog: Mac OS 9 SheepShaver Configuration for Hard-Disk only volumes (CD ROM volume removed)
Mac OS 9 SheepShaver Configuration for Hard-Disk only volumes (CD ROM volume removed)
On booting up the first time after installation, Mac OS 9 presents a "Mac OS Setup Assistant" window. It is very important the Setup Assistant be not used; all configuration can be done separately using the various Control Panels reachable via the Apple logo at the top left. Mac OS Setup Assistant hangs SheepShaver, close it immediately!

Supratim Sanyal's Blog: Mac OS 9 Setup Assistant in SheepShaver for Ubuntu Linux
The Mac OS 9 Setup Assistant: Close the Setup Assistant immediately; it hangs SheepShaver
That completes the base installation of Mac OS 9 on SheepShaver, ready to be configured for its networking features. Here are a couple of more screenshots.

Supratim Sanyal's Blog: Clean initial installation of Mac OS 9 on Power Macintosh emulated by SheepShaver for Ubuntu Linux

Supratim Sanyal's Blog: Clean initial installation of Mac OS 9 on Power Macintosh emulated by SheepShaver for Ubuntu Linux
Clean initial installation of Mac OS 9 on Power Macintosh emulated by SheepShaver for Ubuntu Linux

Get Mac OS 9 in SheepShaver Ready for AppleTalk


It took me a while and many SheepShaver freezes to figure this out:

Mac OS 9 in SheepShaver needs to have an IP address, netmask and gateway configured, and the configured Gateway needs to be reachable, to not freeze and stay up even if we are using only AppleTalk.

It does not matter if the configured IP Gateway actually connects to the internet or anything at all; as long as Mac OS 9 can see it, it is happy.

I used the TCP/IP control panel to configure a dummy IP address, subnet mask, router (Apple speak for Gateway) and Name server (DNS).

Supratim Sanyal's Blog: Mac OS 9 TCP/IP configuration using TCP/IP Control Panel
TCP/IP Control Panel on Mac OS 9

Then I assigned the router and DNS address configured in Mac OS 9 to a different plug on the same VDE switch on the Ubuntu host so that Mac OS 9 can see the  IP gateway. There is no IP traffic after a few initial startup packets.

$ ip addr show vde-decnet-tap3
13: vde-decnet-tap3: <BROADCAST,MULTICAST,ALLMULTI,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 82:29:cd:e3:f6:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.217.1/27 brd 192.168.217.31 scope global vde-decnet-tap3
       valid_lft forever preferred_lft forever

I did not have to do much else in terms of preparing for AppleTalk; it did really work "automagically" as claimed once Netatalk was configured on the Ubuntu host.

Install and Configure Netatalk on Linux Ubuntu


Unfortunately my total ignorance of AppleTalk resulted in spending significant time in numerous false starts before everything fell into place. One of the bigger mistakes I made was to download and build Netatalk 3.0 from source, only to realize later that they completely took out support for AppleTalk in Netatalk 3.0 onwards.

There is no AppleTalk router in my setup. All AppleTalk nodes are plugged into the same VDE virtual switch. Also, there is no AppleTalk Zone Name required or specified; there is only one zone which is also the default zone.

Ultimately what worked was a straight-forward installation from standard Ubuntu repository which pulled in Netatalk version 2.2.5 (on Ubuntu 17), and edits to just four files.

/etc/default/netatalk

To use the AFP file server, I enabled both the cnid_metad and afpd daemons. Since I am only interested in AppleTalk, I enabled the atalkd, papd and timelord "legacy" daemons but left the a2boot daemon disabled because I have no need for netbooting. Here is /etc/default/netatalk configuration file from MOKSHA which is the Ubuntu 17.04 host machine for SheepShaver.




/etc/netatalk/atalkd.conf

The virtual Ethernet card on my SheepShaver configuration is connected to a plug on a Virtual Distributed Ethernet (VDE) switch running on MOKSHA which also happens to host four more virtual machines that communicate over DECnet. All I needed to do with atalkd.conf is stick in the name of a hitherto unused VDE plug network device, just by itself, on the last line. Netatalk actually modifies this file on startup with a startup AppleTalk net-range and a self-generated node number (which it decides on "automagically" based on what it can see on the network) and adds those items to the configuration itself. Here is my atalkd.conf from MOKSHA after being modified by Netatalk.




/etc/netatalk/afpd.conf

This file configures file-sharing between Ubuntu and Mac OS 9 over AppleTalk. Interested only in AppleTalk, I disabled TCP and enabled DDP ("Datagram Delivery Protocol") that is part of the AppleTalk stack. I also enabled guest access requiring no authentication and a "welcome" message that is displayed when a guest connection is established to Ubuntu from Mac OS 9.

The Ubuntu directory made available publicly to Mac OS 9 over AppleTalk is actually configured in the next file.

Supratim Sanyal's Blog: AppleTalk Remote Network File Share Login Welcome Message on Mac OS 9 accessing Ubuntu shared directory
AppleTalk Network File Share Login Message


Here is my afpd.conf file.




/etc/netatalk/AppleVolumes.default

This file defines the directories to be shared by Ubuntu over AppleTalk for Mac OS clients. I configured just one directory to be shared with Mac OS. (I have a lofty goal of making this directory available over the FAL service of DECnet as well, hence the name). Here is my AppleVolumes.default configuration file.



Of course, the netatalk service has to restarted using the standard Ubuntu systemctl (or service on Ubuntu 14) tool for configuration changes to take effect. Also, netatalk has to be enabled for starting up at boot using systemctl (or update-rc.d on Ubuntu 14).


More AppleTalk Nodes


With the Ubuntu 17 host and SheepShaver Mac OS 9 communicating successfully over AppleTalk at this point, I added two more Ubuntu 14 nodes FEDACH and FOMFOR into the AppleTalk mix. They were already bridged into the DECnet VDE switch that I am using for AppleTalk too.

Once again I simply used Ubuntu's standard apt-get command to install Netatalk from the repos.

FEDACH, FOMFOR and MOKSHA have identical /etc/default/netatalk and /etc/netatalk/AppleVolumes.default configuration files.

The network adapter on FEDACH and FOMFOR dedicated to non-IP protocols (i.e. DECnet and AppleTalk only) is eth1. I accordingly updated /etc/netatalk/atalkd.conf with a single item "eth1" and restarted the netatalk service. As expected, Netatalk looked around, negotiated with other AppleTalk nodes and "automagically" filled in additional parameters with the same net ranges but unique node addresses as follows:

FEDACH - /etc/netatalk/atalkd.conf:
eth1 -phase 2 -net 0-65534 -addr 65280.225


FOMFOR - /etc/netatalk/atalkd.conf:
eth1 -phase 2 -net 0-65534 -addr 65280.149

I edited the /etc/netatalk/afpd.conf files on the two nodes to reflect the correct node names and login (welcome) messages:

FEDACH - /etc/netatalk/afpd.conf:
"FEDACH" -ddp -notcp -uamlist uams_guest.so -loginmesg "Welcome to FEDACH over AppleTalk, a SANYALnet Labs Ubuntu 14.04 server also speaking DECnet Phase IV and Internet Protocol (IP)."


FOMFOR - /etc/netatalk/afpd.conf:
"FOMFOR" -ddp -notcp -uamlist uams_guest.so -loginmesg "Welcome to FOMFOR over AppleTalk, a SANYALnet Labs Ubuntu 14.04 server also speaking DECnet Phase IV and Internet Protocol (IP)."


Continuing fun with Mac OS 9 Non-TCP/IP Networking Protocols

Power Macintosh 9500 / PowerPC G4 CPU / Mac OS 9 communicating over both AppleTalk and DECnet (no IP)

Moving on from AppleTalk, I went ahead to install DEC Pathworks for Macintosh and added DECnet support to Mac OS 9, thus having Mac OS 9 talking both AppleTalk and DECnet. But DECnet for Macintosh and Pathworks for Macintosh are the subjects of a separate post that I will get to some time! If it is up, you can see this Mac OS 9 virtual machine on HECnet.

Comments welcome.


Saturday, December 16, 2017

Easy Bitcoin Mining on CentOS 7 and Ubuntu 17 for the curious | cpuminer-multi and slushpool

Supratim Sanyal's Blog: Bitcoin Mining Howto - Slushpool Screenshot


Be informed

Mining cryptocurrency bitcoins: for me, an exercise in satisfying curiosity. You cannot make any real bitcoin money any more using spare CPU cycles on your home computers manipulating blockchains.

If you are serious about mining bitcoins, invest in a modern ASIC based miner.

Otherwise, if you are like me, play around a bit with bitcoin mining and then go back to your boinc daemons for SETI@HOME and LHC@HOME and contribute your CPU cycles to where it matters more for advancing the human species.

Installing cpuminer-multi (Linux - CentOS and Ubuntu)

cpuminer-multi should be run from a user account (never as root).

Install the necessary packages

CentOS 7

$ sudo bash
# yum groupinstall "Development Tools"
# yum install curl-devel openssl-devel git screen
# exit
$ cd

Ubuntu 17

$ sudo apt-get install build-essential autotools-dev autoconf libcurl3 libcurl4-gnutls-dev git screen libssl-dev

Clone and build cpuminer-multi

CentOS 7 and Ubuntu 17

$ git clone https://github.com/tpruvot/cpuminer-multi.git
$ cd cpuminer-multi
$ ./autogen.sh
$ ./configure CFLAGS="-march=native" --with-crypto --with-curl
$ ./build.sh
$ cd

Join a pool

Sign up with slushpool and get worker details for your computer. You can have different workers for different computers if you so wish. Basically you need a "miner login" (not the same as your slushpool account login) for your worker. This is of the form "yourusername.Worker1" and can be obtained by adding a worker.

Launch cpuminer in a dedicated screen

Use a shell script in your home directory to launch cpuminer with your slushpool worker. Nice it down if your server is doing other more important stuff; cpuminer will happily take up all of your available processing power.

The "password" does not matter here; it is not used.

Change it for your worker unless you want to mine for me.

cpuminer_in_screen.sh

#!/bin/bash
#
# Run niced down cpuminer in screen
#
screen -S cpuminer -m -d nice ~/cpuminer-multi/cpuminer -a sha256d -o stratum+tcp://us-east.stratum.slushpool.com:3333 -O tuklu_san.MyPublicMiner:password
screen -ls

Make the script executable:

$ chmod +x cpuminer_in_screen.sh

and launch it:

$ ./cpuminer_in_screen.sh

Attach to the screen "cpuminer":

$ screen -r cpuminer

You should see something like this:

** cpuminer-multi 1.3.3 by tpruvot@github **
BTC donation address: 1FhDPLPpw18X4srecguG3MxJYe4a1JsZnd (tpruvot)

[2017-12-14 13:18:46] Starting Stratum on stratum+tcp://us-east.stratum.slushpool.com:3333
[2017-12-14 13:18:46] 2 miner threads started, using 'sha256d' algorithm.
[2017-12-14 13:18:46] Stratum difficulty set to 2048
[2017-12-14 13:18:46] sha256d block 499253, diff 1590896927258.079
[2017-12-14 13:18:48] CPU #0: 1207 kH/s
[2017-12-14 13:18:48] CPU #1: 1197 kH/s
...
...


Detach from the screen using Ctrl-a, d. Watch your slushpool account for progress.

Payouts

You will need to set a bitcoin wallet number in your slushpool account to receive payouts if you ever get to that point. I already had a coinbase account with a bitcoin wallet number that I used for this purpose. 

It is just an experiment

I do not expect anything to really happen in terms of payouts. My slushpool dashboard says I will complete mining one-tenth of a bitcoin in another 79 years and some months.

Once again, if you are serious, invest in a modern ASIC based miner. Be aware, though, of the fact that the vendors of these ASIC bitcoin miner hardware are making more money selling them than folks actually making money off bitcoin mining. Also, as you will see if you research a bit, the amount of money you will pay your electric utility company will be more than you make mining bitcoins.

Have fun!


Thursday, December 7, 2017

DOS TCP/IP Networking with Internet Services and Web Browsing: PC DOS 2000, Packet Driver, mTCP, Arachne and Dillo

Supratim Sanyal's Blog: DOS Web Browsers: Arachne and Dillo Screenshot
DOS Web Browsers: Arachne (left) and Dillo
In all the time I have been playing with computers going back to when Winston Smith took on Oceania, I have never had an opportunity to try out networking and get on the internet from just DOS on a PC. So I fired up Oracle VirtualBox and went to consult with The Great Search Engine.

It turns out a lot of folks have not only done this, but took pains to document what they did; with a bit of trial and error, I now have a functional PC DOS VirtualBox appliance equipped with CD ROM and SoundBlaster 16 drivers, a Packet Driver for AMD PCnet-Fast III network adapter, the mTCP Suite of TCP/IP stack with client and server networking applications, and two DOS-based graphical web browsers - Dillo and Arachne.

The DOS VirtualBox appliance specs I used: 64 MB RAM, PIIX 3 chipset, PS/2 mouse, no I/O APIC, no EFI, 1 CPU, no PAE/NX, 32 MB video RAM, a Floppy controller, an IDE controller with a 512 MB fixed-sized (not dynamic) hard drive and a CD-ROM drive, SoundBlaster 16 audio card, bridged PCnet-FAST III network adapter, two serial ports and a USB 1.1 OHCI controller.

I needed a way to make downloaded stuff available to the vbox appliance via floppy disk and CD-ROM images. I used Magic ISO Maker (Setup_MagicISO.exe) to create floppy and CD images to attach to the appliance and transfer downloaded files. The unregistered version of Magic ISO Maker cannot create images over 300 MB, but this was not a problem for my use cases of creating 3.5" 1.44 MB Floppy disk images and CD ROM ISOs well under the 300 MB limit. This way I could also have an archive of the floppy disks and CD ROMs used to build this VM. I avoided VirtualBox's shared folder feature.

Supratim Sanyal's Blog: Magic ISO Maker for 1.44 MB Floppy Disk and CD ROM ISO image creation
Magic ISO Maker for 1.44 MB Floppy Disk and CD ROM ISO image creation

IBM PC DOS 2000

Supratim Sanyal's Blog: IBM PC DOS 2000 (PC DOS 7 Revision 1) Installation Setup Screen
IBM PC DOS 2000 (PC DOS 7.0 Revision 1) Setup


I remembered switching away from Microsoft MS DOS 6.22 to IBM PC DOS 7 based on rumors of the latter being better, faster, more stable with better memory management etc. and generally a good thing to do as it was maintained by the Big Blue. While looking for it, I found out there was actually a later Revision 1 to PC DOS 7 that added Y2K compatibility, marketed as "PC DOS 2000".  I grabbed the six PC DOS 2000 3.5" 1.44 MB floppy disk images and installed everything, including IBM Antivirus and Central Point Backup.

Using PC DOS 7's "E" editor, I edited CONFIG.SYS to increase the amount of memory available for DOS environment variables, enable HIMEM.SYS and EMM386.EXE to make as much of conventional memory free as possible by moving drivers and boot-time programs to upper and extended XMS memory.

CONFIG.SYS:

  SHELL=C:\DOS\COMMAND.COM /E:1024 /P
  DEVICE=C:\DOS\HIMEM.SYS
  DOS=HIGH,UMB
  DEVICEHIGH=C:\DOS\EMM386.EXE NOEMS

CD ROM SUPPORT


Following the typical process of adding CD ROM support to PC DOS, I picked up IBMIDECD.SYS and MSCDEX.EXE, and transferred them over to C:\CDROM\ directory on the vbox VM via a floppy disk created using Magic ISO Maker. I then added the following usual CD ROM related lines to CONFIG.SYS and AUTOEXEC,BAT:

CONFIG.SYS:
    DEVICEHIGH=C:\CDROM\IBMIDECD.SYS /D:IBMCD001

AUTOEXEC.BAT:
    LH C:\CDROM\MSCDEX /D:IBMCD001 /M:10

After reboot, the CD ROM drive appeared as drive D:.

SOUNDBLASTER SB 16 SUPPORT

Supratim Sanyal's Blog: Creative Labs SoundBlaster SB 16 DOS Driver Installation
Creative Labs SoundBlaster SB 16 DOS Driver Installation


Creative Labs still provide a download link to the "sbbasic.exe" self-extracting driver installer for SoundBlaster 16 audio cards for DOS. I put it on a floppy image using Magic ISO Maker, connected that floppy image to the DOS VM to copy sbbasic.exe to a temporary directory and executed it from the DOS prompt. This extracted a INSTALL.EXE along with a bunch of *.PVL and sundry files. I then executed the INSTALL.EXE program to install the SB16 driver and utilities on DOS. The installer also took care of updating CONFIG.SYS and AUTOEXEC.BAT. I later updated CONFIG.SYS to change "DEVICE=" to "DEVICEHIGH=" in the line loading the SB 16 driver.

CONFIG.SYS:
    DEVICEHIGH=C:\SB16\DRV\CSP.SYS /UNIT=0 /BLASTER=A:220

AUTOEXEC.BAT:
    SET SOUND=C:\SB16
    SET BLASTER=A220 I5 D1 H5 P330 T6
    SET MIDI=SYNTH:1 MAP:E
    C:\SB16\DIAGNOSE /S
    C:\SB16\MIXERSET /P /Q


AMD AM79C973 PCnet-FAST III Network Adapter Packet Driver for DOS


Supratim Sanyal's Blog: AMD AM79C973 PCnet-FAST III Network Adapter Packet Driver PCNTPK for DOS initialization at boot
AMD AM79C973 PCnet-FAST III Network Adapter Packet Driver for DOS initialization at boot


AMD's "PCnet Software Version 3.2 October 1996" NIC driver floppy disk includes the DOS packet driver for the PCnet-Fast III (AM79C973) network adapter.

I created a C:\PCNTDRV directory and copied everything on the diskette into it (using XCOPY with /E switch to preserve the directory structure). I then added the following to AUTOEXEC.BAT to load the DOS packet driver at boot time:

LH C:\PCNTDRV\PKTDRVR\PCNTPK INT=0X60

On rebooting, the packet driver located the PCnet-Fast III NIC correctly, and reported the MAC address which matched up with that configured in the VirtualBox settings for the VM. There is also a nifty set of tools in the C:\PCNTDRV\PKTDRVR directory that can be used to check and monitor network traffic, for example C:\PCNTDRV\PKTDRVR\PKTSTAT.


mTCP Suite

Supratim Sanyal's Blog: mTCP suite TCP/IP stack and applications for DOS: ping and pkttool scan
mTCP suite TCP/IP stack and applications for DOS: ping and pkttool scan


Now that the packet driver for the network adapter was working, it was time to try some basic TCP/IP utilities. Michael B. Brutman's amazing mTCP Suite comes with all standard TCP/IP client applications as well as a web server and FTP server. The current version of the entire suite is around 964 KB in size. I created a floppy image using Magic ISO Maker containing everything extracted from the downloaded mTCP zip file and copied over the mTCP Suite into the DOS appliance under the directory C:\MTCP.

Following the documentation, I gave it a static IP address (you can use DHCP if you wish; read the PDF manual) by configuring this into a C:\MTCP\MYCONFIG.TXT file:

PACKETINT 0X60
IPADDR 10.100.0.20
NETMASK 255.255.255.0
GATEWAY 10.100.0.1
NAMESERVER 10.100.0.1

Then I set the MTCPCFG environment variable in AUTOEXEC.BAT to point to the configuration file:

SET MTCPCFG=C:\MTCP\MYCONFIG.TXT

and rebooted. That was all that was needed to get mTCP's TCP/IP stack and tools to work.

mTCP includes an SNTP client, great news for me being a NTP time sync nut running multiple public time-servers contributing to the NTP Pool Project. I added the following at the bottom of AUTOEXEC.BAT to sync the system clock with pool.ntp.org at boot:

SET TZ=UTC
C:\MTCP\SNTP -SET POOL.NTP.ORG


ARACHNE WEB BROWSER FOR DOS

Supratim Sanyal's Blog: Arachne: MS DOS / PC DOS Graphical Web Browser
Arachne: DOS Web Browser


I downloaded the Arachne 1.97; GPL zipped self-extracting EXE and extracted it to a temporary folder on my Windows 10 host laptop. This resulted in a 1,272 KB A197GPL.EXE which Windows 10 refused to execute. Using Magic ISO Maker, I created a 1.44 MB floppy disk image containing A197GPL.EXE and transferred it to the DOS vbox into a temporary directory and executed it from DOS. Surprise! A197GPL.EXE is not just a self-extracting archive, it is an installer that installed Arachne to C:\ARACHNE (the default) while showing a nifty white-on-blue progress bar.

The installer left me inside the C:\ARACHNE directory with instructions to execute ARACHNE.BAT to configure it. Doing so presented a graphical setup procedure with a series of screens to define the screen resolution and internet connection. I selected the "Packet Wizard" since I already had a Packet Driver up and running for the network adapter. It auto-detected the Packet Driver successfully and then presented the usual DHCP vs. Static Address options for TCP/IP configuration. I configured a static IP address (similar to the mTCP setup).

The setup procedure then asked for email configuration (Arachne is also a email client) which I skipped over retaining the non-working defaults for now. It then presented a screen full of sundry options (long filename support, timezone, character set etc.) before writing out the configuration file to C:\ARACHNE\ARACHNE.CFG and presenting a Arachne Options screen. I indicated that I was happy with the displayed options, and was finally presented a web-browser screen, with a URL address bar.

Sadly, Arachne does not support SSL-secured HTTPS, and seems to go into a loop forwarding HTTPS port to HTTP back to HTTPS when I tried to browse to, for example, www.bankofamerica.com. It is not too tight a loop - I could click the "X" on the toolbox and interrupt it. Perhaps setting the configuration item "HTTPS2HTTP Yes" to "No" under the "[auto-added]" section will address this somehow, something to try later.

Supratim Sanyal's Blog: The Arachne DOS Browser Desktop
Arachne DOS Browser Desktop

I made some minor tweaks to C:\ARACHNE\ARACHNE.CFG (full ARACHNE.CFG file here) for the home and search pages in the [internet] section:

HomePage http://www.google.com/
SearchPage http://www.google.com/
SearchEngine http://www.google.com/search?q=

Arachne tries to be many things. It includes a phone dialer. It is a email client. Clicking on the little icon of the desk labelled "Desktop" launches a file manager.

DILLO WEB BROWSER FOR DOS

Supratim Sanyal's Blog: Dillo MS DOS / PC DOS Web Browser
Dillo: DOS Web Browser

I downloaded the latest 3.02b version of Dillo DOS Web Browser zip file from archive.org. The total file size of the extracted files was over 5 MB. I used Magic ISO Maker to create a ISO CD image containing the extracted files and connected that ISO image to the CD ROM drive of vbox DOS. I then copied the files into C:\DILLODOS directory. Then I configured the network details (IP Address, Netmask, DNS name server, gateway etc.) in C:\DILLODOS\BIN\WATTCP.CFG and launched Dillo by executing DILLO.BAT from the C:\DILLODOS directory.

That was all I needed to do to fire Dillo up. The browser (or perhaps the WATTCP stack it uses) figured out the Packet Driver and launched straightaway without any further questions about how to connect.

Dillo is faster than Arachne. It also handles SSL-equipped secure web sites using HTTPS protocol.

In many ways, Dillo is far closer to a modern browser than Arachne. Given a choice, I would probably use Dillo as my primary web browser on a PC running MS DOS or PC DOS.

CONFIG.SYS and AUTOEXEC.BAT

Here are the two PC DOS startup files in full for reference.

CONFIG.SYS
SHELL=C:\DOS\COMMAND.COM /E:1024 /P
FILES=40
BUFFERS=10
DEVICE=C:\DOS\HIMEM.SYS
DOS=HIGH,UMB
DEVICEHIGH=C:\DOS\EMM386.EXE NOEMS
DEVICEHIGH=C:\SB16\DRV\CSP.SYS /UNIT=0 /BLASTER=A:220
DEVICEHIGH=C:\DOS\SETVER.EXE
DEVICEHIGH=C:\DOS\POWER.EXE ADV:MAX
DEVICEHIGH=C:\CDROM\IBMIDECD.SYS /D:IBMCD001

AUTOEXEC.BAT
@ECHO OFF
SET SOUND=C:\SB16
SET BLASTER=A220 I5 D1 H5 P330 T6
SET MIDI=SYNTH:1 MAP:E
C:\SB16\DIAGNOSE /S
C:\SB16\MIXERSET /P /Q
SET PATH=C:\DOS;C:\MTCP;C:\BIN;%PATH%
SET TEMP=C:\TEMP
SET TMP=C:\TEMP
LH C:\DOS\MOUSE.COM
LH C:\DOS\DOSKEY.COM
LH C:\CDROM\MSCDEX /D:IBMCD001 /M:10
LH C:\PCNTDRV\PKTDRVR\PCNTPK INT=0X60
SET MTCPCFG=C:\MTCP\MYCONFIG.TXT
SET TZ=UTC
C:\MTCP\SNTP -SET POOL.NTP.ORG
SET IBMAV=C:\DOS
CALL C:\DOS\IBMAVDR.BAT C:\DOS\
ECHO ---
ECHO TO CHANGE IP ADDRESS, USE THE "E" EDITOR TO EDIT:
ECHO     - C:\MTCP\MYCONFIG.TXT
ECHO     - C:\ARACHNE\ARACHNE.CFG
ECHO     - C:\DILLODOS\BIN\WATTCP.CFG
ECHO TO RUN ARACHNE WEB BROWSER:
ECHO     - CD C:\ARACHNE
ECHO     - ARACHNE.BAT
ECHO TO RUN DILLO WEB BROWSER:
ECHO    - CD C:\DILLODOS
ECHO    - DILLO.BAT
ECHO ---

Downloads

I have archived all the Floppy Disk and CD ISO images mentioned in this post as well as a complete virtualbox appliance at my google drive.



Friday, November 17, 2017

Hello Again, Neko the Desktop Mouse-Chasing Cat!


Supratim Sanyal's Blog: Neko Desktop Mouse-Chasing Cat
I too first met Neko as a young teenager playing with Windows 3.1. Neko would always come running to the mouse pointer and park himself above it. He would scratch and clean himself a little bit, and then, if the mouse pointer was not moving, yawn and take a nap.

Over the next few years, I kept bumping into Neko across subsequent Windows flavors - Windows 95, Windows 98, Windows ME and Windows XP, and IBM OS/2 Warp. We had eventually parted ways somewhere around the tail-end of the last millennium. Neko had remained with me as a sweet memory.

That is, until I discovered this awesome post by neozeed. The author of the post has done all the hard work in finding Neko, including making Neko source-code available to the public and bringing him back on 64-bit Windows 10.

I downloaded the zip archive containing the source code and compiled it using Visual C++ 6.0 on a Windows XP 32-bit appliance. There were no compilation errors for the Neko executable and just two ignorable compilation warnings for the Neko configuration utility "NekoCFG".



Say hello again Neko! I missed you.

Here is my Neko build directory download.


Monday, November 13, 2017

beef dead beef dead beef dead beef dead (Cookies/index.dat)

So I installed busybox on a legacy Windows XP Pro system, and while playing around with it, took a hexdump of Cookies/index.dat, and got the following line at the end of the hex dump.

beef dead beef dead beef dead beef dead

I do not know why or what it means.

~ $ uname -a

Windows_NT wexpee 5.1 2600 i686 MS/Windows
~ $ hexdump Cookies/index.dat
0000000 6c43 6569 746e 5520 6c72 6143 6863 2065
0000010 4d4d 2046 6556 2072 2e35 0032 8000 0000
0000020 4000 0000 0080 0000 0020 0000 0000 0000
0000030 0000 0080 0000 0000 0000 0000 0000 0000
0000040 0000 0000 0000 0000 0000 0000 0000 0000
*
0000250 ffff ffff 0000 0000 0000 0000 0000 0000
0000260 0000 0000 0000 0000 0000 0000 0000 0000
*
0004000 4148 4853 0020 0000 0000 0000 0000 0000
0004010 0003 0000 0003 0000 0003 0000 0003 0000
*
0004240 0001 0000 5100 0000 0003 0000 0003 0000
0004250 0003 0000 0003 0000 0003 0000 0003 0000
*
0004390 0001 0000 5200 0000 0003 0000 0003 0000
00043a0 0003 0000 0003 0000 0003 0000 0003 0000
*
0004630 0001 0000 5000 0000 0003 0000 0003 0000
0004640 0003 0000 0003 0000 0003 0000 0003 0000
*
0004660 0003 0000 0003 0000 0001 0000 5000 0000
0004670 0003 0000 0003 0000 0003 0000 0003 0000
*
0004ac0 0003 0000 0003 0000 0001 0000 5000 0000
0004ad0 0003 0000 0003 0000 0003 0000 0003 0000
*
0004c80 0003 0000 0003 0000 0001 0000 5100 0000
0004c90 0003 0000 0003 0000 0003 0000 0003 0000
*
0004d30 0001 0000 5000 0000 0003 0000 0003 0000
0004d40 0003 0000 0003 0000 0003 0000 0003 0000
*
0004dd0 0003 0000 0003 0000 0001 0000 5000 0000
0004de0 0003 0000 0003 0000 0003 0000 0003 0000
*
0004e10 beef dead beef dead beef dead beef dead
*
0005000 0000 0000 0000 0000 0000 0000 0000 0000
*
0008000

Saturday, October 28, 2017

The Best Windows NTFS File System Defragmentation Tool for Platter Drives

Supratim Sanyal's Blog - Power Defrag - Top Windows Defragment Tool
I have reached the end of the internet and found the ultimate defragmenter for NTFS file systems on Windows.

Well - sort of. I still use platter drives while I still watch SSD with keen interest, I do not have full faith on SSD drives yet. In the last couple of months, I have seen SSD drives swapped out for good old high-speed platter disk drives (specifically, the fabulous 15K / 15000 RPM 6 GBPS Hard Drives) since the SSDs wouldn't last for more than a couple of weeks on systems needing humongous numbers of read-write cycles. However, for the general user, I do think SSD has come along and we are at a stage where their "functional life outlasts their useful life".

One of the joys of MS-DOS and Windows computer hard disk drives has always been to run defragment tools and watch the little boxes line up, imagining super-fast DISK I/O as soon as the hours-long processes complete. All of us have spent significant portions of our lives defragmenting hard disks - Norton Utilities Speed Disk, PC Tools, the defragmenters included with DOS and Windows from Microsoft, the continuing search for the best ... we have fond memories.

I believe that search has ended now, a quarter century from running a defragmenter the first time.

Curiously, it is not yet another defragmentation tool by itself; it just provides a nice GUI to run two Microsoft tools back to back - the venerable Windows Sysinternals Contig that used to be my #1 defragmenter, followed by the ubiquitous defragmenter included with Windows. The tool actually does not claim to be a defragmentation utility by itself. The name "Power Defragmenter GUI" is very clear in conveying this is a GUI front-end to powerful underlying tools.

I have tested it on two Windows XP Pro systems called WEXPEE and WXPEE2 that speak DECnet and are part of the global HECnet hobbyist DECnet network.

As a preparatory step, I highly recommend cleaning out junk from your disk drive before defragmenting it. Useless accumulated files on your drive should be removed and will also make for quicker defragmentation. I use three tools to clean junk from my drives:

  1. The Windows "Disk Cleanup" tool (part of Windows)
  2. System Ninja
  3. CCleaner

To install Power Defragmenter GUI,

Supratim Sanyal's Blog: Power Defragmenter GUI - .exe Executable
Power Defragmenter GUI - .exe Executable

  • Download Power Defragmenter GUI
  • The download is a zip file called Power-Defragmenter.zip that contains just one executable PowerDefragmenter.exe; extract the zip file into a new dedicated folder containing the executable PowerDefragmenter.exe. For example, extract the zip file into the folder c:\temp\power-defrag\ so that you extract the 481 KB executable into c:\temp\power-defrag\PowerDefragmenter.exe.

Supratim Sanyal's Blog: Microsoft Sysinternals Contig - exe Executable
Microsoft Sysinternals Contig - exe Executable
  • Download Widnows Sysinternals Contig
  • Again, the Contig download is a zip file called Contig.zip that contains 32 and 64-bit versions of contig.exe and a EULA. The 32-bit contig.exe executable is just 248 KB! Extract contig.zip into another new dedicated folder. For example, extract Contig.zip into c:\temp\contig\

Supratim Sanyal's Blog: Copy files in Contig folder to Power Defragmenter GUI folder
Copy files in Contig folder to Power Defragmenter GUI folder

  • Now copy over the Contig files from the directory you unzipped Contig into to the directory you unzipped Power Defragmenter GUI into. In the examples above, this means copy the files from c:\temp\contig\ to c:\temp\power-defrag\.
Supratim Sanyal's Blog: Run PowerDefragmenter.exe Executable to launch Power Defragmenter GUI
Run PowerDefragmenter.exe

That is it as far installation of Power Defragmenter GUI  is concerned. You can now launch PowerDefragmenter.exe by double-clicking it from the folder you extracted Power Defragmenter GUI into that now also has the Contig.exe executable.

Power Defragmenter GUI will start up showing a progress-bar indicating it is launching Power Defragmenter GUI installer and then present the main screen. I guess the "installer" notice is shown because Power Defragmenter declares itself as an installer to grab administrative rights; it does not really "install" anything and runs totally from the folder.

Supratim Sanyal's Blog: Power Defragmenter GUI initial screen
Power Defragmenter GUI initial screen

If you see carefully, you will notice the little note at the bottom above the buttons saying that Power Defragmenter GUI has located the version of Contig.Exe you copied over to it's folder.

Clicking "Next" will bring you to the following screen:

Supratim Sanyal's Blog: Power Defragmenter GUI - Defragmentation Options
Power Defragmenter GUI - Defragmentation Options


I always choose the last option, "TriplePass(TM) Disk Defragmentation" to defragment the heck out of my drives. This is also where the true power of the tool comes through. So, go ahead, choose "TriplePass(TM) Disk Defragmentation" and click Next.

Supratim Sanyal's Blog: Power Defragmenter GUI: Choose Drive to Defragment
Power Defragmenter GUI: Choose Drive to Defragment

Choose the drive to defragment (the system drive should already be selected; you can use the drop-down list to defragment other drives if you have them) and click on Defragment to start the defragmentation process.

Power Defragmenter GUI will first launch Contig for deep-defragmentation of files. Contig may present a EULA to accepts the first time it is launched, simply accept the EULA once and your computer remembers it. You can use Ctrl-S and Ctrl-Q to pause and resule the fast-scrolling output if you want to look at what is going on.

Supratim Sanyal's Blog: Power Defragmenter GUI invokes Windows Sysinternals Contig for three passes
Power Defragmenter GUI invokes Windows Sysinternals Contig for three passes
Update: In prior versions, Power Defragmenter GUI then invoked the Windows Defragmenter tool included with Windows to wrap of the ferocious attack on file system fragmentation. This no longer seems to be the case, apparently from the time Power Defragmenter GUI was updated to support Windows Vista and later. Here is a screenshot from the older versions showing Power Defragmenter GUI invoking Windows Defragmenter in command mode; once again, this will probably not happen any more.

Supratim Sanyal's Blog: Power Defragmenter GUI invokes Windows Defragment Tool
Power Defragmenter GUI invokes Windows Defragment Tool

You will be informed when Power Defragmenter GUI is done:

Supratim Sanyal's Blog: Power Defragmenter GUI - TriplePass(TM) completed
Power Defragmenter GUI - TriplePass(TM) completed

If you are running Windows in a virtual machine, now is a good time to zero out the free space on the virtual drive using sysinternals sdelete, shut down the Windows VM, compact the virtual disk using the hypervisor-provided tool and take a backup of the VM. This results in the smallest backup archive size for the VM.






Recommended Products from Amazon