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 не используется!
Ой, да понятно всё :)
Так что ему надо для компиляции? Void, int для функций? Описание типа переменных для параметров и переменных?
Да ок, ща. Давай попробуем, ща всё тебе будет.
И я правлю.
А оно бросает ошибки.
Я правлю.
Ошибки.
День за днём ошибки. Много ошибок синтаксиса, очень много…
Рассказав ему о том что я написал игру в новом жанре, он сказал что надо бы наоборот – пилить что-то олдовое, в духе Диггера.
Я тогда поулыбался, но мысль засела.
«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 комментариев
Копал сеть на предмет компиляторов С под z80, пробуя все подходящие варианты.
Хотели как лучше, а получилось как всегда =)
Имеется следующий проект: 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 не использовал. Интересно получить отзывы от экспериментаторов!
по сабжу: чем мучаться с б-гомерзким компилятором си лучше написать код самому, с нуля. имхо.
Интересно бы услышать его впечатления
Если кому интерестно исходники SpecialIntergalacticPainter ТУТ + бонусом исходники попытки переноса наркоманской игрушки BreakHouse с БК на спек ТУТ, правда без использования SP1
Короче, с сигавном придется еще помаяться, но TurboC собирает и не линкует.
Спасибо за инфу! :)