A Python software implementation of the Intel 4004 processor and the MCS-4 computer.
- Two pass assembler using the original mnemonics, directives and comments syntax
- Disassembler
- Monitor facility to step through code and examine registers, memory etc
- Cross-assembler for Retroshield 4004 Arduino
- Python >= 3.8.2
Pyntel4004 can be installed from PyPI by using the command:
$ pip install Pyntel4004
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
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
To use this software implementation of the Intel 4004 from the command line, you should install the Pyntel4004-cli using
pip install pyntel4004-cli
The user instructions can be found here
- 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 assembler.
- Enable code assembled with Pyntel4004 to be run on a real i4004 chipset
- Enable code assembled with Pyntel4004 to be run on a retroShield4004 for Arduino
22-MAY-2022 First release of configuration file support
20-MAR-2022: Command Line functionality is now deprecated
02-MAR-2022: Finalised split - Pyntel4004 is now the core library
21-FEB-2022: Started to split into two - (chip, assembler, dissassembler) and CLI
04-FEB-2022: Cross-assemble to retroShield4004 for Arduino, completing documentation
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
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 (,) |
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 |
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.
- Intel 4004 Design Team
- Logo: LouBeLou Print Shop
.. _Python: https://www.python.org