Path: utzoo!utgpu!jarvis.csri.toronto.edu!clyde.concordia.ca!uunet!portal!cup.portal.com!ts From: ts@cup.portal.com (Tim W Smith) Newsgroups: comp.sys.mac.programmer Subject: Re: The 80486 is braindead (was Re: Xerox sues Apple!!!) Message-ID: <25470@cup.portal.com> Date: 29 Dec 89 08:16:34 GMT References: <14960@boulder.Colorado.EDU> <213@amix.commodore.com> <25347@ubvax.UB.Com> <9378@hoptoad.uucp> Organization: The Portal System (TM) Lines: 61 Tim Maroney, Mac Software Consultant, sun!hoptoad!tim, tim@toad.com says: > In article <25347@ubvax.UB.Com> fred@ubvax.ub.com.UUCP (Fredrik Noon) writes: > >A more annoying deficiency (as it will be with us for a while) is that > >Apple castrated the 68k test-and-set instruction after the Mac+. It > >expects fancier software (e.g., System 7) to run on the strength of MHz > >and MMUs alone? Not all Macs have the latter, but I know of no good > >reason why all Macs can't execute a TAS anymore (can somebody else?). > > Huh? I've used TAS instructions within the last two years and they've > worked, though not lately. I don't see how Apple could break part of > the hardware instruction set; I'm pretty sure they use standard > off-the-shelf 68K processors with no custom microcode. It should be possible to "break" TAS on a standard 68000 if the /DTACK generation logic determines when to deassert /DTACK by looking at /AS. A 68000 read bus cycle goes like this: 68000 Other thing ----- ----------- put address on bus assert /AS assert /UDS and/or /LDS put data on bus assert /DTACK deassert /AS deassert /UDS and/or /LDS stop putting data on bus deassert /DTACK The logic that generates /DTACK wants to know when the 68000 has the data so that /DTACK can be unasserted. The simplest way to do this is to look at /AS. The more complicated way is to look at both /UDS and /LDS ( an extra AND gate! Gotta watch those pennies...:-) ). A read-modify-write cycle is similar, except that after the 68000 has gotten the data, it deasserts /UDS and /LDS, but does *NOT* deassert /AS. It then waits for /DTACK to be deasserted. The data is then placed on the bus and /UDS and/or /LDS are asserted. When it gets /DTACK it will deassert /AS, /UDS, and /LDS. If the logic that generates /DTACK is watching for /AS to be deasserted to know when to deassert /DTACK, a read-modify-write cylce will hang it up, since /AS will not be deasserted! Anyway, that's how to "break" TAS on a 68000. The 68020 and 68030 work quite a bit differently. I don't think there is an easy way to "break" TAS on these in the sense of the above ( i.e., hang the system ). What I don't understand is why you need to use a TAS instruction on a Mac. Do you have another bus master on your motherboard? Tim Smith