Solid C - компилятор Си для Спринтера

Компьютер "Спринтер" http://sprinter.nedopc.org

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Solid C - компилятор Си для Спринтера

Post by Shaos »

Shaos wrote:
RomanRom2 wrote:
Shaos wrote:Шрифт тут пропорциональный по горизонтали (точно такой же как в FN), а по высоте - на картинке строка 8 пикселов т.е. 32 строки
я так и не понял, какое разрешение в знакоместах то?
32 строки, ок. а символов в строке сколько?
Ну дык пропорциональный шрифт ведь - если всё написать буковками i то влезет дофига, а если W, то не очень :roll:
Вот примерил - в ширину влезает 80 букв W, 106.5 букв o и 320 букв i :mrgreen:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
Alekcandr
Doomed
Posts: 665
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: Solid C - компилятор Си для Спринтера

Post by Alekcandr »

Фигаси себе. Шрифт пропорциональный. Вот уж некуда 20МГц девать :mrgreen:
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Solid C - компилятор Си для Спринтера

Post by Shaos »

Alekcandr wrote:Фигаси себе. Шрифт пропорциональный. Вот уж некуда 20МГц девать :mrgreen:
Ну он с помощью акселератора выводится, поэтому норм
Я тут за главного - если что шлите мыло на me собака shaos точка net
Alekcandr
Doomed
Posts: 665
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: Solid C - компилятор Си для Спринтера

Post by Alekcandr »

Shaos wrote:
Alekcandr wrote:Фигаси себе. Шрифт пропорциональный. Вот уж некуда 20МГц девать :mrgreen:
Ну он с помощью акселератора выводится, поэтому норм
читеры :mrgreen:
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
User avatar
Vasil Ivanov
Doomed
Posts: 413
Joined: 11 Dec 2003 14:34

Re: Solid C - компилятор Си для Спринтера

Post by Vasil Ivanov »

Shaos wrote:У меня лично планы такие на Солид:
1) написать пре-препроцессор (можно взять за основу CPPPP из архива, что Василий в телегу скинул), который бы преобразовывал ANSI C в K&R, а также комменты преобразовывал из C++ в С стиль (уже есть в cpppp), если надо UNIX окончания переводил в DOS, если есть русский UTF8 переводил бы в альтернативную кодировку доса, может какие-то простые C++ вещи бы мог превращать в понятный для солида вид;
2) починить LD.EXE чтобы мог работать с длинными путями;
3) сделать утилиту MAKE для Спринтера;
4) сделать собиралку CLIB.IRL на Спринтере (используя MAKE, сделанный в предыдущем пункте, а также написанием собственной утилиты MX, которая режет исходники на модули);
5) написать оптимизатор (по типу как для некоторых других 8-битных компилей были), который бы шёл по асмовскому тексту и преобразовывал бы некоторые вещи для скорости, хотя я смотрю там вроде и так всё более менее оптимально - например OPTD1.COM (из того же архива от Василия) нашёл в результате компилирования LZH3.C размером 2.5 тыщи строк только несущественные мелочи:
. . .
Смотрю планы на солид у тебя грандиозные. А тебе случайно "ASCII-C11 (MSX-C compiler v1.1, почти совместим с cpm)" не нужен ?
Vasil Ivanov
vasil-i@yandex.ru
Sayman
Maniac
Posts: 223
Joined: 05 Oct 2009 19:44
Location: 212.164.105.5

Re: Solid C - компилятор Си для Спринтера

Post by Sayman »

Vasil Ivanov wrote: Смотрю планы на солид у тебя грандиозные. А тебе случайно "ASCII-C11 (MSX-C compiler v1.1, почти совместим с cpm)" не нужен ?
а в чём большая разница? MSX-C такой же K&R как и Solid C.
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Solid C - компилятор Си для Спринтера

Post by Shaos »

Ну Солид вроде как писался в пику MSX-C и типа лучше в смысле кодогенерации - он меня вполне устраивает :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
Alekcandr
Doomed
Posts: 665
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: Solid C - компилятор Си для Спринтера

Post by Alekcandr »

Я бы не рекомендовал MSX-C. Он сам в себе.

За Солид С ничего не скажу. А почему не взять за инструментальную среду разработки HI-TECH C v3.09? Вроде считается вершиной Си компиляторов в CP/M для Z80 и стандарту соответствует.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
User avatar
Vasil Ivanov
Doomed
Posts: 413
Joined: 11 Dec 2003 14:34

Re: Solid C - компилятор Си для Спринтера

Post by Vasil Ivanov »

Alekcandr wrote:Я бы не рекомендовал MSX-C. Он сам в себе.

За Солид С ничего не скажу. А почему не взять за инструментальную среду разработки HI-TECH C v3.09? Вроде считается вершиной Си компиляторов в CP/M для Z80 и стандарту соответствует.
Говорят типа, что msdos-овый версии 7.80 лучше генерит код, по-крайней мере лучше cpm-ного. Тогда взять за основу его.
Vasil Ivanov
vasil-i@yandex.ru
User avatar
Vasil Ivanov
Doomed
Posts: 413
Joined: 11 Dec 2003 14:34

Re: Solid C - компилятор Си для Спринтера

Post by Vasil Ivanov »

Shaos wrote:Ну Солид вроде как писался в пику MSX-C и типа лучше в смысле кодогенерации - он меня вполне устраивает :)
На MSX форуме писали, что MSX-C 1.2 в библиотечном коде поддерживает 32-бит. Там есть описание SLONG ("signed long", структура 4 байта) и XDOUBLE ("msx double", структура 8 байт). Почему бы для солида не сделать поддержку 32-бит в библиотечном коде ?
Vasil Ivanov
vasil-i@yandex.ru
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Solid C - компилятор Си для Спринтера

Post by Shaos »

Alekcandr wrote:Я бы не рекомендовал MSX-C. Он сам в себе.

За Солид С ничего не скажу. А почему не взять за инструментальную среду разработки HI-TECH C v3.09? Вроде считается вершиной Си компиляторов в CP/M для Z80 и стандарту соответствует.
Ну если ты готов его портировать под Спринтер - то вперёд и с песней :)
У меня нету столько свободного времени - я лучше Солид потихоньку напильником буду обтачивать ;)
Vasil Ivanov wrote:
Shaos wrote:Ну Солид вроде как писался в пику MSX-C и типа лучше в смысле кодогенерации - он меня вполне устраивает :)
На MSX форуме писали, что MSX-C 1.2 в библиотечном коде поддерживает 32-бит. Там есть описание SLONG ("signed long", структура 4 байта) и XDOUBLE ("msx double", структура 8 байт). Почему бы для солида не сделать поддержку 32-бит в библиотечном коде ?
В структурах это не настолько интересно как нативно в виде long и float, но я погляжу
Я тут за главного - если что шлите мыло на me собака shaos точка net
Alekcandr
Doomed
Posts: 665
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: Solid C - компилятор Си для Спринтера

Post by Alekcandr »

Shaos wrote:
Alekcandr wrote:Я бы не рекомендовал MSX-C. Он сам в себе.

За Солид С ничего не скажу. А почему не взять за инструментальную среду разработки HI-TECH C v3.09? Вроде считается вершиной Си компиляторов в CP/M для Z80 и стандарту соответствует.
Ну если ты готов его портировать под Спринтер - то вперёд и с песней :)
У меня нету столько свободного времени - я лучше Солид потихоньку напильником буду обтачивать ;)
Не совсем понял, что есть портировать? Вроде запуск любого компилятора не требует портирования. Или ОС Спринтера настолько уникальна? Или речь о уникальных библиотеках для Спринтера?
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Solid C - компилятор Си для Спринтера

Post by Shaos »

Alekcandr wrote:Не совсем понял, что есть портировать? Вроде запуск любого компилятора не требует портирования. Или ОС Спринтера настолько уникальна? Или речь о уникальных библиотеках для Спринтера?
Естественно ОС Спринтера ни с MSX-DOS, ни с CP/M-80 никак НЕ совместима - свой API вывода текста на экран и ввода с клавиатуры, свой API по работе с дисковыми файлами, свой API по переключению окон расширенной памяти и т.д.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Solid C - компилятор Си для Спринтера

Post by Shaos »

Shaos wrote:5) написать оптимизатор (по типу как для некоторых других 8-битных компилей были), который бы шёл по асмовскому тексту и преобразовывал бы некоторые вещи для скорости, хотя я смотрю там вроде и так всё более менее оптимально - например OPTD1.COM (из того же архива от Василия) нашёл в результате компилирования LZH3.C размером 2.5 тыщи строк только несущественные мелочи:

Code: Select all

0a1
> ; Code optimized with XelaSoft's code optimizer version 1.1
2045,2046c2046
< 	call	update_
< 	ret
---
> 	jp	update_	; -optimized-
2076,2077c2076
< 	call	Putcode_
< 	ret
---
> 	jp	Putcode_	; -optimized-
2088,2089c2087
< 	call	putc_
< 	ret
---
> 	jp	putc_	; -optimized-
2397,2398c2395
< 	call	EncodeEnd_
< 	ret
---
> 	jp	EncodeEnd_	; -optimized-
---
> 
> ; # BC load groups replaced: 0
> ; # DE load groups replaced: 0
> ; # EX DE,HL pairs removed: 0
> ; # call/ret pairs replaced: 4
> ; # in/out instr. used: 0
> ; # shift instructions replaced 0
P.S. А вообще "интеллектуальный" оптимайзер может разворачивать циклы при необходимости и вставлять тела небольших подпрограмм вместо call (видимо ещё надо и профайлер делать, чтобы узнать какие части кода часто вызываются и выполняются дольше всего)

P.P.S. В коде солида вот такие штуки попадаются:

Code: Select all

	ex    de,hl
	ld	a,e
	sub	c
	ld	c,a
	ld	a,d
	sbc	a,b
	ld	b,a
	ld	l,c
	ld	h,b
которые можно заменить на:

Code: Select all

       or a
       sbc hl,bc
и даже такое можно встретить:

Code: Select all

       ld b,a ; можно выкинуть
       ld b,c
по сути можно проанализировать операции с регистрами по всей длине программы и убрать лишние копирования в регистры, которые далее по коду перетирваются
Ещё одна возможная оптимизация вокруг изредка встречающейся инструкции ld sp,ix:

- убирать лишнюю команду ld sp,ix если по ходу функции sp не менялся - как например тут:

Code: Select all

;{
printxy_:
        push    ix
        ld      ix,0
        add     ix,sp
        ld      a,c
        ld      (inregs_+1),a
        ld      (inregs_+8),hl
        ex      de,hl
        ld      (inregs_+10),hl
        ld      l,(ix+4)
        ld      h,(ix+5)
        ld      (inregs_+4),hl
        ld      bc,inregs_
        ld      de,3
        ld      hl,(handle_)
        call    calldll_
        ld      a,l
        and     h
        inc     a
        jp      nz,@0
        ld      hl,1
        call    exit_
@0:
        ld      sp,ix <<<<<<<<<< ненужно (и даже вредно, т.к. calldll_ портит IX)
        pop     ix
        ret
;}
- убирать последнюю математику по восстановлению sp в функции после вызова вложенной функции с аргументами переданными через стек, если далее стоит ld sp,ix - как например тут:

Code: Select all

...
    call    printf_
    ex    de,hl
    ld    hl,14
    add    hl,sp
    ld    sp,hl
    ex    de,hl
    ld    sp,ix <<<< оставить вместо предыдущих 5 инструкций
    pop    ix
    ret
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Vasil Ivanov
Doomed
Posts: 413
Joined: 11 Dec 2003 14:34

Re: Solid C - компилятор Си для Спринтера

Post by Vasil Ivanov »

to: Shaos
Ты по-аккуратней там с этим оптимизатором. Помнится у меня был такой случай, этот оптимизатор соптимизировал комбинацию "call ... : ret" в "jp ...". И пипец, программа кончила правильно работать. Там как-то и где-то стек корректировался и ессно "jp ..." не годился.
Так что, проверяй код на корректную работу после оптимизатора.
Vasil Ivanov
vasil-i@yandex.ru