Последний раз редактировалось Sergey; 23.11.2014 в 23:22.
С уважением,
Gris / Red Triangle.
_____________________________________
ZX-EVO/TS-Labs config/NGS/HDD/SD-card
Amiga A1200/Blizzard 1230@50/32/60GB
Amiga A1200/Apollo 1260@66/32/60GB
UnAmiga (C5) AGA GM7123 VideoDAC
Это же стандартный путь. Там так и сделано.
http://github.com/EtchedPixels/FUZIX...r/Library/libs
Конечно это из серии "переписать все" совет, но я по своему опыту, использую HitechC:
Он на 30-40%% более компактный код делает, чем SDCCКод:HI-TECH C COMPILER (CP/M-80) V3.09 Copyright (C) 1984-87 HI-TECH SOFTWARE
Вот, собрал утилиты в CP/M и для CP/M, вроде все работает. А это как-никак до 70% ядра (все что кроме процессов). Т.е. для сборки (F)UZI(X) он вполне пригоден. Можно прям на Орионе все собирать.
Но собираю под Виндой, для удобства редактирования (исп. ProgrammersNotepad, проект - удобно) и компилирования:
Скрытый текст
Код:# Makefile for UZIX modules .SUFFIXES: .c .obj .as .lib CC = cpm -h c AS = cpm -h zas LINK = cpm -h link LIBR = cpm -h libr OBJHEX = cpm -h objtohex M80 = cpm m80n L80 = cpm l80m RM = rm DEFINES = -DORI_UTIL #DEFINES = -DORI_UZIX -DNO_ASM CFLAGS = -O -x ASFLAGS = -N OBJ_MKFS = MACHDEP.obj fs.obj dmisc.obj diskio.obj dio.obj dflop.obj dtty.obj sc1.obj OBJ_BD = MACHDEP.obj fs.obj dmisc.obj diskio.obj dio.obj dflop.obj dtty.obj sc1.obj OBJ_FSCK = MACHDEP.obj fs.obj dmisc.obj diskio.obj dio.obj dflop.obj dtty.obj sc1.obj OBJ_UCP = MACHDEP.obj fs.obj XFS.obj ucs.obj dmisc.obj diskio.obj dio.obj dflop.obj dtty.obj sc1.obj sc2.obj .c.obj : $(CC) $(CFLAGS) $(DEFINES) -c $*.c .as.obj : $(AS) $(ASFLAGS) -L$*.lst $*.as # devmisc.obj must be compiled without optimization (-O) because optimizer spoiling #asm blocks! dmisc.obj : dmisc.c $(CC) $(DEFINES) -x -c dmisc.c idebdos.com : $(M80) idebdos,=idebdos $(L80) /p:100,idebdos,idebdos/n/e bd.com : $(OBJ_BD) bd.c $(CC) $(CFLAGS) $(DEFINES) bd.c $(OBJ_BD) fsck.com : $(OBJ_FSCK) fsck.c $(CC) $(CFLAGS) $(DEFINES) fsck.c $(OBJ_FSCK) mkfs.com : $(OBJ_MKFS) mkfs.c $(CC) $(CFLAGS) $(DEFINES) mkfs.c $(OBJ_MKFS) ucp.com : $(OBJ_UCP) ucp.c $(CC) $(CFLAGS) $(DEFINES) ucp.c $(OBJ_UCP) all : idebdos.com bd.com fsck.com mkfs.com ucp.com clean : $(RM) $(OBJ_UCP) bd.obj fsck.obj mkfs.obj ucp.obj[свернуть]
Последний раз редактировалось Error404; 24.11.2014 в 02:33. Причина: убрал под спойлер
Лучше сделать и жалеть, чем не сделать и жалеть.
Некоторые из моих поделок тут: https://github.com/serge-404
Лично, я готов переписать все либы на асмеТам даже то, что изначально на асме, как будто, нарочно писалось, чтобы памяти больше занимало
Токо это долго будет, не меньше месяца (если загонюсь).
Хорошая весчь.
Будь добр, поделись образом "среды" с хайтеком. Кстати, может ли он ассемблерный файлы выдавать, или сразу непосредственно в бинарники компилит?
Кстати, наверное, можно будет этот CP/M HiTech и к Code::Blocks прикрутить.
Последний раз редактировалось Sergey; 24.11.2014 в 06:34.
С уважением,
Gris / Red Triangle.
_____________________________________
ZX-EVO/TS-Labs config/NGS/HDD/SD-card
Amiga A1200/Blizzard 1230@50/32/60GB
Amiga A1200/Apollo 1260@66/32/60GB
UnAmiga (C5) AGA GM7123 VideoDAC
Error404, как кросс средство (полукросс) хорошо использовать этот эмуль:
http://homepage3.nifty.com/takeda-to...cpm/index.html
он под винду. в нём сборка многих исходников hitech-c просто в пару секунд пролетает. при этом есть исходники, можно допиливать на своё усмотрение. удобна!
да, зачисти свою личку, а то даже сообщение не отправить тебе.
---------- Post added at 11:05 ---------- Previous post was at 11:00 ----------
HiTech-C 3.09 это древний компилятор под CP/M. однако, он ansi c совместимый. чтобы его прикрутить к какой-то среде, надо иметь хороший эмуль. если code::blocks под венду, то ссылка выше на эмуль. если под линь, для себя я определил только один достойный эмул цпма - zxcc:
http://classiccmp.org/cpmarchives/cp...xcc/index.html
0.5.7 я собрать не смог, 0.5.6. вроде без проблем собирается.
---------- Post added at 11:08 ---------- Previous post was at 11:05 ----------
некое подобие make файла для сборки под вышеприведённым виндоэмулем:
ещё есть батник для сборки libc. если надо, есть исходники libc.Код:@echo off if "%1" == "" goto error if not exist %1.c goto nofile if exist %1.asm del %1.asm if exist %1.obj del %1.obj if exist %1.com del %1.com if exist %1.map del %1.map @echo on cpm cpp -DHI_TECH_C -Dz80 -I %1.c C1.T cpm p1 C1.T C2.T C3.T cpm cgen C2.T %1.asm cpm zas -N -o%1.obj %1.asm cpm link -Z -M%1.map -C100H -O%1.com crtcpm.obj %1.obj libс.lib del *.T @echo off goto end :nofile echo Source file does not exist. goto end :error echo usage: ucc sourcefile [-o] [library1] [library2...] echo source filename must be supplied without extension. echo option -o disables code optimization. echo library1, library2, etc are other libraries to link echo map file is automatically generated (sourcefile.map) :end
Последний раз редактировалось Sayman; 24.11.2014 в 07:12.
Вот интересно, почему во многих функциях параметр, представляющий собой одиночный символ, указывают как "int"?!
void *memccpy(void *d, const void *s, int c, size_t n)
С уважением,
Gris / Red Triangle.
_____________________________________
ZX-EVO/TS-Labs config/NGS/HDD/SD-card
Amiga A1200/Blizzard 1230@50/32/60GB
Amiga A1200/Apollo 1260@66/32/60GB
UnAmiga (C5) AGA GM7123 VideoDAC
если я верно понял (сам этой функцией не пользовался), то третий аргумент (int c) это триггер, код при котором операция будет прервана. поскольку число знаковое, то от -32768 до +32767. потому и int. надо тебе прервать в какой-то момент копирование, ставишь ему параметр. например, у тебя какой- то код есть, число 1024, для примера. вот его и поставил. было бы char пришлось бы извращаться.
вообще, некоторые стоковые операции из Libc я заменил на подобные из файла machdep.c у uzix. bcopy, bfill, bzero.и места меньше и работает быстрее, чем стоковая memcpy, например.
Последний раз редактировалось Sayman; 24.11.2014 в 07:26.
Странно, по описанию, копирует строку не более n или пока не встретится символ с.
http://all-ht.ru/inf/prog/c/func/memccpy.html
Главное, указывают, что массив БАЙТОВЫЙ, а int - это минимум 16 бит. Мне со стека слово снимать или байт?!
Буду тут выкладывать оптимизированные функции по мере написания. Просьба, по возможности, оперативно делать тестовые сборки интерпретатора. Ну что бы хоть-какой прогресс наблюдать, есть разница в размере или нет.
Последний раз редактировалось Sergey; 24.11.2014 в 09:19.
С уважением,
Gris / Red Triangle.
_____________________________________
ZX-EVO/TS-Labs config/NGS/HDD/SD-card
Amiga A1200/Blizzard 1230@50/32/60GB
Amiga A1200/Apollo 1260@66/32/60GB
UnAmiga (C5) AGA GM7123 VideoDAC
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)