User Tag List

Показано с 1 по 3 из 3

Тема: Digger

  1. #1

    Регистрация
    05.03.2013
    Адрес
    г. Канев, Украина
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb Digger


    Несколько лет назад, после создания капитана Дрекса я общался с другом, который когда-то спаял мне Пентагон.
    Рассказав ему о том что я написал игру в новом жанре, он сказал что надо бы наоборот – пилить что-то олдовое, в духе Диггера.
    Я тогда поулыбался, но мысль засела.

    «Digger (рус. Ди́ггер — «землекоп»)
    — компьютерная игра, выпущенная канадской компанией Windmill Software в 1983 году для компьютеров IBM PC. Игра была весьма популярна во времена широкого использования мониторов и видеокарт стандарта CGA.
    Игра создана основным разработчиком компании Windmill games Робом Слетом в 1983 году. В 1984 году программа была переписана для IBM PCjr. Последняя оригинальная версия была выпущена для канадского компьютера Hyperion, работающего на 6 МГц.
    Во время игры в качестве фоновой музыки используется тема Гершона Кингсли «Воздушная кукуруза».

    … Как оказалось, 8-ми битной версии этой игры под спектрум нет. Есть вариации на тему, местами довольно неплохие, но – «Это не Диггер!»

    Копнувши сеть, я обнаружил… The original source code to Digger.

    «Please note that the copyright on this still belongs to Windmill software, and that we do not have permission to distribute Digger in its original form. This source code is provided for historical interest only. If you are interested in making a derivative version of Digger, please start with the Digger Remastered source code instead.»

    Гм. Ок. Есть даже две версии.
    Что внутри оригинальной?

    C, x86 asm.

    Что этому я могу противопоставить?
    Пожалуй – один из компиляторов С, и z80 asm.

    Чертовская комбинация.

    По сути, если подумать – всё просто. Есть оригинальный исходник великолепной игры из прошлого. Чот-там много на С, но язык довольно понятный, написано со множеством комментариев. 300 Кб всего гама — со всем, что разработчикам тогда надо было. Но фигня в том, что, во первых, она на С, и при этом ещё юзается пачка процедур на х86 асме. Но вродь понятно — что где делается.

    Вродь.

    Под z80 как-то С компилят, где-то видел, что-то, помню, читал такое…

    Ну, давай копнём.

    Компиляторы С под зетник– dk88, sdcc, lcc под приставки типа GB. Другими словами – есть компиляторы.
    Ок, поехали. Ставим и смотрим.

    Один ставим – он не запускается, надо что-то шаманить с системой.
    Второй компилер ставим – исходник из архива не компилится.
    Третий вываливает непонятно что, и он заточен под GB

    Ну окей, sdcc пусть даже бросается ошибками, но это уже есть причина попробовать поправить код. Наивно думаю — может компильнётся

    И вот один из файлов исходника.
    Исходник, ну как же так! Ты же Си…

    Исходник игры написан на С, код древнейший, 1983 год, но при этом он прост и красив. Код практически не обусловлен современными особенностями «по дефолту».
    Он даже не ANSI ещё, до него – минимум 6 лет; никаких классов нет, да даже memcpy не используется!

    Код:
    main()
    {
    	int flag, demo_time, loop, x;
    Ой, да понятно всё

    Так что ему надо для компиляции? Void, int для функций? Описание типа переменных для параметров и переменных?
    Да ок, ща. Давай попробуем, ща всё тебе будет.

    И я правлю.
    А оно бросает ошибки.

    Я правлю.
    Ошибки.

    День за днём ошибки. Много ошибок синтаксиса, очень много…


    Оригинал статьи на Хайпе

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,711
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Насколько мне известно, lcc для Z80 нет. Он для Win32.

    Сложный путь выбран. "В лоб" всё равно не получится, даже если целевой бинарь влезет в память. Нужно иначе. Надо посмотреть какие граф. процедуры юзаются, прикинуть вид графики, как будет выглядеть на экране Спекки. Реализовать эти процедуры на асме. Потом брать маленькие кусочки из того исходника для x86, переосмысливать их, переписывать для Z80 и отлаживать, постепенно усложняя и наполняя реализацию игры, всё время оставляя проект в рабочем собирабельном состоянии.

    Есть опыт портирования игры с Turbo C на Спек подобным образом.

  4. #3

    Регистрация
    05.03.2013
    Адрес
    г. Канев, Украина
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    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 в вызов копилера и вдруг…


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

    Оригинал статьи на Хайпе

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

    - - - Добавлено - - -

    Oleg N. Cher, спасибо.
    уже всё готово)

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Diamond Digger
    от Rindex в разделе Игры
    Ответов: 1
    Последнее: 08.01.2015, 20:25

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •