В продолжение темы
Программирование на компиляторах ЯВУ для ретро ЭВМС некоторого времени
z88dk перестал быть частью Debian (хотя
с десяток лет назад был), а вот
sdcc до сих пор остаётся одним из стандартных пакетов:
| | |
| Code: root@amd64s:/# aptitude search sdcc i sdcc - Small Device C Compiler p sdcc:i386 - Small Device C Compiler i sdcc-doc - Small Device C Compiler (documentation) i A sdcc-libraries - Small Device C Compiler (libraries) i sdcc-ucsim - Micro-controller simulator for SDCC p sdcc-ucsim:i386 - Micro-controller simulator for SDCC
root@amd64s:/# aptitude show sdcc Package: sdcc Version: 3.5.0+dfsg-2+b1 State: installed Automatically installed: no Priority: optional Section: electronics Maintainer: Gudjon I. Gudjonsson <gudjon@gudjon.org> Architecture: amd64 Uncompressed Size: 6,819 k Depends: sdcc-libraries (= 3.5.0+dfsg-2), libc6 (>= 2.14), libgcc1 (>= 1:3.4), libstdc++6 (>= 5.2) Recommends: sdcc-doc Suggests: python, sdcc-ucsim Conflicts: sdcc:i386 Breaks: sdcc-ucsim (< 3.5.0), sdcc-ucsim:i386 (< 3.5.0) Replaces: sdcc-ucsim (< 3.5.0), sdcc-ucsim:i386 (< 3.5.0) Description: Small Device C Compiler SDCC is a C compiler for the Intel MCS51 family, HC08, PIC, GameBoy Z80, DS80S390, Z80, Z180 and STM8 microcontrollers. This package includes the compiler, assemblers and linkers. Homepage: http://sdcc.sourceforge.net Tags: devel::compiler, devel::lang:c, devel::machinecode, hardware::embedded, interface::commandline, role::program, scope::utility, works-with::software:source
| |
| | |
Пэтому я решил таки заморочиться и научиться компилировать сишные программки под
ZX Spectrum на
SDCC. После некоторого гугления я нашёл вот такую микродемку, написанную под SDCC с исходниками:
https://speccy.pl/archive/prod.php?id=223Мне удалось пересобрать это в моём дебияне в том sdcc, что там есть (см. выше), но с изменённым скриптом сборки (поменял последние 2 команды - первод из HEX в BIN и создание TAP):
где
bin2tap это моя программа для генерации TAP-файлов, которая использует файл
tape который есть бейсик-загрузчик кодовых блоков с адреса #8000 (оба взяты из моего
nedoPC SDK).
и с подправленным
crt0.s (правил чтобы всё начиналось с #8000):
(а кстати почему стек ставится в #FFFE? если надо поставить в конец памяти, то делаем LD SP,0 ведь SP всё равно декрементируется перед сохранением,
но если мы вдруг надумаем
пользовательские символы UDG использовать, которые натолканы в конец памяти, то стек наверное надо поставить в #FF00)
Сишный исходник примера изобилует ассемблерными вставками типа таких:
или вот прямо целая функция может быть определена на асме:
И этого в-принципе достаточно, чтобы начать что-то делать под ZX на ЯВУ
P.S. Приаттачиваю архив с поправленным
crt0.s (тут SP уже в #FF00 ставится):