Проект ZXDev анонсирован на World of Spectrum. Приём получился гораздо теплее, чем здесь. Raydac оказался прав.
Исправлен глюк со сбросом примера на Laser Basic. Проблема будет интересна всем, кто юзает SDCC. Это даже не глюк, допущенный случайно. Дело в том, что я после извлечения параметров функций допускал изменение регистра IX. А делать оказывается этого нельзя, ибо SDCC иногда полагается на его значение после возвращения из функции. (Как написал Филипп: “IX is a calle-saves register”).
Благодаря помощи Филиппа Краузе и Eltaron’а реализована экспериментальная поддержка модели вызова fastacall (передача параметров в регистрах). Из-за отсутствия (пока) в SDCC поддержки fastcall присутствует серьёзное ограничение: параметры должны быть только константами, вычислямыми в процессе компиляции. Фишка по умолчанию отключена. Включить можно в Libs/BasicCfg.h
С использованием модели fastcall получается такой код:
Код:
B.BORDER(B.Black); B.PAPER(B.Green); B.CLS;
;HelloWorld.c:15: Basic_BORDER(0);
xor a,a
call 0x229B
;HelloWorld.c:16: Basic_PAPER(4);
ld c,#4
call _Basic_PAPER_fastcall
;HelloWorld.c:17: Basic_CLS();
call _Basic_CLS
Реорганизовал структуру ZXDev и, как по мне, стало логичнее и удобнее.
Начата работа над многофункциональной утилитой для конвертирования BIN/IHX в форматы TAP/TRD (возможно, будет поддержан и TZX). Пишу на Обероне с прицелом на трансляцию через Ofront в Си. Принимается любая помощь, в т.ч. идеи.