С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
goodboy, да, с такими настройками реалспек грузит.
Делаю тут игру, она после распаковки начинается с 24064, если в загрузчике выставить CLEAR 24063, то бейсик ругается, слишком низкий адрес, даже если убрать всё лишнее, ведь в загрузчике в рем строке 181 байт (168 кодовый лоадер + 13 байт переброска лоадера).
Может можно CLEAR в бейсике не ставить, а приклеить перед сжатым блоком игры LD SP,24063? Такое прокатит или нет? В хрусте есть опция "установить новый стек после распаковки", но ведь нам нужен стек в 24063 до распаковки? Или что.. Вообще не понятно, в описании к хрусту сказано, что стек плавает во время распаковки, нафига тогда в бейсик-загрузчике стек выставлять, если хруст его потом один хрен заставляет плавать.![]()
___________
ZX_NOVOSIB, ld sp,24064 надо делать перед загрузкой
при распаковке хруст через стек берутся данные потому он и гуляет
а выставлять надо чтобы блок загрузился нормально - малоли где бейсик стек бросит
С уважением,
Jerri / Red Triangle.
zx_novosib, постарайся понять как я сжал robin of the wood
![]()
goodboy,Скрытый текст
честно сказать я не очень хорошо понимаю что такое стек, вернее я понимаю, но не понимаю зачем его ставить именно на адрес первого байта распакованного блока. Зачем RAMTOP устанавливают, я более менее понимаю, чтобы не было конфликта кодового блока и бейсика (однако и здесь есть непонятки, ну допустим блок затрет часть бейсика, ну и фиг с ним с этим бейсиком, если в него возврата не планируется, если он уже сделал своё дело. Однако появляются глюки, если например распаковать хрустом и автостартануть блок, если при этом распакованный блок наедет на конец бейсика, короче почему в этом случае появляются глюки я не понимаю.)
А игра кстати, работает, без лишних телодвижений, в бейсик-загрузчике CLEAR нельзя выставить, ну хрен с ним, без него всё идеально работает. Я даже игру всю прошёл, чтобы убедиться, что глюков нет, она короткая.[свернуть]а в чём там подвох был? Мне сложно будет понять решение проблемы, если я самой проблемы не понял )) В бейсик-загрузчике Робина у тебя стоит CLEAR 24575. Получается что CLEAR надо ставить на единицу меньше адреса загрузки сжатого блока? А я почему-то думал, что на единицу меньше уже разжатого блока. В этом была моя ошибка?постарайся понять как я сжал robin of the wood
Когда в хрусте я выставляю параметры, то NEW SP надо выставлять на адрес первого байта распакованного блока, так? (я на этот параметр вообще не обращал внимание, думал, я ж уже выставил CLEAR в бейсике, нафига мне что-то еще делать.)
всё наоборот, данные которые выставляются/снимаются на стеке портят кодовый блок. если прерывания разрешены (режим im0/1) то постоянно выполняется подпрограмма в ПЗУ с #0038. при этом на стек сначала выставляется адрес с которого потом продолжится выполнение основной программы.
окей. Представим гипотетическую ситуацию: бейсик программа занимает много места, например до адреса 26000. Она грузит блок упакованный хрустом, блок с 40000. Блок хочет распаковатся начиная с адреса 24000 (и автостартануть, возврат в бейсик не планируется). Как выйти из ситуации? В бейсике нельзя сделать CLEAR 23999, однако если его не сделать, то #0038 испортит наш блок.
Однако можно в настройках хруста выставить NEW SP 24000 и это решит проблему? Или в дополнение к этому параметру надо будет выставить ещё и Int. on exit: DI? (т.е. запретить прерывания)
___________
при sp=24000 стек будет расти вниз и естественно не затронет твои данные.
насчёт прерываний нельзя сказать точно, если программа устанавливает IM2 то она берёт полное управление на-себя.
однако бывают программы которые пользуются результатами пзушной im1 (опрос клавиатуры, часы и.т.д.) тогда прерывания должны быть разрешены.
в128ом бейсике всё гораздо запущенней.на прерываниях висят подпрограммы которые находятся в буфере принтера. например переключить страницу можно сделав poke 23388,page
чуть выше я писал:Но похоже правило "В бейсик-загрузчике CLEAR ставим "адресс загрузки сжатого блока -1", предварительно в хрусте выставив для этого блока NEW SP = адрес начала несжатого блока" не работает!В бейсик-загрузчике Робина у тебя стоит CLEAR 24575. Получается что CLEAR надо ставить на единицу меньше адреса загрузки сжатого блока? А я почему-то думал, что на единицу меньше уже разжатого блока. В этом была моя ошибка?
Когда в хрусте я выставляю параметры, то NEW SP надо выставлять на адрес первого байта распакованного блока, так? (я на этот параметр вообще не обращал внимание, думал, я ж уже выставил CLEAR в бейсике, нафига мне что-то еще делать.)
Щас делал турбо-версию "TEST 4.30" (в аттаче). Дело было так: глянул твой загрузчик, там CLEAR 24575, загруз несжатого блока и USR 24576. Я в хрусте, выставляю NEW SP 24576, сжатый блок кладу с 40000, в otla ставлю CLEAR 39999, и USR 40000. В итоге нихрена не работает. Только когда в otla поставил CLEAR 24575, заработало. Но тогда получается я в хрусте зря ставил NEW SP. Короче сложно всё.![]()
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)