Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!utgpu!water!watmath!clyde!rutgers!ames!sdcsvax!ucbvax!wnre.aecl.CDN!delaney From: delaney@wnre.aecl.CDN.UUCP Newsgroups: comp.sys.apple Subject: (none) Message-ID: <775*delaney@wnre.aecl.cdn> Date: Thu, 11-Jun-87 03:09:33 EDT Article-I.D.: wnre.775*delaney Posted: Thu Jun 11 03:09:33 1987 Date-Received: Sat, 13-Jun-87 08:19:03 EDT Sender: daemon@ucbvax.BERKELEY.EDU Distribution: world Organization: The ARPA Internet Lines: 41 Subject: apple tech note on Super Serial bug Miscellaneous Technical Note #3 Super Serial Card Firmware Bug Written by: Cameron Birse 11/85 ________________________________________________________________________ There is a bug (or omission) in the Super Serial Card firmware that has become evident recently with the combination of Access //, UniDisk 3.5, and a Super Serial Card used as a printer interface. The problem occurs when you try to use the Access // utilities to print a file. When Access retrieves data from the UniDisk and then tries to print it to the Super Serial Card, a slot data bus conflict occurs. The reason for this conflict is that when Access goes from the UniDisk operation to the Super Serial Card operation, the UniDisk still 'owns' the $C800 ROM space. The 'bug' in the serial firmware is that it does not make a reference to $CFFF to clear the $C800 space before it jumps to it's routines in that space. Therefore both the UniDisk 3.5 Interface card ROM and the Super Serial Card ROM are enabled on the $C800 space at the same time resulting in 'garbage' code where there should be Super Serial Card firmware routines. An easy way to see this problem is to look at the Super Serial Card firmware listing, specifically, the PWRITE routine starting at $Cs97 (page 62 of the Super Serial Card manual). At that address, the first instruction is a JMP $C9AA. This jump is to the $C800 space without disabling any other slot ROMs. This is the same for PREAD, PINIT, and PSTATUS. The BASIC entry point does not have this problem because there is a STA $CFFF instruction at location $Cs1B. An easy workaround to the problem would be to reference $CFFF before you call any of the Pascal entry points on the Super Serial Card, for example: Newslot: STA $CFFF ;reset slot ROM space LDA Char ;Char = character to output LDX #$Cn ;n = slot # LDY #$n0 STX Mslot ;Mslot = $7F8, in case of interupt JSR Pwrite ;now call the routine of your choice This bug did not happen with the Disk // or the Profile because the Disk // does not have $C800 ROM and the Profile card data bus driver 'lost' the battle with the Super Serial Card. The Profile relies only on the drive capability of the 2716 ROM to drive the bus whereas the UniDisk uses a 74LS245 octal bus driver to interface to the data bus. The Super Serial Card also uses a 74LS245 to interface to the data bus, so the UniDisk and SSC have equal drive capability, and neither wins.