Comments 15
А что не так с восьмибитностью и 16/32-разрядными переменными? Переноса на процессоре нет?
(Если я не разговариваю с переводом)
(Если я не разговариваю с переводом)
0
UFO just landed and posted this here
Все там хорошо с восьмибитностью. Но куда проще и (в разы) быстрее сделать инкремент в десятичной форме, чем конвертировать из двоичной.
0
Можно хранить в виде binary-coded decimal и использовать в 2 раза меньше памяти (если, конечно, из процессора не выкинули команду DAA, которая есть в 8080 и Z80).
0
>> 2 раза меньше памяти
DAA там есть. Но вам что, жалко 2(!) байта стало?
Вы потратите куда больше чтобы достать старший ниббл.
В GBCPU нет команды RLD, поэтому так:
rrca
rrca
rrca
rrca
and #0f
6 байт
К тому же он хранит не число 0-9, а номер тайла, поэтому ещё 2 байта =)
add a, start_tile_id
DAA там есть. Но вам что, жалко 2(!) байта стало?
Вы потратите куда больше чтобы достать старший ниббл.
В GBCPU нет команды RLD, поэтому так:
rrca
rrca
rrca
rrca
and #0f
6 байт
К тому же он хранит не число 0-9, а номер тайла, поэтому ещё 2 байта =)
add a, start_tile_id
0
Вопрос же не только в удобстве вывода, но и в удобстве инкремента. Хотя, у меня в итоге получилось только 4 байта сэкономить (11 байт для BCD-кода, позволяющего добавлять 1-99 очков, и 15 байт для «обычного» кода, добавляющего 1-10 очков), так что возможно в данном случае такая оптимизация действительно не имеет смысла.
0
15 это с установкой адреса?
Попробовал ради интереса, получилось 14 без установки адреса (+3 байта)
>> возможно в данном случае такая оптимизация действительно не имеет смысла.
Это всего несколько десятков тактов и пара байт. Не стоит даже размышления над этим вопросом.
Очки кратные 10 делаются просто — приписывается нолик справа (oldskool trick)
10 очков явно лучше чем одно :-P
Попробовал ради интереса, получилось 14 без установки адреса (+3 байта)
;hl address
;a value 0-10
ld b,5
l1: add a,(hl)
cp start_tile_id+10
jr c, l2
sub 10
l2: ld (hl+),a ;постинкремент
sbc a,a ; эти две команды получают
inc a ; a = carry ? 0 : 1
djnz l1
>> возможно в данном случае такая оптимизация действительно не имеет смысла.
Это всего несколько десятков тактов и пара байт. Не стоит даже размышления над этим вопросом.
Очки кратные 10 делаются просто — приписывается нолик справа (oldskool trick)
10 очков явно лучше чем одно :-P
0
У меня на байт больше, так как вместо
Может можно как-то еще соптимизировать, но я в последний раз что-то осмысленное под Spectrum писал в 1999 году и уже мало что помню, к сожалению. Можно ускорить код, если выходить из цикла по jr nc, но это на 2 байта больше.
sbc a,a
inc a
используется ld a,0
adc a,a
(в A вроде бы должен быть флаг переноса, а не его инверсия). Для сравнения, код через DAA выглядит так: ld b,3
or a
L1: adc a,(hl)
daa
ld (hl),a
ld a,0
inc hl ; или dec hl - смотря в каком порядке хранить
djnz L1
Может можно как-то еще соптимизировать, но я в последний раз что-то осмысленное под Spectrum писал в 1999 году и уже мало что помню, к сожалению. Можно ускорить код, если выходить из цикла по jr nc, но это на 2 байта больше.
0
15$ — это ппц просто! Оно того не стоит
0
Порекламируйте на новую зеландию, овечки и Velcro это символичные тут :) и достаточно много нинтендобоев.
+1
10 минут смотрел на картинку с дебаггером, аж ностальгия накатилась. Как же он похож на ассемблер Z80.
0
4-х цветная графика в 60 фпс это кул
0
Sign up to leave a comment.
Каково это — создавать игру для Game Boy в 2017 году