ハードウェア

Apple IIをマイコンボード「Arduino Uno」で再現した強者が現れる


世界初の市販パーソナルコンピュータとして知られる「Apple II」を、ワンボードマイコン「Arduino Uno」で再現する様子が、Arduinoを使った電子工作をブログで紹介するダミアン・ペケット氏によって公開されています。

Turning The Arduino Uno Into An Apple ][
http://dpeckett.com/turning-the-arduino-uno-into-an-apple

Apple IIは1977年、Apple共同創業者のスティーブ・ウォズニアックによって設計された世界初の個人向けコンピュータで、まさしく歴史に残るモデルです。ペケット氏は「現代のマイクロコンピュータがどれほどパワフルなのか」を証明するために、この1980年代の歴史的な名機をArduino Unoを使って再現しようと決意したとのこと。



Apple IIはCPUに「MOS 6502」を搭載しています。なお、MOS 6502は当時としては破格の安さで登場したCPUで、その互換CPUがファミリーコンピュータPCエンジンなどにも用いられたことでも知られています。Apple IIをエミュレートするための第一歩は、MOS 6502を完全にエミュレートすることだったとのこと。

ANSI Cを使って書かれたウォズニアックのコードはBCD演算をサポートしないシンプルなもの。また、MOS 6502の命令セット自体、各オペコードが8ビットの固定長、56個の命令、13個のアドレスモードとシンプルなものだとのこと。


MOS 6502のプログラミングガイドを読破してMOS 6502のエミュレートが完了すると、ペケット氏はAppleのファームウェアをシミュレートする作業に移行しました。しかし、原因不明のバグに悩まされて、この作業には大いにイライラさせられたそうです。

Apple IIの画像表示はビデオメモリの1ビットが画面上の1ピクセルに対応しています。


ペケット氏はArduino UnoのUSBインターフェースを使ってビデオインターフェースを設計。なお、Arduino Unoのメモリを節約するためにフレームバッファの格納を二次プロセッサに任せているとのこと。


これはApple IIのビデオインターフェースのXORゲートのブロックダイアグラム。


XORを再現する擬似コードはこんな感じ。


Apple IIは独自のキーボードプロトコルを採用していました。そのため、キー入力の結果をArduinoで簡単に扱えるPS/2デバイス対応に変換する必要があります。なお、下記URLからペケット氏作成のキーボードデコーダーをダウンロード可能です。

http://static.dpeckett.com/apple/keyboard.c

これはApple IIのデフォルトのキーコード。


これはキーボードタイミングを示すダイアグラム。


Apple IIは外部記憶装置としてカセットタイプのインターフェースを採用。データは少なくとも1500baud(ボー)のシンプルな周波数シフトキーで保存していました。


Apple IIのカセットインターフェースで採用されたZero Crossing Detectorの概略図はこんな感じ。


記憶用カセットインターフェースをArduino Unoで扱えるように、ソフトウェアで復調するとこんなプログラムになるとのこと。


そして、Apple IIを完全に再現するArduino Unoエミュレーターが完成。なお、Arduino UnoエミュレーターはAtmega328pを搭載しており、オリジナルのApple IIのMOS 6502と比べてパフォーマンスは5分の1から8分の1程度とのこと。


Arduino Unoエミュレーターでマンデルブロ集合をプログラムすると……


こんな感じで出力結果を得られました。


なお、ペケットさんのブログでは、Apple IIを完全に再現したArduino Unoエミュレーターが実際に動く様子をムービーで確認することができます。

Turning The Arduino Uno Into An Apple ][

・関連記事
3分の1サイズの初代Macintoshをラズベリーパイで再現した「Mini Mac」 - GIGAZINE

Apple IIのDOSソースコードが30年以上の時を経て公開される - GIGAZINE

iPadを往年の一体型マッキントッシュやiBookに装着して楽しんでみる - GIGAZINE

初代マッキントッシュのマニュアル - GIGAZINE

Apple Iの動作品がオークションにかけられ5000万円以上で落札 - GIGAZINE

Android端末とArduinoハードウェアを簡単につなぐことができる開発ボード「PocketDuino」 - GIGAZINE

in ソフトウェア,   ハードウェア, Posted by logv_to