Важная информация
RSS лента

Шынни

Shiny48 *Pentagon multicolor fix*

Оценить эту запись


демо давно лежало в папке, вчера добрался до фикса. Первый взгляд на код подсказал решение - я дизассемблировал программу с помощью IDA и стал экспериментировать.
Сделано, конечно, очень небрежно: с участка $8000 по $FFFF раскидан код, данные и музыка. Но для начала я скомпилировал код и начал экспериментировать:
Вот процедура вывода мультиколора:
Код:
loc_8590:
		ld	(loc_8DB4+1), sp

loc_8594:
block_b:
		ld	sp, unk_C300;10
		pop	af;10
		pop	bc;10
		pop	de;10
		pop	hl;10
		exx;4
		ex	af, af';4
		pop	af;10
		pop	bc;10
		pop	de;10
		pop	hl;10
		ld	sp, 58F8h;10
		push	hl;11
		push	de;11
		push	bc;11
		push	af;11
		ex	af, af';4
		exx;4
		push	hl;11
		push	de;11
		push	bc;11
		push	af;11

block_e:
получается 50+8+50+44+8+44=204 такта. Для Пентагона нужно 224 тактов на линию. отсюда несложный подсчет: 224-204=20 тактов. Рисну добавить 5 NOP(5*4=20).

Но не все так просто.Есть еще одна процедура, которая считает и готовит данные для вывода:
Код:
sub_8058:
		ld	de, 0C100h
		ld	b, 50h
		ld	hl,  loc_8594+1
loc_8060:
		ld	a, (de)
		srl	a
		srl	a
		srl	a
		ld	(hl), a
		push	de
		ld	de, block_e-block_b;1Ah
		add	hl, de
		pop	de
		inc	e
		djnz	loc_8060
		ret
ld de, 1Ah заменена на ld de, block_e-block_b, так будет удобнее.

Теперь до block_e добавляю nop:nop:nop:nop:nop, ассемблирую, запускаю и ловлю кайф от картинки. Далее, демо было изменено: добавлена сжатая zx7 картинка, мелодия Sound Tracker перенесена на удобный адрес, внесен код установки прерывания по адресу $BFBF.
Опять незадача: фикс сбился. Причина в JP $BFBF(10 тактов). Ненужная команда была убрана - OUT($FE),A.

Теперь осталось написать загрузчик, который распаковывает сжатые данные.Shiny48pfix.7z+исходники
Метки: demo, zx spectrum Добавить / редактировать метки
Категории
Без категории

Комментарии

Трекбэков