Digger: Изучение. часть 1

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

«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 для функций? Описание типа переменных для параметров и переменных?
Да ок, ща. Давай попробуем, ща всё тебе будет.

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

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

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

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

avatar
На GB не Z80, нет смысла смотреть на компиляторы для него. z88dk и SDCC работают более-менее нормально. z88dk теоретически менее эффективный, но на практике в SDCC куча проблем от иногда нерабочего кода до совершенного неприличного времени компиляции.
avatar
Shiru, на данном этапе вообще надо было решить чем можно этот код скомпилировать.
Копал сеть на предмет компиляторов С под z80, пробуя все подходящие варианты.
avatar
Диггер? Какой еще нафиг диггер, компиляторы!
Хотели как лучше, а получилось как всегда =)
avatar
lcc предложил использовать я, поэтому прокомментирую. lcc именно как простой перенацеливаемый компилятор очень хорош. Не случайно даже книжка существует с описанием его элегантного внутреннего устройства.

Имеется следующий проект: The Gameboy Development Kit (GBDK) github.com/gheja/gbdk_x
В описании к нему указано:

«The gbz80 is very similar to the Zilog Z80, and from 2.0.16 it has been
possible to target GBDK to a real Z80.»

Тем не менее, сам я этот порт lcc не использовал. Интересно получить отзывы от экспериментаторов!
avatar
Я использовал этот компилятор и писал под GB. Не знал, что в нём есть прямая поддержка Z80. Коммент выше к тому, что если компилятор заточен чисто под процессор GB, он не подойдёт. Несмотря на все упоминания о схожести с Z80, там нет почти ничего общего, кроме мнемоник и команд с префиксом #CB — ни альтернативных регистров, ни IX/IX, ни даже любых IN/OUT.
avatar
ШТО? обрезанный набор инструкций скорее всего — без ED и CB.

по сабжу: чем мучаться с б-гомерзким компилятором си лучше написать код самому, с нуля. имхо.
avatar
Насколько я знаю, Грачёв z88dk использует для игр.
Интересно бы услышать его впечатления
  • VBI
  • 0
avatar
Я использовал z88dk исключительно под впечатлением от демок библиотеки SP1 под него. Там просто реализованы десятки возможностей которые не придётся писать самому — спрайты, с маской, ор, ксор, цветные, монохромные, восстановление фона, отрисовка под тайлами и.т.д Конечно расход памяти сумашедший и производительности кому-то может показаться мало (z80 не совсем родная платформа для этого компилятора). Однако, как показывает практика всё это важно только конченым теоретикам которые делают сортировки или вычесления котангенса гипотенузы :)

Если кому интерестно исходники SpecialIntergalacticPainter ТУТ + бонусом исходники попытки переноса наркоманской игрушки BreakHouse с БК на спек ТУТ, правда без использования SP1
avatar
под какую платформу будет сделан Digger?
avatar
на данном этапе вообще интересует сама ВОЗМОЖНОСТЬ откомпилить оригинальные исходники
avatar
читать тексты не твой конек? в архиве написано(digsrc.txt):
To build the executable, you'll need an ANSI-compliant C compiler and library,
an assembler for the DOS version (for the very low-level routines) and a
linker. I used Borland C++ 4.52, the shareware assembler A86 and Borland's
TLINK 7.00. The makefile is set up for these, so some minor modifications may
be needed if you have different tools. Unfortunately the startup code and run
time library supplied with Borland C++ 4.52 was too bulky for use with Digger
(don't you think a 40K executable for «Hello, World!» is a bit excessive?), so
I used the startup code and library and from Turbo C 2.01, with some minor
modifications: I had to rewrite some of the in-line functions. These are in the
file BC02.ASM, which you can assemble to an .OBJ file and add to your TC2.01
run time library if you want to. However, you can also use Turbo C 2.01 and
TLINK 2.0 with only some minor modifications to MAKEFILE.MAK and RESPONSE.RSP.

Короче, с сигавном придется еще помаяться, но TurboC собирает и не линкует.
avatar
TurboC собирает и не линкует.
от собака!
Спасибо за инфу! :)
avatar
все же поищи Borland C++ 4.52, сдается мне, что придется похимичить.
avatar
Моря первая игра по ПЦ. Правда я в нее почти не играл. На XT и 286 шла, помнится, нормально, а на 486 срывалась в безудержный полет — и глазом не моргнешь как game over: не было привязки ко времени по таймеру
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.