2023年12月31日日曜日

New City Hero @ j80/mac

はじめに 

という事で、せっかくお時間いただいて助けていただいたので、しっかり情報として残していきたいと思います。

まず、New City Heroの現在の入手方法については内藤さん御自身のアナウンスを御覧ください。無条件で入手できるわけではなく、 最初に配布していた頃の条件「動作可能な実機を所有している人」、または「PC-8001miniとパッケージ版を買ったけどダウンロードしそびれた人」への救済措置となっているので御注意を。後者の条件を今から揃えるのは難しいですが、前者はPCG互換ハードを自作するという道が残されており、この手のソフトに興味を持つ人にとっては比較的難易度の低い条件となってるかと思います。

この件は内藤さんが定期的にツイートしており、自分は比較的最近「大変言いにくいのですが、実は買ったまま積んでいて……」と白状して配布して頂きました。バージョンが最終版のv1.2.3ですが、これはビルドツールが変更になっただけで、コード的にはv1.2.2と同一だそうです。なので、v1.2.2の方も安心してこのブログを参考にできるはず。

事前準備

エミュレータでの動作に必要なROMの手配については、内藤さんのPC-8001開発環境整備/ハードウェア編を読んで実機を入手し、PC-8001開発環境整備/ソフトウェア編を参考に、TINY野郎さんのツールを使って読み出します。ビデオキャプチャ環境を用意するか、しっかり固定すればスマホでの撮影でも大丈夫そう。たぶん内藤さんのブログの時点からさらに更新されてるかな?付属のcmtは動作しますし、実機ではwavファイルから直接持ってけば大丈夫かと。あとプログラム名が変わっていて、読み込むには「cload"b2mv8」です。
ただ、フォントデータはCPUから見えないし、今から実機でPCGを……とか考えてる人なら、直接ROM引っこ抜いて読む方が手っ取り早くて楽って人は多そう(笑)今どき5,000円前後でROMライター買えるので、これを気に手を出すのもあり。

j80

j80は内藤さんのソフトウェア編にかかれている通り、HAL 8999さんのOut of STANDARD内にあるPC-8001のページにて配布されています。最新版のj80_r6_122のみが公開されており、内藤さんが元々検証していたバージョンとは違います。最初は動作せず、このバージョンの違いを疑ったのですが、濡れ衣でした。

ここれは解説例の少ないmacを例に手順と勘所を記録しておきます。

まずはインストール先を決めます。自分は~/opt/rpc/8001としました。以降ではこれを$(P8)と呼称して進めます。

$ cd $(P8)
$ mkdir -p app/res
$ cd app
$ lha x <ダウンロードしたパス>/j80_r6_122.lzh

lhaコマンドはbrewとかで入れるか、他の手段でlzhを展開するかしてください。mac使いでもこの手のをいじってる人なら何かしら環境を持ってるかと思います。

これで、以下のようなファイル構成になるはず。
$(P8)
  + app
    + j80_r6_122
    |  _j80.bat
    |  _j80.choice.bat
    |  _j80.setup.bat
    |  _j80.twins.bat
    |  + config
    |  + debug
    |  + display
    |  + doc
    |  j80.cfg
    |  j80.cmd
    |  j80.jar
    |  + keyboard
    |  pc-8001_test_cmu800.cfg
    |  pc-8001_test_hsync.cfg
    |  pc-8801_test_cmu800.cfg
    |  pc-8801_test_hsync.cfg
    |  + touchpanel
    |  + util
    + res
これをベースに設定ファイルの修正とROMの追加を行っていきます。

ROMの配置は、ベースとなるj80.cfgの修正を最小限にするために以下のようにします。
$(P8)
  + res
    + j80
    |  PC-8001.257073260.rom
    |  PC-8001.636.fon
この名前はデフォルトで有効になっているv1.1ROM向けの配置ですが、他のバージョンをこの名前で置いても問題ないと思いますし、気持ち悪ければ別ファイル名で置いて、cfgファイルを適切に修正すればOKです。

次にj80.cfgをベースにしたnch.cfgを作成します。ここでは設定差分だけ例に上げます。

$ diff j80.cfg nch.cfg|iconv -f sjis
340c340
<       DISK    ../res/j80/PC-8031-2.rom
---
> //    DISK    ../res/j80/PC-8031-2.rom
347c347
< //    ENHANCE 1        // 32K :「Full Dot Color PCG」改造なし
---
>       ENHANCE 1        // 32K :「Full Dot Color PCG」改造なし
そうそう、最近あまりお目にかからないSJISなので編集時は注意が必要。たぶんコメントだけだから壊しても大丈夫かとは思うけど、SJISはエスケープコードが怖いので、SJISのまま編集しつつ行末の日本語はいじらない、またはUTF-8なりに変換してから編集しましょう。

この設定で大切なのは2点で(そりゃ2箇所しか修正してないしね)
  1. DISKは無効化しましょう
  2. メインメモリの設定は32Kにしましょう
です。1に関してはROMがなければフォールバックで無効化されるみたいなので、無視しても大丈夫そうですが、後々足した時にトラブルの元になるので、覚えてるうちにコメントアウトしちゃいましょう。2は重要で、これを忘れるとテープから読み出し後にハングアップします。具体的には*G8001と表示されたところで止まる。自分は最初これを忘れてました。

この件に関しては、Wikipediaによれば
発売当初は搭載メモリ16Kモデルのみの販売であった。さらに16Kの増設が可能で、増設して購入するユーザが大半であったため、32Kモデルも後に販売された。
との事なので、実機で挑戦する際には搭載メモリは要注意。これとは別に更に8KBの拡張にも対応しているようですが、そっちは必須ではなさそう。M.K.さん販売のPSA基板にはNCH用とされた初代80向けの増設メモリー用端子が出てるんですが、ちょっと関係よく理解してないかも。要問合せになってるので聞いてみようかな。

これが出来たらあとは起動コマンドをshell script化するだけ。自分は$(P8)/j80_r67_122_nch.shとして以下のようなスクリプトを配置。以降はこいつに実効属性付けといて叩けば楽ちん&確実に起動。

#!/bin/sh
#

cd `dirname $0`/bin/j80_r6_122
echo OK | java -jar -Dsun.java2d.d3d=false \
-Dswing.boldMetal=false j80.jar nch.cfg

最初にスクリプトの起動名から相対なり絶対なりのパスを取得しておいて、展開したj80_r6_122のディレクトリに移動してます。あとはそこからの相対パスで設定ファイルのnch.cfgなり、その中で指定してるROMなりを読む感じ。

起動

この先もまぁ、昔のパソコンなのでそれなりに手間なので書いときます。

まずはPOWER ON、そしてPCG8100を有効化。

Okの後ろが化ければ正しく設定できた。

続けてテープを読ませるために指定して……

「mon」でモニタを起動して「L」で読み込み開始。エミュレータだと一瞬で読み込んで起動画面に。ここでもしメモリの設定を忘れてると以下のように「*G8001」と表示されて固まります。


という事で、macでも動いたよ、という報告とともに、自分がハマったポイントをまとめました。似たような道を通る人の参考になれば。

というわけで、自分は実機に向けてPSA向け部品手配に入ります。

参考情報

内藤さんのPC-8001関連のブログ一覧

ハードの準備から開発環境、技術詳細と幅広く丁寧に解説されていて流石です。


追記

起動時の自動電源ONとPCGの有効化も設定ファイルで指定できるそうです。

この設定、慣れてくると色々と便利そうです。引数でどの設定を使えるか選べるので、用途別にカスタマイズできますね。ちなみOPTIONはTAB区切りじゃないと認識しないようです。 

2023年12月20日水曜日

2023年何やった?

なんか新年早々忙しかった事しか覚えてなくて、良くないので来年から月ごとにメモしよう……と思ったけど、まずは今年をざらっとTwitterのログから俯瞰しとく。

お仕事

たまにはChromeのお仕事の宣伝もしとく。

MPArchっていうコアの部分のでかいデザイン変更をやりながら、FencedFramesとかPrerenderingが必要とする機能を作ってきて、それが落ち着いたのでPrerenderingをデスクトップ向けに出荷できる状態に調整する仕事(Chrome拡張のAPIの合意とか諸々)をやってたのが去年くらい?その後はAPIだけじゃなくChrome内部でPrerenderingを使うって仕事を推し進めていて、今はBookmarkBarとかNew Tab Pageから出来るようになってる。最近はこの辺りは実装は後輩に任せてるけど、Ray-Banさんとか国内外いくつかのパートナーさんが欲しがってた機能を突っ込んだりってのもやってた。

その後大きな話としてLinkPreviewって機能の導入を目指してあちこちのチームと調整してたのが今年一番大変だった仕事。Prerenderingの機能を有効活用しつつリンク先のページを確認するための機能。コアな部分は実装終わってて、あとはUI周りの調整。一応Canary/Devでお試し出来るので、どんなもんか確認してみて欲しい。

AI関連で集中開発やってた時期もあったんだけど、詳細は書けない気がするので割愛。

あと、入力は、帽険だ。

プライベートQ1

  • SUUMOさんに家のことを記事にしてもらった
  • サーバアップデートでしくって復旧作業
  • X68kの修理は別エントリにまとめてたので詳細は割愛
  • IONA-US v3基板の設計と海外先行出荷
  • IONA-SB設計と出荷
  • Mystic Warriorsのサントラ向けデジタル収録基板の設計、サウンドテスト開発
  • ガイアポリスのサウンドテスト開発
  • Ray'z Arcade Chronology向けのraycrisis基板調査
  • IONA-USでハンドル対応!
  • 民事裁判、被告として本人訴訟で一審で勝利
  • vint開発
  • Burnin' Rubberハーネス基板

プライベートQ2

  • IONA-US firmware v2シリーズ開発開始・公開
  • IONA-US/IONA-SB 高速化
  • IONA-US Lindberghの対応作業(主にハンドルとサイバースティック)
  • 究極タイガー基板修理(頓挫中……続きやらなきゃ……)
  • IONA-US ガンコン対応強化(タイムクライシスが頓挫中、基板壊した……)
  • DJターンテーブル追加、レコードわっしょい
  • MuseScore覚えて使うようになった
  • PHANTOM-06、セッションに向けて使い込み

プライベートQ3

  • セラムン・幽遊白書スタジオセッション
  • ハイパーネオジオ64の調査と改造(詳細未発表)
  • 民事裁判、被告として本人訴訟で二審で勝利

プライベートQ4

  • IONA-US マウス対応、タッチスクリーンも限定的に対応
  • IONA-US 高速化後のファームとexAの新型ファームに相性問題があったため、exAさんと調査・修正
  • IONA-US レイアウトページでWebUSB/WebHIDで入力チェックできるよう対応
  • Fusion360覚えて3Dプリントで68拡張カード脱着用プラを作ってみた
  • M5Stack Core2にCP/Mega88を移植してみたり、I2CでMoonshotと通信してみたり
  • パソコンミニMZと8001を他のRasPiやPine系、かつWindowシステム上で動く修正
  • Moonshot開発開始
  • 民事と同時に刑事でも争われてたけど不起訴で決着・勝利
  • ジムでトレーニング開始
  • 68Zサイバースティック対応パッチ
Q3は仕事がエグくてGitHub見ても草枯れてたので、ほんとこんなもんだったらしい。

ゲーム

ゼノクロとティアキンをクリアして満足です。あと超連射をやっと1周できるようになった。

他にはドラム教室通い続けてますってのと会社のメンバーで月イチくらいでスタジオれ練習してますってのと。あとはVRでDJイベントを月イチくらいで開催してフライヤーのデザインとかしたり、他のイベントにお呼ばれしてDJしたり。

あー、あとはあれだ!正月は長女が本来なら半年前に仕上がってるはずの中学伝統の論文制作が終わってなくて。先生も「もう、お父さん手伝って良いから、なんとか仕上げてください」って感じで。その時には第一稿もう上がってきててうちの子だけ空白。修正のタイミングで絶対に入れてくださいって、もう本当にえらい苦労したの、これだわ。
こういう逃げようと思ってたマネージメント業務から逃げ切れないの、この世は仮初めのトレーニング空間って可能性をより強く示唆するわ。