nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 19 Apr 2024 11:26



Reply to topic  [ 106 posts ]  Go to page Previous  1 ... 4, 5, 6, 7, 8  Next
Solid C - компилятор Си для Спринтера 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22543
Location: Silicon Valley
Reply with quote
Shaos wrote:
RomanRom2 wrote:
Shaos wrote:
Шрифт тут пропорциональный по горизонтали (точно такой же как в FN), а по высоте - на картинке строка 8 пикселов т.е. 32 строки

я так и не понял, какое разрешение в знакоместах то?
32 строки, ок. а символов в строке сколько?

Ну дык пропорциональный шрифт ведь - если всё написать буковками i то влезет дофига, а если W, то не очень :roll:

Вот примерил - в ширину влезает 80 букв W, 106.5 букв o и 320 букв i :mrgreen:


Attachments:
solidc-antonfnt-width.jpg
solidc-antonfnt-width.jpg [ 158.4 KiB | Viewed 5795 times ]

_________________
:dj: https://mastodon.social/@Shaos
21 Mar 2021 02:16
Profile WWW
Doomed

Joined: 01 Oct 2007 10:30
Posts: 665
Location: Ukraine
Reply with quote
Фигаси себе. Шрифт пропорциональный. Вот уж некуда 20МГц девать :mrgreen:

_________________
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru


22 Mar 2021 08:09
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22543
Location: Silicon Valley
Reply with quote
Alekcandr wrote:
Фигаси себе. Шрифт пропорциональный. Вот уж некуда 20МГц девать :mrgreen:

Ну он с помощью акселератора выводится, поэтому норм

_________________
:dj: https://mastodon.social/@Shaos


22 Mar 2021 08:50
Profile WWW
Doomed

Joined: 01 Oct 2007 10:30
Posts: 665
Location: Ukraine
Reply with quote
Shaos wrote:
Alekcandr wrote:
Фигаси себе. Шрифт пропорциональный. Вот уж некуда 20МГц девать :mrgreen:

Ну он с помощью акселератора выводится, поэтому норм
читеры :mrgreen:

_________________
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru


22 Mar 2021 08:53
Profile
Doomed
User avatar

Joined: 11 Dec 2003 14:34
Posts: 413
Reply with quote
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


23 Mar 2021 04:49
Profile
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
Reply with quote
Vasil Ivanov wrote:
Смотрю планы на солид у тебя грандиозные. А тебе случайно "ASCII-C11 (MSX-C compiler v1.1, почти совместим с cpm)" не нужен ?

а в чём большая разница? MSX-C такой же K&R как и Solid C.


23 Mar 2021 07:37
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22543
Location: Silicon Valley
Reply with quote
Ну Солид вроде как писался в пику MSX-C и типа лучше в смысле кодогенерации - он меня вполне устраивает :)

_________________
:dj: https://mastodon.social/@Shaos


23 Mar 2021 08:54
Profile WWW
Doomed

Joined: 01 Oct 2007 10:30
Posts: 665
Location: Ukraine
Reply with quote
Я бы не рекомендовал MSX-C. Он сам в себе.

За Солид С ничего не скажу. А почему не взять за инструментальную среду разработки HI-TECH C v3.09? Вроде считается вершиной Си компиляторов в CP/M для Z80 и стандарту соответствует.

_________________
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru


23 Mar 2021 12:01
Profile
Doomed
User avatar

Joined: 11 Dec 2003 14:34
Posts: 413
Reply with quote
Alekcandr wrote:
Я бы не рекомендовал MSX-C. Он сам в себе.

За Солид С ничего не скажу. А почему не взять за инструментальную среду разработки HI-TECH C v3.09? Вроде считается вершиной Си компиляторов в CP/M для Z80 и стандарту соответствует.


Говорят типа, что msdos-овый версии 7.80 лучше генерит код, по-крайней мере лучше cpm-ного. Тогда взять за основу его.

_________________
Vasil Ivanov
vasil-i@yandex.ru


23 Mar 2021 12:30
Profile
Doomed
User avatar

Joined: 11 Dec 2003 14:34
Posts: 413
Reply with quote
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


23 Mar 2021 12:56
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22543
Location: Silicon Valley
Reply with quote
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, но я погляжу

_________________
:dj: https://mastodon.social/@Shaos


23 Mar 2021 13:20
Profile WWW
Doomed

Joined: 01 Oct 2007 10:30
Posts: 665
Location: Ukraine
Reply with quote
Shaos wrote:
Alekcandr wrote:
Я бы не рекомендовал MSX-C. Он сам в себе.

За Солид С ничего не скажу. А почему не взять за инструментальную среду разработки HI-TECH C v3.09? Вроде считается вершиной Си компиляторов в CP/M для Z80 и стандарту соответствует.

Ну если ты готов его портировать под Спринтер - то вперёд и с песней :)
У меня нету столько свободного времени - я лучше Солид потихоньку напильником буду обтачивать ;)
Не совсем понял, что есть портировать? Вроде запуск любого компилятора не требует портирования. Или ОС Спринтера настолько уникальна? Или речь о уникальных библиотеках для Спринтера?

_________________
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru


23 Mar 2021 13:48
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22543
Location: Silicon Valley
Reply with quote
Alekcandr wrote:
Не совсем понял, что есть портировать? Вроде запуск любого компилятора не требует портирования. Или ОС Спринтера настолько уникальна? Или речь о уникальных библиотеках для Спринтера?

Естественно ОС Спринтера ни с MSX-DOS, ни с CP/M-80 никак НЕ совместима - свой API вывода текста на экран и ввода с клавиатуры, свой API по работе с дисковыми файлами, свой API по переключению окон расширенной памяти и т.д.

_________________
:dj: https://mastodon.social/@Shaos


23 Mar 2021 17:13
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22543
Location: Silicon Valley
Reply with quote
Shaos wrote:
5) написать оптимизатор (по типу как для некоторых других 8-битных компилей были), который бы шёл по асмовскому тексту и преобразовывал бы некоторые вещи для скорости, хотя я смотрю там вроде и так всё более менее оптимально - например OPTD1.COM (из того же архива от Василия) нашёл в результате компилирования LZH3.C размером 2.5 тыщи строк только несущественные мелочи:
Code:
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:
   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:
       or a
       sbc hl,bc

и даже такое можно встретить:
Code:
       ld b,a ; можно выкинуть
       ld b,c

по сути можно проанализировать операции с регистрами по всей длине программы и убрать лишние копирования в регистры, которые далее по коду перетирваются

Ещё одна возможная оптимизация вокруг изредка встречающейся инструкции ld sp,ix:

- убирать лишнюю команду ld sp,ix если по ходу функции sp не менялся - как например тут:
Code:
;{
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:
...
    call    printf_
    ex    de,hl
    ld    hl,14
    add    hl,sp
    ld    sp,hl
    ex    de,hl
    ld    sp,ix <<<< оставить вместо предыдущих 5 инструкций
    pop    ix
    ret

_________________
:dj: https://mastodon.social/@Shaos


24 Mar 2021 01:11
Profile WWW
Doomed
User avatar

Joined: 11 Dec 2003 14:34
Posts: 413
Reply with quote
Quote:
to: Shaos

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

_________________
Vasil Ivanov
vasil-i@yandex.ru


24 Mar 2021 01:36
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 106 posts ]  Go to page Previous  1 ... 4, 5, 6, 7, 8  Next

Who is online

Users browsing this forum: No registered users and 8 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.