SearchA-ZP › Psion Organiser II LZ64

Psion Organiser II LZ64

1989 Freeware Online

The Psion Organiser II LZ64 is the top model of the Organiser II range: a hand-held computer with a four-line, 20-character LCD and 64 KB of RAM, built around a Hitachi HD6303 (a Motorola 6800-family CPU). This emulator boots the authentic Psion LZ64 operating-system ROM to the real main menu in the browser, rendering only the four-line LCD and taking input through an on-screen Organiser keypad and the physical keyboard. It reuses the CPU, memory, bus and keyboard-matrix logic of Jaap Scherphuis' "Jape" emulator.

Runs on: Web browser

Psion Organiser II LZ64 Online Emulator

Play Psion Organiser II LZ64 using JavaScript directly in your browser.

Configurations

ConfigurationEmulatorMachineOSLegal
Psion Organiser II LZ64 (OS 4.6a)Psion Organiser II LZ64Psion Organiser II LZ64greyOpen ⛶
Psion Organiser II LZ64 (OS 4.6b)Psion Organiser II LZ64Psion Organiser II LZ64greyOpen ⛶
Psion Organiser II LZ64 (OS 4.5)Psion Organiser II LZ64Psion Organiser II LZ64greyOpen ⛶
Psion Organiser II LZ64 (OS 4.4)Psion Organiser II LZ64Psion Organiser II LZ64greyOpen ⛶
Psion Organiser II LZ64 (OS 4.3)Psion Organiser II LZ64Psion Organiser II LZ64greyOpen ⛶

Machines emulated

Chips

Notes

Embedding

The LZ64 is built from Jape's plain-global logic modules, but without Jape's faceplate compositor (psion.js). The canvas is nothing but the four-line LCD, drawn straight from the vendored Display core. Vendor src/** (the eight logic scripts and the LZ64 system ROM under roms/) and load the scripts in dependency order, then wire the machine yourself:

var display  = new Display(ctx, 4, { scale:4, offsetx:18, offsety:18 });
var romfile  = new BinaryFile(J+"roms/46a-lz64.rom", false);
var memory   = new Memory(64, romfile);          // 64 KB RAM — the "64" in LZ64
var keyboard = new Keyboard(KeyboardLayout.Normal);
var bus      = new Bus(memory, display, keyboard);
var cpu      = new HD6303(bus);
bus.onSwitchOnOff = function(){ cpu.onSwitchOnOff(); };
keyboard.enable();

Four lines, not two. Display(ctx,4,…) selects the LZ 20-column, four-line character map and the four-line screen-to-memory table. The extra opts argument (added for emulators.org) overrides the pixel scale and origin so the LCD renders on its own bare canvas instead of at the coordinates of Jape's device GIF.

Powering on. The Organiser starts switched off. It powers on the way the real machine does: hold ON/CLEAR (Escape) and let an output-compare interrupt fire; the semi-custom chip then calls bus.switchOn(), which boots the HD6303 from its reset vector to the menu. Our loop presses ON at start-up and releases it once bus.isSwitchedOff() clears.

MemberKindWhat it does
cpu.execute(ticks)methodRun the HD6303 for a budget of clock ticks — a whole video frame at a time in free-run.
cpu.dbgStep()methodRun exactly one instruction — the single-step primitive.
cpu.dbgRegs() / dbgSetReg()methodRead the live A,B,D,X,SP,PC,P and flags, and write them back.
memory.read(a)methodSide-effect-free bus read: RAM below $8000, banked ROM above. Feeds the hex/disasm views.
bus.write(a,v)methodThe CPU write path; we wrap it to implement write watchpoints.

Debugger integration

The plug-in psion-lz64-debug.js reads window.EMU_BOOT and calls EmuKit.defineMachine with the transport, the full HD6303 register set (A, B, D, X, SP, PC, P and the six condition flags, all writable) and three memory views, all disassembled by the shared hd6301 decoder.

Three side-effect-free views. One "Address space (64K)" view is what the CPU sees right now (RAM below $8000, the currently-paged ROM bank above); a second exposes the whole 64 KB OS ROM image linearly; a third the whole 64 KB RAM. None of them touch the I/O window at 00–$3FF, so opening a view never disturbs the machine.

The HD6301/6303 decoder is shared, not new. The LZ64 reuses the existing /debugger/src/cpus/hd6301.js disassembler — a flat opcode table for the 6801 set plus the 6303 extras (AIM, OIM, EIM, TIM, XGDX, SLP), covering the inherent, immediate, direct, extended, indexed and relative modes. Unknown bytes print as .byte.

EmuKit.defineMachine({
  id: 'organiser-ii-lz64', decoder: 'hd6301',
  transport: EMU_BOOT.transport,        // pause/step/breakpoints/watchpoints
  cpu: { registers(){ /* A,B,D,X,SP,PC,P + flags, each with set() */ } },
  chips: [ busView, romView, ramView ]
});

Breakpoints and watchpoints. When execution breakpoints are set the loop steps one instruction at a time and compares PC against the set; otherwise it runs a whole frame at once. Write watchpoints wrap bus.write and halt the loop the instant a watched address is written.

Architecture

The Psion Organiser II LZ64 (1989) is a hand-held computer built around a Hitachi HD6303 (a Motorola 6800-family CPU). The LZ64 is the top model: a four-line 20-character LCD and 64 KB of RAM, versus the two-line 16-character CM/XP. It is modelled here as a set of cooperating plain objects:

  • HD6303 — the CPU. execute() is a fetch/decode/execute switch over all 256 opcodes, including the 6301/6303 additions.
  • Bus — the semi-custom gate array: processor ports, the display registers, datapack control lines, the keyboard/clock counter, and the on/off and interrupt logic.
  • Memory — 256 bytes of processor RAM, 64 KB of banked main RAM and the banked 64 KB system ROM.
  • Display — the four-line HD44780-style LCD, drawn straight onto the canvas from its own 5x8 character generator (the only part of the device we render).
  • Keyboard — the 6x6 membrane matrix, scanned through port 5 and the counter, including the ON key.
  • Pack — datapack / Flashpak images, not loaded in the default boot.