nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 21 Jan 2021 17:33



Reply to topic  [ 78 posts ]  Go to page 1, 2, 3, 4, 5, 6  Next
Solid C - компилятор Си для Спринтера 
Author Message
Doomed
User avatar

Joined: 11 Dec 2003 15:34
Posts: 407
Reply with quote
Сейчас начал по-тиху смотреть библиотечные функции SOLID C, для их
прикрутки под Estex. У меня нет достаточного опыта программления
на Си (С++), поэтому хочу узнать мнение общественности.

1.
В некоторых библиотечных функциях рабочие ячейки (db,dw) из
области данных (dseg) я перенес прямо в код (cseg), чтобы функции
стали чуть быстрее отрабатывать. Но встает вопрос о невозможности
прошивки в ПЗУ си-программ, т.е. использующих си-шную библиотеку.
В принципе, для Спринтера писать программы для ПЗУ не актуально
(а си-шная библиотека под него и адаптируется).
Если на Си надо писать программы под Спектрум или другой комп, то
просто берется соотв. си-шная библиотека той платформы и при сборке
программы указывается линкеру. И прошивай программу куда хочешь ;).
Что народ думает по поводу стандартной си-шной библы Спринтера,
в этом плане ?.


2.
Какое максимальное число регистрируемых функций определить для
функции atexit() ?. По стандарту Си (по-крайней мере в MS-DOS)
это 32 функции. В SOLID C макс. число 19.
Я бы вообще оставил не более 8-ми (буфер списка будет 16 байт).
Куда больше-то, только место под список расходовать ;). Т.е. я
имею ввиду, что весь этот список будет входить в выходной exe-шник.

p.s. Кто не понял - речь идет о числе тех функций, которые будут
выполнены (после успешной отработки основной программы) перед самым
выходом в операционную систему.


3.
Поскольку в Estex нет переопределения потоков устройств, то как
определиться с си-шными stdin, stdout, sdterr, stdaux, stdprn ?,
которые соответственно имеют дескрипторы 0, 1, 2, 3 и 4.
В Estex эти номера (кроме 0-го ;) назначаются файлам.

У SOLID C в "stdio.h" следующее их описание:

Code:
#define stdin   (&_iob[0])          /* standart input stream  */
#define stdout  (&_iob[1])          /* standart output stream */
#define stderr  (&_iob[2])          /* standart perror stream */

Т.е. как эти std... сопоставить с клавиатурой/экраном/экраном/... ?.
У меня пока с этим непонятки.

UPDATE: Solid C (сентябрь 2004) можно скачать отсюда:
http://nedopc.org/nedopc/sprinter/download/solidc.zip
Работа с DLL в Solid C (ноябрь 2004):
http://nedopc.org/nedopc/sprinter/download/sc_dll.zip
http://nedopc.org/nedopc/sprinter/download/libman13.zip

_________________
Vasil Ivanov
vasil-i@yandex.ru


29 Apr 2004 14:15
Profile
God
User avatar

Joined: 03 Feb 2003 14:53
Posts: 1079
Reply with quote
Post 
По поводу 3, введи свои нараюотки, которые МБР применить в своей ОС, и они станут стандартом


29 Apr 2004 16:17
Profile
God
User avatar

Joined: 03 Feb 2003 14:53
Posts: 1079
Reply with quote
Post 
Опаньки, теперь я фанат, а не фантик. Е Шаосу, предлагаю Заменить стандартные уровни на следующие:
Code:
1. Коматозник.
2. Тормоз.
3. Монстр.
4. Мегамозг.


29 Apr 2004 16:24
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19321
Location: Silicon Valley
Reply with quote
Post 
1. Я думаю никому и в страшном сне не присниться писать программы для ПЗУ на Си - поэтому ориентируйся на ОЗУ :)
2. 8 будет в самый раз, тем более мало кто эту фичу испоьзует
3. Видимо надо сымитировать их - т.е. связать с клавой и дисплеем

_________________
:eugeek: https://twitter.com/Shaos1973


29 Apr 2004 19:53
Profile WWW
Doomed
User avatar

Joined: 11 Dec 2003 15:34
Posts: 407
Reply with quote
Post 
Shaos wrote:
1. Я думаю никому и в страшном сне не присниться писать программы для ПЗУ на Си - поэтому ориентируйся на ОЗУ :)
2. 8 будет в самый раз, тем более мало кто эту фичу испоьзует
3. Видимо надо сымитировать их - т.е. связать с клавой и дисплеем


1. Ok, заметано, вопрос считаем закрытым ;).

2. Оставлю 8.

3. Если ничего путного с имитацией не придумаю, то по-видимости
для Estex придется эти стандартные "std.." убрать и в Си они будут
уже не доступны ;(. Эта "фитча" будет обращать на себя внимание
только при портации си-сорцев с других платформ, не более того.
Думаю, ситуацию здесь спасет только прикрутка "std.." в самой ОС-и,
а в Си ничего путного не получится.
P.S. Эта проблема относится только для DSS, а не к самому SOLID C.


P.S.S. Вчера немного поправил твой LIBMAN для DLL-ек. Теперь он нормально работает с библами, у которых таблица перемещений
идет сразу за "своим" кодом (т.е. в начале рел-таблицы не требуется
4 нулевых байта (32 бита, для прохода dll-заголовка)). Этот формат обозвал как "L1". Его будет (уже выдает) выдавать линкер от SOLID C.
LIBMAN теперь версии 1.3. Надеюсь ты не против? ;).
Все это пойдет в пакете SOLID C. Как только прикручу i/o функции,
работу с памятью и доки по пакету, так выпущу SOLID C в мир ;).
p.s. Но по работе с памятью будут еще вопросы.

_________________
Vasil Ivanov
vasil-i@yandex.ru


02 May 2004 00:31
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19321
Location: Silicon Valley
Reply with quote
Post 
Vasil Ivanov wrote:
P.S.S. Вчера немного поправил твой LIBMAN для DLL-ек. Теперь он нормально работает с библами, у которых таблица перемещений
идет сразу за "своим" кодом (т.е. в начале рел-таблицы не требуется
4 нулевых байта (32 бита, для прохода dll-заголовка)). Этот формат обозвал как "L1". Его будет (уже выдает) выдавать линкер от SOLID C.
LIBMAN теперь версии 1.3. Надеюсь ты не против? ;)


Подробности изменений хочу - с кусками кода и т.д.
Ты уверен, что ничего не съехало?

_________________
:eugeek: https://twitter.com/Shaos1973


02 May 2004 07:48
Profile WWW
Doomed
User avatar

Joined: 11 Dec 2003 15:34
Posts: 407
Reply with quote
Post 
Shaos wrote:
Vasil Ivanov wrote:
P.S.S. Вчера немного поправил твой LIBMAN для DLL-ек. Теперь он нормально работает с библами, у которых таблица перемещений
идет сразу за "своим" кодом (т.е. в начале рел-таблицы не требуется
4 нулевых байта (32 бита, для прохода dll-заголовка)). Этот формат обозвал как "L1". Его будет (уже выдает) выдавать линкер от SOLID C.
LIBMAN теперь версии 1.3. Надеюсь ты не против? ;)


Подробности изменений хочу - с кусками кода и т.д.
Ты уверен, что ничего не съехало?


Нет проблем. Я тебе сейчас архивчик брошу, в нем все будет.
Архив брошу тебе на e-mail: shaos@mail.ru
P.S. Фактически все изменения LIBMAN-а - это прибавка 32 байт (размер
заголовка) к началу корректируемого кода, для формата L1. Вот и все.
Да еще малька соптимизил код менеджера - сейчас он на 48 байт короче оригинала.
Грузил им твою тестовую библиотечку (упакованную, не упакованную),
созданную mk_dll.exe и эту же библиотеку, скомпиленную моим линкером. Все грузилось без проблем.

_________________
Vasil Ivanov
vasil-i@yandex.ru


03 May 2004 14:27
Profile
God
User avatar

Joined: 03 Feb 2003 14:53
Posts: 1079
Reply with quote
Вася сделал это! Правда я ничего скомпилировать им не могу:( Линкер виснет:(
Всем качать!:

Solid C

UPDATE: 26 ноября 2005 года Shaos перенаправил линк на nedopc.org


05 Sep 2004 05:23
Profile
God
User avatar

Joined: 29 Dec 2003 02:00
Posts: 1101
Location: Москва
Reply with quote
cr0acker wrote:
Вася сделал это!

Крутейшей респект Васе!
Это вам не игрушки у КодеМастерсов тырить :-)
Скачено, посмотрю как нить на досуге!


06 Sep 2004 06:37
Profile ICQ WWW
Doomed
User avatar

Joined: 11 Dec 2003 15:34
Posts: 407
Reply with quote
CHRV wrote:
cr0acker wrote:
Вася сделал это!

Крутейшей респект Васе!
Это вам не игрушки у КодеМастерсов тырить :-)
Скачено, посмотрю как нить на досуге!


Пасиба мужики на добром слове ! ;)

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

P.S. На счет линкера - может собирать файлы максимум 64 кило весом.

_________________
Vasil Ivanov
vasil-i@yandex.ru


07 Sep 2004 10:38
Profile
Doomed
User avatar

Joined: 11 Dec 2003 15:34
Posts: 407
Reply with quote
cr0acker wrote:
Вася сделал это! Правда я ничего скомпилировать им не могу:( Линкер виснет:(
Всем качать!:
http://shaos.net/nuke/files/solid001.zip


Володя, бросил тебе сейчас по-фиксенный линкер. Так что забирайте
с Нюка. Теперь его версия v0.02b. Глюк был в процедуре вызова
рестарта DOS-а (неверное положение стека). Самое интересное, что
на электронном диске (тестил на нем линкер) все работало нормально.

_________________
Vasil Ivanov
vasil-i@yandex.ru


08 Sep 2004 03:23
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19321
Location: Silicon Valley
Reply with quote
Post 
Напомни какие файлы надо переводить на английский в первую очередь?

_________________
:eugeek: https://twitter.com/Shaos1973


07 Oct 2004 14:49
Profile WWW
Doomed
User avatar

Joined: 11 Dec 2003 15:34
Posts: 407
Reply with quote
Post 
Shaos wrote:
Напомни какие файлы надо переводить на английский в первую очередь?


readme.rus - первое, что надо перевести. Здесь особенности
пакета, портированного на Спринтер.

bugs.! - он совсем маленький ;)

cc.rus - дока по си-компилятору.

devel-1.rus - некоторая инфа по сборке проги из нескольких
исходников.

devel-2.rus - создание своих библиотек (irl-формата),
для юзания с линкером ld.exe.

ld.rus - дока линкера.

ol.rus - дока библиотекаря.

whatsnew.rus - история версий программ пакета.

Очень не помешала бы дока по си-функциям (clib.rus) данного
пакета, потому, что в некоторых функциях встречаются отличия
от стандартных (PC-шных), например функции перемещения
указателя в файле. Но она объемистая.
Да я фактически все доки и перечислил ;). По .rel/.irl
форматам и по асму, уже есть англицкий вариант.
Вобщем все доки, кроме cc.rus и clib.rus ты переведешь за
час, а может и быстрей ;).

_________________
Vasil Ivanov
vasil-i@yandex.ru


07 Oct 2004 15:20
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19321
Location: Silicon Valley
Reply with quote
Post 
Vasil Ivanov wrote:
readme.rus - первое, что надо перевести. Здесь особенности пакета, портированного на Спринтер.


Черновичок перевода:
http://www.nedopc.org/forum/viewtopic.php?t=7580

Поместил в английском форуме про спринтер, так что по русски там не выражаться! ;)

Vasil Ivanov wrote:
Очень не помешала бы дока по си-функциям (clib.rus) данного
пакета, потому, что в некоторых функциях встречаются отличия
от стандартных (PC-шных), например функции перемещения
указателя в файле. Но она объемистая.


Предлагаю вместо этого осветить только отличные функции,
т.к. си есть си - кто знает, тот в курсе ;)

Vasil Ivanov wrote:
Да я фактически все доки и перечислил ;). По .rel/.irl
форматам и по асму, уже есть англицкий вариант.
Вобщем все доки, кроме cc.rus и clib.rus ты переведешь за
час, а может и быстрей ;).


.irl по английски не нашел

за час не получится - за час даже просто прочитать не получится, не то что написать ;)

_________________
:eugeek: https://twitter.com/Shaos1973


08 Oct 2004 17:45
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19321
Location: Silicon Valley
Reply with quote
Post 
Кое что непонятно:

Code:
#include <stdio.h>

char buffer[4]="AAA";
//char buffer[4]={'A','A','A','A'};

void main()
{
    printf("0x%02X\n", *buffer);      // (1) не правильно!
    printf("0x%02X\n", (char *) *buffer);   // (2) правильно
}

Если массив buffer представляет собой char-элементы, то при обращении к нему,
как показано в строке (1), компилятор сгенерирует не тот код, что нам нужно.
При этом, никакой ошибки выдано не будет. Для того, чтобы компилятор сгенери-
ровал правильный код, к отдельному элементу char-массива нужно обращаться так,
как это сделано в строке (2), принудительно указав компилятору через cast-
операцию то, что нам нужно.
При обращении к массиву, состоящему из int-элементов, вышеописанных проблем
не возникает, компилятор генерирует правильный код.
Для более наглядного представления, о чем идет речь, можно просмотреть asm-
листинг, генерируемый компилятором для приведенного выше примера. Для строки
(1) компилятор не сгенерирует код "ld b,0".


Как я понимаю вместо
printf("0x%02X\n", (char *) *buffer);
надо писать
printf("0x%02X\n", (char) *buffer);
иначе ерунда какая-то получается

_________________
:eugeek: https://twitter.com/Shaos1973


08 Oct 2004 17:46
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 78 posts ]  Go to page 1, 2, 3, 4, 5, 6  Next

Who is online

Users browsing this forum: No registered users and 1 guest


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:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.