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

The history of NetBSD/atari and support for ATARI compatible Milan / OSC2018Osaka

The history of NetBSD/atari and support for ATARI compatible Milan / OSC2018Osaka

OSC2018 大阪の NetBSDセミナーで発表した『NetBSD/atari の歴史と ATARI互換機 Milan サポート』のスライドです。

Izumi Tsutsui

January 27, 2018
Tweet

More Decks by Izumi Tsutsui

Other Decks in Programming

Transcript

  1. 今も60種類以上?  2018年1月現在 acorn32 algor alpha amd64 amiga amigappc arc

    atari bebox cats cesfic cobalt dreamcast emips epoc32 evbarm evbmips evbppc evbsh3 ews4800mips hp300 hpcarm hpcmips hpcsh i386 ibmnws hppa iyonix landisk luna68k mac68k macppc mipsco mmeye mvme68k mvmeppc netwinder news68k newsmips next68k ofppc playstation2 pmax prep rs6000 sandpoint sbmips sgimips shark sparc sparc64 sun2 sun3 vax x68k zaurus
  2. ATARI のコンピュータ  ATARI ST • 1985年発売 …80386やHP300登場の年 • MC68000

    8MHz 採用 • 外部バス16ビット(Sixteen) 内部演算32ビット(ThirtyTwo) から ST の名に • NetBSDは非サポート(MMU無し) だが、後の ATARI 機種の原型 https://en.wikipedia.org/wiki/Atari_ST © Bill Bertram, 2006 CC-BY-2.5 Attribution
  3. ATARI 用OS  “The Operating System” • DOSに似た GEMDOS と

    GUI の GEM で構成 • CP/M作成元のデジタルリサーチにより開発 • Free版の “EmuTOS” が今でも開発継続 https://en.wikipedia.org/wiki/Atari_TOS
  4. ATARI のコンピュータ  ATARI TT030 • 1990年発売 …なおX68030は1993年 • MC68030

    32MHz 採用 • 外部バス32ビット(ThirtyTwo) 内部演算32ビット(ThirtyTwo) から TT の名に • 当初からUNIX Workstation を 目指したが、開発遅れで振るわず https://en.wikipedia.org/wiki/Atari_TT030
  5. NetBSD/atari の始まり  「NetBSD移植勢」としては古参 •1994年の NetBSD/amiga 1.0 をベースに Leo Weppelman

    氏により TT030 を対象に移植作業開始 •1995年3月にNetBSDに正式portに •同年11月の NetBSD 1.1 が最初のリリース 当時は amiga, atari, mac68k, x68k 等々の68k勢が活発でした http://www.netbsd.org/ports/atari/history.html
  6. Milanとは • 1997年10月頃アナウンス、1998年登場? • PC-ATフォームマザーボード • MC68040 25MHz (68060オプションも存在) •

    72pin EDO SIMM x4 (max 512MB) • モトローラ 68901 MFP (タイマ、シリアル他) • Intel 82371 サウスブリッジ + SuperIO ➢PCI×4, ISA×3, IDEx2, FDD ➢PS/2キーボード・マウス ➢シリアル、パラレル
  7. NetBSD/atari での Milan サポート •2000年 2月:MLで最初の問い合わせ •2000年 8月:MLで TODOリストに挙がる •2001年

    4月:カーネルコンフィグ追加 •2001年 6月:Milanテスト用カーネル公開 •2002年 3月:PCIサポートカーネル公開 •2002年 9月:NetBSD 1.6 で正式サポート http://mail-index.netbsd.org/port-atari/oindex.html
  8. MI/MD構成 OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 共通(MI) デバイス ドライバ

    SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種依存(MD)部 ←OSの全体の5%くらい?
  9. MI/MD構成 OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 共通(MI) デバイス ドライバ

    SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種依存(MD)部 ←OSの全体の5%くらい? 「移植」というのはこの部分の実装 ポートメンテナが作業するのもここ
  10. MI/MD構成 OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 共通(MI) デバイス ドライバ

    SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種依存(MD)部 ←OSの全体の5%くらい? OS全体共通部分が変わった場合、 機種別の接続I/Fも書き直す必要がある
  11. MI/MD構成 OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 共通(MI) デバイス ドライバ

    SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種依存(MD)部 ←OSの全体の5%くらい? 共通のドライバのI/Fが変わった場合も 機械的な置き換えだけをすると 機種固有の問題にハマることが……
  12. MI変更の例 NetBSD 2.0:M:Nスレッド SMPサポート (Scheduler Activation) NetBSD 4.0:VMレイアウト変更、gcc 4.1 NetBSD

    5.0:SMP構成変更、softint(9) NetBSD 6.0:gcc 4.5 メンテナ的にはインパクトあっても ユーザーには見えない変更も多くあります
  13. NetBSD 4, 5 それぞれの VM変更、SMP変更では atari, x68k, luna68k 等々 持ってないマシンのコードを

    直すのが結構大変でした…… なぜか今はどれも持っていたり
  14. デバッグサイクル  適当に修正したカーネルをビルド  カーネルを gzipする  gzipカーネルをDOSフォーマットFDに書く  Milanを起動して

    TOSを立ち上げる  "loadbsd.ttp” のローダーアプリを起動  フロッピーからgzipカーネルをロード  NetBSDカーネルが起動
  15. デバッグサイクル  適当に修正したカーネルをビルド  カーネルを gzipする  gzipカーネルをDOSフォーマットFDに書く  Milanを起動して

    TOSを立ち上げる  "loadbsd.ttp” のローダーアプリを起動  フロッピーからgzipカーネルをロード  NetBSDカーネルが起動 数秒〜数十秒 ほぼ一瞬 約30秒 約2分 フロッピー入れ替えと ダブルクリックと コマンドタイプ 約2分 ⇒ 合計 5〜6分
  16. NVMドライバをいじって 初期化しないように修正 /* XXX: Milan's firmware seems to use different

    check method */ if ((machineid & ATARI_MILAN) == 0) { if (!nvram_csum_valid(nvram_csum())) { printf(": Invalid checksum - re-initialized"); for (nreg = MC_NVRAM_START; nreg < MC_NVRAM_CSUM; nreg++) mc146818_write(RTC, nreg, 0); nvram_set_csum(nvram_csum()); } }
  17. その他の雑多な問題  ISA割り込みを設定したらハング ⇒locore.s のハンドラに typo 入ってた  FDDが検出されない ⇒MIドライバ変更でATARI固有設定の

     変更漏れ  tar ball 展開でハングする問題 ⇒存在しないメモリをアクセスしている?  メモリ量を16MBのみとすることで  とりあえずそれなりに動いている?