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

User Tag List

Страница 18 из 23 ПерваяПервая ... 141516171819202122 ... ПоследняяПоследняя
Показано с 171 по 180 из 227

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

  1. #171
    Guru Аватар для ZX_NOVOSIB
    Регистрация
    24.12.2006
    Адрес
    р.п. Маслянино, Новосибирская обл.
    Сообщений
    3,862
    Благодарностей: 1024
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Слегка перезалил, ибо на скорпионах и т.п. не работала из-за out 253,a.
    Теперь out (c),a и, короче работает. Правда я теперь не понимаю почему

    Сначала у меня в коде вообще не было
    LD ВС,#7FFD
    LD A,16
    OUT (C),A

    И видимо из-за этого, в 128-ом режиме (не usr0), когда хруст юзал буфер принтера, то что-то шло не так, и в игре спрайт диззи был косячный. Потом я добавил это включение 48-пзу перед самой распаковкой хруста и всё сразу стало окей (за исключением нерабочести на скорпах).

    Теперь же я не просто добавил этот код, а заменил им все out 253,a. Всё стало совсем окей, но этот код, включая пзу-48, и освобождая хрусту буфер принтера, разве не должен убивать 128-ой бейсик? Почему он его не убивает? И почему хруст теперь, юзая буфер принтера, не портит спрайт диззи? Как так получилось, что бейсик-128 не убивается, но хруст, имея буфер в буфере принтера перестаёт "косячить спрайт"?
    _

  2. #172
    Guru Аватар для goodboy
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    10,161
    Благодарностей: 3508
    Записей в дневнике
    1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZX_NOVOSIB Посмотреть сообщение
    Как так получилось, что бейсик-128 не убивается, но хруст, имея буфер в буфере принтера перестаёт "косячить спрайт"?
    так наверно прерывания запрещены (вот бейсик128 и не ведает что творится в буфере)

  3. #173
    Guru Аватар для ZX_NOVOSIB
    Регистрация
    24.12.2006
    Адрес
    р.п. Маслянино, Новосибирская обл.
    Сообщений
    3,862
    Благодарностей: 1024
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    goodboy, да вроде разрешены:



    По RET у меня идёт возврат в бейсик, и я думал, что в этом месте всё должно улететь в тар-тарары. Но не улетает. Мало того, можно вообще выйти даже в редактор 128 бейсика, и всё будет ок. И в буфере принтера не нули, а всякая фигня. Но почему тогда эта фигня не мешает хрусту? И почему она раньше ему мешала, а с этим кодом уже не мешает?
    _

  4. #174
    Guru Аватар для goodboy
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    10,161
    Благодарностей: 3508
    Записей в дневнике
    1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZX_NOVOSIB Посмотреть сообщение
    По RET у меня идёт возврат в бейсик, и я думал, что в этом месте всё должно улететь в тар-тарары. Но не улетает
    а почему должно улететь ???
    и для меня загадка зачем ты запрещаешь прерывания перед входом в trdos
    и зачем разрешаешь после (trdos их сама разрешает после загрузки блока)
    ...........
    ну а про поднятие вопросов в совершенно неподходяшей теме я уже молчу....
    ...........
    а зачем ты разрешаешь прерывания после распаковки основного блока ?
    Последний раз редактировалось goodboy; 16.05.2018 в 21:54.

  5. #175
    Guru Аватар для ZX_NOVOSIB
    Регистрация
    24.12.2006
    Адрес
    р.п. Маслянино, Новосибирская обл.
    Сообщений
    3,862
    Благодарностей: 1024
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    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бейсик при этом нормально работает.

  6. #176
    Guru Аватар для goodboy
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    10,161
    Благодарностей: 3508
    Записей в дневнике
    1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZX_NOVOSIB Посмотреть сообщение
    конфликт в буфере принтера исчезает (хруста и 128бейсика), и 128бейсик при этом нормально работает.
    а почему то решил что при разжиме картинке используется буфер принтера ???

  7. #177
    Guru Аватар для ZX_NOVOSIB
    Регистрация
    24.12.2006
    Адрес
    р.п. Маслянино, Новосибирская обл.
    Сообщений
    3,862
    Благодарностей: 1024
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    goodboy, не при разжиме картинки, а при разжиме основного блока игры.

    - - - Добавлено - - -

    щас попробую наглядный трд собрать.
    _

  8. #178
    Veteran Аватар для Vadim
    Регистрация
    24.07.2008
    Адрес
    Курган
    Сообщений
    1,867
    Благодарностей: 383
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZX_NOVOSIB Посмотреть сообщение
    Как так получилось, что бейсик-128 не убивается,
    Я дам тебе код, который отключает бейсик 128, 100% корректно работающий всегда.

    Скрытый текст

    Profi 5.06 1024K 12Mhz (кварц на 24), палитра, COM-порт, часы, hdd, covox, программатор
    ZX-Spectrum +3, ZX-Spectrum +2B, ZX-Spectrum +2, ZX Spectrum 48, ZX Spectrum 48+
    ZX Evolution Rev B.
    Color 48 + Beta Disk Interface +FDD+YM2149F
    Орель-08БК
    Pentagon-48 (недоссобранный кем-то)
    Pentagon-128 (полуубитый)
    Кворум-128 (в ремонте)
    Магик-05 (в ремонте)
    Robotron 1715
    Корвет ПК8020 и ПК8010
    Amstrad CPC 464
    Amstrad CPC 6128
    [свернуть]

  9. Этот пользователь поблагодарил Vadim за это полезное сообщение:
    Oleg N. Cher (17.05.2018)

  10. #179
    Guru Аватар для goodboy
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    10,161
    Благодарностей: 3508
    Записей в дневнике
    1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZX_NOVOSIB Посмотреть сообщение
    при разжиме основного блока игры.
    я уже понял.
    там чаще всего прерывание (между ei и im2) не успевает проскочить,
    но теоретически может.
    правильней запрещать после разжима

  11. #180
    Guru Аватар для ZX_NOVOSIB
    Регистрация
    24.12.2006
    Адрес
    р.п. Маслянино, Новосибирская обл.
    Сообщений
    3,862
    Благодарностей: 1024
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vadim Посмотреть сообщение
    Я дам тебе код, который отключает бейсик 128, 100% корректно работающий всегда.
    Да такой код уже есть от словака, 45 байт, дело то не в этом.
    В данном конкретном случае (с диззи на украинском), не слишком требовалось убивать 128 бейсик. И уж тем более ценой лишних 45 байт.

    - - - Добавлено - - -

    Цитата Сообщение от goodboy Посмотреть сообщение
    я уже понял.
    там чаще всего прерывание (между ei и im2) не успевает проскочить,
    но теоретически может.
    правильней запрещать после разжима
    А я вот нихрена не понял
    У меня после разжима нет никаких команд по запрещению/разрешению прерываний. Значит надо было между разжимом и стартом игры вставить DI? (в хруме/хрусте это можно автоматом ставить, но там по умолчанию EI)

    Хотел показать наглядно, но что-то пошло не так. Единственное, что наглядно видно, это то, что хрум портит блок, и алмазы исчезают.
    По задумке, ещё должно было наглядно видно, что хруст, юзая буфер принтера, при запуске в 128 режиме, портит спрайт. Но сейчас почему-то не портит. Это прерывание не успевает проскочить?

    У меня в полноценном загрузчике оно проскакивало, и поэтому от хруста спрайт портился? Но когда я вставил
    ld bc,#7ffd
    ld a,#10
    out (c),a
    То.... то что изменилось? Почему спрайт перестал портится?
    Вложения Вложения
    • Тип файла: zip primer.zip (134.7 Кб, Просмотров: 10)
    _

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

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

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

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

Похожие темы

  1. Ответов: 185
    Последнее: 22.03.2018, 01:26
  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

Ваши права

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