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

User Tag List

Страница 4 из 23 ПерваяПервая 12345678 ... ПоследняяПоследняя
Показано с 31 по 40 из 227

Тема: Монолоадер для чайников.

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

    По умолчанию

    Цитата Сообщение от ZX_NOVOSIB Посмотреть сообщение
    Как он, бейсик, определят что CLEAR слишком низкая?
    Разница между новым значением RAMTOP и значением в (STKEND) должна быть больше 50 байт. Если ты не планируешь возвращаеться в BASIC, то CLEAR можно и не делать, хотя при этом все равно возможны side-эффекты. Если ты подменишь значение в STKEND, BASIC умрет. Как вариант:
    Код:
             ld de,(PROG)     ; #5c53
             ld hl,(STKEND)  ; #5c65
             dec hl
             call RECLAIM-1  ; #19e5
    При этом стирается вся BASIC-программа, переменные и все, что там ниже, но делается это корректно.
    Если ты попытаешься обмануть интерпретатор, поставить насильно CLEAR выше, чем он позволяет, и вернешься в BASIC, то у тебя машинный стек наедет на стек калькулятора, а BASIC без калькулятора не может исполнить и десятка команд. Собсна, затрет сам себе машинный стек и улетит в космос.

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

  3. #32
    Guru Аватар для ZX_NOVOSIB
    Регистрация
    24.12.2006
    Адрес
    р.п. Маслянино, Новосибирская обл.
    Сообщений
    5,547
    Спасибо Благодарностей отдано 
    233
    Спасибо Благодарностей получено 
    258
    Поблагодарили
    178 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Faster Посмотреть сообщение
    Не страдай ерундой, воспользуйся советом, который дал goodboy.
    он дал какой-то код. Но я не понял, что делает этот код и для чего он.

    ---------- Post added at 19:48 ---------- Previous post was at 19:44 ----------

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    Как вариант:
    Код:
             ld de,(PROG)     ; #5c53
             ld hl,(STKEND)  ; #5c65
             dec hl
             call RECLAIM-1  ; #19e5
    При этом стирается вся BASIC-программа, переменные и все, что там ниже, но делается это корректно.
    Этот код можно просто скопировать в Sublime Text? Что то я его скопировал, после него поставил JP на адрес автораспаковки-автостарта игры, собрал, пытаюсь заюзать его - и нифига, сбрасывается.
    Куплю корпус и материнку от Spectrum +2/+3

  4. #33
    Member Аватар для Faster
    Регистрация
    22.06.2005
    Адрес
    Ульяновск
    Сообщений
    161
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZX_NOVOSIB Посмотреть сообщение
    он дал какой-то код. Но я не понял, что делает этот код и для чего он.
    Goodboy предложил в бейсик-строке после REM разместить небольшую программку, которая грузит по адресу 24576 основной кодовый загрузчик. Т.е. суть в том, чтобы не заморачиваться с бейсиком пытаясь впихнуть в него по максимому, а разместить код типа:
    Код:
    LD hl,addr ;адрес загрузки основного лоадера
    ld de,(23796) ;трек и сектор основного лоадера
    ld bc,#nn05 ;где #nn - длина основного лоадера в секторах
    call 15635
    который загрузит основной лоадер, куда ты можешь "запихать" что угодно!
    Когда на твой вопрос отвечает философ, перестаешь понимать вопрос

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

    По умолчанию

    Цитата Сообщение от ZX_NOVOSIB Посмотреть сообщение
    Этот код можно просто скопировать в Sublime Text?
    Нет, есть несколько проблем.
    Проблема №1: учимся сразу писать правильно, потом переделываться будет тяжко. В начало модуля пихаем (хотя бы так, все подряд, но лучше разделить на константы системных переменных и процедур ПЗУ):
    Код:
    PROG equ #5c53
    STKEND equ #5c65
    RECLAIM_1 equ #19e5
    Тогда у тебя PROG, STKEND и RECLAIM_1 становятся понятными и говорящими именами в программе (вместо hex-значений). Олсо SjAsm пихает в error output сообшения об ошибках а sublime, по идее, их должен ловить. Либо настраиваем это, либо учимся их не игнорить (sjasm, если не знает метку RECLAIM-1, пихает в место нее 0, что превращает call RACLAIM-1 в RANDOMIZE USR 0). Ахтунг - моя лажа, "-" использовать в метках нельзя, меняем на "_", но RANDOMIZE USR 65535 (0 - 1) примерно то же самое
    Проблема №2 (потенциальная): если у тебя загрузчик в машкодах, встроенных в первую BASIC-строку, а ты стираешь весь BASIC, то программа твоя может пострадать (я не помню уже сколько на самом деле занимает "пустая" программа).
    Проблема №3: учимся пользоваться отладчиком Unreal Spectrum - как минимум он показывает что у тебя скомпилировалось, а еще от него можно узнать в каком месте происходит Большой взрыв с возвратом в начало эволюции;
    Проблема №4 (у меня в мозгу): я так понимаю, тебе всей ценой нужно сделать честный CLEAR перед стартом программы. А ты говоришь,
    Цитата Сообщение от ZX_NOVOSIB Посмотреть сообщение
    после него поставил JP на адрес автораспаковки-автостарта игры
    Получается, машинный стек у тебя остается там, где его придумал BASIC, он затирается кодом игры и у TR-DOS при загрузке снесет крышку.
    Смотри, суть оператора CLEAR в следующем:
    • убийство всех BASIC-переменных (кстати, код очистки всего и вся я взял именно из реализации CLEAR);
    • очистка экрана;
    • установка системной переменной RAMTOP;
    • инициализация стека GO SUB по адресу RAMTOP (он занимает там 1 байт);
    • перенос машинного стека под стек GO SUB;

    Фактически, CLEAR в BASIC-загрузчике чаще всего нужен для переноса машинного стека до, собственно, самой загрузки. Если не нужен остальной "сервис" от CLEAR, то CLEAR #nnnn заменяется на ассемблерную команду ld sp,#nnnn, при этом никаких проверок, разумеется, не делается, никаких RAMTOP no good, но в BASIC уже не вернуться - он ситает, что машинный стек в другом месте.

    Там вот, объясни уже всем тут, после твоего кодового загрузчика надо попасть в игру или опять вернуться в BASIC?

  6. #35
    Guru Аватар для ZX_NOVOSIB
    Регистрация
    24.12.2006
    Адрес
    р.п. Маслянино, Новосибирская обл.
    Сообщений
    5,547
    Спасибо Благодарностей отдано 
    233
    Спасибо Благодарностей получено 
    258
    Поблагодарили
    178 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    Так вот, объясни уже всем тут, после твоего кодового загрузчика надо попасть в игру или опять вернуться в BASIC?
    кодовый загрузчик не при делах. В нем не нужно никаких "аналогов CLEAR". Он просто загрузит что надо в память. Далее, например, из под бейсика я внесу нужные покесы в распакованный блок, вернее в распакованную часть блока. После этого и нужен, поидее, некий обман CLEAR, нужен USR кода, который похерит бейсик, высвободив память, а после должен идти JP на оставшуюся (запакованную) часть кода игры. Она распакуется (склеившись с тем куском, который мы "покесили") и автостартанет (так как этот кусок запакован хрустом, то там можно выставить автостарт с адреса - и следовательно для первой части выставлен 24600).
    Куплю корпус и материнку от Spectrum +2/+3

  7. #36
    Banned
    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,123
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ZX_NOVOSIB, имхо ты либо не понимаешь, либо дурью маешься.

  8. #37
    Guru Аватар для ZX_NOVOSIB
    Регистрация
    24.12.2006
    Адрес
    р.п. Маслянино, Новосибирская обл.
    Сообщений
    5,547
    Спасибо Благодарностей отдано 
    233
    Спасибо Благодарностей получено 
    258
    Поблагодарили
    178 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    denpopov, скорей всего и то и другое одновременно )))

    Что ж, если то, что я написал нереально, то я сделю просто монолоадер, там будет выбор части, но не будет чит-меню. Потому как лоадер сделать я еще смогу, но совместить его с чит-меню - для этого нужно владеть ассемблером хотя бы на уровне denpopov'а. Мои же познания пока где-то на уровне ААА
    Куплю корпус и материнку от Spectrum +2/+3

  9. #38
    Banned
    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,123
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZX_NOVOSIB Посмотреть сообщение
    но совместить его с чит-меню - для этого нужно владеть ассемблером хотя бы на уровне denpopov'а
    Щито? я это быстрее сделаю

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

    По умолчанию

    Цитата Сообщение от ZX_NOVOSIB Посмотреть сообщение
    Далее, например, из под бейсика я внесу нужные покесы в распакованный блок, вернее в распакованную часть блока.
    Цитата Сообщение от ZX_NOVOSIB Посмотреть сообщение
    Что ж, если то, что я написал нереально, то я сделю просто монолоадер, там будет выбор части, но не будет чит-меню. Потому как лоадер сделать я еще смогу, но совместить его с чит-меню - для этого нужно владеть ассемблером хотя бы на уровне denpopov'а.
    Да все это реально, только через задницу. Для написания простейшего чит-меню достаточно вот это прочитать хотя бы на треть (вывод букв, ввод с клавиатуры). Патчинг в машкоде тоже делается "на ура". Тогда сможешь сделать все в кодах. CLEAR тебе в этом случае не нужен - при запуске загрузчика командой ld sp,#nnnn переставляешь стек в правильное место.

  11. #40
    Veteran
    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,042
    Спасибо Благодарностей отдано 
    934
    Спасибо Благодарностей получено 
    227
    Поблагодарили
    122 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ZX_NOVOSIB, У тебя уже есть чит-меню на бейсике?
    Может такой компромис:
    Чит меню на бейсике, результат выбора меню бейсиком POKE, например по адресу 65535, или где ещё свободная память, потом передаётся USR-ом на 1 REM $$$$$. Из него уже в бейсик возврата нет. Устанавливается SP. Загружается основной кодовый блок игры через CALL 15635 (возможно, с затиранием конца бейсик программы). Патчится согласно содержимому ячейки 65535, или где там. Запускается.

Страница 4 из 23 ПерваяПервая 12345678 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 206
    Последнее: 19.08.2020, 10:36
  2. TS Conf прошивка для Чайников
    от AAA в разделе Софт
    Ответов: 157
    Последнее: 10.01.2015, 04:46
  3. Ответов: 35
    Последнее: 01.12.2006, 10:06
  4. монолоадер.
    от Sinus в разделе Программирование
    Ответов: 17
    Последнее: 07.02.2006, 14:25

Ваши права

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