?login_element?

Subversion Repositories NedoOS

Rev

Rev 1032 | Blame | Compare with Previous | Last modification | View Log | Download

Evo SDK надо переделать, но проблема у меня с тем, что я не могу пересобрать тамошнюю систему сборки (которая на пцшном Си).
Надо сделать следующие вещи: файлы для диска генерировать не на трд, а отдельно (в том числе странички со спрайтами),
а код программы компилировать не под 0x300, а под 0x400 (заодно сдвинуть описатели спрайтов в 0x100 вместо 0x000) 
- вот эти места я не нашёл.
Если это будет сделано в трд версии Evo SDK, я смог бы написать новый загрузчик и переделать обработчик прерываний.

Под какой адрес компилить бинарник и под какой - данные - это просто.
sdcc -mz80 --code-loc 0x8000 --data-loc 0xBC00 (это модуль.)

Но с основной программой интереснее.
Она компилится в адрес 0x0006, а данные вообще в 0

А потом HEX файл и списки ресурсов скармливаются утилите evoresc.EXE
> EVOSDK Resource Compiler by Shiru and Alone Coder 03'12

Поставил VC++ 2008, загрузил проект. Ковыряю, интересно.
Там жестко прописаны стартовый адрес программы, количество страниц под код, с какой страницы размещать графику и пр.

Закончу со вводом паролей (хочу вводить буквы не только джойстиком, но и по человечески с клавиатуры) и займусь тулзой, вынесу все это добро в отдельные параметры.

Разбираюсь с тем как собирается проект в evosdk

Для начала переделал evoresc под другую систему параметров. Теперь они разбираются по ключу, а не по позиции.
Используй такую запись в _compile.bat.
Еще вынес STARTUP_ADR в параметры. Однако этот адрес, как я понял, влияет только на то, куда будет положен загрузчик - startup.bin и на предупреждения о размере кода.

evoresc -startupaddr 0xe000 -hexfile "%temp%\out.ihx" -startupfile "..\evosdk\startup.bin" -sfxlist "%soundfx%" -musiclist "%temp%\music.lst" -pallist "%temp%\palette.lst" -imglist "%temp%\image.lst" -samplelist "%temp%\sample.lst" -sprlist "%temp%\sprite.lst"
https://yadi.sk/d/0rWLhPYQHxfPJw

Самое интересное, что код компилируется на адрес 0x0006 и, как я понимаю, все переменные, переходы и пр. тоже адресуются начиная оттуда.
Так вот бинарник ни где не переделывается. В evoresc интеловский hex формат преобразуется в бинарник и разбивается на 4 страницы: 12-15, но внутри ни чего не переделываются.

Очень странно. Остается только startup.bin. У тебя есть его исходники, можешь глянуть что там происходит?

Похоже, всё сложнее, чем я думал.
Код действительно ложится в 0x0006, это описано в crt0.s - возможно, оттуда делается startup.bin (не знаю, какой магией).
А адреса спрайтов оказываются в 0x0000 из-за того, что страница с этими номерами и с самими спрайтами подключается в нижнее окно (а окна 4000 и 8000 заняты экраном). А надо сделать так, чтобы адреса спрайтов и сами спрайты были в 0xc000, но где генерируются эти адреса - не нашёл.

PS Если нужно сменить номера страниц или какие-то другие адреса, это можно сделать.

Кажется я нашел где устанавливается начальный адрес спрайтов. И кажется, нашел где устанавливается слот для подключения страниц. Там стоит 0й слот. Это все в evoresc.
0xc000 получается 3й слот. А начальный адрес спрайтов какой ставить?

Спрайты тоже надо в 0xc000 (или после таблицы, если они в той же паге)

evoresc -startupaddr 0xe000  -hexfile "%temp%\out.ihx" -startupfile "..\evosdk\startup.bin" -sfxlist "%soundfx%" -musiclist "%temp%\music.lst" -pallist "%temp%\palette.lst" -imglist "%temp%\image.lst" -samplelist "%temp%\sample.lst" -sprlist "%temp%\sprite.lst"

Адрес ланчера в параметрах, спрайты грузятся в 3-е окно, собираются с адреса 0xc000


Убрал в загрузчике показ картинки, вернул адрес 0. Грузится, но поскольку спрайты сейчас не там, где надо, скомпилировал игру без спрайтов (2048). Она не работает! При компиляции генерируется 80-90 страниц спрайтов!!! Хотя картинка со спрайтами совсем маленькая. Я хотел вообще оставить без неё, но тогда новый evoresc не запускается.