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

User Tag List

Страница 4 из 6 ПерваяПервая 123456 ПоследняяПоследняя
Показано с 31 по 40 из 53

Тема: Определение текущего адреса

  1. #31
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    # запоминаем ячейки #FFFE и #FFFF;
    а вдруг еще и стек нельзя трогать? а то куча ограничений на все, а на стек нет... вдруг он не инициализирован и указывает в пзу или в программу, или на 0 (и тогда #FFFE перепишется)... мутная задача какая-то.

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

  3. #32
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,908
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    89
    Поблагодарили
    31 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от psb Посмотреть сообщение
    а вдруг еще и стек нельзя трогать? а то куча ограничений на все, а на стек нет...
    А реально отдавать управление чужому заинкбиненному коду (не понимая как он использует стек) в тот момент, когда на стеке нету двух байт для перезаписи или стек настроен так, что при первой же записи перепрыгиывет через 0? Я не о технической возможности, а о вероятности натолкнуться на такое.

  4. #33
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    что значит реально ли? я думаю человеки много раз так делали (по ошибке). по-нормальному, всегда нужно знать какую-то доп. информацию, чтобы не возникало сюрпризов. вон куча пакеров распаковщики пихает в #5Bxx, а там то переменные 128к бейсика, то резидент sts... т.е. имхо задача требует уточнения условий.

  5. #34
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,908
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    89
    Поблагодарили
    31 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    http://zx.pk.ru//showthread.php?t=17811

    Про "по ошибке" - согласен. Если контекст исполнения чужого кода настроен ошибочно, понять, что же не так, мучительно тяжело. Другое дело, что внешний (поставляемый) код должен налагать минимум разумных ограничений на вызывающий код. На мой взгляд, ограничения в виде наличия свободной памяти по жестко заданным адресам (при релоцируемом коде), "невидимое" знакоместо над адресом #4000, разрешение/запрешение прерываний и их режим, наличие стандартной прошивки BASIC 48, включенной в момент вызова кода - ограничения неразумные. А вот наличие двух свободных 2-х байтов на стеке, расположенном не по адресам 0-1 - это разумное ограничение, которое, кстати, обычно никто не упоминает (вспомним, к примеру, депакеры и плееры, работающие в демах при жестких условиях - нигде не оговаривается максимальная глубина стека). Да и не задача это вообще, а просто вопрос по технике программирования.

    Цитата Сообщение от psb Посмотреть сообщение
    имхо задача требует уточнения условий
    Согласен, в постановке задачи, где речь идет про незнание контекста, можно было бы сказать, что я, как автор вызываемого релоцируемого кода, рассчитываю на какое-то разумное пространство на стеке.
    Последний раз редактировалось GriV; 26.07.2012 в 13:12.

  6. #35
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,755
    Спасибо Благодарностей отдано 
    261
    Спасибо Благодарностей получено 
    269
    Поблагодарили
    203 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    вроде бы определились с условиями?

    самый простой разумный вариант

    если это спрайт граббер значит на экране графика
    значит использовать экран можем
    ld de,(#4000)
    ld hl,#e9e1
    ld (#4000),hl
    call #4000

    this
    ld (#4000),de
    ;hl=this
    С уважением,
    Jerri / Red Triangle.

  7. #36
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,908
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    89
    Поблагодарили
    31 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    если это спрайт граббер значит на экране графика
    значит использовать экран можем
    Грабер умеет выгружать код вывода спрайта вместе с вырезанными спрайтами, чтобы, например, AER, мог вставить его в дему. Вот для этого кода и надо определять адрес чтобы посчитать где сами спрайты находятся. Так что предпочту вариант с #FFFE, а не с #4000

    ---------- Post added at 15:49 ---------- Previous post was at 15:46 ----------

    Цитата Сообщение от zebest Посмотреть сообщение
    Остался вопрос с глубиной.
    например 5кБ стек как сделать?
    А никак нельзя сделать ограничить размер стека. Можно занести в SP значение, на 5 Кб большее, чем последний используемый программой адрес, и писать код так, чтобы в стек не попадало больше 5 Кб. Только 5 Кб для стека - это зачем? BASIC резервирует себе максимум 80 байт, например.

  8. #37
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,804
    Спасибо Благодарностей отдано 
    249
    Спасибо Благодарностей получено 
    113
    Поблагодарили
    87 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вспомнилось вдруг как без стека и CALL адрес выяснить - по ключу с помощью CPIR.
    Чем длиннее ключ - тем надёжней, но и код (который определяет) тоже будет увеличиватся пропорционально.
    Этого можно избежать сделав ключ цикличным, но всё равно размер ключа должен быть ощутимым, иначе надёжность падает (вдруг такой блок чисто случайно ещё где попадётся?).

  9. #38
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    по ключу с помощью CPIR.
    а можно набросок кода?

  10. #39
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,804
    Спасибо Благодарностей отдано 
    249
    Спасибо Благодарностей получено 
    113
    Поблагодарили
    87 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от psb Посмотреть сообщение
    а можно набросок кода?
    Ну как-то так (не тестил, не пробовал, именно набросок)
    LD DE,#0 (ну или откуда начинать? Если с RAM, то #4000)
    M1:
    LD BC,0
    LD A,"K"
    CPIR
    INC HL
    LD A,(HL)
    CP "E"
    JR NZ,M1
    INC HL
    LD A,(HL)
    CP "Y"
    DEC HL
    DEC HL
    JR NZ,M1
    INC HL
    INC HL
    INC HL
    JP (HL)
    DB "KEY"
    .... (сюда по-идее должен прыгнуть PC и в HL этот-же адрес)

    Как-то так.
    Может быть жестоко ошибаюсь.
    Сейчас тестить некогда, но в своё время ковырялся с определением адреса - ностальжи увидев тему Позже обязательно попробую. Или топикстартер пусть поковыряет - расскажет работает или нет. Если что расскажу идею про цикличные ключи (пример приведён с тремя знаками, это очень мало, а много знаков делать - код раздуется. есть мысли как его сделать в цикле)
    Последний раз редактировалось Destr; 22.06.2012 в 01:11.

  11. #40
    Banned
    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А можно 2-х байтный ключ использовать. Если в памяти будет найдено два совпадения, то просто увеличить ключ на единицу и искать еще раз.

    (А нет. Адресации относительно IP нет. Ключ не увеличить.)

    (А нет. А нет. Мы можем после нахождения ключа увеличить его и тем самым проверить, наш ли это ключ.)
    Последний раз редактировалось vinxru; 22.06.2012 в 16:09.

Страница 4 из 6 ПерваяПервая 123456 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Расчет адреса точки на экране
    от Ares в разделе Программирование
    Ответов: 10
    Последнее: 26.07.2012, 17:46
  2. Адреса 00H-100H
    от Helloween в разделе Оси
    Ответов: 14
    Последнее: 10.05.2011, 14:26
  3. FDD - адреса
    от AlexBel в разделе MSX
    Ответов: 1
    Последнее: 11.05.2009, 10:45
  4. Определение Turbo-FM
    от Максагор в разделе Программирование
    Ответов: 21
    Последнее: 28.09.2007, 20:29
  5. Определение номера дисковода
    от goodboy в разделе Программирование
    Ответов: 2
    Последнее: 22.06.2005, 01:54

Ваши права

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