Found an old ad for 86-DOS

Seattle 86 Ad

GO 16-BIT NOW – WE HAVE MADE IT EASY
8086
8 Mhz. 2-card CPU Set
WITH 86-DOS®
ASSEMBLED,TESTED,GUARANTEED
With our 2-card 8086 CPU set you can upgrade your Z80 8-
bit S-100 system to run three times as fast by swapping the
CPUs. lf you use our 16-bit memory, it will run five times as
fast. Up to 64K of your static 8-bit memory may be used in the
8086’s 1-megabyte addressing range. A switch allows either 4
or 8 Mhz. operation. Memory access requirements at 4 Mhz.
exceed 500 nsec.
The EPROM monitor allows you to display, alter, and
search memory, do inputs and outputs, and boot your disk.
Debugging aids include register display and change, single
stepping, and execute with breakpoints.
The set includes a serial port with programmable baud rate,
four independent programmable 16-bit timers (two may be
combined for a time-of-day clock), a parallel in and parallel out
port, and an interrupt controller with 15 inputs. External power
may be applied to the timers to maintain the clock during
system power-off time. Total power: 2 amps at + 8V, less than
100 mao at + 16V and at -16V.
86-DOS@>, our $195 8086 single user disk operating
system, is provided without additional charge. It allows
functions such as console 1/0 of characters and strings, and
random or sequencial reading and writing to named disk files .
While it has a different format from CPIM, it performs similar
calls plus some extensions (CP/M is a registered trademark of
Digital Research Corporation). Its construction allows relatively
easy configuration of 1/0 to different hardware. Directly
supported are the Tarbell and Cromemco disk controllers.
The 86-D08@> package includes an 8086 resident assembler,
a Z80 to 8086 source code translator, a utility to read
files written in CPIM and convert them to the 86-DOS format, a
line editor, and disk maintenance utilities. Of significance to
Z80 users is the ability of the translator to accept Z80 source
code written for CPIM, translate this to 8086 source code,
assemble the source code, and then run the program on the
8086 processor under 86-D08. This allows the conversion of
any Z80 program, for which source code is available, to run on
the much higher performance 8086.
BASIC-86 by Microsoft is available for the 8086 at $350.
Several firms are working on application programs. Call for
current software status.
All software licensed for use on a single computer only.
Non-disclosure agreements required. Shipping from stock to
one week. Bank cards, personal checks, CODs okay. There is
a 10-day return privilege. All boards are guaranteed one year
– both parts and labor. Shipped prepaid by air in US and
Canada. Foreign purchases must be prepaid in US funds.
Also add $10 per board for overseas air shipment.
8/16 16-BIT MEMORY
This board was designed for the 1980s. It is configured as
16K by 8 bits when accessed by an 8-bit processor and
configured 8K by 16 bits when used with a 16-bit processor.
The configuration switching is automatic and is done by the
card sampling the “sixteen request” signal sent out by all S-
100 IEEE 16-bit CPU boards. The card has all the high noise
immunity features of our well known PLUS RAM cards as well
as “extended addressing”. Extended addressing is a replacement
for bank select. It makes use of a total of 24 address lines
to give a directly addressable range of over 16 megabytes.
(For older systems, a switch will cause the card to ignore the
top 8 address lines.) This card ensures that your memory
board purchase will not soon be obsolete. It is guaranteed to
run without wait states with our 8086 CPU set using an 8 Mhz.
clock. Shipped from stock. Prices: 1-4, $280; 5-9, $260; 10-up,
$240.

~Seattle (amputer Products, Inc. ~ 1114 Industry Drive, Seattle, WA. 98188
(206) 575-1830

 

The ad is from December of 1980, and of course the PC was released in August of 1981… Its interesting to see even back then there was some clear partnering with Microsoft!

Working with the Microsoft Programmer’s Library

OS/2 Programmers Ref

Well recently I did manage to get some GREAT books on OS/2, going back to the Microsoft days.. And they contain a lot of information, which was actually quite substantial.

Although there is the impression after the fact that Microsoft really wasn’t that dedicated to OS/2 the wealth of information in these books seem to be otherwise..

Anyways there is four volumes in the set, 1-3 going over version 1.1, and volume 4 with the 1.2 release of OS/2.

As luck would have it, someone gave me a lead on an ISO that contained not only these, but all of the programming documentation of the time on a CD.  No doubt this was the predecessor to the excellent MSDN.

There of course, is just one catch.  It uses the .hlp files, but not from Windows 3.00 its something much earlier and the only way to view the files is with an MS-DOS program.

Glorious MS-DOS interface

I even tried it on OS/2 hoping it was a family api program (like so many of the era were) but no luck.  I was then hoping maybe I could just ‘print’ the files to a virtual printer, and spool the whole job.  BUT YOU CANT PRINT.

So I then wondered if I could put together a TSR that would scrape the screen, append it to a file, and just keep hitting page down.   A few hours of cobbling together some example programs, and remembering to compile with the LARGE memory model (FAR pointers! remember those?)  I could then finally unleash the TSR through the program and extract some of the texts.

For those wondering how to do this kind of thing from MS-DOS here is the source.  While I wanted to use Scott’s program, there was the one drawback that almost everything grabs printscreen now so doing a REAL printscreen that hits interrupt 5 seems like it’d actually require a physical PC in MS-DOS.  And my current ‘retro’ PC has no ethernet so I wasn’t going to go that route.

So there is a lot of hacks with this, you can’t even uninstall it, just reboot …. but this hooks the clock, gives you about a minute to go where you want to go, then it saves a portion of the screen to a file, waits a few seconds and hits pagedown, and repeats….

// Written by Scott Hall of the U. of Missouri - Columbia, USA.
// This program will redirect your print screen button so that
// it goes to a file.  The file name is at the beginning of the
// start() function.  It can easily be modified to print screens
// that are larger than 80x25.

#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <dos.h>

#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif

char far *scr=(char far*)0xb0008000L;
#define VIDMEM 0Xb0008000L
#define INTR 0x1c

int busy=0;                                     // mutual exclusion (MUTEX)
void interrupt (*oldhandler)(__CPPARGS);
char far *old_dta;
char fname[9];

void interrupt int_5();
void tsr(unsigned size);                        // standard tsr bios call
void write_char(int x, int y, char ch, int attrib);
void write_string(int x, int y, char *str, int attrib);

void start(void);
void interrupt handler(__CPPARGS);

int main(int argc, char*argv[])
{
   if(argc==2)
   sprintf(fname,argv[1]);
      else
   sprintf(fname,"log.txt");

   printf ("installing\n");
   disable();
   oldhandler=getvect(INTR);
   setvect(INTR,handler);
   setvect(32,oldhandler);
   enable();
   printf("done\n");
   tsr(1000);
return 0;
}

void tsr(unsigned size)                 // standard tsr bios call
{                                       // you can also use keep()
union REGS r;

r.h.ah = 49;                            // function 0x31
r.h.al = 0;
r.x.dx = size;
int86(0x21,&r, &r);                     // last line executed
}                                       // never get to this line

unsigned char j=0;
unsigned int tcount;
unsigned int dcount=0;

//void interrupt int_5()                  // print screen button starts here
void interrupt handler(__CPPARGS)
{

if(dcount>480)
   {
   if(!busy&&tcount>5)
      {
      char far *p;
      union REGS r;
      struct SREGS s;

      p=scr;
      *p+=6;
      *p++=j;
      *p++=0x4f;

      j++;

      busy = !busy;                   // mutex around tsr
      start();

      r.h.ah=0x5;
      r.h.ch=0x51;    //pagedown?
      r.h.cl=0x0;
      int86x(0x16,&r, &r, &s);

      busy = !busy;
      tcount=0;
      }
   tcount++;
   }
else
   dcount++;
}

void write_char(int x, int y, char ch, int attrib)
{                                       // displays 1 character at (x,y)
char far *v;

v = (char far *) VIDMEM;
v += y*160 + x*2;
*v++ = ch;
*v = attrib;
}

void write_string(int x, int y, char *str, int attrib)
{                                       // writes string str at (x,y)
for( ; *str; str++,x++)
   write_char(x, y, *str, attrib);
}

int firsttime=0;        //need to skip 3 lines after the first time we
//page down.

void start(void)
{
int fd,x,y;
char cr=0x0D, lf=0x0A;

old_dta=getdta();
setdta((char far *)MK_FP(_psp,0x80));

//if((fd =_open("c:\\temp\\log.txt",O_WRONLY))<0) // open the file
//        if((fd =_creat("c:\\temp\\log.txt",_A_NORMAL))<0) // try to make new
//                write_string(1,1,"OOPS--write error1",0x8F);

if((fd =_open(fname,O_WRONLY))<0) // open the file
   if((fd =_creat(fname,_A_NORMAL))<0) // try to make new
   write_string(1,1,"OOPS--write error1",0x8F);

lseek (fd,0,SEEK_END);                          // jump to end of file

//for(y=0;y<25;y++)                               // grab lines 0 to 24
for(y=2+firsttime;y<24;y++)
   {
   //for(x=0;x<80;x++)                       // grab rows 0 through 79
   for(x=1;x<79;x++)                       //cut the bars from msl

   if(_write(fd,(char far *)(VIDMEM+160*y+2*x),1)==-1)
      write_string(1,2,"OOPS--write error2",0x8F);

   if(_write (fd,&cr,1)==-1)               // put a cr and lf at end
      write_string(1,3,"OOPS--write error3",0x8F); // of line

   if(_write (fd,&lf,1)==-1)
      write_string(1,4,"OOPS--write error4",0x8F);
   }

_close(fd);                                     // close the file

setdta(old_dta);
if(firsttime==0)
firsttime=1;
}

Hopefully this will help someone in the distant future, maybe it’ll just serve as a warning on how not to build stuff … lol

Oh and I used Borland C++ 3.1, but compiled this as C for the LARGE memory model.

DJGPP 1.03 saved thanks to shovelware + cd.textfiles.com

I can’t stress enough just how awesome cd.textfiles.com is for finding ancient stuff!

I’m not sure why I started on this quest but I was looking for some old finicky DOS extender, and started hunting for Go32, the first DOS extender used by DJGPP.  And for the heck of it, I wanted to find the first version, which I pretty much had assumed was lost to the mists of time.

However the CD-ROM shareware collection called MegaROM-1 actually had a ‘full’ copy of one of the first versions of DJGPP, 1.03.

Installation is pretty straightforward, however you have to use pkunzip for all the various old ‘methods’ of storing data in zip files, I found infozip leaves things out..

Also DJGPP 1.03 uses a LOT of environment space.. which is more so a problem for people running real MS-DOS on real machines.. (there are some!)…

Hello World!

It runs in DOSBox, but there is no doubt some stack corruption as trying to run things like dos edit result in:

Packed file is corrupt

But at least we can run more than one copy, or use a native editor.

GO-32 from this era is *NOT* DPMI compliant, nor is it VCPI compliant.  And its based on GCC 1.39, which was a popular level with things like 386 BSD, although it seems early Linux used GCC 1.40 ..  The tool chain by default outputs the GNU a.out format, but relies on modifying the linker that was separately included in G++.  Later versions of GO32 included VCPI support, and near it’s end of life version 1.10 added support for DPMI which greatly simplified things like hooking IRQ’s and doing DMA.

For those who want to play, without the pkzip fun, I’ve slapped it into a single 7zip file.  It’s not even a megabyte.  But it was 1991, when 4MB of ram seemed like an incredible amount of memory!

Flight simulator 4!

Flight Simulator 4

From a comment made by ampharos, there is all kinds of weird stuff on the old Microsoft FTP server, including all kinds of stuff in the stress test directory.. So wandering around I came across something I never noticed, Flight Simulator 4!

That’s right and for MS-DOS.  I recall running this on OS/2 2.0 was kind of a big deal, but its cooler in dosbox! … Anyways, if you want click here, and download away.  I think this version was intended to more of a demo, but it’s still cool to watch the jet plane going through the motions.

What is amazing to me is just how compact it is… It seems there was a lot ‘more’ with less back then, but maybe we’ve come to expect so much more?

Yet another update for QuakeWorld/Quake for MS-DOS

You can download the source/binaries here.

The big change is that you can not play larger maps, like the dreaded Warp Spasm (which of course relies on QUOTH).

Warp Spasam under OS/2

I’ve also built it for OS/2! You can download Quake, Quake World, and the source code. This all builds with EMX 0.9d and I’m using OS/2 2.0 (patched to x06100).

Also if it matters the newer your MS-DOS the better… 4.01 works, sure but its SLOW…

QuakeWorld for DOS updates..

Remember my old Quake port to MS-DOS that included that WatTcp package so that you could play on the internet under glorious MS-DOS?  Well it’s kind of taken a life onto its own, and thanks to the hard work of Frank Sapone, it picked up all kinds of updates including:

Whew isn’t that great?

I’ll have to check to see how much of this I can backport to OS/2

You can download it, and more here.  And in the meantime I’ve put up my server on 68.68.97.224 … Enjoy!

Quake & QuakeWorld for MS-DOS update

So after a year+ of inactivity I’ve spent some time with Quake (netquake) and QuakeWorld for MS-DOS.  I had modified it to support the WatTCP stack for MS-DOS, allowing you to play over the internet with any MS-DOS PC with a packet driver.

After a good bit of prodding and playing with DJGPP I’ve updated everything to include some new tweaks for a malloc ‘bug’ (Quake assumes the memory is clean, which under DJGPP it isn’t) some limit increases (zone to 1MB, and increases in max edicts, models & sounds), and forcing the sound to 22050Hz.  The source code is now here.  As much as it pained me, I built it with this DJGPP under MS-DOS (On Qemu) and I’m keeping it here, as gcc 3 & 4 are incapable of building a working WatTCP or Quake.

Another big fix for QuakeWorld is that it now can run in 640×480, 800×600, and even 1024×768 if your video card is VESA 2.0 compatible!!!

Basically you can just replace the default exe’s in a Quake1 install and go from there.  If you do not have quake at all, you can always look for the shareware version.  QuakeWorld will require the commercial version for what it is worth. I’ve found it runs best with 32MB of ram.  I don’t know if that is even an issue in this day & age.  Quake1 will run in 16, but I have a feeling QuakeWorld runs in VM (thanks to CWSDPMI) and it does say it is using 32MB … Because I clear the ‘zone’ before Quake runs there may be a 30 second to 1 minute pause.  This is to be expected, just hold tight.

QuakeWorld at 640x480

QuakeWorld at 800x600

QuakeWorld at 1024x768

You can download either Quake.exe or Qw.exe.

Thanks to [hci]maraakate, for the hints on what to update where, and of course the testing on a ‘real pc’!`

It was 30 years ago today…

IBM released the PC onto the world.

Wow.

For the occasion here is 86-DOS fished out from 86-dos.org  This is what was sold to Microsoft as the basis for MS-DOS.

You too can behold this ancient gem here.

Maybe I should do something about the various versions and hunt out something capable of running MS-DOS 1.25..  I’m sure Peter has something for the occasion!

Oh, and I have to add this bit from olduse.net

Out of today's mail:  Electronics, June 16, 1981:

Under the heading (pg. 33) "Xerox to market personal computer..."
with the announcement of the 820 which most of you may have seen
already, is "... with IBM to follow suit" Called Chess, it is an
8088-based system priced between $3-4K, and includes two DSDD 5-1/4
Tandon floppy drives, a detachable keyboard.  An OS "similar to
CP/M" from Microsoft (IBM Personal Computer DOS), from 64K to 256K
RAM, and a "600-by-400-line" B&W display and able to handle eight
colors with a resolution of 400x200 pixels or four colors at 
00x400.  Look for it to be announced next month and check out Sears,
Computerland, and maybe J.C. Penney.

--Frank

The first mention of the IBM PC on usenet…

Some follow up on Stacker


From my OS/2 experiments before I roll it out… 
  • It only supports FAT.
  • Maximum of 2GB ‘compressed’ drives
  • Swapping drive letters assumes 1 disk 1 volume
  • You create the compressed disks in DOS

So, since I’m thinking of BBS space, I can leave part of the disk uncompressed for zip’s then the compresses partition for databases & doors.

I guess the thing to keep in mind is that 1991-1994 2GB disks were not in the hands of your average user.. And the idea of using that much storage seemed crazy.  It’s a shame they did that deal with Microsoft and basically got pushed out of the market.  It’s a shame that the OS/2 product doesn’t actually run on OS/2, nor support HPFS.  The idea of bigger disks, and long file names would have been nice.
Oh well I guess that is how the older stuff dies out.