Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ワープロって実は計算機で
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Chiharu Shirasaka
August 09, 2025
Programming
1.8k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ワープロって実は計算機で
Kernel/VM探検隊@東京 No18
Chiharu Shirasaka
August 09, 2025
More Decks by Chiharu Shirasaka
See All by Chiharu Shirasaka
ハンディターミナルでLinuxを動かしてみた
pepepper
1
1.7k
電子辞書は任意バイナリの夢を見るか? ver1.1
pepepper
0
390
電子辞書は任意バイナリの夢を見るか
pepepper
0
240
Other Decks in Programming
See All in Programming
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
190
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
730
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
210
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
210
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
220
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
120
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
130
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
130
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
360
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
610
The NotImplementedError Problem in Ruby
koic
1
910
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
2
620
Featured
See All Featured
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
310
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
210
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
250
Building Applications with DynamoDB
mza
96
7.1k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
400
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
A designer walks into a library…
pauljervisheath
211
24k
30 Presentation Tips
portentint
PRO
1
330
Building an army of robots
kneath
306
46k
Transcript
ワープロって実は計算機で Kernel/VM探検隊@東京 No18 @pepepper_cpp
自己紹介 • やんごとなき方がお通いになられていることで話題の某大学の 修士2年 • 低レイヤのあたりで蠢いている • 変なものを計算機に仕立て上げるのが得意(?) – 電子辞書とか
ワープロてなんや • かつてコンピューターは日本語が不自由だった – かな漢字変換や日本語フォントて結構メモリ食う – しかも昔のパソコンは高え • 日本語を扱うことに特化した物体→ワードプロセッサー –
気持ち安いかな・・・?(OASYS LX-7500SD 23万円) • まあ末期の上位機種ではあるので高いのかも • コンピューターが強くなるに従ってワープロも機能が増える – 表計算 グラフィック インターネット・・・ – 最終的にコンピューターに吸われてワープロ専用機は姿を消した
今回の犠牲者 • 富士通製 OASYS LX-7500SD(1998年製)
何ができんねん • 告知ツイートから考える
ワープロのOS • ワープロモードとは別にMS-DOSモードがある – 理由は後述 – MS-DOSのバージョンは3.1くらい • 1.2MBフォーマットのDOSディスクにアクセス可能 –
任意のプログラムを実行可能(制約あり) • PC/AT互換機じゃないんで・・・ • ワープロ側含めシステムは基本的にROM内に存在 – 旧機種だと根幹部分を揮発性メモリに読んでたりする • のでシステムディスクがないと使い物にならなかった – の割に中古だとシステムディスク欠品が多い
ワープロのCPU • なんとAMD製 Am486(66MHz) – i486の互換品 – 過去機種だと VM Technology製
VM865C110HL • メモリは4MBくらいありそう? – 後の機種のLX-9500SDでは倍増 • プロテクテッドモードに入ってまともに使えるかは不明 – 使えたらコード書くの楽になるんだが・・・
ワープロのネットワーク・ブラウザ • なんとこの機種はモデム内蔵 – 33.6Kbpsまで • 後継機種だと56kに対応 • NiftyServe接続用「AutoCom」 –
このためにMS-DOSが搭載されている • Webブラウザもある – がHTTP/1.0にしか対応していない!!!! • 某芸能人のサイトは魔改造されたプロキシがないと見れない • 当然SSLにも対応していない – 後継機種だとSSLに対応しているらしい
ワープロのエディタ • 当然ワープロとしてのエディタもあるが・・・ • なぜかVectorにOASYS用Vz Editor差分が存在する – 実はとあるパソコンへの移植版の移植版であり・・・
ワープロのその他 • 実は画面タッチで操作可能! – これでお絵描きも可能 • 6色メガブラシ(?)できれいな虹もス〜イスイ(???) • ディスクドライブはスーパーディスク(LS-120) –
売れてなさすぎてメディアが高い! • プリンターもついている – インクリボンで普通紙に なしでも感熱紙に印刷可能 • PCMCIAのスロットがある – がデータ用SRAMカードとスマートメディア変換くらい? • フラッシュメモリ・ATAカードは使用不可らしい
ワープロの中身
ワープロの中身 • チップ数が思ったより少ない – うげ デカいゲートアレイが2つある • タイマーとか割り込みコントローラが多分まとめられている • どこのアドレスに何がいるのさ!
• 右下のROMがx86 リアルモードでアクセスできる容量を超えている – そもそもRAM 4MBも超えてる – 「何」が挟まっている? • MN89304って石は画面の方に線が行ってるっぽいぞ・・・ – データシート出ないんだけど! – 横には512KBのDRAMがいる
ワープロの画面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
VGAとかSVGAとか • ここでのVGAは狭義のVGA – IBM社が開発したVideo Graphics Arrayというボード – 仕様が公開されている •
表示可能なグラフィックモード(の一部) – 640x480 16色/白黒 – 320x200 256色 • VGAを超える解像度・色数を扱えるものがSVGA(Super VGA) – 各社メーカーが勝手に拡張 • 拡張部分がバラバラの制御に – VGAが持っていたメモリウインドウ(128KB)に入り切らない • どうすんねん
当然解析に回されるが・・・ • 「機種によりBIOSに細かい差異があるが、おおよそFMR互換 であったので」(Wikipedia「OASYS」) – FMRは過去に富士通が販売していたパソコン – Vz Editorのバイナリを比較するとシステムコールが似ている –
BIOSを追えばIOアドレスも制御方法もわかるってわけ • 電子辞書の128倍楽(あっちはRAM 128MBなので) • FMRのシステムの情報ほとんどネットにないんだけど – FMRはビジネス向けの色が強かったとかなんとか • 富士通が別に販売していたFM-TOWNSもおおよそFMR互換 – こっちは情報が転がっている • がFM-TOWNS側に欲しい情報が書かれていない – 残るは「富士通FMRシリーズ徹底解析マニュアル」のみ
仕方がないので • 国会図書館に行きました – 2月だったので梅の花が咲いていた – 国立国会図書館内限定の資料なので行かざるを得ない • コンソールBIOSの情報をメモって帰る –
コンソールBIOSが画面制御を担っている • GhidraにDOSのメモリダンプを突っ込む – リアルモードの扱いが微妙なので 手作業でセグメントの参照を調整 • 変なレジスタアクセス見つけた! – FMRから拡張された部分のBIOSにあった
結局どういう仕組みだったか • まず512KBのVRAMを4つに分ける – これで1ウインドウあたりのサイズはVGAと同じに • でSequencer Register(IO 0x3C4)の0x8番レジスタに値を書く –
下位4bitが1だと640x480x256colorに 0だと白黒に – 上位4bitでメモリウインドウを選択 • でOASYSのチップセット側でメモリバンクを指定する (IO 0xFF0A) – 0x00でVRAMの下位64KB 0x40で上位64KBが見える
無事画面表示を掌握 • 技術書典でお品書き表示機にしていた – 前日に思いついて閉店直前のアキヨドで3万円のポータブル電源 を購入 – ウケは良かったのでヨシ! • ソフトウェア側での制御は6500SD〜9500SDまでたぶん共通
さて
30分枠を生やしておいて ここで終わるわけ ないよね?
ワープロって実は計算機で だからプレゼンとかできるよね? Kernel/VM探検隊@東京 No18 @pepepper_cpp ここより先 実装しながら書いているので言うことが右往左往します
最近の流行 • パソコン以外でプレゼンをするのが流行っているらしい – 「ルーターでプレゼンする」(puhitaku) • Okayama Revengers LT 大会
#2 でのプレゼン – 「電子辞書をネットに繋げてみた」(RasPython3) • Kernel/VM探検隊@関西 11回目 でのプレゼン • 十分な性能(とIO)のある計算機ならプレゼンが可能 – ところでワープロって • キーボードがある • 画面がある • ディスクドライブがある • i486がある • 行けるな • 実は前回のKernel/VM時点ではハンディターミナルでプレゼン するつもりだった
ワープロプレゼンの課題 • 画面はあるが画面外部出力はない – あったとして時代的にHDMIではない • フロッピーって遅い – 画面の生データで1枚あたり300KBくらい必要 –
一方フロッピードライブは500kbpsくらいらしい • シーク抜きで読み出しに5秒かかる計算 • そんなプレゼン見るのかったるいわ!
ワープロプレゼンの課題解決策 • 画面はあるが画面外部出力はない – あったとしてHDMIではない →FPGAに液晶の信号を食わせよう • フロッピーって遅い – 画面の生データで1枚あたり300KBくらい必要
– 一方フロッピードライブは500kbpsくらいらしい • シーク抜きで読み出しに5秒かかる計算 • そんなプレゼン見るのかったるいわ! →GIF形式にして適当に圧縮してもらおう
画面信号変換君(仮名)の設計 • 信号の情報のために再び液晶コントローラのデータシートへ – うわうわうわうわ • ピクセルデータがクロック間で泣き別れする – 3clk集めると8pixel分が揃う •
しかもDCLKが出ていないタイミングでV/HSYNCが変化する – なんかシフトレジスタで受けることを想定していそう – DCLK基準だけで動かせない
画面信号変換君(仮名)の設計2 • しかもなんか各色1bitしかない – 256/260K paletteとか言ってるのに • 画面を撮った動画を見るとチラついているような・・・ – もしかしてフレーム間でPWMして色を出している・・・?
• 皆さんの目を守りたい – 遅延のあるSTN液晶なら問題ないが現代の液晶では見える – 複数フレーム間のデータで平均を取る? 4bit per colorくらいで • しかしなんともメモリアクセスが間に合わない – アービトレーションむずい • ということで我慢してください – とはいえスライドは白黒なのであんまり気にならないかも
画面信号変換君(仮名)の設計3 • 画面コネクタのピンアサインを調べねば • オシロスコープで信号を見る – 多分一番速いやつがDCLK 次がHSYNC 次がVSYNC –
ランダムっぽいのがピクセルデータであろう • なんかVSYNCが73Hzくらいあるんですけど – フレームレートの差分を吸収しなければならない – 60Hzだったらそのまま流せたのに • 信号パターンだけじゃピクセルの信号のコネクタ上の並びが わからん – 一本ずつピクセルの線を抜く→色がおかしいラインが出る • このラインの左端からの位置と抜けた色成分から判定する
基板作る • 最初はスーパーディスクエミュレーターと一体で設計
基板作る • Kernel/VMに間に合わねえ! 画面部分だけで設計する – 7/22くらいに基板が届いた • OASYS側は5Vの信号で吐いてくる – バストランシーバーで3.3Vに落とす
– が ダンピング抵抗入れてなくてDCLKがリンギングで5Vに! – まあ過去に5V入れても動いてたのでヨシ! • 音をTMDSに流せるようにADCを配置 – しかしクロックが生成できなかったのでお蔵入り
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°回転)
ワープロのコードを書く • 前に作っておいた7500sd-imageshowを改修 • GIFの展開アルゴリズムを書いている余裕はない – gifdecを魔改造していい感じにしたかった • リニアではないメモリへの書き込みについて考えたくない •
画像先読みでお茶を濁す – 1スライドが5秒未満になることはそんなに無いだろう – ほぼすべてのコンベンショナルメモリを食いつぶすという問題 • EMM.SYSを使えば一応拡張メモリを使えるが・・・ – やっぱり食いつぶしたのでEMMを使う • EMM(Expanded Memory Manager)ってなぁに? – 本来DOS(リアルモード)は1MBのメモリ領域のみにアクセス可能 – 1MBの外のメモリを1MBの内側の領域に割り当てる • あら不思議 メモリがいっぱい使える(+7MBくらい) • あとはスライドショーっぽい感じの操作を実装するだけ
各種接続 • 一応変換器の出力を直接機器に繋ぐことはできる – よその機械に胡乱なもの繋げて破壊したくね〜〜〜〜 • 午後イチでやらかしたら怒られるで済まない • KOBA789氏からアリエクHDMIキャプチャを買い上げた –
パッと刺したら映るまでは行かないが設定すれば映る – 一度PCを経由しキャプチャした画面を流す • 高精細な画面とワープロの画面を突然行き来して 視聴者を怖がらせましょう! • なんとかなってよかった〜
各種解析情報 • OASYSに関する情報 – https://www.pepepper.net/oasys/ – 溜め込んで放置している情報も順次追記していきたい • スライド表示する君の改修元 –
https://github.com/pepepper/7500sd-imageshow