目次
Chapter 0 本書が目指すもの
- 0.1 本書の目的
- 0.2 本書が提供するエミュレータについて
- 0.3 エミュレータのソースコードについて
- 0.4 本書で紹介したソースコード
Chapter 1 基本ロジック編
- 1.1 デジタルとアナログ
- 1.2 連続と離散
- 1.3 それでもデジタルが勝利する理由
- 1.4 アナログコンピュータは実在するか?
- 1.5 デジタル情報は何分割すると良いのか?
- 1.6 ジョージ・ブール登場
- 1.7 ビット
- 1.8 電圧とビット
- 1.9 ビット演算
- 1.10 真理表
- 1.11 真理表と等価回路
- 1.12 回路図記号
- 1.13 論理演算の応答速度
- 1.14 負論理出力のゲート
- 1.15 負論理入力のゲート
- 1.16 多入力ゲート
- 1.17 数値の基底
- 1.18 バイト
- 1.19 バイトの仲間たち
- 1.20 2進数とビットの共通点
- 1.21 2進数とビットの相違点
- 1.22 1の補数と2の補数
- 1.23 2の補数の非対称性
- 1.24 符号ビット
- 1.25 固定小数点実数
- 1.26 浮動小数点実数
- 1.27 誤差の問題
- 1.28 8進数
- 1.29 10進数
- 1.30 2進化10進数
- 1.31 16進数
- 1.32 ワイヤードOR
- 1.33 スリーステート
- 1.34 加算(ADDER)
- 1.35 フリップフロップ
- 1.36 ラッチ
- 1.37 カウンタ
- 1.38 デコーダ
- 1.39 マルチプレクサ
Chapter 2 CPU 構造/命令編
- 2.1 CPUとは?
- 2.2 御先祖様を復活させよう
- 2.3 Z80というオプション
- 2.4 Intel 8080の内部構造
- 2.5 時分割バス
- 2.6 内部バスと外部バス
- 2.7 バスの本数
- 2.8 レジスタ/ラッチ
- 2.9 8ビットレジスタと16ビットレジスタ
- 2.10 8ビットレジスタと見なせるもの
- 2.11 16ビットレジスタと見なせるもの
- 2.12 バッファ
- 2.13 アドレスバッファ(ADDRESS BUFFER)
- 2.14 フラグフリップフロップ(FLAG FLIPFLOPS)
- 2.15 リトルエンディアンとビッグエンディアン
- 2.16 Intel 8080全命令詳説
- 2.16.1 各命令の説明中で使用される共通の記号
- 2.16.2 データ転送グループ
- 2.16.3 算術/論理演算グループ
- 2.16.4 分岐命令グループ
- 2.16.5 スタックI/Oおよび機械制御グループ
- 2.16.6 擬似命令
- 2.16.7 ラベルと値
- 2.16.8 コメント
- 2.17 演算装置(ARITHMETIC LOGIC UNIT)
- 2.18 10進補正(DECIMAL ADJUST)
- 2.19 命令デコーダおよびマシンサイクルエンコーダ(INSTRUCTION DECODER AND MACHINE CYCLE ENCODING)
- 2.20 レジスタアレイ(REGISTER ARRAY)
- 2.21 レジスタ選択(REGISTER SELECT)
- 2.22 マルチプレクサ(MULTIPLEXER)
- 2.23 タイミングおよび制御(TIMING AND CONTROL)
- 2.24 電源(POWER SUPPLIES)
- 2.25 CPUパッケージ(PACKAGE)
- 2.26 割り込み
- 2.27 DMA(DIRECT MEMORY ACCESS)
- 2.28 CPU構造編の先に待つもの
- 2.29 CPUその他の必須知識集
- 2.29.1 バスそのものを時分割する時分割バス
- 2.29.2 メモリマップドI/OとポートマップドI/O
- 2.29.3 クロック回路
- 2.29.4 同期バスと非同期バス
- 2.29.5 プログラムカウンタ
- 2.29.6 スタックポインタ
- 2.29.7 インデックスレジスタ
- 2.29.8 ベースポインタ
- 2.29.9 フラグ
- 2.29.10 アキュムレータ
- 2.29.11 起動シーケンス
- 2.29.12 停止命令と停止信号
- 2.29.13 最強の割り込み
- 2.29.14 WAIT外し
Chapter 3 システム編
- 3.1 標準化されたバス
- 3.2 シリアルバスとパラレルバス
- 3.3 メモリ(記憶装置)
- 3.4 交換可能なメモリ
- 3.5 メモリ ―書き換え可能か否か
- 3.6 メモリ ―アクセス速度による分類
- 3.7 主要なRAMの分類
- 3.8 D-RAMリフレッシュ
- 3.9 主要なROM の分類
- 3.10 メモリのバックアップ
- 3.11 キャッシュメモリ
- 3.12 バンク切り替え
- 3.13 バンク切り替えとCP/M
- 3.14 2ポートメモリ
- 3.15 パラレル入出力
- 3.16 シリアル入出力
- 3.17 割り込みコントローラ
- 3.18 DMAコントローラ
- 3.19 ディスクコントローラ
- 3.20 CRTコントローラ
- 3.21 手動DMA
- 3.22 キャラクタジェネレータ
- 3.23 テキストVRAMとグラフィックVRAM
- 3.24 サウンドジェネレータ
- 3.25 アドレスデコーダ
- 3.26 手抜きデコードとゴーストイメージ
- 3.27 クロックジェネレータ
- 3.28 バスバッファ
- 3.29 キーボードインターフェース
- 3.30 マウスインターフェース
- 3.31 電源
- 3.32 マザーボード
Chapter 4 ファームウェア編
- 4.1 起動スタイル
- 4.2 起動の歴史
- 4.3 ファームウェアとBIOS
- 4.4 PCの起動シーケンス
- 4.5 機械語モニタと完全に自立したシステム
- 4.6 今回のCPUエミュレータでの実装
Chapter 5 OS編
- 5.1 OSの役割
- 5.2 OSの基本構造
- 5.3 CP/Mをブートする
- 5.4 BIOSの内容
- 5.5 CP/Mを使ってBIOSを開発するなら
Chapter 6 アセンブラ編
- 6.1 機械語をアセンブラで扱う
- 6.2 アセンブラの基本構造
- 6.3 アセンブラの分類
- 6.4 LOADコマンドの存在意義
- 6.5 リンカの存在意義
- 6.6 アセンブラの長所,アセンブラの死角
- 6.7 エミュレータEE8080の簡易アセンブラ
Chapter 7 高級言語編
- 7.1 アセンブラの限界
- 7.2 文法と規格と実装
- 7.3 インタープリタとコンパイラ
- 7.4 シンプルな高級言語を試作する
- 7.5 言語仕様の確定
- 7.6 字句解析
- 7.7 構文解析
- 7.8 実行またはコード生成
- 7.9 minibfのソースコード
- 7.10 コンパイラコンパイラ
- 7.11 構文木
- 7.12 最適化
- 7.13 レジスタ変数とレジスタカラーリング
- 7.14 コード生成
Chapter 8 セキュリティ編
- 8.1 自己増殖プログラムは可能か?
- 8.2 無限自己増殖プログラムは可能か?
- 8.3 悪意ある第三者は処理に割り込めるか?
- 8.4 自殺プログラムは可能か?
- 8.5 プログラムがお互いをつぶし合うゲームは可能か?
Chapter 9 まとめ
- 9.0.1 魔法と見分けがつかない
- 9.0.2 過去を見れば未来が見える
- 9.0.3 そしてあなたが使うアプリが生まれた
Appendix 1 エミュレータEE8080操作説明
- A.1.1 トップメニュー
- A.1.2 CPUメニュー
- A.1.3 Miscメニュー
- A.1.4 CPUエミュレータ実行時ハンバーガーメニュー
- A.1.5 Uploadコマンドで読み込める仮想フロッピーディスク一覧
Appendix 2 WordMaster 簡易リファレンス
- A.2.1 ビデオモードの操作(抜粋)
- A.2.2 コマンドラインモードの操作(抜粋)
Appendix 3 CP/M CCP簡易リファレンス
- A.3.1 内部コマンド
- A.3.2 外部コマンド
Appendix 4 CP/M CALL 5簡易リファレンス
Appendix 5 CP/M DDT簡易リファレンス
Appendix 6 ADM-3A簡易リファレンス
Appendix 7 読者のためのヒント
- A.7.1 EE8080のソースコード活用のヒント
- A.7.2 CP/Mなどが起動不能になった場合の対象方法