mass:werk / Blog

(Posts 76 … 68.  Jump to newest. RSS feed: Subscribe.)

The PET 2001 Emulator Debugger

A visual tour.

Illustration for the PET 2001 emulation debugger article

So a few words on the debugger for the PET 2001 emulator: this is meant to help you around with 6502 machine code on the virtual PET, both for exploring existing software and testing your own code.

Be my guest on a visual tour…

Continue reading…

The Commodore PET INPUT Bug-Feature

Adventures in MS BASIC (Commodore PET edition).

Well, another illustration

As it happens, I recently added a debugger to the PET 2001 emulator, with the expressed purpose of facilitating code reverse engineering. To celebrate this, we’ll risk a glimpse into a peculiar bug — or is it a feature? — of the BASIC flavor found on Commodore’s PET computers. Particularly, it’s about BASIC bailing out into a warm start, whenever an empty string is entered by just pressing RETURN on the INPUT prompt.

Continue reading…

Shiny New 6502 Thing

New 6502 emulator feature: Instruction preview with resolved operands.

Screenshot of the 6502 emulator at masswerk.at/6502

A new feature for the 6502 emulator: Now, there’s an instant preview for the effects of the next instruction to be executed, with effective values and operands resolved.

E.g., given the following memory and register content,

$2004: $88
$0044: $04 ;<$2004
$0045: $20 ;>$2004
    X: $04

the emulator will show the following preview for the instruction `A1 40` or “LDA ($40,X)”:

A ⇐ $88

resolving the X-indexed addressing and showing the effective value, which will be assigned to the A register (accumulator).

Or, for an ASL instruction, it may show this (depending on the content of A):

A ⇐ C < |10001000| < 0

And, for the instruction `CE 04 20` or “DEC $2004”, it may show:

[2004] ⇐ $88 - 1

Thanks to this preview of the effective values, which will be actually used, complex behavior may be followed more easily and common errors, like forgetting “#” to mark up immediate operands in the assembler (and using zeropage mode instead — the dreaded “LDX $00”), should become pretty obvious.
(I’m not aware, whether there is prior art for this idea or not.)

And, by popular demand, there is now a “RST” button, sending a RESET signal to the emulator.

Try the 6502 emulator.

PET 2001 Dark Mode & Themed Range Sliders

Also, how to style range inputs using CSS, including accent colors.

Title illustration: dark mode control and slider elements of the PET 2001 emulator

So the PET 2001 emulator received a dark mode. This wasn’t exactly great news, nor worthy a blog post, if there wasn’t also something to be learned from every project. In this case, it’s about how to implement accent colors for custom styled HTML range-input elements, something, I haven’t found any hint on in the entirety of the Internet.

Continue reading…

PET Business

PET 2001 emulator up to business.

Yet another illustration, including a PET 2001

The PET 2001 emulator does now support the business keyboard!
While we prepared for this and hinted here at this in the past, we now proudly present a full implementation. — Select “ROM 4b” for BASIC 4.0 with a ”b” as in “business”…

CBM 2001/B computer

Update: Our humble PET, which has thus become a “CBM Series 2001/B Business Computer”, as well, isn’t limited to BASIC 4.0 with the business keyboard any longer, as you may now also select “ROM 2b” for BASIC 2.0 with a ”b” as in “business”.

The Skiatron and Early Dark Trace CRTs

A glimpse of an alternative display technology.

Title illustration: A Skiatron display for WWII scan RADAR

It’s fairly well known how CRT displays made their way into computing, from WWII-era PPI (Plan Position Indicator) scan RADAR displays via Whirlwind, the Charctron display and the SAGE protype displays, seeing further applications in the TX-0, TX-2, and DEC PDP computers.
However, there may have been an alternative technology available, namely dark trace or scotophor CRTs. In contrast to the light-emitting light-on-dark phosphor CRTs, these drew their images, like the name suggests, in dark traces on a light, often backlit background. Coming at the designation P10, these tubes used tenebrescent minerals, like alkali-halide crystals, instead of phosphor, but could be controlled by the usual means of a cathode ray and deflection circuits. A notatable feature of these dark-scan tubes was a non-volatile image, which gave them similar properties to E-Ink.

Continue reading…

PET 2001 Emulator: Option ROMs

Just to let you know, in case you were interested…

Yet another illustration, a drawing of a PET 2001 and puzzle pieces

A very brief update notice: Inching forward on the quest for feature creep, the PET 2001 emulator now supports ROM installation per drag&drop! See the description for details.

To add a bit of meat to this post, here are the ROM socket designators of the PET 2001:

There are no sockets for option ROMs on the boards of the original PET 2001s.
Moreover, as there is no socket for B000–BFFF, we’re out of luck regarding BASIC 4 and restricted to the old and new ROM versions of Commodore BASIC. (Of course, we can always directly access the address bus on the CPU and thus provide for extra ROMs, but on an unmodified machine we are restricted in our firmware options.) Notably, the sockets, there are, are for 2K ROMs, while later models featured sockets for 4K ROMs.

On the PET 2001N, the one with the “real” keyboard, and CBMs, there are sockets for the full complement, including D3 and D4 for option ROMs:

Finally, later PETs featured the following ROM socket designators:

*) reserved I/O space at E800–EFFF.

Fun fact:
In the handwritten schematics, ”D800” for H6 looks much like “0800” and “B000” for D5 much like “8000”.

PET 2001 Emulator + 6502 Updates

Yet another software update notification.

Yet another illustration

After the big spring rewrite for version 2.0 of the PET 2001 emulator, which brought things like sound, cycle accurate video rendering (we run all the newest demos without modifications!), a new CPU emulation, and even more features, like a built-in 6502 assembler, various context aware dissassembly and dump modes to allow a close inpsection of the internals, support for joystick input with emulatinon of various adapter schemes (including SNES gamepads), and other things more, I’m happy to announce a few further upgrades.

Recently, I rewrote the entire keyboard handling from scratch, which now provides faithful emulation of the PET’s original keyboard in ”Games Mode”. Which — as suggested by the name — should provide better support for games that bring their own keyboard scan routines. (Compare our last installment.) Now I added support for a virtual numeric keypad, which is both complementary and somewhat alternative to the keyboard joystick emulation (which reroutes cursor input to any selected joystick scheme, using the CPAS-LOCK as a modal toggle.) Moreover, I rewrote the ROM implementation, which now (a) transparently relates to ROM sets and Commodore product IDs of the individual ROMs, and (b) allows modular upgrades without redundantly including duplicate code.

Somehow things are dropping in place and are coming together for a feature still missing, namely, support for the business keyboard. As the PET’s business keyboard features both typewriter-style numerals on the top row of the keyboard as well as a separate numeric keypad, which comes with its own key codes, any kind of emulated keypad is strictly a requirement for this to be of any use in the era of laptops and reduced keyboards. (Some laptops come with a NUM-LOCK feature, but others, like MacBooks, don’t have any of this. Hence, it’s up to the emulator to provide for this.) As the business keyboard also comes with its own keyboard matrix, we’ll have to replace the editor ROM in order for this to work. Which is already provided for by the new ROM architecture.

Other, I’m happy to announce that the CPU emulation passes Klaus Dormann’s functional test suite for the 6502 and the extensive decimal mode (BCD) test, which is also true for the closely related virtual 6502 emulation. The virtual 6502 suite also saw the addition of a new member, a tiny hex-editor for quick hacks of 8-bit binaries and hex-dumps (with special support for Commodore 8-bit PRG-files). Moreover, these apps now enforce their unique window identifier, which should provide improved interoperability, when switching between them, regardless of where you came from or how you navigated there.

Well, that’s it, for this time, but there may be coming more….