Dear Mr. Kilgallin,

your request is less obvious than may have initially seemd to you.

DOS knows an OS-level "device" called LPT1. And, most software for 
DOS that needs to print, can use this software-level LPT1 device 
(using a DOS service to print).

DOS and BIOS work together to forward data from LPT1 to the physical 
parallel port (i8255 compatible hardware, if my memory serves).
To this day, most PC's still contain SuperIO chips (on LPC bus, 
backward compatible with ISA) that still have the ability to 
implement the LPT, but few modern motherboards actually have a 
physical LPT... (and therefore the SuperIO chips aren't even 
configured to decode the addresses anymore, 0x378 and whatnot. No 
use.)
But, yours is a different problem: your printer does not even have 
LPT "input". You really do need to somehow spoonfeed the data into 
the USB port. 
Technically, a USB printer shows up on the USB bus as a "USB LPT 
device", or "USBLP". The USB standard has a "device class" for this, 
and modern operating systems have a generic class-based driver for 
this... which is not the case of MS-DOS.

Effectively, you need a stack of USB drivers for DOS, that will make 
use of a USB host controller (UHCI / EHCI / XHCI), enumerate the bus, 
and upon encountering a USBLP device, load a generic class-based 
driver for that device. Presenting a legacy LPT1 software device in 
MS-DOS, and feeding the data to the USB LPT physical port.

To the best of my knowledge, there's a single driver package of this 
kind that I know about, working on bare metal in pure old DOS - the 
one by Bret Johnson:
http://bretjohnson.us/

More prose about USB printing in DOS:
https://www.wpuniverse.com/vb/showthread.php?38551-Print-to-USB-printe
r-in-pure-MS-DOS-system/page2&s=8f49961ada033bce8d27f50b29967cd1

Bret Johnson's driver only supports UHCI controllers, which were only 
included in the PC chipsets up to and including Intel 4x series 
(coming with the 45nm Core2 generation of CPU's). After that, it's 
pure USB EHCI 2.0 only. Until about Skylake, which is USB 3.0 XHCI 
only...

Apparently, you are lucky, because the OptiPlex GX270 appears to be a 
Pentium 4 generation PC. Already supporting USB 2.0 and having an 
EHCI, but in addition to that, all the USB ports are also available 
via an UHCI (USB 1.1 controller). So I suggest that you give Brett's 
driver a try.

An alternative approach might be, to attach the USB printer to a 
Windows PC and share the printer on the network, and install a 
Microsoft Network client for MS-DOS on your DOS-only PC, and map the 
LPT1 over the network to your Windows PC. This LPT mapping is done 
using the "net use" command. But, you need to be able to configure 
the networking stuff, preferably over TCP/IP nowadays. Note that 
making the MS Network client from the DOS era talk to a modern 
Windows machine in the server role can be a challenge in itself. If 
you're lucky, you can learn about registry entries that dumb down the 
security mechanisms in Windows enough to accept the shitty ancient 
security model used by the DOS client... I don't promise that this 
still has a chance of success in Windows 10. I believe it does have a 
chance against Samba in Linux, which I'm still using to serv8e 
PXE-booted diskless clients (for disk mapping, not for printing, but 
the auth is the same I guess).

Your printer apparently also supports network printing: via IPP (too 
modern), JetDirect style raw TCP port 9100, and UNIX standard LPR.
Unfortunately, it does not contain a Microsoft Network stack 
(samba/CIFS) so you cannot map the printer directly by "net use ..."

I've found hints that Xerox or Sun used to have an implementation of 
the command-line LPR client for MS-DOS:
http://download.support.xerox.com/pub/docs/DC240_DC250/userdocs/any-os
/en/Using_lpr_Utilities_for_DOS_and_Unix.pdf
...apparently dependent on some "very own" TCP/IP stack for DOS, and 
not hooking LPT1 = you could print from your software into a file and 
then copy that file to the network printer using the LPR utility.

I haven't found any resident driver for pure MS-DOS to capture LPT1 
and print to LPR or even just JetDirect (raw TCP port).

How about using a Raspberry PI to build a Samba printserver for your 
USB/LAN-attached printer? :-D

Or, if you resort to running your DOS software in Windows or even 
some kind of DOS PC emulator on any modern OS, your goal to forward 
jobs from LPT1 to any miscellaneous printer would be much easier to 
achieve. If all else fails, there is commercial software for Windows 
to help you with that.


So... suppose that you've built a path for your data from the LPT1 
abstraction to your actual USBLP printer.
The next question is: print job format. The printer language. Looking 
into the docs of your printer, it's new enough to support "laserjet 
emulation" (read: HP PCL at some older version) and apparently 
PostScript as well :-) This sounds good. Don't expect the printer to 
print a plain ASCII file for you - but if you can produce or copy a 
PCL or PostScript formatted print job to LPT1, you're good to go.

So if your software can produce HP PCL (methinks at the level of 
LaserJet III or some such) or any kind of ancient PostScript, you 
should be able to print some stuff to your printer. I would be 
surprised if your DOS software could produce color PCL or color 
PostScript, because PCL printers in the early nineties did not 
support color, and PS was the DTP snob end / UNIX toy at that time... 
but you should get some black and white output from WordPerfect or 
some such. Pretty much any software with print output, made in early 
nineties, should have an option to print to an HP LaserJet.

I know that my response is not step by step straightforward. 
Apologies. There are too many variables, I have never trodden the 
whole path, namely USB printing. See for yourself if you can make it 
work. You have my respect for playing with this classic stuff :-)

Frank


On 20 Apr 2021 at 22:36, Bryan Kilgallin wrote:

> I have just connected my Brother HL-3150CDN laser printer to my Dell
> OptiPlex GX270. I made a test text document, and I tried just to print
> it. That didn't work, but I noticed the following advice:
>  "Device to direct Print [PRN=0]".
> What do I need to do?
> -- 
> members.iinet.net.au/~kilgallin/
> 
> 
> _______________________________________________
> Freedos-user mailing list
> Freedos-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/freedos-user




_______________________________________________
Freedos-user mailing list
Freedos-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-user

Reply via email to