Я пишу симулятор Z80 с GUI, работающим на GTK (https://github.com/clancyj4/z80sim/tree/dev для заинтересованных).
Моя проблема в том, что мне нужно перехватить код операции IN и разрешить редактирование окна для предоставления кодов ввода-вывода. Позвольте мне показать вам, что у меня так далеко:
/* get a byte (char?) from the input part of the Port window */
/* What we really want to do is have a queue */
BYTE IOPort_IN(int port)
{
char whole_buffer[IOINBUFLEN * 4]; /* 4x in case of Hex */
BYTE c;
int i;
if (IOPort[port] == NULL) /* struct exists? */
Create_IOPort_Struct(port);
printf("IOPort_IN: port=%d in_len=%d in_ptr=%d\n",
port, IOPort[port]->in_len, IOPort[port]->in_ptr);
if (IOPort[port]->in_len == 0)
{
sprintf(tstr, "Port %d requires input", port);
Add_to_Log(tstr);
show_log(TRUE);
gtk_text_buffer_set_text(inportprompt_textbuffer, "Input Required", -1);
/* somehow keep the gtk main loop running so the interface updates and allows the editing of the ioportin_textbuffer,
but wait for the input submission button the be pressed */
i = gtk_text_buffer_get_char_count(ioportin_textbuffer);
printf("in port buff len is %d.\n", i);
}
return(c);
}
Перехват кода операции в порядке, и эта функция вызывается. Проблема в том, что я понятия не имею, как реализовать комментарий в середине.
Цель состоит в том, чтобы остальная часть симуляции была в ожидании, но с основным GTK l oop все еще работающим, поэтому Окно журнала et c обновляется, и я могу ввести строку в окне ввода-вывода. Но он ждет, пока не будет нажата кнопка отправки. Я могу заморозить симуляцию Z80, установив флаг, так что это не проблема.
У меня неприятное ощущение, что я не очень хорошо выразил проблему, поэтому, пожалуйста, потерпите меня и задайте любые вопросы, которые могли бы прояснить ситуация.
Ура,
Джастин.