Есть такой код:
если А потом не используется, могу ли я заменить наКод:ld a, r
and 7
cp 3
jr c, monster_attack
cp 5
jr nc, monster_attack
Код:ld a, r
and 7
cp 6
jr c, monster_attack
Вид для печати
Есть такой код:
если А потом не используется, могу ли я заменить наКод:ld a, r
and 7
cp 3
jr c, monster_attack
cp 5
jr nc, monster_attack
Код:ld a, r
and 7
cp 6
jr c, monster_attack
если нужно проверять 2-ой бит (считая от нуля) тогдаКод:ld a,r
rra
and 3
jr nz, monster_attack
Код:ld a,r
rra
rra
and 1
jr nz, monster_attack
Если A потом не используется, можно сделать так. Но непонятно, что заставило авторов делать две проверки вместо одной. Возможно, А не используется в ветви перехода, но используется далее по коду? Возможно, в ветви перехода проверяется бит CF (или ZF)?
- - - Добавлено - - -
Переход на monster_attack делается по значениям 0,1,2,5,6,7 после AND 7, и не делается по значениям 3,4.
Или шесть из восьми?
Надо убедиться, что:
R - истинно случайное.
AF - не используется в обеих ветках.
Нет самомодифицирующегося кода. Например константы 7,3 и 5 не изменяются.
Тогда это 6 из 8. То же что 3 из 4.
LD A,R
AND 3; 5 или 6. два бита нам нужны.
JP NZ,m_a
- - - Добавлено - - -
А R нужно проверить, чтобы не писалось _до_, или читалось _до_ или _после_, за фиксированном количестве тактов.
Зачем нужен R? случайное число получится ахтунговое.
Если нужно фиксированное тактов, то задача непонятная - а в ветвлениях будет одно количество тактов?
для перехода удобнее построить таблицу:
dw bra1 ;0
dw bra1 ;1
dw bra1 ;2
dw bra2 ;3
dw bra1 ;4
dw bra2 ;5
dw bra1 ;6
dw bra2 ;7
и получить адрес старым индейским способом.
Если вообще не критично можно cp 0x60, будет 60 из 80.
Вариант с CP N без AND ещё позволяет более гибко выставлять вероятность - от 1/80 до 79/80.
Упс) точно. От 1/128 до 127/128, то есть.
Из опыта: незачем пытаться сжать код и писать алгоритм. Напиши готовый код, потом покажи. Решения найдутся сразу наверное(:
Это когда с нуля. :) Я имеющийся ужимаю:
- переделал где возможно JP на JR
- CALL/RET на JP
- одиночные вызовы маленьких функций заменил на инлайн
- ветвления с константами заменил одну ветку на DEC A
- повыкидывал пустоты в данных
Можно пожать часть данных и кода, но элегантного решения как это удобно компилить пока не придумал.
Элегантного? (:
это что, 512b game compo?
сделай 128k (для теста) и если понравится (в чём я сильно сомневаюсь) думай как впихнуть в 48k
а как русский язык коррелируется с фирменными спеками ?
на них точно ввод слов превратится в ад
...........
если я правильно понял в HoM все сообщения складываются из готовых слов.
явно будут проблемы с падежами/окончаниями и.т.д.
была предварительная проработка этого момента ?