---
title: PythonでCPUエミュレータ を作ってみよう！
tags: 
author: [こた](https://www.docswell.com/user/kota)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/LE1KXQGLJG.jpg?width=480
description: PythonでCPUエミュレータ を作ってみよう！ by こた
published: September 03, 24
canonical: https://www.docswell.com/s/kota/5N11JL-td4-py
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/LE1KXQGLJG.jpg)

PythonでCPUエミュレータ
を作ってみよう！
こた


# Page. 2

![Page Image](https://bcdn.docswell.com/page/GEWDNMKQJ2.jpg)

情報系のB4ℹ
こた
幅広く興味駆動開発💻
最近は素朴なCコンパイラ作ってます󰞸
趣味は天体観望🌌


# Page. 3

![Page Image](https://bcdn.docswell.com/page/47ZG3QZ3E3.jpg)

CPUを作ってみたいｹﾄﾞ...
誰もが１度は作ってみたいと思ってるCPU
Intel 4004 Microprocessor, 1971 [6] | Download Scientific Diagram (researchgate.net)


# Page. 4

![Page Image](https://bcdn.docswell.com/page/YJ6YX6ZZ7V.jpg)

CPUを作ってみたいｹﾄﾞ...


# Page. 5

![Page Image](https://bcdn.docswell.com/page/GJ5GX6W9J4.jpg)

CPUを作ってみたいｹﾄﾞ...
むずい！！！


# Page. 6

![Page Image](https://bcdn.docswell.com/page/LE3RXQ4275.jpg)

CPUを作ってみたいｹﾄﾞ...
むずい！！！
もっとわかりやすく
作れないのか？


# Page. 7

![Page Image](https://bcdn.docswell.com/page/8EDY29Q6EG.jpg)

CPUを作ってみたいｹﾄﾞ...
ということで
作りました！
みんな大好き
Python製です
github.com/yashikota/td4-py


# Page. 8

![Page Image](https://bcdn.docswell.com/page/V7P61ZGZJ8.jpg)

CPU
ただし、x86-64とかは複雑すぎる😭
ので国産の4bitCPUアーキテクチャ
であるTD4を採用！
命令セットはたったの12種類のみ！
MOV x4, ADD x2,
IN x2, OUT x2,
JMP, JNC
CPUの創りかた | マイナビブックス (mynavi.jp)


# Page. 9

![Page Image](https://bcdn.docswell.com/page/2JV3YW6MEQ.jpg)

CPU
CPUは
1.
2.
3.
4.
フェッチ
デコード
実行
ライトバック
の4つのステージを
ぐるぐる回している
パソコンが動く仕組み (CPU・メモリ・OS)【復習】 (zenn.dev) より


# Page. 10

![Page Image](https://bcdn.docswell.com/page/5EG39DNX7L.jpg)

CPU
プログラムカウンタはCPUが次に実行するアドレスの番地を示すもの
https://www.renesas.com/jp/ja/support/engineer-school/mcu-programming-peripherals-06 より


# Page. 11

![Page Image](https://bcdn.docswell.com/page/4JQ5W1Q57P.jpg)

td4/emulate.py


# Page. 12

![Page Image](https://bcdn.docswell.com/page/K749KRNVE1.jpg)

td4/emulate.py


# Page. 13

![Page Image](https://bcdn.docswell.com/page/LJ1KXQ547G.jpg)

td4/opecode.py


# Page. 14

![Page Image](https://bcdn.docswell.com/page/GJWDNM5Z72.jpg)

td4/cpu.py


# Page. 15

![Page Image](https://bcdn.docswell.com/page/4EZG3QNLJ3.jpg)

td4/cpu.py


# Page. 16

![Page Image](https://bcdn.docswell.com/page/Y76YX68MEV.jpg)

td4/output.py


# Page. 17

![Page Image](https://bcdn.docswell.com/page/G75GX69Q74.jpg)

Lチカ


# Page. 18

![Page Image](https://bcdn.docswell.com/page/9J2YXM2WJR.jpg)

ラーメンタイマー
https://github.com/yashikota/
td4-py?tab=readme-ov-file#ramen-timer10x
(GIFのフレーム数が多すぎてスライドに貼れなかった)


