goodboy, модеров я уже попросил отщипнуть в более подходящую тему, так что продолжим :-)

Про прерывания интересно, обсудим чуть позже. Для начала надо с кое чем другим разобраться.

Как всё начиналось:
Цитата Сообщение от ZX_NOVOSIB Посмотреть сообщение
не подскажите, что делает этот 65-байтный кусок кода? Очень странный загрузчик игры, одних только бейсик-программ две штуки. Если коротко, то эти 65 байт грузятся в буфер принтера (23296), из-за чего игра не работает в 128-ом режиме. Потом грузится основной блок игры с адреса 24137 и до упора, потом идёт usr 23296, и только потом usr на запуск игры. Короче, как сделать, чтобы игра работала и в 128-ом режиме тоже?
Цитата Сообщение от SAM style Посмотреть сообщение
В коде определялка, есть ли 128К или только 48К. Чтобы работало, первым делом надо включить ПЗУ бейсика 48К, а потом уже грузить код в буфер принтера
Цитата Сообщение от ZX_NOVOSIB Посмотреть сообщение
SAM style, а как включить пзу бейсика 48к?
Из бейсика принудительно включить нужное ПЗУ не получится, надо в ассемблере выполнить
Код:
ld bc,#7ffd
ld a,#10
out (c),a
После этого я решил вообще от этой 65-ти байтной процедуры отказаться, и решил буфер принтера вообще не трогать, ничего туда не грузить, и пзу 48 не включать. А зачем? Если буфер принтера мне не нужен?.. Потом всё шло хорошо до той поры, пока я не обнаружил, что хрум портит основной блок, в конце байт 70, из-за чего в игре пропадали алмазы. Я не верил своим глазам, но факт на лицо. А хруму надо 112 байт для буфера, и он у меня юзал в качестве буфера область принтера, но с адреса 23433 (в нём это по умолчанию). И никакого конфликта не возникало из-за размещения буфера там, я проверял во всех режимах - всё тип-топ, токо без алмазов ))

Потом я долго искал замену хруму, чуть не поседел, но вовремя вспомнил, что есть хруст1.3. Хруст блок не портил, и алмазы оставались на месте. В 48-ом и usr0 всё вообще было тип-топ! Но в 128-ом стал портится спрайт диззи. Я решил что это из-за буфера принтера, ведь хрусту уже надо под буфер не 112, а 256 байт, и он у меня занимал весь буфер принтера целиком. И я перенес буфер хруста в экранную область для теста. Тест сработал, спрайт не портился, но портился экран. Я уж думал сохранять экран в другой страничке, и потом его восстанавливать...

Но вовремя вспомнил про
ld bc,#7ffd
ld a,#10
out (c),a
Я вставил этот код перед распаковкой основного блока в 128-ом сценарии и всё сразу резко стало тип-топ! И я подумал, что этот код убивает бейсик-128 и, соответственно, область принтера очищается, и буфер хруста в этой области теперь отрабатывает без ошибок, и именно по этому спрайт диззи теперь не портится. Но этот код у меня стоял в таком месте, что возврата к бейсику уже не было. И я не мог проверить свои догадки.

Но у меня в коде загрузчика были переключения страниц (через out 253, а), и потом я понял, что на скорпионе будет фейл. И я заменил все проблемные места на код типа
ld bc,#7ffd
ld a,#10
out (c),a
И одно из проблемных мест было в том месте, после которого планировался возврат в бейсик. И я думал, что раз подобный код устраняет конфликт хруста и бейсика в буфере принтера, то и сам бейсик он тоже убьёт, и что по этому при попытке вернутьсяв бейсик будет глюк. А глюка нет.

Это конечно хорошо, что теперь всё работает, и на скорпе в том числе, но плохо то, что я не понимаю почему: и конфликт в буфере принтера исчезает (хруста и 128бейсика), и 128бейсик при этом нормально работает.