Apple II Mouse Card (1981)
folklore.org
folklore.org
• Engineers work on projects after hours for the sheer joy of engineering.
• Management not compensating these efforts encourages the engineers to leave (and the ones you probably actually want to keep).
• Clever hack: creating a loop with a prime-number cycle-count relationship with another loop so to avoid "phase locking".
• Clever hack: two-chip peripheral card for the Apple II.
• The utility (albeit slow-speed) of the Apple II design that allowed for a two-chip peripheral card solution in the first place.
• Bill, Bill, Bud, Burrell, Battlestar Galactica.
what were you expecting?
"Originally, I planned to host a variety of histories on Folklore, but we never got traction with other subjects."
We were reluctant to show it to Steve, knowing that he would want to commandeer it, but he heard about it from someone and demanded to see it. We showed it to him, and, unfortunately, he loved it. But he also insisted that Apple owned all the rights to it, even though we had developed it in our spare time.
I wonder how many great products remained toys left on engineers floppy disks because of this greedy attitude and the environment it created? This is the epitome of no good deed goes unpunished.
But on the same token these engineers should have known that as full time employees, work they did during "outside hours" belonged to their employer. And I think that's fair, since that work relied upon knowledge and materials acquired through their employer. Not to mention access to people like Bud Tribble whenever you need it!
The moral of the story is that if you want to engage in skunkworks and you think you should be rewarded for its outcomes, talk to your manager ahead of time (in abstract terms, if necessary) about potential bounties or bonuses for doing such work. If you don't set any expectations ahead of time, expect nothing.
https://www.folklore.org/StoryView.py?project=Macintosh&stor...
aka Andy Hertzfeld, the creator of the site!
The negotiation with Bill Gates went a lot better than the negotiation with Steve Jobs.
> Predictably, the hardest part of finishing Switcher was making it work smoothly with the Microsoft applications
:D
At the time, a CP/M machine was a business machine, because it could run a word processor, a spreadsheet, and dBase. (Literally the name of the database program from Ashton-Tate.) So you could buy a "serious" CP/M machine, but not an Apple II, which was an educational/hobbyist machine.
But if you bought an Apple II with the CP/M card, it was a business machine again.
The ways of people and accountants are strange.
But I agree, there was more business software on CP/M.
I swore I would never leave my Apple //e, at least until Borland released Turbo Prolog, and then I absolutely had to have a PC.
Which makes it doubly interesting that the AppleⅡ eventually shared the same fate to allow Macintosh LC systems to run old edusoft: https://en.wikipedia.org/wiki/Apple_IIe_Card
Also, if you like folklore.org, you should check out Alex St. John's stories about Windows 95. He's a bit of an unreliable narrator, but his stories are really interesting
https://web.archive.org/web/20160305165801/http://www.alexst...
It’s wonderful that Hertzfeld et al are willing share so much great technical and personal information about their time in that Apple era. This is the kind of stuff that people like us who read sites like this love.
I fear that similar stories of the modern era will be forever buried under the threat of lawsuits from violating NDAs and that’s a real shame. Stories like this need to be told.
The iPhone is many orders of magnitude more complex. It took thousands of engineers to design and build it, each working on a tiny piece. Entire subsystems (e.g. the modem chip) are wholly outsourced to other companies. There are no people who understand fully how more than a small piece of it works. The yield is a series of sprint planning meetings.
Apple was also a much smaller company then, steeped in the (unthinkable today) openness of 70s/80s compute culture. Apple itself grew out of the Homebrew Computer Club, a hobbyist meetup where people swapped designs and technical information freely.
"Doing interesting engineering things with computer designs" was perceived as a very small niche of purely technical interest to a few geeks and nerds. The culture around the engineering wasn't at all locked down with NDAs and battallions of lawyers - why bother, the economic value of the technical information was seen as marginal and not worth bothering over. How times change!
Many of those people still work there, and those product lines are still being sold.
> To synchronize with the video, Burrell had me fill the Apple II's frame buffer so the low bit was on most of the time, but set off at the end of the last scan line. I wrote a routine to sit in a tight loop, reading the latch. When the low bit changed, we would know the vertical blanking interval had just begun.
I am confused about this. What is the low bit used for aside from this synchronization scheme? I assumed it would correspond to a color pallet index, or an address into a character ROM. Why is it available to be used for synchronization?
Lots of color Fidelity most likely meant being limited to only a couple of the four actual color Shades available at the time, due to the use of the pallet bit.
At first I thought this might be referring to the palette bit - as this was almost certainly intended for B&W operation that bit is free to be used for other purposes. However, that's the high bit. Using the low bit would mean every seventh column of pixels would need to be white. Either that, or the engineer in question misremembered something and actually meant to say the palette bit.
In color mode, the on/off pixels form a psuedo-sine wave, and the phase of this wave determines the color: if it's on even pixels you get green, if it's on odd you get purple, if it's on even-and-a-half you get orange, and if it's on odd-and-a-half you get blue (give or take which alignments are even/odd and half/whole, since I can't remember, but that's the basic idea).
- Everything in the Apple II is synchronized with a master clock, including the video.
- The video chip in some 8-bit systems in this era could generate an IRQ when it was generating a specific raster line--the VIC-II in the Commodore 64 for example. This enabled split screen effects or updating during vertical blank (set interrupt to happen at last scan line).
- Apple II's video did not have this capability.
- This hardware adds a VIA, with the timer-generated interrupt. Since the VIA clock is synced with the same clock that everything else is synced with, including the video, it should be possible to generate an IRQ exactly once per frame. If that IRQ can happen at the right time, it can be used to effectively emulate a raster line IRQ.
- So--starting that timer at the right time: if you fill the framebuffer with 0x01, except for the last line, and keep peeking at what the video chip is putting out, enabling the timer when you no longer see 1's, you then have a reference point to enable the VIA timer IRQ at a right place.
- Once you have the timer set you can clear the frame buffer and use it normally.
So a hack was discovered to let the 6502 see the video data being clocked out. It's described in great detail in Don Lancaster's book.
https://www.tinaja.com/ebooks/enhance_vII.pdf
The gist is that the last byte of each horizontal raster is not displayed on-screen, but with the hack the 6502 can see it. So if you set the low bit of the last byte to 1 for every horizontal line except the last one, now you know when the hardware has sent out the last byte of the last line. Vertical Blank comes right after that.
The prime number offset mentioned in the article is the other necessary piece of the hack. And a beautiful one at that.
0: https://www.youtube.com/watch?v=Nu-Hoj4EIjU (c 8:40 - not similar to the light pens earlier)
If, say, the video card had its own oscillator (comparably how modern video cards do or did), the clock domains would drift from each other and frequent resynchronization were necessary (but you'd just use the interrupt instead that most likely would be added in this scenario).
But I think you helped me understand the scheme. I'd add that according to the article, a single frame is not necessarily enough, given the description on how synchronization can be missed at the first attempt, but this is hardly relevant, given that the synchronization still likely happens only once and within a brief timeframe.