Обещал в среду, поэтому выкладываю что есть. Я сегодня, внезапно, опять с нуля переписал кодогенератор. Переписать до конца не успел и некоторые вещи компилируется не оптимально.
При этом синтаксисом Си почти не занимался, там то же есть масса косяков.
Косяки все не перечисляю, поскольку их там несколько десятков. Но основное это:
1) Преобразование типов криво написано. Никакого автоматического преобразования нет. То есть signed -> unsigned, short -> char и т.п. При вычитании указателей деление на размер может не производится. Сравнение указателя с нулем не реализовано. Я просто не успел.
2) Инициализация статических данных написана в самом простом варианте и не совсем корректно. ( uchar code[4] = { 1,2,3,4 }; )
3) #define действует на #define
4) Переменные и функции не контролируются на дубликаты.
5) switch реализован криво. Забыл. (Два или более подряд идущих CASE быть не должно. Перед CASE должен быть BREAK, иначе поведение не определено)
И по оптимизации основное:
1) Операции && и || и ! работают крайне медленно. Хотя и корректно. Не успел дописать оптимизацию.
2) Дублирующиеся бесполезные команды ассемблера будут удаляться на следующем этапе компиляции, который я еще не дописал.
3) Размеры структур должны быть кратны степени двойки (но об этом и так вам сообщит компилятор)
4) Не все варианты команд реализованы, есть вероятность схватить ошибку типа "pokeHL 12"
P.S. Можете добавить в список, но у меня пока дел хватает и ошибки я правлю когда они сильно мешают жить.
Во вложении компилятор и исходники игрушки. Игрушка тормозит не по детски, не синхронизируется с кадровой разверткой, но вроде работает. Для цветного Апогея.





Ответить с цитированием