EMULATOR_PDP_11
STEPIC Учебный проект на 'С', эмулятор PDP_11 в стиле ООП
Loading...
Searching...
No Matches
main.c File Reference

Ядро эмулятора архитектуры PDP-11. More...

#include "pdp_11/pdp_11.h"
#include "pdp_11/run.h"
#include "tests/test_pdp/test_pdp.h"
#include "utils/logger/logger.h"
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Include dependency graph for main.c:

Functions

int start_test_if_mode_debug (int argc, char **argv)
 Селектор режима отладки.
 
int main (int argc, char **argv)
 Главная точка входа в приложение (Main Entry Point).
 

Detailed Description

Ядро эмулятора архитектуры PDP-11.

Данный файл является "точкой сборки" всей системы. Он управляет жизненным циклом эмулятора: от парсинга аргументов командной строки до корректного освобождения ресурсов после завершения работы.

Author
<koles.nosp@m.niko.nosp@m.vvita.nosp@m.liy@.nosp@m.mail..nosp@m.ru Vitaliy Kolesnikov>
Date
2026

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

Главная точка входа в приложение (Main Entry Point).

Алгоритм работы:

  1. Проверка необходимости запуска тестов.
  2. Аллокация и "чистая" инициализация контекста PDP-11.
  3. Передача управления диспетчеру выполнения (функция run).
  4. Деаллокация памяти.
Parameters
[in]argcКоличество аргументов командной строки.
[in]argvМассив строк аргументов.
Returns
Статус завершения процесса.
Return values
0Успешное завершение.
!=0Критическая ошибка при работе эмулятора.
Note
Инициализация через pdp_new гарантирует нулевое состояние регистров и памяти, что предотвращает "undefined behavior" и ошибки Valgrind.
59{
60 // Проверка режима отладки перед стартом основной логики
61 start_test_if_mode_debug(argc, argv);
62
68 struct pdp_11_t *pdp = pdp_new();
69 assert(pdp != NULL);
70
71 DEBUG("PDP_11 ИНИЦИАЛИЗИРОВАНА", "");
72
73 /* Запуск исполнительного цикла */
74 run(pdp, argc, argv);
75
76 /* Очистка контекста перед выходом */
77 free(pdp);
78
79 return 0;
80}
#define DEBUG(fmt,...)
Definition logger.h:40
int start_test_if_mode_debug(int argc, char **argv)
Селектор режима отладки.
Definition main.c:104
struct pdp_11_t * pdp_new()
Создает новый экземпляр структуры PDP-11.
Definition pdp_11.c:26
int run(struct pdp_11_t *, int, char **)
Главный цикл выполнения команд эмулятора.
Definition run.c:39
Definition pdp_11_p.h:4
Here is the call graph for this function:

◆ start_test_if_mode_debug()

int start_test_if_mode_debug ( int  argc,
char **  argv 
)

Селектор режима отладки.

Переключатель режимов: Тестирование vs Эмуляция.

Анализирует массив аргументов командной строки на наличие флага -d. При обнаружении флага прерывает стандартный поток выполнения и запускает модуль модульного тестирования.

Parameters
[in]argcКоличество аргументов (передается из main).
[in]argvВектор строк аргументов.
Return values
1Обнаружен флаг отладки, тесты выполнены.
0Флаг отсутствует, требуется обычный запуск.
Note
Вызов этой функции должен происходить до инициализации основных структур данных.

Проходит по массиву аргументов командной строки в поиске управляющего флага -d. Если флаг обнаружен, функция немедленно инициирует выполнение набора тестов через вызов test_pdp.

Parameters
[in]argcКоличество аргументов, переданных программе.
[in]argvМассив строк (аргументов), где выполняется поиск флага.
Return values
1Обнаружен режим отладки, тесты запущены.
0Режим отладки не активен, работа продолжается в штатном режиме.
Note
Поиск чувствителен к регистру; флаг должен быть в нижнем регистре ("-d").
Attention
Функция не проверяет остальные аргументы после нахождения первого вхождения "-d".
Todo:
Добавить поддержку расширенных флагов отладки (например, "-d:verbose") для выбора конкретных групп тестов.
105{
106 if (argv == NULL || argc < 1) {
107 return 0;
108 }
109
110 for (int i = 0; i < argc; i++) {
111 if (strcmp("-d", argv[i]) == 0) {
112 DEBUG("ЗАПУСК ТЕСТОВ", "");
113 test_pdp(argc, argv);
114 return 1;
115 }
116 }
117
118 return 0;
119}
int test_pdp(int, char **)
Definition test_pdp.c:73
Here is the call graph for this function:
Here is the caller graph for this function: