MacでVerilogのシミュレーションをしてみる3

MacでVerilogのシミュレーションをしてみる1 - k-igrsの日記

MacでVerilogのシミュレーションをしてみる2 - k-igrsの日記

の続き

このままではアドレスを順にインクリメントしていくだけなので、実行アドレスを変更するJump命令を追加する。

続きを読む

Apple IIのハードウエア(4)

Apple IIのRESETとKeyBoard

Apple IIのKeyBoardはテレタイプ端末のASR-33の回路を流用している。以下がASR-33のKeyBoardとApple IIのキーボード。

続きを読む

Apple IIはなぜ小文字をサポートしなかったか?

以下のWebサイトにApple IIが小文字をサポートしていない理由をWozが回答しています。

www.vintagecomputing.comこの記事を大まかにまとめると

  • 元々、キーボード入力はApple II用に設計されたものではなく、以前から使ってたものをそのまま流用した。
  • 流用したものは低価格だったが大文字しかサポートしていなかった。
  • Apple II設計時に小文字のサポートを検討したが開発費がなくて断念した。

となっています。

初期につかわれたキーボード入力用のチップはMM5740で、チップの生産終了後はAY3600に置き換えられました。

このMM5740が低価格だったのは広く使われたテレタイプ端末ASR-33用のもので量産効果が働いたからでしょう。

 

MM5740自体はノーマル、シフト、コントロール、シフト+コントロールを90キーまで対応していて、小文字をサポートしていないのはチップ内のキー入力をキーコードに変換するテーブルを記述しているROMがノーマルでもシフトでも同じアルファベットのコードを返すからです。

なので小文字をシステムが認識するには小文字に対応したROMを乗せたチップに置き換えるのと共に、すでに作成していたBASIC ROMを小文字に対応する必要がありました。スティーブ・ウォズニアックはBASIC ROMを修正するのに必要な開発用マシンの使用料を捻出できず*諦めたのでした。

 ※ハンドアセンブルで作成したので修正が困難だっため6502の機械語アセンブルするコンピュータが必要だった。

 

Apple IIが広く使われるようになるとプログラミングやワードプロセッサ等の利用で小文字の要求が出てきたため、サードパーティーがとった対策はキーボードのシフトキーのスイッチをマザーボードのGAME I/Oから読めるようにしてキー入力が会った時シフトキーの状態を判別して小文字を認識させました。(80桁ビデオカードなど)

 

なおApple IIeではキーボードのエンコードとキーデータ用ROMを別にして小文字をサポートしてます。(図の右がエンコード用チップのAY03600,左がROM)

f:id:k_igrs:20201104202544j:plain



 

Apple IIで本体の描画タイミングをソフトウエアから知る方法

Youtubeで以下の動画を見つけた。

www.youtube.com動画ではローレゾリューショングラフィックスとハイレゾリューショングラフィックスが同時に描画されている。

手法としては、ハイレゾリューションまたはローレゾリューションのグラフィックスが表示されている途中で画面モードを切り替えてるのは想像がつく。先頭からローレゾリューションモードで描画して走査線が真ん中に来た時にハイレゾリューションモードに切り替えれば、両モードがミックスされた画像になるはず。こんな感じ。

f:id:k_igrs:20200508074527p:plain

しかしApple IIにはHSYNCやVSYNCのような同期信号をソフトウエアから判別する手段が無いので今どの位置の画面を描画しているのかを知るのは不可能なはず

…とこの動画とそのHomePageの説明を見るまでは思っていた。

この説明によるとその方法は、Apple IIは1MHzのクロックの前半でメモリからビデオデータを読み出し、後半でCPUがメモリをアクセスする。

ここでビデオデータ読み出された後、データバスには、読み出されたデータがフローティング状態(Hi-Z)で残っていて、CPUがDRAMやROM以外の書き込み専用ポートを読むと直前にシステムが読み出したビデオデータを読むことができる。

f:id:k_igrs:20200508081527p:plain

このことを利用し、画面の先頭アドレスにマーカーとなるデータを書いておき、そのデータが読み出されたらApple IIのシステムが画面を先頭から表示するタイミングだということがわかる。

後はプログラムの実行クロック数と表示タイミングに合わせて画面モードを切り替えることができる。だから動画タイトルがCycle-countingなんだね。

なんとも目からうろこな方法があったものです。