Pyntel4004
A Python software implementation of the Intel 4004 processor.
General Information
- Two pass assembler using the original mnemonics, directives and comments syntax
- Monitor facility to step through code and examine registers, memory etc
Requirements
Python
_ >= 3.8.2
Installation Instructions
Source Code
Pyntel4004’s git repo is available on GitHub, which can be browsed here and cloned using:
$ git clone https://github.com/alshapton/pyntel4004 pyntel4004
Verify the installation by running unit tests:
$ cd pyntel4004/test
$ pytest
Questions, Answers and Issues
Please use the github discussion board for questions, to ensure the right people see them in a timely manner.
Github Pyntel4004 Discussion Board
and the github issue tracker to raise any issues.
Github Pyntel4004 Issues Board
Usage Instructions
The user instructions can be found here
Design goals
- As much of the internals as possible should be carried out using binary arithmetic and operations.
- No 3rd party libraries to be used (i.e. pure Python).
- Build a fully-working i4004 opcode emulator.
- Build a fully-working assembler which generates correct op-codes.
- Construct a fully-working software-based i4004 chip which can use the generated object code from the compiler (possibly using micro-python or circuit python on an Ardiuno Board).
Status
23-SEP-2021: Publishing releases to PyPi
10-SEP-2021: Documentation building and hosted with READTHEDOCS
12-JUN-2021: Auto-build with GITHUB Actions implemented
18-MAY-2021: Implementing full test suite
21-APR-2021: Instruction Set functionally complete Entering Testing Phase
Example
Assembler Directives and other additions
Assembler directives are not part of the program itself, but can control things like starting address, and various environmental settings.
Directive | Example | Meaning |
---|---|---|
end | end | Indicating end of program, but not necessarily end of code |
org | org 100 | Assemble and place object code commencing at address 100 |
pin | pin 1 | Value of i4004's Pin 10 (test pin) |
/ | / Author: ALS | A comment |
label, | loop, | A label can be referred to in various control transfer statements. It MUST end in a comma (,) |
Monitor Commands
Command | Example | Meaning |
---|---|---|
"Enter" | "Enter" | Execute the current instruction and move to the next |
acc | acc | Show the current contents of the Accumulator |
b n | b 71 | Create a breakpoint at address n |
carry | carry | Show the current contents of the Carry Bit |
crb | crb | Show the currently selected RAM Bank |
off | off | Continue to execute the program with no trace |
pc | pc | Show the Program Counter |
pin10 | pin10 | Show the status of PIN10 on the i4004 chip (test pin) |
q | q | Quit the monitor without executing any further commands |
ram | ram | Show the complete contents of RAM |
reg n | reg 7 | Show content of a specified register |
regs | regs | Show all 16 registers |
rom | rom | Show the complete contents of ROM |
stack | stack | Show the stack and the location of the stack pointer |
Licence
This package is Treeware. If you use it in production, then we ask that you buy the world a tree to thank us for our work. By contributing to the Treeware forest you’ll be creating employment for local families and restoring wildlife habitats.
Credits
- Intel 4004 Design Team
- Logo: LouBeLou Print Shop
.. _Python: https://www.python.org