Важная информация

User Tag List

Показано с 1 по 3 из 3

Тема: Хочу сделать IO-символов во внешнее приложение

  1. #1
    Junior
    Регистрация
    28.03.2010
    Адрес
    Саранск
    Сообщений
    23
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Хочу сделать IO-символов во внешнее приложение

    Если кратко, то я хочу сделать 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). Опять же, придется искать указатели на текущие инструкции бейсика, а их я тоже не нашел, в отладчике это будет сделать сложно (ну по крайней мере для меня)

    Или лучше вернуться к потокам?

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,767
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    1,173
    Поблагодарили
    770 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    #203C
    A,B
    OR C
    DEC BC
    RET Z
    A,(DE)
    INC DE
    RST #10
    JR #203C

    при входе в DE начало печатаемой строки, в BC её длина

    почитай ftp://ftp.worldofspectrum.org/pub/si...ssemblyThe.txt
    поиск длины стринга #25B3
    Последний раз редактировалось goodboy; 22.11.2010 в 15:51.

  4. #3
    Junior
    Регистрация
    28.03.2010
    Адрес
    Саранск
    Сообщений
    23
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    #203C
    A,B
    OR C
    DEC BC
    RET Z
    A,(DE)
    INC DE
    RST #10
    JR #203C

    при входе в DE начало печатаемой строки, в BC её длина

    почитай ftp://ftp.worldofspectrum.org/pub/si...ssemblyThe.txt
    поиск длины стринга #25B3
    За ссылку спасибо, изучаю, а вот с адресом непонятка вышла.

    Вот тестовое приложение:
    1 PRINT 12
    2 PRINT 23242
    3 PRINT "длинная строчка"
    5 PLOT 10,10
    10 PRINT 23623
    14 PRINT AT 10,10 ; RND
    15 LIST
    20 GO TO 1

    Лог исполнения которого приведен в аттаче

    output - это функция вывода символа, EOL - это возжные выходы из функции (и их адреса)
    possible print func - это как раз вызовы 0х203C

    как видно, вызывается оно только при выводе длинной строчки, все остальные символы куда-то исчезают
    Вложения Вложения
    • Тип файла: txt logs.txt (2.3 Кб, Просмотров: 118)

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Хочу ЧБ монитор
    от newps в разделе Барахолка (архив)
    Ответов: 20
    Последнее: 30.10.2007, 00:12
  2. Ответов: 2
    Последнее: 19.09.2006, 19:13
  3. Хочу девайс сделать...
    от zksystem в разделе Несортированное железо
    Ответов: 9
    Последнее: 22.11.2005, 17:54
  4. Хочу знать!!!
    от rasmer в разделе Игры
    Ответов: 12
    Последнее: 30.07.2005, 00:48

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •