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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
400
電子辞書は任意バイナリの夢を見るか
pepepper
0
250
Other Decks in Programming
See All in Programming
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
670
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
220
yield再入門 #phpcon
o0h
PRO
0
980
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
140
Google Apps Script で Ruby を動かす
kawahara
0
140
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
460
「人を評価する AI」の設計と実装
ryoyanara
0
180
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
760
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
590
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
730
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
4k
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
180
Featured
See All Featured
Building an army of robots
kneath
306
46k
Visualization
eitanlees
152
17k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
650
Automating Front-end Workflow
addyosmani
1370
210k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
240
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
66
57k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Skip the Path - Find Your Career Trail
mkilby
1
180
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
How GitHub (no longer) Works
holman
316
150k
Unsuck your backbone
ammeep
672
58k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
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