Apple II graphics: More than you wanted to know
nicole.express
nicole.express
Funnily enough, protected memory (sort of) arrived with the Apple III a couple of years later in 1980 and it was met with complete disdain from the developer community ("Stop trying to control my life, Apple!").
Apple III ROM, hardware, and kernel memory wasn't meant to be directly accessible from the application's address space. The purpose was to increase system stability and to provide a backward-compatible path for future hardware upgrades, but most users and developers didn't see the point and found ways around the restrictions.
Later, more-successful systems used a kinder, gentler approach (please use the provided firmware/bios interfaces please).
The best feature is the dual speed arrows - press and they’ll auto repeat. Press harder and they’ll repeat faster.
It was almost impossible to write compilers for languages like Pascal and FORTRAN for the 6502 without resorting to virtual machine techniques like
https://en.wikipedia.org/wiki/SWEET16
or
https://en.wikipedia.org/wiki/UCSD_Pascal
The latter was atrociously slow and contributed to the spectacle of professors who thought BASIC was brain-damaged advocating terrible alternatives. Commodore added a 6809 to the PET to make a machine you could program in HLLs.
Everyone knows the 6502 is a lousy compiler target particularly if all you understand about compilers is 'what C expects', or at least they did once that became relevant. Those of us there at the time weren't harping on HLL support, since people weren't writing their apps in a HLL but in asm, even on the Z-80.
I ran my II+ in dual-head mode, with a long green phosphor monitor on the Videx and a color TV on the main board output.
I’m sure whoever named it had a painful awareness of what would be the ultimate end of the ///.
- Profile hard disk (but would have been better if you could boot from it). - Movable zero page, so the OS and the application each had their own zero page. - As mentioned, 80 column text and high resolution graphics. - Up to 512k addressable RAM, either through indirection or bank switching.
It was probably the most ambitious 6502 based computer, until the 65816 based IIgs came along. And SOS was better than ProDOS.
I think this kind of switch is still made.
Second generation machines line the VIC-20 and TRS-80 Color Computer used ASICs for the display controller. Apple though the ][ was on borrowed time and has no idea how long it would last so they were slow to come out with the ][e which was cost-reduced.
I think it may be inspiring to people who make their own diy cpus
My mental picture is that the kind of display controller I'd like to build is about two large breadboards stuffed with 54xx chips. Such a thing is a bit simpler than a minimal CPU but not that much simpler because you need the stuff to interface with memory. I'd probably want to buy an oscilloscope and/or logic analyzer but maybe I could run it slow and use an AVR-8 Arduino to run test sequences.
Almost everybody who builds throwback computers today uses either an FPGA or a microcontroller for the display controller. For instance
https://github.com/fdivitto/FabGL
is a highly flexible controller implemented for the ESP32 which can do tile-based graphics and sprites for games but also emulate an ANSI terminal. This is used in this SBC
https://www.olimex.com/Products/Retro-Computers/AgonLight2/o...
which I am going to highly recommend because this machine is compatible with the old Z80 machines but has a real 24 bit mode with 24 bit registers and also performs an order of magnitude better than any Z80 machine did back in the day.
Modern systems usually avoid the unified memory model that was popular back in the day but that also usually held back the performance of the CPU because one way or another the VDC was stealing cycles. The AgonLight board communicates with the display controller through a serial port, for instance.
This thing
has a memory mapped register for the address in video RAM the CPU wants to read/write and another for the data. The address register will auto-increment when access the data register so you can read or write video RAM at high speed just by repeatedly accessing the data register. The CX-16 uses an FPGA as a display controller
https://github.com/X16Community/x16-docs/blob/master/X16%20R...
that's literally what i want to do because Im too broke for either lol
you can squeeze an arduino's adc utilizing its timers and interrupts instead of using analogRead() in a loop:
https://www.instructables.com/Girino-Fast-Arduino-Oscillosco... https://digibird1.wordpress.com/arduino-as-a-5m-sample-oscil...
There's no need for mil-spec chips for this. Waste of money.
https://en.m.wikipedia.org/wiki/Motorola_6845
https://retrocomputing.stackexchange.com/questions/7117/how-...
https://en.m.wikipedia.org/wiki/List_of_home_computers_by_vi...
Note Don Lancaster's technique used for video in some computers
https://www.tinaja.com/ebooks/cvcb1.pdf
such as
https://en.wikipedia.org/wiki/ZX80
In some strange sense this is like using a microcontroller to implement a CRTC except you're using the main CPU to do the work.
There were other turn signal approaches used before then, though not all cars had turn signals. Some of those approaches were mechanical, but still don't really align to your grandpa's claim.
https://www.qualityplusautomotive.com/blog/2020/september/th...
https://www.cartalk.com/blogs/jim-motavalli/strange-true-his...
https://www.youtube.com/watch?v=2z5A-COlDPk
Demonstrates thermal-based flashers as well as capacitor-based flashers. They are clicking because metal is moving and hitting metal.
Once upon a time, an "accidental" feature was that the thermal bimetallic flasher modules would flash much faster if the load was lower. So if you turn indicator flashed fast, you knew that one of the bulbs was out. I've seen this fairly recently; is it "designed in" to modern turn signal systems even though the bimetallic flasher units are long gone? And is that why there's still an incandescent bulb back there - because it's the easiest to monitor for not being functional by just watching the current draw?
Also once upon a time, you could pull out the thermal bimetallic flasher unit and replace it with an "electronic" one consisting of a transistor, a couple of passives, and a relay. Those made a very satisfying loud "CLICK CLACK" kind of noise that was impossible to miss. In my modern, car, I'm pretty sure the tick tock sound is synthetic, but it's also quiet enough that, at least at my age, it's easy to miss.
https://robterrell.github.io/shape_table_maker/shape_draw.ht...
Apple ][ shape tables were a rarely-used vector drawing technique -- rarely used because they were fairly slow to render and there wasn't great tooling for making them. High level of difficulty plus poor results... it was almost as easy to write blitting code, even with the odd Apple ][ video memory layout, so most games ended up doing that instead.
Anyway, if you are curious about shape tables, here's a thing for you.
Other than this, I never found much use for shape tables.
It very slightly bothered me that "][plus" was typeset before this, but it was "IIe" and not "//e".
It uses 'Apple ][', oddly enough.
The "Apple ][" in the ROM I'd guess came from how hastily they had to regroup after the Apple /// wasn't successful.
But the article doesn't mention my favorite ASCII table ever, known as the "running man character set":
http://www.lazilong.com/apple_ii/a2font/readme.html
It includes open and closed apples, sand clock, and elements to build GUI's: windows, tabs, scrollbars, and even a pointer!
So there is no way to race the beam on an Apple II like an Atari 2600/VCS can?
Don's technique relied on the fact that the video hardware in the II line scanned memory that was outside the video frame. He put magic values in those extra bytes for each scan line, and his software could detect where the beam was on each line. (I've probably messed up the explanation; it's from memory of 40 years ago...)
The great thing is that you could mix video modes within a single scan line, allowing you to put text on the left edge of a HIRES graph. The downside is that the Apple can't do anything else, because his code is running in an exact timing loop to stay synced.
There were other solutions, but those were all hardware-based.
How Steve Wozniak Brought Color to Personal Computers https://www.youtube.com/watch?v=uCRijF7lxzI
I miss computers that didn't have the capability to send all my important data to an unknown address in Belarus in the blink of an eye.
Maybe someone could design a modern desktop operating system whose outgoing network requests are batched and processed once a day, so you can look through the batch before letting it out. This would of course mean that applications must be designed to be extremely thrifty about what data they want to send, or users would simply ban them for making large opaque requests. No more telemetry, no more ad profile updates, etc.
That would indeed be a return to the analog world.
"Thanks for contacting pavlov. Due to operating system limits, his reply to your message won't be published until 3pm tomorrow. Your patience is appreciated."
Would be a stress antidote.
I kind of suspect that the window of usefulness was very short since cell towers were springing up even in really remote areas and they'd be a thousand times more useful even with just GPRS level connectivity.
Microsoft Mail for PC Networks used two processes - one for the email client and one for sending/receiving email (aka the "email pump") .
Since Windows 3.x used co-operative multitasking, only one process could run at a time, the email pump detected idle time and start sending/receiving email. Until that processing email time, the user could open the outbox and open outgoing emails, and modify and resend or cancel them.
A few years pass and Exchange 4.0 is about to ship.
But now the second process has been eliminated and emails are sent via RPC to the Exchange server. The user, though, has almost no chance to stop an email from being sent since the email spends almost no time in the outbox before the Exchange server sees and processes the outgoing email.
People actually grumbled about Exchange being too fast.
I took a look through the list of email message properties supported in Extended MAPI. One of them was a "time delay before sending" scalar, measured in seconds.
The Exchange email client (as seen in Win95, also supported on Win3.x and NT) supported extension DLLs. I created an extension DLL that let the user specify a time delay for outgoing emails, and listened for an "email send" notification and then set the user-specified "time delay before sending" property on the outgoing email.
Now outgoing emails would sit in the outbox for the user-specified amount of time before the Exchange server would process them.
Problem solved.
AFAIK the extension DLL was the only code that had set the "time delay before sending" property on emails. It worked the first time I ran the code. Someone did the appropriate testing.
Eventually Outlook 97 shipped. The extension still worked. But a later Outlook update broke the extension DLL. Finally Outlook added support for the "time delay before sending" property for outgoing emails - no need for an extension DLL anymore.
Security, like dressing for variable weather, is best done in layers.