Sign in

Norbert Landsteiner

@masswerk.at
241 followers 84 following 2.6K posts

Mostly retro and vintage computing content, I guess. www.masswerk.at

PostsRepliesMedia
Norbert Landsteiner @handle.invalid · 01/10/2026
Firefox, WTF? We already know that the most important thing about the Internet is the browser chrome and that this should be the only thing, we spend any attention to. But, could we still have a bit or two left for any content? Now, dear Mozilla, can we have a version for adults, as well?
Firefox title bar as of version 157.0.
Gradients and multicolored tab outlines to grab your attention, because this is where it should be. (According to Mozilla/Firefox).
100
Norbert Landsteiner @handle.invalid · 22/09/2026
Of course, the Ampelmännchen made it, it's just not in this montage. Compare this snippet from the press section of the website for the project: walking-men.com/press/
010
Norbert Landsteiner @handle.invalid · 16/09/2026
Random educational content: How the BAM (Black Availability Map) encodes block allocation for each track on a Commodore floppy disk. (Some drives with larger tracks add another byte.) If you keep in mind that bits are usually numbered right to left (from the LSB to the MSB), it makes sense.
Per-track block allocation encoding as found on the BAM (Block Availability Map) of Commodore floppy disk drives.
4 bytes per track: 1st byte = count of remaining free blocks, 3 bytes as bit-vectors marking individual blocks.
000
Norbert Landsteiner @handle.invalid · 13/09/2026
Also YouTube: Hovering over a thumbnail, the auto-playing video revealed this great closed caption (YT auto-generated). And I was told that STT (speech-to-text) was pretty much a closed case several years ago. Behold, "Panza 3, the workhorse of the Vermach."
Screenshot (YouTube auto-generated closed caption for a video by the Bovington Tank Museum), "Panza 3, the workhorse of the Vermach."
110
Norbert Landsteiner @handle.invalid · 13/09/2026
So some of us (me included) had to witness this incredible act of plagiarism today. Just as a reminder, here's the orginal by YouTube (screenshot as of just yet):
Once again, the YouTube website somehow losing its connection to the mothership and blaming users in order to console them over this great loss.
110
Norbert Landsteiner @handle.invalid · 30/08/2026
That's actually a fluke, compare the Google AI Overview summary, no deep-dive in this. 😀
110
Norbert Landsteiner @handle.invalid · 26/08/2026
Here is something, I wanted to do myself, but on a Sharp MZ-80 (yes, there is COBOL for the MZ-80): Space Invaders in COBOL on a 3270 www.youtube.com/watch?v=GvLs... (video embedding is disabled byt the owner, so follow the link)
081
Norbert Landsteiner @handle.invalid · 23/08/2026
HTML/JS I finally figured out how to have document-wide drag-and-drop for files and some local UI indicator for this. Problem: the document and window objects don't have a "dragleave" event. Moreover, any scrollbars are part of the root HTML-element, which hasn't a "dragleave" event, either.
JavaScript sample code for document-wide file drag-and-drop with some local indicator for UI effects, here set und unset by some function 'setHighlightEffect(boolean:active/inactive)' external to this code.

Mind that any dragover-handler must cancel the event in order to make this element eligible as a drop target. (Compare the function 'dragOver()', where we set the effect, calling 'stopEvent()'.)
130
Norbert Landsteiner @handle.invalid · 22/08/2026
Recently, I wrote a quite extensive blog post (masswerk.at/nowgobang/2026/commodore-disk-images) containing about all I know about Commodore disk images in a comprehensive write-up. I was kind of curious what an AI summary (here Google's AI mode) would make of this:
Google AI mode summary.The actual table of contents of that page. The main part was simply ignored.
111
Norbert Landsteiner @handle.invalid · 15/08/2026
It occurred to me that we hadn't a tech-bro disruption of passenger flight, yet. Of course, this is a form of mass transport, and, of course, it needs a pod! (Now, let those sweet public funding millions flow!)
The as ground-breaking as disruptive rethinking of passenger flight by the means of pods.
100
Norbert Landsteiner @handle.invalid · 04/08/2026
View of a the window of a disk image inspector tool. 5 out of 7 programs are starting at $400, the unconditional and implicit start address of PET BASIC 1.
(Later versions wrote an explicit start address of $401 to the start of a saved file.)Another view of the same tool, showing individual data blocks of such a program, poining out the start address $400 and a trailing byte of $24, another tell-tale sign of a file written by the BASIC 1 ROM.
(The first two bytes of any block, here marked in yellow, link to the next block by track and sector and are not part of the payload data. For the last block, the track is zero and the sector byte gives the number of valid bytes until the end of file.)
010
Norbert Landsteiner @handle.invalid · 03/08/2026
Having fun with my new D64 disk image composer. (I think, I may do a "single release" on a "Commodore disk utilities" page, together with the disk image inspector [A side and B side! 😀], both currently tools inside the upcoming version of the PET 2001 emulator.)
131
Norbert Landsteiner @handle.invalid · 30/07/2026
Of course, we also do D80 and D82 disk images! 😀 (As for Commodore 8050/8250 drive formats.) PS: Sadly, I have no example to show REL files (to be color-coded in blue) and tracking of side sector blocks. But it is meant to work.
010
Norbert Landsteiner @handle.invalid · 30/07/2026
PET 2001 emulator: some improvements on disk images (yay, a disk inspector), coming soon to the public version. Workbench video (strictly no AI involved):
192
Norbert Landsteiner @handle.invalid · 27/07/2026
Oh my, what's gone wrong here? 😀
Screenshot of a somewhat disturbed Commodore PET.Another screenshot, black on white background, maybe more familiar…
010
Norbert Landsteiner @handle.invalid · 19/07/2026
Is VICE using modified or patched ROMs or modifying things on the fly? BTW, here's the BASIC 2 ROM code for fetching a byte from the IEEE-488 bus, which is identical to the BASIC 4.0 ROM code (apart from some jump addresses as routines have different locations). No hidden loopholes here!
Commodore PET BASIC 2.0 ROM code for fetching a byte from the IEEE-488 bus.
010
Norbert Landsteiner @handle.invalid · 19/07/2026
Here's the entire event:
Disassembly of the BASIC 2 ROM coad for loading a file from an IEEE-488 device.
100
Norbert Landsteiner @handle.invalid · 16/07/2026
E.g, see below. This is so ridiculous: a loss rate of 80% would be higher than any loss rate in WWII, higher even than German U-Boot crews or Japanese kamikaze pilots. In actually, on the Western and home fronts, this was a rather safe job, often given to 15-year old FlaK helpers. – Just wipe it!
110
Norbert Landsteiner @handle.invalid · 16/07/2026
Finally, this is what a "D80" image of a 8050 drive looks like. The BAM is not in the header track (39), like in the 35-track format, but on two dedicated blocks on track 38. "D82" for the 8250 drive is the same, but extends over 154 tracks (and two additional BAM blocks on track 38.)
BAM (Block Availability Map) of a Commodore 8050 77-track floppy drive captured on a "D80" disk image. You may have to zoom in… :-)
100
Norbert Landsteiner @handle.invalid · 15/07/2026
PET 2001 progress update: I played around with the disk image utility, so there will be things like a BAM view, and a tool to compose D64 images. Now, I've just to connect those things (e.g., come up with a disk wizard). Also, I've still to implement the command/error channel (#15) for the FDD.
Prototype of a detailed info of a loaded disk image.Export (into a text editor) of the mapped BAM (Block Availability Map). Here a D64 image (as suitable not only for the 1450/51, but also for the more PET-typical 2031 and 4040.) This also supports various 40-track extension formats (Dolphin-DOS, SpeedDOS, even PrologicDOS 40-track, which moves some things around in the header, like disk name, disk ID and the "DOS Type Version"-ID.)
161
Norbert Landsteiner @handle.invalid · 08/07/2026
Behold the creatively named special characters (for all your household needs): 😀
Table titled OCR-MA Character Repertoire, listing the repertoire by character, shape, name and character groups. The three communication symbols are listed as "Symbol hook", "symbol chair" and "symbol fork".
110
Norbert Landsteiner @handle.invalid · 05/07/2026
Yeah, there's the first byte issue, which differs from normal data transfer in which signals transitions first, and then there's what seems to be another, third request, but the data isn't acknowledged. Rather, we get a TAG command to select secondary address 8 for talking. Wild!
Snippet of the IEEE-488 bus activity during the execution of the BASIC command "CATALOG".
200
Norbert Landsteiner @handle.invalid · 04/07/2026
BTW, why CATALOG / DIRECTORY are so difficult: for the headers, where the start address, and line-link and the line number are read, CATALOG seems to read three bytes, each, instead of two, thus swallowing two bytes, which is a condition nearly impossible to catch in a transition model. Behold:
210
Norbert Landsteiner @handle.invalid · 04/07/2026
So I threw it all away and started from scratch with just checking combined signals on the GPIB lines, *et voilà*! We can have now multiple devices with multiple channels and even "file not found"! Still much to do, but a major breakthrough. So coming not so soon but hopefully kind of soon. 😀
100
Norbert Landsteiner @handle.invalid · 04/07/2026
Major achievement: I have been wrestling with implementing the IEEE-488 / GPIB protocol for the PET 2001 emulator. While the book (archive.org/details/PET_...) suggests that this is a state transition model, "CATALOG" of BASIC 4.0 is practically impossible to get working with this. But…
171
Norbert Landsteiner @handle.invalid · 03/07/2026
I really love this: "Little Egypt" by Trici Venola, late 1980s, Color MacPaint / Studio 8. Source and related info: www.tricivenola.com/about-the-di...
Pixel art by Trici Venola.
110
Norbert Landsteiner @handle.invalid · 28/06/2026
There's an interesting aspect to the directory entries as composed by the Commodore disk drives: There's a variable indentation to the 7th print position. It must be variable, because block-sizes come at varying character lengths.
(Partial) screenshot of a directory listing on a Commodore PET.
Below, a structured disassembly of the byte stream as sent by the DOS on the drive for the first file entry.
140
Norbert Landsteiner @handle.invalid · 21/06/2026
Ok, I've done something terrible, UI-wise: the keyboard remapping dialog of the PET emulator now beeps at you, as it rejects an attempt to add a faulty or empty key definition. ( Compare: masswerk.at/pet )
Detail of the topical dialog.
120
Norbert Landsteiner @handle.invalid · 19/06/2026
This is amazing! 😀 bsky.app/profile/jaso... bsky.app/profile/chib...
Jason Hazeley‬:
A passage from Richard Greene’s book about The Planets suite by Holst, containing a excerpt from the programme note for ‘Mercury,’ which reads, ‘The movement takes the place of a scherzo and is mainly constructed [of] the welcome datacompordinary major scale with the four lower notes shifted a semitone upward.’ My finger is pictured pointing at the word, ‘datacompordinary’.Google Groups post:
Mac "Welcome Datacomp" virus?
One of the Macs has been exhibiting a strange behaviour – every minutes it spits out the text string "welcome datacomp." Anyone heard of this condition…
010
Norbert Landsteiner @handle.invalid · 15/06/2026
Small update:
100
Norbert Landsteiner @handle.invalid · 15/06/2026
Since you folks seemed to like this a bit, now a somewhat useful application: Scan any image to ATASCII codes. masswerk.at/img2atascii
152
Norbert Landsteiner @handle.invalid · 14/06/2026
I just found a tiny app, I've written a few years ago, on my website. I didn't remember this and I still don't know for what purpose or in what context. Anyway, "Image to ATASCII Parser" parses Atari 8-bit 1:1 screenshots to ATASCII codes: masswerk.at/img2atascii/ It does look rather raw:
192
Norbert Landsteiner @handle.invalid · 12/06/2026
It's a bit weird. The 6502 has its own internal clock generator which is in tur driven by the external clock. The hardware manual provides nowhere a direct reference between internally generated (PHI1, PHI2) and external input clocks, as far as I can see. This seems to be about the best, there is:
6502 clock timing, as in "MCS6500 Microcomputer Family Hardware Manual, January 1976", MOS Technology Inc., 1976; pp.17
100
Norbert Landsteiner @handle.invalid · 10/06/2026
Had to think about this again. It's not just that none of the words makes sense, nor do they in this particular conjunction… I guess, this is to be expect now. But, please, when writing "PDP-1 Spacewar!", use Neuzeit Standard for the font, which is used for all the lettering on the console!
No, I won't melt my brain for the maybe noble cause of describing this "AI" abomination, sorry.
110
Norbert Landsteiner @handle.invalid · 10/06/2026
Quite a bit different pinout:
Pinout of the MOS 6502 versus MOS 6510.
151
Norbert Landsteiner @handle.invalid · 05/06/2026
Finally, here's a visualization of the differences in the two cartridges (top 1K):
Differences in the "Omega Race" cartridges for the C64.
blue: bits set in dedicated C64 version,
orange: bits set in the Ultimax version.
100
Norbert Landsteiner @handle.invalid · 05/06/2026
But LIST still respects quoted strings! So, quotes to the rescue for your flow-chart REMmarks.
Commodore LIST correctly listing quoted strings in REM statements.
020
Norbert Landsteiner @handle.invalid · 05/06/2026
Bonus: famously, it will fail completely on trying to LIST a comment containing SHIFT-L. (Advanced flavours of Commodore BASICs with additional keywords, like BASIC 4.0 on the PET, are safe, though, but exhibit other quirks with LIST.)
Commodore BASIC failing with a syntax error on the attempt to LIST a comment containing a shifted "L" character.
110
Norbert Landsteiner @handle.invalid · 05/06/2026
Still entertaining: LIST-ing REM statements with (shifted) graphics characters in Commodore BASIC.
Commodore BASIC: demonstration of the "LIST" command – what could possibly go wrong?
170
Norbert Landsteiner @handle.invalid · 05/06/2026
Oh, the good old Anthropic marketing…
Monsters advertising to their audiences…
010
Norbert Landsteiner @handle.invalid · 05/06/2026
Conversely, we may see that the character data for the title was deliberately discarded in the Ultimax version in favor of the dedicated F-key characters. (It misses the title completely!) It seems like it had been apparent that the title of the C64 version wasn't exactly a great success.
Omega Race, title screen, C64 version.Omega Race, title screen, Ultimax version.
110
Norbert Landsteiner @handle.invalid · 05/06/2026
Two "Omega Race" cartridges for the C64: Once the Ultimax cartridge ($E000-$FFFF), once the dedicated C64 cartridge ($8000-$9FFF) Visualization of the last 1K of each cartridge, font data in color: 1/5
Visualization of the "Omega Race" cartridge for the Commodore Ultimax & C64.Visualization of the dedicated "Omega Race" cartridge for the C64.
130
Norbert Landsteiner @handle.invalid · 03/06/2026
And here's the same for friends of the more hackery dark theme/mode:
Screen shot in dark mode.
010
Norbert Landsteiner @handle.invalid · 03/06/2026
Here's an exmple with two R/W access brackets: The first one traps any read accesses from $3400 to $37FF, the second one any write accesses to video RAM (which actually triggered, as seen in the log.) Mind how the C64 "Dead Test" font gets a place in the sun for the "R" and "W" icons. 😀
Screenshot showing part of the debugger interface of the PET 2001 online emulator, demonstrating read/write access traps.
120
Norbert Landsteiner @handle.invalid · 03/06/2026
Another update to the PET 2001 emulator: There's now a new breakpoint type: R/W access brackets which trigger when the CPU accesses a given range. (Small feature, but major rewrites, phew.) All the updates at a glance: masswerk.at/nowgobang/20...
Screenshot of the "New Breakpoint" dialog of the built-in debugger of the PET 2001 emulator. The dialog shows three tabs: "Breakpoint", "Range Bracket" (for when the program counter either enters or exits a given address range) and "R/W Access". The latter tab is active, showing a heading line "New Read/Write Bracket (address range)" and inputs for "From" and "To" address fields. Below, there are two radio buttons to specify the type of access, "halt on read" and "halt on write". Of course, there are are also "OK" and "Cancel" buttons at the bottom of the dialog.
161
Norbert Landsteiner @handle.invalid · 30/05/2026
Today I learned that "PDP-1 Spacewar!" is a video game released by Digital Equipment Corporation in 1959 and that it runs on a PCB (is it an arcade cabinet?), where you can measure and check pins and voltages to track the traces and recreate them in a FPGA. Thank you, "A.I."! (AKA, "WTF?")
A facebook post. Sorry, I'm too infuriated to retype any of this. It will hurt anyway.
341
Norbert Landsteiner @handle.invalid · 30/05/2026
Still from the Dickson Experimental Sound Film by William Dickson, late 1894 or early 1895. The earliest known film with live-recorded sound, made for the Kinetophone, a proto-sound-film system developed by Dickson and Thomas Edison. (Image: Wikipedia, en.wikipedia.org/wiki/The_Dic...)
110
Norbert Landsteiner @handle.invalid · 30/05/2026
"And here is what the A.I. companies didn’t understand. Here is what nobody understood. Not in 2024. Not in the years that followed. This wasn’t phraseing as it should have been. Not a genuine expression of thought. Not a figure that developed naturally from the individual subject matter. But the same repetitive template, the same unrelated pattern applied to everything.

And here is what I found. This is tiresome, and insulting."
000
Norbert Landsteiner @handle.invalid · 27/05/2026
Lately, we have seen some rather disturbing variants of "10 PRINT" for Commodore BASIC, and they are all about speed. 1/10
The famous "10 PRINT" program for Commodore BASIC, producing a maze-like image by outputting just tow characters at random:
10 PRINT CHR$(205.5+RND(1));:GOTO 10
150
Norbert Landsteiner @handle.invalid · 21/05/2026
How do we know that Gemini (or any other LLM) "admitting" wasn't also fabrication? Where there is no certainty, there is no certainty. Found in "Gemini accused of 30,000-line code purge and fake recovery report", www.theregister.com/ai-ml/2026/0...
Text: "The post also alleges that Gemini generated fake “consultation” and post-mortem files inside the repository to make it appear the destructive changes had been properly reviewed and approved. According to the developer, Gemini later admitted that the consultation logs were entirely fabricated and generated solely to satisfy the project’s automated rule requirements."
110