48キロバイトの中のデスクトップ
個人開発者が、初代48K ZX Spectrum向けにZ80アセンブリ言語で記述したグラフィカルデスクトップ「ZXDesk」を公開した。このオープンソースプロジェクトは、1982年発売のハードウェアにウィンドウ環境を実装し、厳しく制限されたメモリー内にコードと作業用データを収めている。
ZXDeskは、フォーカスと重なり順を持つ重ね合わせ可能なウィンドウ、プルダウンメニュー、ダイアログボックス、操作部品、イベントキューを備える。付属アプリにはメモ帳、時計、カレンダー、設定パネル、2ペインのファイルマネージャーがある。開発者によると、エミュレーターだけでなく実機のSpectrumでも動作し、69,888 Tステートからなる1表示フレーム内でウィンドウを移動できるという。
このプロジェクトはDigital ResearchのGEMデスクトップの移植として提示されたものではない。制作者は、3.5MHzプロセッサー、48KBのRAM、Spectrum特有の画面配置にすべての部品を適応させながら、状態を維持するグラフィカルな作業空間の使い心地を再現する試みだと説明する。1980年代に探究を始めた構想を完成させたものだ。
ハードウェアの制約が形作った設計
いくつかの設計上の選択は、この機械で反応の良いデスクトップを実現するために必要な技術的工夫の多さを示している。デバイス層は、Spectrumの画面用メモリーの入り組んだ配置から上位コードを切り離す。メインループは表示割り込みに処理を同期させ、画面のボーダー期間にポインター処理を行い、慎重に調整したタイミングで移動したウィンドウを再描画する。16スロットのリングバッファーが、生の入力をポインター、ボタン、キーボードのイベントへ変換する。
一時的な画面領域には、保存した描画面の小さなスタックを用い、メニューやウィンドウの表示を復元できるようにしている。ウィンドウのレコードは描画順と当たり判定の情報源を兼ね、状態の重複を減らす。ストレージ対応は交換可能なバックエンドの登録簿として構成し、ジャンプ命令を書き換えて呼び出し振り分けの負荷を抑える。操作部品は行を単位にしたコンパクトな表現を共有するため、設定、ファイル一覧、保存ダイアログに同じ基礎コードを使える。
リポジトリーは、不具合を防ぐための制限も記録している。ヒープはメモリーの末尾ではなくアドレスFF00で終わり、ブロックの走査時にアドレスが一周するのを防ぐため256バイトを犠牲にしている。ビルド時の検査は、コードが知らないうちに画面取り込み用バッファーへ伸びることを防ぐ。スクリプト入力モードでは同じ操作を再生し、ビルド間でタイミングや表示の変化を比較できる。
ZXDeskのビルドにはPasmoアセンブラーに加え、作者が再配布していないエミュレーターとesxDOSの部品を別途入手する必要がある。詳しいリポジトリーは、使えるレトロコンピューティングのプロジェクトであると同時に、1980年代初頭の制約下で現代的な操作画面の慣習を実現する技術記録でもある。



