Comments 21
такая короткая новость и так много ошибок. впрочем ничего нового
The formula used by the processor for any address was (Segment * 16) + Offset, and used the syntax Segment:Offset.
Although a .COM file can theoretically access the full megabyte of memory available to the computer, in the spirit of having compact game files this Jam is requiring that all content (game logic and assets) be contained in a single .COM file. There are no rules about how much or little memory can be accessed by the game during run time, only that the .COM file contain all code and data the game needs to load from disk.
Rules:
- Must be a DOS compatible .COM file that can run on actual hardware. Owing to the limited availability of this hardware in the wild today, submissions can be submitted with any emulator environment designed around the IBM PC and it's compatibles.
- Can NOT load any asset or game specific code from an external file. All logic and data used must be contained within the .COM being submitted. (Yes, this includes save data)
- Games submitted can be in any language.
- Games submitted can be in any stage of development.
- Games submitted can be listed at any price point.
- Games submitted can be designed to use any hardware, retro or modern.
- Optional: Games may use a generic TSR (Terminate Stay Resident) driver, but these should be generic and usable by any project without recompiling / reassembling.
- Include content warnings on the game's page if your game includes any material that could be considered adult or sensitive.
- Bigoted content of any kind is not allowed and will be removed from the jam.
Ошибки я поправил, спасибо за рапорт.
А то что ничего нового, так IBM PC уже исполнилось 42 года, некоторым пользователям Хабра меньше лет исполнилось. И 30 лет назад Билл Гейтс похоронил DOS, сказав «DOS is dead», а он таки получил реинкарнацию в виде FreeDOS и вполне себе развивается.
Главный смысл публикации новости был в том, чтобы привлечь внимание ненормально экстремальных программистов, способных писать под DOS с жесткими ограничениями по памяти, чтоб они продемонстрировали силушку богатырскую, ну и просто «Just for fun!».
Или как Маяковский сказал 110 лет тому назад:
«А вы
ноктюрн сыграть
могли бы
на флейте водосточных труб?»
А вы могли бы? ;)
очень мило для ретроформата. конечно, немного странное требование упаковать всё в один файл при том, что нет ограничения на размер. и, интересно, насколько широко трактуется неприемлемый "нетерпимый" контент (а нет, не интересно, повылезают сейчас обижульки, которые начнут учить, сколько транснегрогеев должно быть в корабле, и несколько этична их миссия, и почему корабль нельзя называть "маткой")
Ограничение на размер есть в самом формате COM-файла:
В системах DOS и в 8-битной CP/M COM-файл — простой тип исполняемого файла, при выполнении которого данные, код и стек находятся в одном и том же 16-битном сегменте. Поэтому размер файла не может превышать 65280 байт (что на 256 байт меньше размера сегмента — 216 байт).
"Вот и выросло поколение"
конечно, немного странное требование упаковать всё в один файл при том, что нет ограничения на размер.
com представляет собой 16 разрядный сегмент данных, соответственно, его максимальный адресуемый размер - 64кб. Развлекайтесь.
Погуглил, оказывается COM-файл может быть больше размера сегмента, но не во всех DOS это будет работать: https://retrocomputing.stackexchange.com/questions/14520/how-did-large-com-files-work
Ну и нормально , раньше на ZX-Spectrum каждая игра была такого, и даже меньше - 48кб формата. Ах какие были игры !
Берём любую игру от ZX-Spectrum, да хоть Exolon, прикручиваем эмулятор, написанный на ассемблере, он займет всего несколько КБ , и вот оно , наслаждение !
А серьёзно , была такая игра BOLO, вот как раз bolo.com был её файл. Не могу найти уж много лет.
Можно, вот только накладные расходы несоизмеримо велики. В COM файле нужно держать сам эмулятор ZX Spectrum плюс его ROM, что оставляет совсем немного места под игру. Да, это всё конечно можно сжать, а потом распаковывать после загрузки в память по разным сегментам, только вот зачем такие танцы? Не лучше потратить это пространство на саму игру?
Ну и ко всему прочему, геймджем подразумевает создание новой игры, а не запуск старой. ;)
Играм не нужен был rom с бейсиком - минус 16кб. Начальное состояние экрана , на котором обычно красивая заставка при загрузке с магнитофона тоже не нужно - ещё минус 6.75 КБ. Остаётся 41.25 КБ всей остальной памяти , в которой и лежала вся игра , а конкретно в адресах 23296-65535. Итого у нас остаётся 22кб на код самого эмулятора, вполне реалистично , учитывая насколько прост z80 и весь хардварь, который надо эмулировать, ну а экран будет отрисовываться прямо в vga по адресу a000:0000.
Бейсик то играм был не нужен, а вот подпрограммы из ROM вполне себе были нужны. Дальше, часто у игрушек вместо нормального генератора ПСЧ, использовался ROM как массив этих псевдослучайных чисел. Можно ли запихать эмулятор Спектрума в 22кб?
ХБЗ… Наверное получится, но какой-то очень не аккуратный, без соблюдения таймингов и учета особенностей спека.
Короче, перед тем как эту игру запихивать в такой упрощенный эмулятор, надо будет её прогнать в полноценном эмуляторе с остановкой по обращению к области ROM, как на вызов, так и на чтение/запись чтоб понять масштаб проблем.
Так что в лучшем случае у нас остается рекомпиляция игры под конкретную платформу, как это в своё время делали Friends software рекомпилируя игры (ROM) от MSX на IBM AT, с правкой ручками полученного результата.
Так что в любом случае, будет много возни с запихиваем эмулированной/рекомпилированной игры в экстремально малый объём памяти.
Omniscent 4K - добавить управление только, и даже не представляю что в оставшихся ~60k можно наворотить! (К слову, Farbraush в одном из интервью говорили, что .kkrieger был вдохновлен именно Omniscent-ом)
Ну и лайфхак от меня - если взять досовский .EXE , а он может быть до 640кб и просто переименовать в .COM, то DOS будет его нормально запускать. Я точно помню, что это срабатывало на DOS 6.22 и DOS 7.10 , который был встроен в Win95/98.
А это уже будет нарушением правил геймджема;)
А насчет переименования EXE в COM, не помню точно но то ли в 6.22, то ли в Win95 Command.com внутри был уже EXE файлом.
Второй лайфхак…
Если нужная программа являтся .СОМ файлом, а места на дискете не хватает, то можно передать управление в процессе загрузки сразу ей, удалив COMMAND.COM и поправив MSDOS.SYS
На сервисе Itch.io проводится прием заявок на участие геймджеме посвященого написанию игр под DOS в формате COM файла