EMULATOR_PDP_11
STEPIC Учебный проект на 'С', эмулятор PDP_11 в стиле ООП
Loading...
Searching...
No Matches
run.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

int run (struct pdp_11_t *, int, char **)
 Главный цикл выполнения команд эмулятора.
 

Function Documentation

◆ run()

int run ( struct pdp_11_t pdp,
int  argc,
char **  argv 
)

Главный цикл выполнения команд эмулятора.

Функция реализует полный цикл работы процессора:

  1. Инициализация внутренних структур данных через pdp_create.
  2. Парсинг имени файла и загрузка образа программы в память.
  3. Установка указателя инструкции (PC) на начальный адрес (01000).
  4. Бесконечный цикл выборки и выполнения команд через do_command.
Parameters
[in,out]pdpУказатель на структуру контекста эмулятора PDP-11.
[in]argcКоличество аргументов командной строки.
[in]argvМассив аргументов (используется для поиска входного файла).
Returns
Статус завершения. На данный момент всегда возвращает 0.
Note
Программа жестко закодирована на старт с восьмеричного адреса 01000.
Warning
Цикл while(1) предполагает, что остановка системы происходит внутри do_command (например, по инструкции HALT или ошибке).
Todo:
Реализовать корректный выход из цикла при получении сигнала прерывания или выполнении специфических инструкций процессора.

Точка входа в программу по умолчанию: 01000 (восьмеричная система)

Исполнительный цикл (Fetch-Decode-Execute).

40{
41 /* Подготовка аппаратной части эмулятора */
42 pdp_create(pdp);
43
44 /* Определение целевого файла из аргументов командной строки */
45 byte_t *filename = pdp_parse_filename(argc, argv);
46
47 /* Загрузка бинарных данных в оперативную память эмулятора */
48 pdp_load_data(pdp, (byte_t *) filename);
49
53 address_word_t addr = 01000;
54
55 /* Прямой доступ к внутренним регистрам для инициализации PC */
56 pdp_11_t *ptr_pdp = (pdp_11_t *) pdp;
57 word_t * ptr_pc = ptr_pdp->PC;
58
59 /* Установка счетчика команд на стартовый адрес */
60 *ptr_pc = addr;
61
65 while (1) {
66 /* Выполнение текущей команды и обновление указателя PC */
67 ptr_pc = do_command(pdp, ptr_pdp->command, *ptr_pc);
68 }
69
70 /* Освобождение выделенных ресурсов */
71 pdp_destroy(pdp);
72
73 return 0;
74}
word_t * do_command(struct pdp_11_t *, struct command_t **, const address_word_t)
Выполняет одну машинную команду по указанному адресу.
Definition pdp_11.c:190
byte_t * pdp_parse_filename(int argc, char **argv)
Разбирает аргументы командной строки для поиска имени файла.
Definition pdp_11.c:156
void pdp_destroy(struct pdp_11_t *)
Освобождает ресурсы, связанные с экземпляром PDP-11.
Definition pdp_11.c:60
void pdp_load_data(struct pdp_11_t *pdp, byte_t *filename)
Загружает данные в PDP-11 из файла или терминала.
Definition pdp_11.c:130
void pdp_create(struct pdp_11_t *)
Инициализирует компоненты PDP-11 (память, устройства ввода-вывода, регистры, команды).
Definition pdp_11.c:37
Definition pdp_11_p.h:4
word_t * PC
Definition pdp_11_p.h:16
struct command_t ** command
Definition pdp_11_p.h:8
unsigned char byte_t
Definition types.h:6
unsigned short int word_t
Definition types.h:7
unsigned int address_word_t
Definition types.h:11
Here is the call graph for this function:
Here is the caller graph for this function: