Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ワープロって実は計算機で

 ワープロって実は計算機で

Kernel/VM探検隊@東京 No18

Avatar for Chiharu Shirasaka

Chiharu Shirasaka

August 09, 2025
Tweet

More Decks by Chiharu Shirasaka

Other Decks in Programming

Transcript

  1. ワープロてなんや • かつてコンピューターは日本語が不自由だった – かな漢字変換や日本語フォントて結構メモリ食う – しかも昔のパソコンは高え • 日本語を扱うことに特化した物体→ワードプロセッサー –

    気持ち安いかな・・・?(OASYS LX-7500SD 23万円) • まあ末期の上位機種ではあるので高いのかも • コンピューターが強くなるに従ってワープロも機能が増える – 表計算 グラフィック インターネット・・・ – 最終的にコンピューターに吸われてワープロ専用機は姿を消した
  2. ワープロのOS • ワープロモードとは別にMS-DOSモードがある – 理由は後述 – MS-DOSのバージョンは3.1くらい • 1.2MBフォーマットのDOSディスクにアクセス可能 –

    任意のプログラムを実行可能(制約あり) • PC/AT互換機じゃないんで・・・ • ワープロ側含めシステムは基本的にROM内に存在 – 旧機種だと根幹部分を揮発性メモリに読んでたりする • のでシステムディスクがないと使い物にならなかった – の割に中古だとシステムディスク欠品が多い
  3. ワープロのCPU • なんとAMD製 Am486(66MHz) – i486の互換品 – 過去機種だと VM Technology製

    VM865C110HL • メモリは4MBくらいありそう? – 後の機種のLX-9500SDでは倍増 • プロテクテッドモードに入ってまともに使えるかは不明 – 使えたらコード書くの楽になるんだが・・・
  4. ワープロのネットワーク・ブラウザ • なんとこの機種はモデム内蔵 – 33.6Kbpsまで • 後継機種だと56kに対応 • NiftyServe接続用「AutoCom」 –

    このためにMS-DOSが搭載されている • Webブラウザもある – がHTTP/1.0にしか対応していない!!!! • 某芸能人のサイトは魔改造されたプロキシがないと見れない • 当然SSLにも対応していない – 後継機種だとSSLに対応しているらしい
  5. ワープロのその他 • 実は画面タッチで操作可能! – これでお絵描きも可能 • 6色メガブラシ(?)できれいな虹もス〜イスイ(???) • ディスクドライブはスーパーディスク(LS-120) –

    売れてなさすぎてメディアが高い! • プリンターもついている – インクリボンで普通紙に なしでも感熱紙に印刷可能 • PCMCIAのスロットがある – がデータ用SRAMカードとスマートメディア変換くらい? • フラッシュメモリ・ATAカードは使用不可らしい
  6. ワープロの中身 • チップ数が思ったより少ない – うげ デカいゲートアレイが2つある • タイマーとか割り込みコントローラが多分まとめられている • どこのアドレスに何がいるのさ!

    • 右下のROMがx86 リアルモードでアクセスできる容量を超えている – そもそもRAM 4MBも超えてる – 「何」が挟まっている? • MN89304って石は画面の方に線が行ってるっぽいぞ・・・ – データシート出ないんだけど! – 横には512KBのDRAMがいる
  7. ワープロの画面IC • MN8930”4”は出ないがMN8930”2”とかは出る – 800x600で256色出せる液晶コントローラーらしい – “S”VGAだ!!! • “with IBM™

    VGA-compatible registers“ – 拡張していないとは言っていない https://www.alldatasheet.jp/datasheet-pdf/view/14309/PANASONIC/MN89302.html
  8. VGAとかSVGAとか • ここでのVGAは狭義のVGA – IBM社が開発したVideo Graphics Arrayというボード – 仕様が公開されている •

    表示可能なグラフィックモード(の一部) – 640x480 16色/白黒 – 320x200 256色 • VGAを超える解像度・色数を扱えるものがSVGA(Super VGA) – 各社メーカーが勝手に拡張 • 拡張部分がバラバラの制御に – VGAが持っていたメモリウインドウ(128KB)に入り切らない • どうすんねん
  9. 当然解析に回されるが・・・ • 「機種によりBIOSに細かい差異があるが、おおよそFMR互換 であったので」(Wikipedia「OASYS」) – FMRは過去に富士通が販売していたパソコン – Vz Editorのバイナリを比較するとシステムコールが似ている –

    BIOSを追えばIOアドレスも制御方法もわかるってわけ • 電子辞書の128倍楽(あっちはRAM 128MBなので) • FMRのシステムの情報ほとんどネットにないんだけど – FMRはビジネス向けの色が強かったとかなんとか • 富士通が別に販売していたFM-TOWNSもおおよそFMR互換 – こっちは情報が転がっている • がFM-TOWNS側に欲しい情報が書かれていない – 残るは「富士通FMRシリーズ徹底解析マニュアル」のみ
  10. 仕方がないので • 国会図書館に行きました – 2月だったので梅の花が咲いていた – 国立国会図書館内限定の資料なので行かざるを得ない • コンソールBIOSの情報をメモって帰る –

    コンソールBIOSが画面制御を担っている • GhidraにDOSのメモリダンプを突っ込む – リアルモードの扱いが微妙なので 手作業でセグメントの参照を調整 • 変なレジスタアクセス見つけた! – FMRから拡張された部分のBIOSにあった
  11. 結局どういう仕組みだったか • まず512KBのVRAMを4つに分ける – これで1ウインドウあたりのサイズはVGAと同じに • でSequencer Register(IO 0x3C4)の0x8番レジスタに値を書く –

    下位4bitが1だと640x480x256colorに 0だと白黒に – 上位4bitでメモリウインドウを選択 • でOASYSのチップセット側でメモリバンクを指定する (IO 0xFF0A) – 0x00でVRAMの下位64KB 0x40で上位64KBが見える
  12. 最近の流行 • パソコン以外でプレゼンをするのが流行っているらしい – 「ルーターでプレゼンする」(puhitaku) • Okayama Revengers LT 大会

    #2 でのプレゼン – 「電子辞書をネットに繋げてみた」(RasPython3) • Kernel/VM探検隊@関西 11回目 でのプレゼン • 十分な性能(とIO)のある計算機ならプレゼンが可能 – ところでワープロって • キーボードがある • 画面がある • ディスクドライブがある • i486がある • 行けるな • 実は前回のKernel/VM時点ではハンディターミナルでプレゼン するつもりだった
  13. ワープロプレゼンの課題 • 画面はあるが画面外部出力はない – あったとして時代的にHDMIではない • フロッピーって遅い – 画面の生データで1枚あたり300KBくらい必要 –

    一方フロッピードライブは500kbpsくらいらしい • シーク抜きで読み出しに5秒かかる計算 • そんなプレゼン見るのかったるいわ!
  14. ワープロプレゼンの課題解決策 • 画面はあるが画面外部出力はない – あったとしてHDMIではない →FPGAに液晶の信号を食わせよう • フロッピーって遅い – 画面の生データで1枚あたり300KBくらい必要

    – 一方フロッピードライブは500kbpsくらいらしい • シーク抜きで読み出しに5秒かかる計算 • そんなプレゼン見るのかったるいわ! →GIF形式にして適当に圧縮してもらおう
  15. 画面信号変換君(仮名)の設計 • 信号の情報のために再び液晶コントローラのデータシートへ – うわうわうわうわ • ピクセルデータがクロック間で泣き別れする – 3clk集めると8pixel分が揃う •

    しかもDCLKが出ていないタイミングでV/HSYNCが変化する – なんかシフトレジスタで受けることを想定していそう – DCLK基準だけで動かせない
  16. 画面信号変換君(仮名)の設計2 • しかもなんか各色1bitしかない – 256/260K paletteとか言ってるのに • 画面を撮った動画を見るとチラついているような・・・ – もしかしてフレーム間でPWMして色を出している・・・?

    • 皆さんの目を守りたい – 遅延のあるSTN液晶なら問題ないが現代の液晶では見える – 複数フレーム間のデータで平均を取る? 4bit per colorくらいで • しかしなんともメモリアクセスが間に合わない – アービトレーションむずい • ということで我慢してください – とはいえスライドは白黒なのであんまり気にならないかも
  17. 画面信号変換君(仮名)の設計3 • 画面コネクタのピンアサインを調べねば • オシロスコープで信号を見る – 多分一番速いやつがDCLK 次がHSYNC 次がVSYNC –

    ランダムっぽいのがピクセルデータであろう • なんかVSYNCが73Hzくらいあるんですけど – フレームレートの差分を吸収しなければならない – 60Hzだったらそのまま流せたのに • 信号パターンだけじゃピクセルの信号のコネクタ上の並びが わからん – 一本ずつピクセルの線を抜く→色がおかしいラインが出る • このラインの左端からの位置と抜けた色成分から判定する
  18. 基板作る • Kernel/VMに間に合わねえ! 画面部分だけで設計する – 7/22くらいに基板が届いた • OASYS側は5Vの信号で吐いてくる – バストランシーバーで3.3Vに落とす

    – が ダンピング抵抗入れてなくてDCLKがリンギングで5Vに! – まあ過去に5V入れても動いてたのでヨシ! • 音をTMDSに流せるようにADCを配置 – しかしクロックが生成できなかったのでお蔵入り
  19. FPGAのコードを書く • 1単位が3bit(1bit per color)というのは扱いづらい – パディングを入れて2^n bit単位に後段で拡張する • 愚直にやると初段の入力幅が1920bitとかになる

    – GowinのFIFO IPは1024bit幅までしか作れない – クソデカreg+wireでFIFOに詰められる形にする • 落ちるFmaxとか足りないBRAMとかと格闘 – 気づけば前日 ←あまりにも大きすぎるregによって ありえない形になった Post Synthesis Netlist Viewer (90°回転)
  20. ワープロのコードを書く • 前に作っておいた7500sd-imageshowを改修 • GIFの展開アルゴリズムを書いている余裕はない – gifdecを魔改造していい感じにしたかった • リニアではないメモリへの書き込みについて考えたくない •

    画像先読みでお茶を濁す – 1スライドが5秒未満になることはそんなに無いだろう – ほぼすべてのコンベンショナルメモリを食いつぶすという問題 • EMM.SYSを使えば一応拡張メモリを使えるが・・・ – やっぱり食いつぶしたのでEMMを使う • EMM(Expanded Memory Manager)ってなぁに? – 本来DOS(リアルモード)は1MBのメモリ領域のみにアクセス可能 – 1MBの外のメモリを1MBの内側の領域に割り当てる • あら不思議 メモリがいっぱい使える(+7MBくらい) • あとはスライドショーっぽい感じの操作を実装するだけ
  21. 各種接続 • 一応変換器の出力を直接機器に繋ぐことはできる – よその機械に胡乱なもの繋げて破壊したくね〜〜〜〜 • 午後イチでやらかしたら怒られるで済まない • KOBA789氏からアリエクHDMIキャプチャを買い上げた –

    パッと刺したら映るまでは行かないが設定すれば映る – 一度PCを経由しキャプチャした画面を流す • 高精細な画面とワープロの画面を突然行き来して 視聴者を怖がらせましょう! • なんとかなってよかった〜