/emu8080on4004

Intel 8080 Emulator on 4004 Evaluation Board

Primary LanguageAssemblyMIT LicenseMIT

emu8080on4004

Intel 8080 Emulator on 4004 Evaluation Board

This document is written mostly in Japanese. If necessary, please use a translation service such as DeepL (I recommend this) or Google.

概要

自作の4004実験用ボードと,その上で動作する8080エミュレータです.Palo Alot Tiny BASIC(4K整数型BASIC)や,Grant Searle's BASIC(8K浮動小数点BASIC)の8080移植版がほぼそのまま動くレベルの機能が実現できています.動作速度は8080実機の1/700程度です.

制限事項等

  • P(パリティ)フラグの実装は正確ではありません.{J,C,R}{PO,PE}実行時にAレジスタの値から計算されます.
  • DAA命令の実装は正確ではありません.
  • IN命令(コントロールレジスタ)はACC=0xFF(データあり)を返します.
  • IN命令(データレジスタ)は4004ボードのソフトウェアで実装されたUARTのGETCHARを呼ぶので,入力されるまで止まります.
  • OUT命令はAレジスタを4004ボードのシリアルポートに出力します.
  • 割り込み関連命令(DI, EI)は未実装です.

実験ボードの仕様

ブレッドボード版プロトタイプの仕様

  • CPU: Intel 4004
  • Clock: 740kHz
  • DATA RAM: 4002-1 x 2 + 4002-2 x 2 (計320bit x 4)
  • Program Memory
    • ROM: AT28C64B (8k x 8bit EEPROM)
      • 000H〜EFFHの3.75KB利用可能
    • RAM: HM6268(4k x 4bit SRAM)x 2個
      • 物理メモリ F00H〜FFDHの254byte x 16バンク (上記を論理メモリ 000H〜FDFHにマッピングしてアクセス)
  • 通信ポート: 9600bps Software Serial UART (TTL level)

Rev.2.1版の仕様(ブレッドボード版との差分)

  • Program Memory
    • DATA RAM: ピンヘッダの設定により4002-1 x 4の構成も可能ですが,その場合はソフトウェアでRAM2, RAM3をアクセスしている部分を修正する必要があります.
    • ROM: AT28C64B, AT28C256, 2764, 27256をDIPスイッチで選択可能なように設計しましたが,動作確認はAT28C64Bで実施.それ以外は未確認です.
    • RAM: HM624256(1Mbit(256k x 4bit) SRAM)x 2個
      • 物理メモリ F00H〜FFDHの254byte x 256バンク (上記を論理メモリ 0000H〜FDFFHにマッピングしてアクセス)

ToDO

  • メモリ64KBに拡張 → Rev.2.1で実現(2023/4/12)
  • プリント基板作成 → Rev.2.1で実現(2023/4/12)
  • IN命令時にTESTキーを使ったSTOPボタン相当の機能の実装

動画

Youtubeで関連動画を公開しています.

ブログ

関連する情報が書いてあるかも.

4004関連開発事例

データシート

開発環境

画像集

  • ブレッドボード版のプロトタイプ
  • プロトタイプでPalo Alto BASIC実行
  • Rev.2.1基板
  • ブレッドボード版とRev.2.1基板
  • 8K BASIC 起動画面

更新履歴

  • 2023/3/21: 初版公開
  • 2023/4/3: SUBフラグ(NEC uPD8080A, uCOM-80用)に関するコードを削除
  • 2023/4/12: 基板(Rev.2.1)に合わせていろいろ更新.ブレッドボード版はprototypeフォルダに移動
  • 2023/4/15: emu.asmにレジスタ表示しながらの連続実行とTESTボタンでの停止機能を追加
  • 2023/4/16: ADC, ACIにバグ(0+FFH+Carrry(1)でCarryが立たない)があったので修正.