The first HP Laserjet only had 128K of memory. To print an area of 7.5 by 10 inches at 300 DPI requires 844K if it's kept as a single bitmapped image. Obviously they were doing something clever to minimize the hardware requirements, but was it ever described anywhere?
To print an area of 7.5 by 10 inches at 300 DPI requires 844K if it's kept as a single bitmapped image.
Does it? Maybe.
Then again one cold think of many simple ways (like RLL) to compress a rendered image fast and decompress it at a speed quite capable to keep up with the print-'head'.
Obviously they were doing something clever to minimize the hardware requirements, but was it ever described anywhere?
Not sure what 'clever' thing is there to be done. Laser printers operate in a line by line base. Much like a TV, which as well needs zero buffer RAM. Of course in a digital environment it's handy to do this on a line by line base, so having the data for a whole scan line prepared before it's drawn, and prepare the next while that one is outputted. Much like double buffering is used in games to give a smooth screen.
With 300 DPI that's about 7 times 300 = 2100 bits, or less than 300 bytes. Times 2 gives less than 1 KiB as preparation and scan buffer.
Beside that, printers are meant to print text. That's as well true for laser printers. So all the task needs is a buffer with the actual line of text. Having that it transforms the character codes one by one into the dot image for that character and hands it over to the scan process modulating the laser beam. This gets repeated for the same line until all sub (scan) lines are done - again much like with a classic video card.
A line of text is most likely less than 200 bytes, so let's make that another KiB including double buffering.
Having the next line at hand before the last is exhausted is again an advantage. In fact, considering the usual comparably slow interface speed back then - serial 9,600 for a laser wasn't uncommon slow - it did help having the whole page already transmitted (*1. So for regular text that's less than 6 Kib, but for the sake (and the way I used my first one in 1984 *2) lets assume 100 lines of 140 characters, so 14 KiB.
And let's use double buffering again, for whatever reason, making it 28 KiB.
With the scan buffers and memory management and whatsoever that comes down to needed RAM size of 32 KiB for a working laser printer.
A laser does only need to buffer a single page, as it can quite well stop between pages. The original HP Laserjet came in 1984 with 128 KiB. That's plenty to store several pages of text, including format control and maybe even some small graphics - which in turn would as well be rather low in memory usage, as no software would consider more than like 72 DPI
Yes, I already see the 'BUT', but hold it and think about. Back then PCs didn't bur out whole pages in bitmap - that would not only have been slow but as well looked quite ugly (*3). It was about text. Everything else were niche applications (*4).
It was text, and it stayed that for quite some time - at least in a professional environment - the one able to afford a laser in the first place (*5). Two years after the LJ, the LJ+ was introduced, bringing 512 KiB of RAM and optional parallel interface (*1). While RAM had become quite less expensive, HP raised the price by about 1k USD, rectified that it now could print full resolution graphics up to two third the size of a page.
There was no postscript or any similar document language. It was simple serial data, much like the generation before. Text was transferred as ASCII, embraced by escape sequences for attributes like underlined, bold or maybe a second font, and graphics were delivered as 8 bits at a time, interpreted according to previous resolution setting.
It wasn't until another year or so later that the high end models could be expanded to a megabyte and being able to deliver a whole page of graphics. Of course after waiting of 5-10 minutes for transferring the data :)
Postscript as a built in feature was again several years later, ca 1990 or 1991.
Long story short, never implicit assume today's use case for yesterdays devices.
*1 - Speed is not just an issue of the printer receiving, but as well of the computer sending. But in this case, the LaserJet had already a hard time to keep up with text at 9,600. It could take image data a bit faster, but so make it worthwhile.
The LJ+ could optionally be fitted with a parallel interface, but that wasn't faster at all. While it peaked out at 80 KiB/s, average speed was much like with 9,600 serial.
The speed wasn't much of an issue. At 9600 a filled text page could be send in less than 10 seconds, so still faster than it could print. Of course, with graphics that changed a bit :))
*2 - To print Assembler listings from our mainframe - it did quite well with the smallest front readable. After all, most important in a listing is to have as much visible at first sight, to avoid paging.
*3 - That was one of the main drawbacks of early Macintosh and one reason for its bad sales. Graphics were great and looked awesome, but text simply sucked. build in fonts, at least for better printers looked several times better than what the Mac produced.
*4 - There were of course applications, and theyused massive enhanced printers.
*5 - Original first HP LJ in 1984 was around 3.5 kUSD
In addition to Raffzahn's usual excellent answer, a few important things to note:
PCL still exists. You can (I do...) still write software that sends simple PCL commands to a printer to select fonts, print text, etc. Sending an entire page, of text, as a bitmap to a printer is the way GDI printers work - and is a Very Bad Thing.
The original HP LaserJet had a few built-in bitmap fonts. Scalable fonts required both more memory and more CPU speed, and they came later. Downloadable bitmap fonts came later (and they still work). In ye olden days, if you wanted additional fonts, you got them on a ROM cartridge. Probably the most famous was a cartridge with tax fonts so that you could do the magical task of creating pixel-perfect IRS tax forms without graphics. That seems like no big deal today, but in the mid-1980s it was groundbreaking, and it didn't need tons of memory.
After the LaserJet series evolved to have enough memory for full-page bitmapped graphics, along came the DeskJet (inkjet) series for the budget side of things. This repeated the original problem of memory limitations. In fact, the first DeskJet couldn't print landscape format, and I am pretty sure that is because of this same memory limitation. (I'm actually not sure how they handled landscape in the original LaserJet.)
A real 300-dpi resolution resulted in the best text (except perhaps a daisywheel) on a computer, short of a typesetting (film-based) system. Being able to produce fully formatted high-quality output at 6 pages per minute was incredible! This compared really well to:
- daisywheel printers (incredibly slow)
- line printers (yes, you could hook up a big line printer to a PC, but they were moderate quality - fully formed characters but typically fixed pitch and only one font optimized for readability and not "style")
- dot-matrix printers - decent speed in low quality, low speed in high-quality, and the high-quality was nowhere near true 300-dpi
Printing fancy graphics just wasn't as much of an issue. Consider that the typical business display was EGA 640x350 16 colors or Hercules 720x348. Besides, if your computer didn't even have 1 Meg. of RAM, why would your printer?
To add to the other answers: Under Windows and GEM, printer drivers could store the current page as a metafile and rasterize it repeatedly as a series of horizontal bands, each band being large enough to fit into printer memory. This was slower than sending the data directly to the printer (since each page had to be rasterized repeatedly) but allowed an entire page of bitmap data when this was larger than the memory available to the printer.
Microsoft Knowledge Base article Q75471 gives an outline of the process for Windows.
They simply didn't let you send much of a bitmap
The first HP LaserJet printers on the market required you send jobs via PCL language. The language was tuned to pretty much not let you do anything the printer couldn't handle. PCL for the whole page needed to fit in the very limited RAM.
Needless to say, PostScript was out of the question on these early printers, as PostScript was architected for "professional typesetter" level functionality at all costs, full knowing this would make a page buffer necessary and dramatically drive up the costs of the printer's rasterizer. Adobe was not after the low-end market.
Yes, the onboard CPU on the printer was rasterizing PCL "on the fly" trying to keep ahead of the drum/laser. First, this was nothing new: video games were already doing that. Second, you were married to the fonts HP provided in the printer, and nobody minded that because every printer up to this point did exactly the same thing.
While the language tried to discourage it, and application developers tried to avoid it, one "could" create a job that the printer could not print for lack of ability of the CPU to keep up with the laser raster. This would end in failure.
Apple's first printer was a totally different deal. That did come with 1MB of RAM and that was used to pre-rasterize the entire page. It was a really big deal, and added to the cost of the printer. It then came with PostScript, which could do all the modern stuff you expect from printers today. Note that the PostScript could take literal minutes to rasterize a page, even though the LaserWriter CPU was often more powerful than the Mac CPU.
It wasn't until the HP LaserJet III that it had (or could be made to have) enough RAM to rasterize a whole page. And then yeah... you could get a PostScript cartridge that went in one of the font cartridge slots.
Font cartridges. Really. It was like that.
This didn't offend the market because Windows hadn't "arrived" yet. PC screens were 25x80, character cells were 8x8 (except the lavish IBM MGA which was 9x14) and PC display fonts still came from the video card hardware. Printers up til now had the font(s) they had. So people were not picky. The text "character" was still the basic currency of computing.
Looking at the Wikipedia article on the LaserJet, it looks like the printer couldn't rasterize a whole page of graphics and you needed a 512K LaserJet Plus to be able to do graphics covering most of a page. That would mean the controller would be rasterizing text to the drum using the built-in ROM raster fonts.
The LaserJet Plus followed in September 1985, priced at US$3,995. It introduced "soft fonts", treatments like bold and italic and other features including a parallel (Centronics) interface. It also included 512 kilobytes of memory, which was sufficient to print graphics at 300 dpi that covered about 70% of the letter-size page area.
First of all, don't underestimate what can be done with 128K of memory. The original LaserJet was released in the era of the IBM 5150, whose base configuration had only 16-64K memory. As another comparison, the original Game Boy handheld had just 4K of memory and game cartridges were as small as 32K, yet were capable of doing quite a bit graphics-wise. They accomplished this not by storing all their graphics in fully-rendered bitmap format, but by storing a sequence of drawing instructions that would generate the desired output image.
Similarly, printers used a Page Description Language (PDL) instead of being sent a bitmap. This allows the page's contents to be described at a higher level and can save a considerable amount of space vs. a bitmap. Graphics could be sent in a vector format, and the printer would rasterize them as it went down the page.
One of the more popular PDLs was PostScript. I recommend reading though the Wikipedia article for it, as it contains a lot of good information about the problems that printers had at the time and the things that PostScript (and other technologies) did to work around them. Another popular PDL was HP's PCL.
As an example, printing a simple line of text would look like this in PostScript:
%!PS /Courier 20 selectfont 72 500 moveto (Hello world!) show showpage
You tell the printer what text to print, at what page coordinates and using which font. The printer figures out the rest as it goes. That's 75 bytes compared to the >800K that would be required for a bitmap of the same page. IIRC, HP's PCL was even more compact (at the expense of easy readability by humans).
This is just a slight evolution of the way existing print devices worked. At that time, text was printed using a daisy-wheel printer (works like an automated typewriter) or a dot-matrix printer. You had extremely limited options for things like font or print size, and what was sent to the printer was mostly just the text to print. Plotters were used for drawing graphics. They used vector images, and the commands to control them consisted of commands like "lift pen" or "put pen down and draw line to point (x,y)". The PDLs used on the first LaserJet printers followed the same concepts as the plotter control languages.
You are correct that there isn't enough space to store a full-page bitmap for printing, but that sort of thing wasn't even on anybody's mind at the time. It wasn't really a consideration until the "desktop publishing revolution" of the late 80s/early 90s where inkjet printers became common household items. Businesses were accustomed to using a professional print shop for full-page images, and it was several LaserJet generations before that changed.
A big problem in those times was a printed page not quite looking the same way that it looked on the screen. You told the printer to use "Courier" but its hard-wired Courier font might be slightly different than yours so the results were not quite what you were expecting. Some LaserJet models supported an add-on cartridge that contained font definitions that matched the fonts pre-installed with Windows. Eventually, printers started supporting the ability to upload fonts for it to use for a particular document. I can remember in the early 90s buying a collection of "printer-friendly" fonts, which were designed to look the same way on the screen and when printed. These fonts are stored as a sequence of curves (vectors), unlike the more-traditional bitmapped fonts. They could be scaled to any size and since they were small enough to fit into a printer's limited memory, you could ensure the exact same font was used when printing as when displaying on the screen.
Back in 1991 we had an HP LaserJet with a very small amount of memory. It was sold as "software rendering" (or something like that). We bought it because it was way cheaper than the standard model. We didn't have too much money, and heck... we wanted a laser printer!
The thing is, all the image was rendered as bitmap in the workstation, not in the printer itself. I hated it, since my whole workstation would freeze for 10 seconds every time I wanted to print anything (or worse, my coworker wanted to print a few pages).
The little memory the printer had was for buffering purposes only, not for processing anything.
Anecdote reinforcing how much they broke things up due limited memory.
This was from a page layout printing program, full page of real estate advert text to which they manually fixed high res photos of houses then photo-reproduced the lot. (I'm sure many of you have seen such paper magazines outside real estate agents).
This was a solution replacing manual layout of text.
I wrote it running on Mac Classics with an Apple LaserWriter I think around 1992.
One thing I realised was that the printer spent significant time creating the bitmap images for the fonts as it rendered different styles. It only had enough memory to keep one font's bitmaps at a time.
I reordered all the drawing commmands so all the font in a given style was printed drawn in one batch, scattered over the page. eg: Helvetica Bold 18pt, Helvetica 18pt, Helvetica 12pt...
This printed pages on average seven times faster.
The first HP Laserjet only had 128K of memory.
The first LaserWriter, released the next year, had 1.5M. It imaged pages in complete form when the appropriate PS command was received. This was its big advantage over the HP machines, allowing it to construct more complex graphics. That did not last long, however, as improvements to the HP printers and PCL eroded any difference.
The statement "Laser printer operate in a line by line base" is very misleading. (I'd make this a comment on that answer, but StackExchange won't let me). Yes, they might have had a mode of operation to emulate line printers and dot-matrix printers, but that's not their intrinsic behaviour. And the timelines seem a bit out too. I first had access to a laser printer some time around 1986, and we sent it Postscript generated by Ventura Publisher and Harvard Graphics. I remember also writing Postscript "by hand" to generate our company logo.