Как стать автором
Обновить

Комментарии 33

Лет 15 назад я сделал игру Magic Tokens для ZX Spectrum как раз на SDCC с ассемблерными вставками. Публиковалась с исходниками. Потом ещё делал SDK для разработки игр на C для ZX Evolution, на котором другие люди сделали пару десятков игр.

прикольно если бы вы вывели последнюю аски в спектруме ) они же символы ) я ничего не понял, но сам пишу 3д на GL как раз нечайно на С захотелось)

интересно а 3д на спектруме влезет?

Совмещаем Ассемблер и Си в одном проекте

Эта статья напомнила мне мои молодые программистские годы, напомнила мне мои первые книги по программированию, которые были посвящены именно комплексированию программ на Ассемблере и языках программирования ПЛ/1 и ПЛ/1 оптимизирующий, а также Фортран:

Язык Си в те далёкие годы (начало 80-х) только-только пробивал себе дорогу в СССР. Надо сказать, что книги пользовались у программистов спросом.

Дык почти все ЕС — это разной степени точности клоны IBM System/360, а PL/1 создавался IBM именно для этой серии комьпютеров. Еще бы этот язык не пользовался спросом. :-) А С, получается, — это язык врага (коммерческого, а не по холодной войне), потому что появление UNIX и C — нарушение вендор лока IBM...

вики пишет что IBM System/360 и PL/1 это 64 год, PDP-7 вышел в 65 но он схож с PDP-4 а он вышел раньше, ну по вики если смотреть а там и мультикс стартовал, а мультикс пишут в вики написан на PL/1, получается С стал аргументом поидее

Конечно, позже. C и UNIX — это конец 1960-ых. Эра UNIX началась в полночь 01 января 1970 года.

я к тому что DEC отошла IBM но не смогла забрать ОС потомучто видимо тот мейнфрейм на котором был написан С был приобретен раньше чем IBM поглотила DEC ну поидее

на нем был Мультикс а потом стал Юникс на нём, потомучто Юникс использовал наработки Мультикс, ну поидее а там конечно не знаю, но интересно, посмотрел, витиевато конечно, ой не IBM а Компак

Но надо отдать должное НИЦ ЭВТ-у. Наряду с ОС ЕС для ЕС ЭВМ была создана и МОС ЕС (Мобильная Операционная Системв семейства Unix), где уже не было PL/1, а базовым языком уже был язык Си:

Jail break, U.S.S.R. edition. ;-)

На Википедии о МОС ЕС всего два слова, но забавно:

Также существовала Мобильная операционная система МОС ЕС, представлявшая собой реализацию ОС Unix на ЕС ЭВМ. Но Unix в те времена считался упрощённой «системой для домохозяек» (буквальная цитата из[27]) в сравнении с «настоящими» системами МВС, ОС ЕС и СВМ, поэтому за рамки академических экспериментов МОС ЕС практически не вышла.

Да уж, не вышла. ;)

Так оказывается это цитата из моей книги:

Орлов В. Н. и др. Мобильная операционная система МОС ЕС. — М.: Финансы и статистика, 1990. — 208 с. — ISBN 5-279-00356-5.

но только контекст был совсем другой. Смысл был и есть в том, что с ней может работать и домохозяйка.

"Мобильная Операционная Система" это же по сути дословный перевод расшифровки аббревиатуры POSIX (Portable Operating System Interface)?

Для меня эта книга по сути была настольной книгой много лет ( десятилетий? ; ) начиная с ранних 90х - там и по командам UNIX справочник, и по Си (именно с уклоном в UNIX - с fork и т.д.)

P.S. То что книга была "настольной" можно легко понять по наличию круглого пятна от чая (кофе) ;)

Для меня тоже это настольный справочник. И сейчас стоит на полке рядом.

Спасибо за упоминание! Ставлю ссылку на эту статью в свой форум ;)

P.S. Также вставил в свой форум исходник своего варианта программы BIN2TAP и там же прицепил бейсик-загрузчик TAPE, который загружает кодовый блок с адреса 32768 (т.е. после ./bin2tap habr_demo.bin #8000 TAPE на выходе получится уже готовый TAP-файл, который можно грузить через LOAD "" в эмулятор спектрума или в живой спектрум скажем через DivMMC).

Поправочка (голая решётка не нравится башу):
./bin2tap habr_demo.bin 32768 TAPE
Кстати в версии SDCC что есть у меня (3.8.0) похоже все аргументы идут через стек, поэтому вышеприведённый пример заработал только после модификации ассемблерной функции get_next_line_wrapper:

Я так понял, есть несколько версий bin2tap написанных разными людьми. У меня стоит bin2tap из комплекта zx spectrum utils

Вот отсюда:

https://sourceforge.net/projects/zxspectrumutils/

А оно умеет бейсик загрузчик добавлять?

Поизучал вопрос с передачей аргументов через регистры - похоже это появилось только в SDCC 4.1.12 (2021?).

Ещё момент - необязательно писать конкретный адрес в --data-loc т.к. если просто указать там 0, то оно разместит сегмент данных сразу после кода (т.е. bin-файл будет меньше без кучи нулей в середине).

Чтобы разобраться в основном языке программирования, который лежит в основе всего, и на котором написано всё остальное - языке программирования Си (он же "Pure C", он же "Си без плюсов") я рекомендую книгу The C Programming Language.

Чего это? Си хайпанул на фоне продвижения UNIX, не более, в основе чего-либо "базового" не был замечен. (Сам UNIX был переписан на Си)

Это прикол был. Конечно, Си сейчас уже нигде не используется (кроме драйверов, ядер операционных систем, интерпретаторов, системных тулз, баз данных, балансировщиков нагрузки).

z88dk это и есть sdcc, только либы свои. Плюс есть ещё iar.

P.S. С crt0 разобрался? Или до сих пор эмпирически запускаешь?!

Я бы так не упрощал - z88dk может и форкнулся от sdcc много-много лет назад (хотя я думал что они оба из Small-C произошли), но затем развивался только как компилятор сей для Z80, но кто сказал, что sdcc с тех пор стоял на месте? Например передачу аргументов функций через регистры Z80 они сделали только в версии 4.1 буквально 3 года назад (как я сегодня узнал). А вот IAR старый и к тому же платный - нафиг он вообще нужен?....

Ой, DimkaM привет - вопрос про IAR снимается ;)

Привет! z88dk периодически мержица с sdcc. Сейчас в z88dk SDCC 4.3.0

Интересующимся темой могу посоветовать почитать статью как я портировал дос игру. Там 32 битные ассемблерные исходники дос игры были обернуты, почти как есть, в C++ обертку, чтобы это все запускалось на современных системах.

Использую похожий подход только на другом, менее популярном z80-компьютере, Galaksija.

Отличная статья! Поймал себя на том, что смотрю на нули и единицы в закодированном представлении bitmap-а, и вижу мышку.

Хочу спросить про ассемблерную процедуру: вы в ней испортили HL и A, их не надо было сохранять и восстанавливать?

И про сам язык хотел спросить. Вы положили в массив и размеры битмапа, и сам битмап. А нет в языке поддержки struct, чтобы длину и ширину класть в именованные поля?

Когда начинал кодить на ассемблере, долго медитировал над тем, какие регистры сохранять, а какие - нет.

Возвращать нужно те регистры, в которых внешний код что-то хранит.

Регистр HL в данном случае особенный, потому что в нем лежит аргумент. Это внешний код пытается передать что-то нам. И по стандарту pure C аргументы копируются по значению, то есть, я могу менять эти значения как хочу, и они не будут влиять на переменные во внешнем коде. В ассемблере это выглядит так, что мне дали регистр, и никуда копировать его не надо, это и есть та локальная переменная.

На счет регистра A , по идее, да, его можно восстановить, но я уже по опыту знаю, что это регистр для вычислений, и хранить там что-то долгое время, это совершенно бессмысленный геморрой, потому что вообще при любом действии A задействуется и меняется.

Со временем можно привыкнуть.

Спасибо за статью!

Очень не хватает вот такого кода на стыке железа и софта современным программистам. Где нет этого стека размером с небоскрёб между кодом и железом.

Интересно есть ли что-то подобное среди более современных платформ? Так сказать что-то более дружелюбное к современным программистам. Посоветуете?

И кажется нашел опечатку:

Там же написано, что возврат значения в регистре DL

Хотя судя по коду и картинке регистр "DE"

Да, поправлю.

Atmel AVR очень обещающий. Микроконтроллер здорового человека. Используется в Ардуино, можно сразу купить готовую сборку.

STM тоже хорошие.

Еще есть игровые приставки на базе AVR, судя по описанию, очень крутые:

  1. Uzebox

  1. Arduboy

Спасибо! А что-нибудь на базе процессоров? Может быть что-то на RISC-V, или все процессорные варианты теперь подразумевают какую-то ОС в любом случае?

"Раз пошла такая пьянка, режь последний огурец!"

Если касаться темы программирования на ретроплатформах, то будет неправильным не вспомнить Стивена Хугга с его сайтом 8BitWorkshop. На этом сайте есть и IDE, позволяющая создавать программы для ретроплатформ прямо в браузере. Кроме ассемблера в IDE можно использовать и Си, как минимум на части платформ. Там же можно ознакомится с программированием на Verilog. Так же автор написал несколько книг посвященных написанию игр Making Games For The Atari 2600, Making 8-Bit Arcade Games in C, Designing Video Game Hardware in Verilog, Making Games For The NES.

Так же нельзя не вспомнить Keith 'Akuyou' с его сайтом где он рассказывает о мультиплатформенном программировании игр на ассемблере от Z80, 6502, 68000, 8086, ARM и ARM Thumb, 65816, 6809 до PDP-11, Risc-V, MIPS, TMS9900, SuperH, IBM370 and PowerPC. Автор также активно ведет свой ютуб канал, где еженедельно выкладывает новые уроки по программированию на конкретной платформе. Так же он выпустил свои уроки в виде книг.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий