Apple II Technical Notes _____________________________________________________________________________ Developer Technical Support AppleTalk #4: Printing Through the Firmware Revised by: Jim Luther September 1990 Written by: Matt Deatherage & Jim Luther July 1989 This Technical Note discusses considerations of printing through the AppleTalk Remote Print Manager (RPM) interface from ProDOS 8 applications. Changes since March 1990: Revised code sample to simplify finding the transparent network printing slot with the ROM 03 Apple IIgs. Please note that the method of finding the transparent network printing slot shown in the March 1990 revision of this Note does work correctly, the new method is just simpler. In addition, revised the wording of the Note to clarify that transparent network printing is the RPM interface. _____________________________________________________________________________ The AppleShare Programmer's Guide to the Apple IIgs stated that the Remote Print Manager (RPM) interface allowed transparent network printing through Super Serial Card entry points in slot 7. This statement is pretty short- sighted. It's much like saying printing to an ImageWriter II is initiated when you do a PR#1 command--it's only true if what you want is where you think it is--and usually it isn't. Note: The AppleShare Programmer's Guide to the Apple IIgs has been superseded by the AppleShare Programmer's Guide to the Apple II Family. An Apple IIe Workstation Card, although recommended for slot 7, can work in almost any slot (just like an ImageWriter II with a Super Serial Card can be connected to nearly any slot, except maybe slot 3 when the 80-column firmware is active). An Apple IIgs with ROM versions 00 or 01 may only have the firmware used by the RPM interface in slot 7. An Apple IIgs with ROM version 03 may only have the firmware used by the RPM interface in either slot 1 or 2. Before printing through the RPM interface slot, take the same precautions you would take before printing to any slot--check to make sure you see the requested slot is a Pascal device before using Pascal entry points, and try to look for the signature bytes that indicate the features you want are present. In general, avoid hard-coding slot numbers for anything. ProDOS 8 applications which offer network printing through the RPM interface should give users the choice of printing to any of the seven slots as well as the Network Printer. When Network Printer is selected, the application can find the slot used by the RPM interface by using the 6502 code sample included in this Note. Allowing the selection of Network Printer is especially important for applications that keep a configuration file containing a user's default printer setup. If an application keeps only the slot number in the configuration file, users may need to change the printer selection often if they print from several different machines. Warning: Printing to a slot with no firmware generally results in a crash. The code sample uses two methods to determine the slot the RPM interface is using. The first method works with the Apple IIe Workstation card and the ROM 01 Apple IIgs. It looks at the AppleTalk completion routine address returned by the AppleTalk GetInfo call, and if that address is in the slot ROM space, then that slot is the slot used by the RPM interface. In other words, if the completion routine points to $0000CnXX, where n is between 1 and 7, then n is the slot to be used when printing through the RPM interface. If the completion routine address is not in the slot ROM space, then the application cannot determine what slot the RPM interface is using and must query the user. The second method works only with the ROM 03 Apple IIgs. It retrieves the slot the RPM interface is using from location $E101C2. This technique applies only to ProDOS 8 programs. Apple IIgs applications running under GS/OS should do text printing over the network through the Remote Print Manager (.RPM) driver, which can be identified by a deviceID of $001F as returned from the DInfo call. ; ; This routine will identify AppleTalk and the RPM interface slot ; (if possible). ; This routine is for ProDOS 8 applications only. ; keep FindRPMSlot longa off longi off FindRPMSlot start lda #$00 sta RPMSlot default to no RPM interface slot ; Check for AppleTalk (see AppleTalk Technical Note #1) jsr $BF00 ProDOS 8 MLI dc h'42' $42 command for network calls dc a'InfoParams' Parameter list address bcs NoATalk no AppleTalk; handle the error ; Get machine type & ROM version (see Apple II Miscellaneous Tech Note #7) sec jsr $FE1F What kind of machine are we on? bcs CheckCom Not a IIGS, check completion address cpy #$03 bcc CheckCom Earlier than ROM 03 IIGS, check ; completion address ROM03 anop ROM 03 or greater IIGS' use location ; $E101C2 to find the RPM interface slot lda $E101C2 Get the RPM interface slot sta RPMSlot beq AskForSlot bra HaveSlot CheckCom anop use completion address to find slot lda ComReturn+2 bank $00? ora ComReturn+3 high byte = 0? bne AskForSlot no, so slot can't be determined lda ComReturn+1 get the address page cmp #$C8 bcs AskForSlot greater or equal to $C8 is bad cmp #$C1 bcc AskForSlot less than $C1 is bad and #$0F $Cn = $0n sta RPMSlot HaveSlot anop AppleTalk is installed and RPM is ; using slot #RPMSlot AskForSlot anop AppleTalk is installed but RPM ; interface slot cannot be determined NoATalk anop AppleTalk is not installed rts so this sample returns RPMSlot entry dc h'00' Slot RPM interface is using InfoParams dc h'00' Synchronous only dc h'02' GetInfo call number ds 2 result code ComReturn ds 4 completion return address ds 8 space for other result info end Further Reference _____________________________________________________________________________ o AppleShare Programmer's Guide for the Apple II Family o Apple II AppleTalk Technical Note #1, Identifying AppleTalk o Apple II Miscellaneous Technical Note #7, Apple II Family Identification o Apple II Miscellaneous Technical Note #8, Pascal 1.1 Identification Bytes