С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Не всё сразу
- - - Добавлено - - -
Смотря что считать корректным. Формально она не корректная, но фактически сложно представить реальную (а не выдуманную) ситуацию в которой она не сработает. Вряд ли кто-то будет что-то химичить с содержанием страниц, а потом, без рестарта компа решит поиграть в игру. Даже в детстве, када я грузил с мафона, было правило, что перед каждой попыткой загрузки делался reset. И мне кажется, что все так делали/делают.
Т.е. эта проверка - достаточная. Можно конечно сделать проверку "маниакальную", предельно корректную для всех случаев. Можно конечно сделать, для интереса. Правда тада не получится:
ld a,20
......
dec a ; a=19
Ибо придется делать примерно так:
1. В сжатом блоке хруста находим после 49151 какой-то байт, который равен нулю. Берём этот адрес на карандаш.
2. Грузим картинку и основной блок.
3. Переключаем на 19
4. Заносим по этому адресу "19"
5. Переключаем обратно на 16.
6. Смотрим что лежит по адресу.
7. Если там 19, то JZ на 48-ой сценарий.
8. Иначе (0) - по любому 128. И пофиг что там в каких страницах лежало до загрузки игры.
В 48-ом сценарии конечно придется перед стартом добавить
XOR A
LD адрес , A
___________
ну и в догонку - в фирменной версии проверка как раз корректная в загрузчике:
Код:LD HL,(C000) PUSH HL LD A,55 LD (C000),A LD A,13 CALL SET_RAM_PAGE LD A,AA LD (C000),A LD A,10 CALL SET_RAM_PAGE LD A,(C000) AND 01 LD (728E),A POP HL LD (C000),HL LD A,(728E) AND A JP Z,5E5E; START LD A,13 CALL SET_RAM_PAGE LD IX,C000 LD DE,4000 CALL LOAD_BLOCK LD A,10 CALL SET_RAM_PAGE JP 5E5E; START
ZX-Evo Rev. C4 (Double-config) / VDAC2 / NeoGS / ZX-Multisound / NemoIDE / ZiFi
Scorpion ZS 256 Turbo+ (Light) / GMX / ZXM-GS / TSFM / SMUC / ZXKM / Gotek
лишнее телодвижение. проще включить страницу 6, потом 3Код:LD A,19 LD BC,32765 OUT (C),A LD (65532),A LD A,16 OUT (C),A LD A,(65532) CP 19 JR Z,ZX48 ZX128 LD A,19 LD BC,32765 OUT (C),A
при проверке режима можно сначала включить четвертую, а потом третью.
уже экономим байтКод:ld a,20 ...... dec a ; a=19
и вместо
сделатьКод:ld (xxxx),a ....... ld a,(xxxx)
ещё экономим байтКод:ld hl,xxxx ld (hl),a ....... ld a,(hl)
Экономить по байту - не наш метод! )
К тому же, как заметил Шынни, проверка не корректная (мало ли что окажется в памяти перед запуском игры). В общем, я упростил некоторые конструкции и убил таким образом сразу двух зайцев: сэкономил 14 байт, и проверка стала корректной"Всё и сразу" (с)
Код:ORG 23894 LD BC,#1605 LD HL,42000 CALL LOAD CALL 42000 DI LD BC,#7D05 LD HL,26000 CALL LOAD LD A,18 CALL PAGE LD A,(50100) CP 84 JR Z,ZX48 ZX128 CALL PAGE LD BC,#1105 LD HL,49152 CALL LOAD CALL 49152 LD A,16 CALL PAGE LD SP,24137 CALL 26000 RUN JP 24158 ZX48 LD SP,24137 CALL 26000 XOR A LD (29326),A JR RUN LOAD LD DE,(23796) CALL 15635 RET PAGE LD BC,32765 OUT (C),A RET
___________
ZX_NOVOSIB, я предвкушаю тот момент, когда ты обратишься в сторону написания tiny intro xD
Например, LOAD и PAGE можно объединить и сократить, если нужно.
а зачем 1 загонять в 29326? Что это даёт?
ZX-Evo Rev. C4 (Double-config) / VDAC2 / NeoGS / ZX-Multisound / NemoIDE / ZiFi
Scorpion ZS 256 Turbo+ (Light) / GMX / ZXM-GS / TSFM / SMUC / ZXKM / Gotek
Как насчёт проверить самому?
Можно же загрузить блок, распаковать его и в эмуле посмотреть что-там лежало до 1 (подскажу, там до 1 лежал 0), а потом прям во время игры по Ctrl+P (в спекуляторе так) позаносить эти значения и сразу станет ясно, зачем нужна 1 ))
- - - Добавлено - - -
Это как? Это то о чём Гудбой писал или ты о чём-то другом?
___________
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)