Digger. Бег по граблям. часть 2


4 дня правок и компиляций. 4 дня постоянных error.
Меня начинает это всё уже выносить.
И вот — ошибок уже как бы и вродь нет. Ну, как-бы.

Но всё в жопу. Полная задница, ничего не компилит, понятной причины в логе ошибок нет, что я делал всё это время? к чёрту этот бред! зачем это всё вообще! нахер эта возня?

Лучше бросить уже всё к чертям, сколько можно… тупая рутина уже просто по горло надоела.
Тем более, что компиляция занимает 50 секунд.

Надо просить у парней помощь.
Blade, Amixgris, кто там ещё с sdcc возился?
Amixgris кое-что подсказывает, кое-чего делает по своему усмотрению, подсказывает, но при этом занят.
А вот Blade…

— Blade, у меня жопа с С исходниками, прошу – глянь
— У тебя есть неправильные определения функций, левые символы в исходниках, из-за них падает компилер с++.
Держи правки. И держи примеры как народ делает.

Шок. Она компилится вся.


Чёрт, она компилится ВСЯ.
ВСЯ! Весь мой сбор процедур из пачки файлов.
:)

И как результат – получаем ihx.
Чо такое этот интел хекс, блин, где бин, блин, чо за традиции у них вообще… ну ок. пилим парсер, чо уж.
Парсер на РНР работает, но есть загвоздка с сохранением, и пока я копаюсь в вики, нахожу отличный ihx2bin.exe
Хаха! А ведь почти написал :) Становится смешно. Но ihx2bin работает верно, парсит :)
Ржу.
Минус одна проблема, ок, класс.
Ковальски ржёт со мною. Он тоже так пишет утилиты :)

Итак, неплохо. Получаем ожидаемый набор бин файлов с нужного адреса. Неплохо, это уже можно грузить в память.
Отлично, спг может собраться, запуск. Но… где старт?
Копаюсь. Самый большой блок — с #200, хорошо.
Готовлю кусочек графики, леплю вызов для него, каменчу всё лишнее С сейчас к чертям — покажи мне подложку карты, детка.

И… КАРТИНКА НА ЭКРАНЕ.

Так…

Это, по происшествии двух недель оказывается — возможно. Оно – компилит и отрабатывает.
Чёрт.

Давай попробуем откаментить вступление.
Так. Что у нас есть родное для С? VS Code, окей, ставим. О, гит внутри… О, подсветка для z80 доступна, ничосе!
Похож на сублим как брат, вообще. Пойдёт. Симпатично, быстро, много окон, да вообще — хорош.

… Дыкъ как народ правильно вызывает функции асм в конце концов-то, пора туда уже влазить по уши.
Void func() __naked, интересно. Naked не сохраняет на стеке содержимое переменных внешнего цикла, ок, но вызов идёт…

Куда идёт, чёрт. В 0000, класс. Всё в зиро.

Асм должен експортировать свои функции, вау)) и експорт подключаем как инклюд в С код, ну хорошо.
Уже хорошо)

Инклюдит, собираем…

Бинарник – 56Кб, боже как красиво. И как много, жесть. Но ещё место есть, хорошо.
Значит – бум грузить весь бинарник с #200 в спг в страницы, свой код вкинем сверху, например — с #f800, должно на всё хватить и завестись. Только нужен старт с установкой что где. Надо лоадер для старта. Пилим.

Что-бы найти адрес основной функции, переношу её вызов в самое начало кода.
Інтересный С вообще. На старте вызывает что-то своё, потом мейн кода. но что-то вызывает.
Тест отработки установки режима экрана, ок.
Тест процедуры отрисовки спрайтов бекграунда экрана, ок.
Где бляха переменные вообще? Впиливаю –data-loc #0 в вызов копилера и вдруг…

Сука. Пашет. Блядь, ну уровень виден же.
Пашет. ПАШЕТ. Победа.

Вот теперь — надо нею заняться плотно. Она может быть. Её можно сделать.

12 комментариев

avatar
вангую, что немало эмопстов посвящено знакомству с sdcc. Не связывайся с Си.
avatar
Поздно, друг, поздно :)
avatar
К вопросу 'как народ...': shiru.untergrund.net/files/src/magic_tokens_src.zip
avatar
Shiru, спасибо! Отличная игра, я даже не думал что она на С написана
avatar
VBI , у меня только один вопрос. почему Си? почему не сразу асм? почему не распарсить исходный сорец и не переписать его по-человечески?
  • bfox
  • +1
avatar
мда, получилось целых три вопроса… ну, что уж — пусть будет три
avatar
сорец — Си+ассемблер для доступа к vga-шмга.
avatar
Мне кажется причина как раз в этом самом интересе, как с минимумом переделок получить годный результат.
avatar
борода по поводу:

У танка отвалилась гусеница, ну солдаты ее ремонтируют. Тут появляется
фея — вся такая белая, эротичная. Cпрашивает:
— Что вы солдатики делаете?
— C траком трахаемся.
— А хотите по настоящему потрахаться?
— Хотим, хотим.
Взмахнула фея палочкой и у танка башня отвалилась.
avatar
на один твой вопрос есть один ответ.

С для спека есть, и пусть особо не афишируя — люди его используют. С самим языком я не сталкивался, в этом один (1) интерес.
Кроме того — интересно вообще было — возможно ли вообще взять и перенести древнюю, известную, интересную ОРИГИНАЛЬНУЮ игру с РС, по возможности полностью сохранив её характер. (2)
Я очень бережливо отношусь к балансу игр. И всегда хочу сохранить игровую механику в точности ТУ, которую задумал автор, максимально.
Да и зачем переписывать игру руками — при готовых сорцах? Так проще?;)

Третье — охота неизведанного. и это главная причина, пожалуй.
неизвестный мне С (пусть в нём и знакомые по РНР обороты), чужой х86 асм, другая логика программистов 83-го года, первое знакомство с компилятором С для z80 и его особенностями.
Главное — ввязаться в драку, а там будет видно.
Я не знал, получится ли что-либо вообще в самом начале. и никому ничего не говорил до тех пор, пока не начало появляться ощущение возможности реализации. Но я знал что я не один.
И мне есть с кем посоветоваться.

Спасибо друзьям за помощь.
avatar
понял. спасибо за развёрнутый ответ)
avatar
Любопытный эксперимент!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.