
Readme for DP.COM - The DaynaPORT SCSI/Link packet driver for DOS
(ASM rewrite)


Michael Brutman (mbbrutman@gmail.com)
2026-07-06


Description

This is a basic packet driver that enables you to use the DaynaPORT
SCSI/Link Ethernet device under DOS.  These devices were usually used
on early Macintosh computers which had SCSI controllers but not much
else for expandability.  Today these devices are somewhat hard to find
but they are emulated by devices like BlueSCSI and ZuluSCSI.


Requirements

 * A SCSI card with an ASPI driver.
 * 4 to 6.5KB of RAM for this packet driver.
 * A DaynaPort SCSI/Link device or an emulated equivalent.
 * Minimum firmware versions for emulated DaynaPORT SCSI/Link devices:
   * BlueSCSI Firmware v2026.04.27
   * ZuluSCSI version 2026.06.09-devel Jun 10 2026 21:36:42


Running it

If you run DP.COM by itself you will get help text.  To load the packet
driver specify a software interrupt and the SCSI device ID of your
DaynaPORT device.  The driver will look for an ASPI manager, query the
device, and then load.  Example:

  dp 0x60 3

will load the packet driver using software interrupt 0x60 and using
a DaynaPORT device at SCSI ID 3 on your SCSI bus.

By default the packet driver hooks the timer interrupt and polls for
one packet during each timer tick.  This is adequate for casual use.


Command line options:

  -i: Poll for reads during the DOS Idle interrupt

    Given the nature of SCSI the DaynaPORT has to be polled for new
    incoming data.  The standard polling rate on a PC in DOS is 18 times
    a second (once every 55ms) which is usable for casual purposes
    but slow for file tranfers.

    The DOS Idle interrupt is a software interrupt handler that DOS
    calls when a DOS function is blocked waiting for keyboard interrupt.
    It is a signal that the machine is idle.  TSRs can hook that software
    interrupt to make use of the idle time.

    mTCP has always called the DOS Idle handler to be polite to the machine.
    If you specify this option the packet driver will hook the DOS Idle
    handler in addition to the timer interrupt, giving it two mechanisms for
    polling the Ethernet adapter.  This greatly improves file transfer
    speed as you are no longer waiting 55ms for each incoming packet.
    It will drive up CPU utilization in virtual machines, as now the machine
    is no longer idle as much as it used to be.

    (WATTCP based programs or other networking programs can take advantage
    of this too, with code changes.)

  -m: Enable DaynaPORT read batch mode

    By default the packet driver will read one packet from the device
    per polling interval.  This option instructs the packet driver to try
    to read multiple packets from the device per polling interval.
    Enabling this should improve performance slightly.

  -p: Enable SCSI posting

    This option enables SCSI posting, which separates the issuing of
    the SCSI READ6 command that polls the device from the processing of
    the data that is received.  This effectively moves the processing of
    the received data out from under the timer interrupt.  Use this if
    you have a slower machine and are noticing that the DOS time of day
    is drifting excessively when you are using networking programs.


Unloading the packet driver

To unload the packet driver, run it again specifying the software
interrupt that you used to load it and the "-u" option.  The SCSI
device ID is not needed.  Example:

  dp 0x60 -u


Limitations

General limitations:

 * This packet driver only supports DIX Ethernet 2 frames.  Support for
   802.2 SNAP headers can be be added if needed but those are unusual on
   modern networks.
 * This driver assumes you only have one SCSI card being managed by
   your ASPI driver.  If you have more that one SCSI card managed by the
   same ASPI manager, put the DaynaPORT device on the first card.

 Limitations for real DaynaPORT SCSI/Link devices:

 * The -m option to enable batch read mode does not work on real devices.
   This is probably due to a timing problem that needs to be debugged.
 * The combination of a real DaynaPORT device and mTCP NetDrive is causing
   lock-ups on my Pentium 133 with an Adaptec 2940.  This also needs to be
   debugged.


Building the driver

I used Open Watcom 1.9 to develop this packet driver.  WASM is supposed
to be compatible with MASM so it should compile with MASM too.  TASM
probably works with a small amount of effort.  Here are the steps to
build the driver:

  wasm dp.asm
  wlink system dos file dp.obj
  exe2bin dp.exe dp.com


Todo

 * Implement packet driver extended functions.


History

The very first DOS packet driver for these devices was written by
RetroTech Chris (https://www.retrotechchris.com/) in 2025.  That version was
written using Borland Turbo C for DOS.  I started with that code and improved
it, resulting in https://github.com/mbbrutman/daynaport-dos-packet-driver.
While it was functional, it was fragile, required far too much memory for what
it was doing, and it has some horrific coding hacks in it.

This code is a complete rewrite of that concept from scratch in pure x86
assembler.  It requires far less memory than the C version and it has none
of the horrific coding hacks in it.


AI usage

I write software for vintage computers for fun. As a result, I insist on
doing my own work and I have not used AI for any part of this project.


Credits

The following people have made this possible in some way:

 * Russ Nelson at Crynwr Software for giving us the packet driver spec and
   so many good packet drivers to learn from.
 * Rabbit Hole Computing, who started me down this particular rabbit hole.
 * RetroTech Chris, for showing it was feasible with his original C version
   and providing testing help with this version.
 * Tony Kuker, for loaning me a real DaynaPORT SCSI/Link to test with.



Questions or comments?  Please email me!

Mike
mbbrutman@gmail.com


