Цитата Сообщение от 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?