Если кратко, то я хочу сделать PRINT "fuck" или INPUT "Enter your name?", a$, а внутри эмулятора отловить выводимую строчку и сделать с ней еще что-то, возможно вернуть ответ.
Вот тут: http://zx.pk.ru/showthread.php?t=12565 - я полгода назад уже пытался разбираться с устройством потоков, но просто не осилил. Сейчас я взял либу z80ex, построил на ней свой простой эмулятор и начинаю свои извращения с нуля.
Подумалось, что если уж со стандартными потоками столько возни - почему бы не отлавливать значения регистров машины и не делать IO на их основе? В общем с помощью FUSE, его отладчика, самодельной дампилки регистров, перла и прочего скриптоебства я узнал, что для вывода текста можно ловить состояние регистра PC в 0xb24, а выводимый символ читать из регистра А (или старших битов AF).
А вот как найти конец строчки? Подумалось, что EOL нет, а значит надо ловить инструкцию RET (как конец функции отображения, ведь экранные координаты могут быть разные, а хотелось бы целую строчку, без переносов), написал дампилку, и.... в общем как и следовало ожидать, между выводом строк пробегает СЛИШКОМ МНОГО ретов, но мое регексп-фу подсказало 2 адреса - это 0x1987, которое вызывается между строк при выводе LIST и 0x16E4, которое в общем-то вызывается между принтами, но порой и без них. Пробовал гуглить эти функции и их описания - ничего не нашел. Да, можно конечно проверять на вывод пустую строчку, но это не слишком понтово и достаточно костыльно.
Так вот, поскольку я ниасилятор, научи искать нужные значения. Мне бы еще Input пограбить, писать в порты я умею, клаву эмулировать тоже, а вот отлавливать точку входа в опрос - нет, и так чую я, что из-за прерываний это будет сделать _гораздо_ сложнее, нежели разбираться с выводом текста
Есть конечно вариант забить на это и распарсить бейсик, но тогда не будут работать асмовставки (я так понимаю, что подпрограмма на 0x18 работает тоже через 0xb24). Опять же, придется искать указатели на текущие инструкции бейсика, а их я тоже не нашел, в отладчике это будет сделать сложно (ну по крайней мере для меня)
Или лучше вернуться к потокам?