Этот репозиторий содержит полный набор инструментов для разработки под 8-битный процессор с уникальной архитектурой:
- Ассемблер - преобразует текстовый код на ассемблере в бинарный машинный код
- HDL реализация - описание процессора на языке Verilog/VHDL
- Инструменты разработки - всё необходимое для создания программ и симуляции
✅ Полная поддержка ISA:
- Все регистровые операции (MOV, ADD, SUB, AND, OR, XOR)
- Работа с памятью и портами ввода-вывода (IN/OUT)
- Команды управления потоком выполнения (JMP, CALL, RET)
- Прерывания (EI, DI, RETI)
✅ Гибкая система адресации:
- Поддержка меток (labels)
- Директива
ORG
для указания адреса размещения - Относительные и абсолютные переходы
✅ Двухпроходная компиляция:
- Первый проход: построение таблицы символов
- Второй проход: генерация машинного кода
✅ Проверка ошибок:
- Синтаксические ошибки
- Неизвестные команды
- Переполнение значений
- Повторяющиеся метки
- Полное описание процессора на Verilog/VHDL
- Поддержка всех заявленных в ISA функций
- Тестовые стенды для верификации
- Возможность синтеза под ПЛИС
- Клонируйте репозиторий:
git clone https://github.com/yourusername/8bit-cpu.git
cd 8bit-cpu
- Для работы с ассемблером:
python assembler.py input.asm output.bin
Где:
input.asm
- исходный файл на ассемблереoutput.bin
- выходной бинарный файл
- Для симуляции процессора:
iverilog -o processor_tb.vvp -g2012 -s tb_processor .\src\ram.sv .\src\core.sv .\src\top.sv .\src\rtc.sv .\tb\tb_processor.sv
>> vvp processor_tb.vvp
- Для синтеза под ПЛИС:
МОЛИТВЫ
ether-simple-proc/
├── progs/pyasm/ # Исходный код ассемблера
│ ├── assembler.py # ASSembler
├── src/ # HDL реализация
│ ├── top.sv # Основной модуль
│ ├── core.v # Ядро
│ ├── ram.v # Память
│ └── tb/ # Тестовые скрипты
└── doc/ # Документация
ORG 0x0000
MAIN:
EI ; Разрешаем прерывания
MOV A, 0x55
OUT 0x01, A ; Выводим значение в порт 0x01
LOOP:
JMP LOOP ; Бесконечный цикл
ORG 0x1000
INTHANDLER:
IN A, 0x00 ; Читаем данные из порта 0x00
ADD A, 1
OUT 0x01, A ; Выводим результат в порт 0x01
RETI ; Возврат из прерывания
ORG 0xFFFE ; Вектор прерываний
JMP INTHANDLER ; Адрес обработчика прерываний
[7:6] - код операции
[5:4] - регистр назначения (A=00, B=01, C=10, D=11)
[3:2] - регистр источника
[1:0] - 00 (формат RR)
[7:6] - код операции
[5:4] - регистр назначения
[3:0] - 01 (формат IMM8)
Следующий байт - значение
Первый байт - код операции
Следующие 2 байта - адрес (Big Endian)
- Адресное пространство: 16 бит (0x0000-0xFFFF)
- Адреса ввода/вывода: 8 бит (0x00-0xFF)
- 4 регистра общего назначения (A, B, C, D)
- Одноуровневые прерывания
Этот проект распространяется под лицензией MIT. См. файл LICENSE для подробной информации.
Приветствуются pull requests. Для крупных изменений, пожалуйста, сначала откройте issue для обсуждения.
Автор: Darkness TG: @Letmeto GitHub: @Teimir