Path: utzoo!attcan!utgpu!news-server.csri.toronto.edu!mailrus!wuarchive!usc!sdd.hp.com!hplabs!hpfcso!hpfinote!rrd From: rrd@hpfinote.HP.COM (Ray Depew x2419) Newsgroups: comp.sys.atari.st Subject: Re: Desk Jet 500 Message-ID: <15330019@hpfinote.HP.COM> Date: 24 Sep 90 20:25:42 GMT References: <3993@sactoh0.SAC.CA.US> Organization: Hewlett Packard CICD Lines: 139 Apologies for questioning the person who said that he'd heard of problems getting the DJ+ and ST to talk to each other. I've since heard from someone who documented the problem very well and created 3 workarounds for the problem. 1) Software workaround: A desk ACC which resets the printer i/f before printing. MWC source code follows. 2) Hardware workaround: You solder a resistor into one of the lines. This is documented at several Atari archive sites. 3) Lazy man's workaround: Always turn on the printer BEFORE you turn on the ST. OR, never turn the printer off. (Hey, it's quiet and doesn't use much power ...) Actually, we never saw the problem at HP because we always kept our ST's DJ+ turned on. Thanks to those who pointed out the problem to me, and apologies again to anyone who was offended by my incredulity. Now, whether the DJ500 has the same problem: I don't know. I sent a message to the support guys about it, but judging from the Atari's reputation, and the size of its installed base, I don't expect much in the way of an answer. (Flames to /dev/null please, I'm not in Marketing or Finance, where such decisions are made! :-( ) For anyone who wants it, here's the source code. Authors' names are kept intact. Please give credit where it's due. ---------------------------------------------------------------------------- My husband and I wrote this small Atari ST desk accessory to poll the DJ+ and reset the printer to ``non-busy'' during use. It's written in Mark Williams C and compiled as a desk accessory, not a program (slightly different start-up module). README: When you turn on your DeskJet Plus printer *after* your ST has been booted, the printer and the ST won't talk to each other and you can't print anything. The only way, until now, of solving this problem was to reboot the ST (leaving the printer on). When the printer has been turned on *before* the ST is booted, they will talk to each other just fine. As long as you don't turn off (and on again) your printer, you'll be just fine. I, for one, don't like to leave my printer on all the time. I like to be able to ``compute away'' and turn on the printer only when I actually need to print something. So far, with a DeskJet Plus, this has been impossible. My husband (Paul Close) and I wrote the following little desk accessory to ``reset'' the printer port and get the DeskJet and the ST talking again. (That's not exactly what it does, but it's close enough.) Much thanks to Moshe Braner for his desk accessory template. We've included the source code so that you can modify and ``pretty-up'' the DA to your liking. Currently it just blinks the screen when a reset is performed--we didn't add any desktop messages saying ``printer reset'' or anything like that. /* Reset your DeskJet Plus printer from the desktop. Desk accessory written by Diane & Paul Close. */ #include #include #include #define TRUE 1 #define FALSE 0 extern int gl_apid; int menu_id, event, ret; int xdesk, ydesk, hdesk, wdesk; int msgbuff[8]; int BUSY; int STATUS7; int STATUS14; char menusave[1520]; main() { int i; char *cp; /* initialize printer reset options */ int super(); Cconws ("\033f"); /* disable vt52 cursor */ appl_init(); menu_id = menu_register (gl_apid," DJ Reset"); wind_get (0, WF_WORKXYWH, &xdesk, &ydesk, &wdesk, &hdesk); daloop: event = evnt_multi (MU_MESAG, 0,0,0,0,0,0,0,0,0,0,0,0,0, msgbuff, 0,0, &ret,&ret,&ret,&ret,&ret,&ret); /* could have simply used evnt_mesag instead: evnt_mesag (msgbuf); */ if ((event & MU_MESAG) == 0 || msgbuff[0] != AC_OPEN || msgbuff[4] != menu_id ) goto daloop; graf_mouse(M_OFF,0x0L); cp = (char *) Physbase(); for (i=0; i<1520; i++) menusave[i] = *cp++; wind_update(TRUE); form_dial (FMD_START, xdesk, ydesk, wdesk, hdesk, xdesk, ydesk, wdesk, hdesk); /* enable vt52 cursor if needed */ /* reset dj here (call subroutine) */ Supexec(super); /* disable vt52 cursor if on */ form_dial (FMD_FINISH, xdesk, ydesk, wdesk, hdesk, xdesk, ydesk, wdesk, hdesk); wind_update (FALSE); cp = (char *) Physbase(); for (i=0; i<1520; i++) *cp++ = menusave[i]; graf_mouse(M_ON,0x0L); goto daloop; } super() { register unsigned char *busy; busy=(char *)0xffffa01L; BUSY=*busy; busy=(char *)0xffff8800L; *busy=7; STATUS7=*busy; *busy=14; STATUS14=*busy; STATUS14 |= 0x20; *busy=14; *(busy+2) = STATUS14; }