823 karma · joined February 26, 2014
In theory PLAs and ROMs are fully equivalent. In practice, while the ROM can accept any possible "microcode", a PLA might have to be enlarged if you want to change some of the "micro instruction". This need to change the hardware to change the functionality of an instruction is what makes me consider this design hardwired instead of microcoded.
[EDIT] Another issue is that the ARM1 has three pipeline stages. The "microcode" here is not used for the fetch and decode stages, only the execute one. So though register to register operations take 3 clock cycles to execute, only one "micro instruction" is needed (the second line in the table).
A quick search showed it isn't easy to find online version of these patents (because IBM has so many that even knowing these are from 1984 didn't help), but I remember that one was related to being able to split a screen into a graphics and a text part in their EGA board (though the Apple II previously did this too, but with a fixed split), one was about detecting 360KB vs 1.2MB floppy drives by seeking to track 60 and then stepping back 59 tracks and checking if we were now at track 0 (not unlike how the Apple II handled the lack of a track 0 signal, but for a different purpose), one was for the "bus master" signal in the PC AT (later ISA) bus and I can't seem to remember the other four but they were all similar in style.
So in the late 1990s you had to pay IBM if you wanted to make a PC clone (AT and up, but 8088 clones had died out in the early 1990s).
VIDEO_ID_CODE 4 (1280x720) works on all monitors I tested while 1 (640x480) only displays on half of them:
https://github.com/nand2mario/nestang/blob/master/src/hdmi2/...
Despite the name of the second site, the actual processor is called RISC5 (see the menu on the left) and is part of the Oberon project by Niklaus Wirth.
https://en.wikipedia.org/wiki/MIPS_Technologies#Notable_Cont...
In either case, I am not aware of any of them being RISC-V leaders though John Hennessy did rewrite the books he co-authored from DLX to RISC-V.
https://spimsimulator.sourceforge.net/
RISC-V looks a lot more like MIPS than it does RISC-I to IV, so on the technical side having MIPS-the-company abandon MIPS-the-architecture was not such a huge change. And DLX that the Hennessy and Patterson books used before they were changed to RISC-V was essentially MIPS as well.
The sieve example uses a single 8Kword array https://github.com/jeceljr/baby8/blob/main/examples/bla/siev...
The 1KB target was for Baby 8 (the associated processor) binary code. That processor had a few quirks (like only indirect addressing outside the "zero page") and the language design partly reflected that. Seeing other people fit Lisp into less than 512 bytes made me think I had sacrificed too much functionality for size.
The incomplete Squeak code was just a quick test to see if the language made sense at all before wasting time doing the assembly version.
That level of performance was only achieved by PCs when we got 50MHz 486 (for purely interpreted Smalltalk-80 virtual machines, with JITs much slower computers could match the Dorado).
The Smalltalk-76 MVC user interface that the Apple people saw only ever updated the topmost window which, by definition, was not clipped by any other window. If you brought some other window to the front it would only then be updated. But since nothing ran in the background it was easy to get the wrong impression that the partially visible windows were being handled.
Bill's solution had two parts: one was regions, as several other people have explained. It allowed drawing to a background window even while clipping to any overlapping windows that are closer. But the second was PICTs, where applications did not directly draw to their windows but instead created a structure (could be a file) with a list of drawing commands which was then passed to the operating system for the actual drawing. You could do something like "open PICT, fill background with grey pattern, draw white oval, draw black rectangle, close PICT". Now if the window was moved the OS could recalculate all the regions of the new configuration and re-execute all the PICTs to update any newly exposed areas. If the application chose to instead draw its own pixels (a game, for example) then the OS would insert a warning into the app's event queue that it should fix its window contents.
In parallel with Bill's work (perhaps a little before it) we had Rob Pike's Blit terminal (commercially released in 1982) which added windows to Unix machines. It had the equivalent of regions (less compact, however) but used a per window buffer so the terminal would have where to copy newly exposed pixels from.
So I am redoing a project I am working on to use the higher resolution.
A comment in the video pointed out that the mouse had been invented back in 1964 and claiming it was not common is a cop out. The author of the video didn't know about it before this issue and I didn't know about it. But now we knew, and for how many others was this true?
The Symbolics people refined this approach while the LMI people kept the original design until nearly the end when they tried to do a RISC+tags:
For Alan Kay's talk they removed some limits of the original hardware, like screen size, processor speed, memory limits and storage (floppies in the original). They found that without these limits the experience was actually better than more modern Smalltalks in some ways. Sort of like using a 1980s 8 bit microcomputer with a modern SD card.
The project you linked to recreated the original Xerox Smalltalk-80 on the Pi. It has a rather limited scope so I don't know if they ran out of steam or simply reached the end.
For code the limitation was baked into the architecture itself. The bottom two bits of the program counter were used to define the current execution mode (and always output as 0 to fetch word aligned instructions) while the top six bits were the status flag. That meant that saving the PC to the stack saved the whole execution context in a single memory write and it only took one read to restore it.
Fixing this required moving the flags to a separate register, which was a very visible change.