PDA

Просмотр полной версии : C compiler



vitasam
16.01.2005, 21:40
Посоветуйте, плз, сабж под Спекки. Ничего, кроме Hisoft C, в голову не приходит

survivor
24.07.2005, 20:58
Посоветуйте, плз, сабж под Спекки. Ничего, кроме Hisoft C, в голову не приходит

А ничего больше для спека и не выпускалось, разве что кроссплатформенные компилеры СИ для PC.

ArHeY
24.07.2005, 21:22
А ничего больше для спека и не выпускалось, разве что кроссплатформенные компилеры СИ для PC.
Можно по-подробнее об этих штуках?

bob5024
24.07.2005, 22:08
Можно по-подробнее об этих штуках?
1.1 About SDCC
SDCC (Small Device C Compiler) is a Freeware, retargettable, optimizing ANSI-C compiler by Sandeep Dutta designed for 8 bit Microprocessors. The current version targets Intel MCS51 based Microprocessors (8031, 8032, 8051, 8052, etc.), Dallas DS80C390 variants, Motorola HC08 and Zilog Z80 based MCUs. It can be retargetted for other microprocessors, support for Microchip PIC, Atmel AVR is under development. The entire source code for the compiler is distributed under GPL. SDCC uses ASXXXX & ASLINK, a Freeware, retargettable assembler & linker. SDCC has extensive language extensions suitable for utilizing various microcontrollers and underlying hardware effectively.

In addition to the MCU specific optimizations SDCC also does a host of standard optimizations like:

global sub expression elimination,
loop optimizations (loop invariant, strength reduction of induction variables and loop reversing),
constant folding & propagation,
copy propagation,
dead code elimination
jump tables for switch statements.
For the back-end SDCC uses a global register allocation scheme which should be well suited for other 8 bit MCUs.

The peep hole optimizer uses a rule based substitution mechanism which is MCU independent.

Supported data-types are:

char (8 bits, 1 byte),
short and int (16 bits, 2 bytes),
long (32 bit, 4 bytes)
float (4 byte IEEE).
The compiler also allows inline assembler code to be embedded anywhere in a function. In addition, routines developed in assembly can also be called.

SDCC also provides an option (--cyclomatic) to report the relative complexity of a function. These functions can then be further optimized, or hand coded in assembly if needed.

SDCC also comes with a companion source level debugger SDCDB, the debugger currently uses ucSim a freeware simulator for 8051 and other micro-controllers.

The latest version can be downloaded from http://sdcc.sourceforge.net/snap.php.

bob5024
25.07.2005, 11:35
Можно по-подробнее об этих штуках?
И вот еще для примера вот такая программка:

#include "chars.h"
int main()
{

unsigned char i,j,k,m;
m=1;
i=1;
while (1)
{
//_cls_c();
++i;
for(j=0;j<23;j++)
{
for(k=0;k<5;k++)
{
_set_pos_c(k,j);//x,y
_set_attr_c(i++);
_prn_str_c(" !!ZX Spectrum - FOREVER!! ");
j++;
}
}
}
return 0;
}

компилируется вот во что:


;--------------------------------------------------------
; File Created by SDCC : FreeWare ANSI-C Compiler
; Version 2.4.0 Fri Apr 15 13:59:27 2005

;--------------------------------------------------------
.module main
.optsdcc -mz80

;--------------------------------------------------------
; Public variables in this module
;--------------------------------------------------------
.globl _main
;--------------------------------------------------------
; special function registers
;--------------------------------------------------------
;--------------------------------------------------------
; ram data
;--------------------------------------------------------
.area _DATA
;--------------------------------------------------------
; overlayable items in ram
;--------------------------------------------------------
.area _OVERLAY
;--------------------------------------------------------
; external initialized ram data
;--------------------------------------------------------
;--------------------------------------------------------
; global & static initialisations
;--------------------------------------------------------
.area _GSINIT
.area _GSFINAL
.area _GSINIT
;--------------------------------------------------------
; Home
;--------------------------------------------------------
.area _HOME
.area _CODE
;--------------------------------------------------------
; code
;--------------------------------------------------------
.area _CODE
;main.c:3: int main()
; genLabel
; genFunction
; ---------------------------------
; Function main
; ---------------------------------
_main_start::
_main:
push ix
ld ix,#0
add ix,sp
ld hl,#-1
add hl,sp
ld sp,hl
;main.c:8: i=1;
; genAssign
ld c,#0x01
;main.c:9: while (1)
; genLabel
00102$:
;main.c:12: ++i;
; genPlus
; genPlusIncr
; Removed redundent load
inc c
;main.c:13: for(j=0;j<23;j++)
; genAssign
ld b,#0x00
; genLabel
00108$:
; genCmpLt
ld a,b
sub a,#0x17
jp nc,00102$
;main.c:15: for(k=0;k<5;k++)
; genAssign
ld e,c
; genAssign
; (registers are the same)
; genAssign
; AOP_STK for _main_k_1_1
ld -1(ix),#0x00
; genLabel
00104$:
; genCmpLt
; AOP_STK for _main_k_1_1
ld a,-1(ix)
sub a,#0x05
ld a,#0x00
rla
ld d,a
; genAssign
ld c,e
; genIfx
xor a,a
or a,d
jp z,00110$
;main.c:17: _set_pos_c(k,j);//x,y
; genIpush
; _saveRegsForCall: sendSetSize: 0 deInUse: 1 bcInUse: 1 deSending: 0
push bc
push de
push bc
inc sp
; genIpush
; AOP_STK for _main_k_1_1
ld a,-1(ix)
push af
inc sp
; genCall
call __set_pos_c
pop af
pop de
pop bc
;main.c:18: _set_attr_c(i++);
; genAssign
ld d,e
; genPlus
; genPlusIncr
; Removed redundent load
inc e
; genIpush
; _saveRegsForCall: sendSetSize: 0 deInUse: 1 bcInUse: 1 deSending: 0
push bc
push de
push de
inc sp
; genCall
call __set_attr_c
inc sp
pop de
pop bc
;main.c:19: _prn_str_c(" !!ZX Spectrum - FOREVER!! ");
; genIpush
; _saveRegsForCall: sendSetSize: 0 deInUse: 1 bcInUse: 1 deSending: 0
push bc
push de
ld hl,#__str_0
push hl
; genCall
call __prn_str_c
pop af
pop de
pop bc
;main.c:20: j++;
; genPlus
; genPlusIncr
; Removed redundent load
inc b
;main.c:15: for(k=0;k<5;k++)
; genPlus
; AOP_STK for _main_k_1_1
; genPlusIncr
inc -1(ix)
; genGoto
jp 00104$
; genLabel
00110$:
;main.c:13: for(j=0;j<23;j++)
; genPlus
; genPlusIncr
; Removed redundent load
inc b
; genGoto
jp 00108$
;main.c:24: return 0;
; genLabel
00112$:
; genEndFunction
ld sp,ix
pop ix
ret
_main_end::
__str_0:
.ascii " !!ZX Spectrum - FOREVER!! "
.db 0x00
.area _CODE

и после линковки оно даже работает
:) (см.вложение)

survivor
25.07.2005, 12:14
Можно по-подробнее об этих штуках?
Сам я не большой любитель СИ, особенно на спектруме. Использование языка СИ на ZX мне представляется целесообразной лишь для написания некритичных по времени алгоритмов. Всякие ресурсоемкие демо и one frame e-zines на СИ для спека написать вряд ли получится. Тем не менее, СИ в нектороых случаях может быть лучшим инструментом при создании легко читаемых листингов. Хотя и досталось для ZX небольшое наследие языков высокого уровня (про бейсик я вообще молчу), но зато всевозможных компилеров СИ для процессора z80 под платформой pc существует достаточное множество. Вот например типичный C-compiler под названием "Cross C Standard C Compiler ($) ", который лежит на http://www.softools.com. Правда, как и все истинное буржуинское, прога предлагается в 30-ти дневной лимитированной версии и весит целых 3308 кб. А есть еще кроссплатформенный С-компилятор для различных платформ под названием "z88 Development Kit Open Source z80" на http://www.z88dk.org.

bob5024
25.07.2005, 14:22
Сам я не большой любитель СИ, особенно на спектруме. Использование языка СИ на ZX мне представляется целесообразной лишь для написания некритичных по времени алгоритмов. Всякие ресурсоемкие демо и one frame e-zines на СИ для спека написать вряд ли получится. Тем не менее, СИ в нектороых случаях может быть лучшим инструментом при создании легко читаемых листингов.
:) и только то? А например системные программы, даже может быть не они сами , а ГУИ/плагины к ним? Ведь достаточно много системок просто не использует всю память спектрума, будучи написанными на асме.

Хотя и досталось для ZX небольшое наследие языков высокого уровня (про бейсик я вообще молчу), но зато всевозможных компилеров СИ для процессора z80 под платформой pc существует достаточное множество. Вот например типичный C-compiler под названием "Cross C Standard C Compiler ($) ", который лежит на http://www.softools.com. Правда, как и все истинное буржуинское, прога предлагается в 30-ти дневной лимитированной версии и весит целых 3308 кб. А есть еще кроссплатформенный С-компилятор для различных платформ под названием "z88 Development Kit Open Source z80" на http://www.z88dk.org.
Бейсик не трожь - бейсик - это святое! :)
Насчет кросс-компиляции вот лично у меня эдакий морально-этический :) вопрос:
Кросс-компилятор будучи практически эмулятором, и даже более.... Должны ли использовать его настоящие спектрумисты. Это ведь практически таже надувная женщина! :)

Shiru
25.07.2005, 20:09
Кросс-компилятор будучи практически эмулятором, и даже более....
Какой-же он эмулятор? Компилятор - он компилятор, даже если и кросс. Код-то из него выходит для Z80, а не другого проца. Средства кросс-разработки используются уже очень давно и повсеместно, чего далеко ходить: ЧВ создан при помощи кросс-ассма. И у меня есть некоторые сомнения в возможности повторения этого подвига чисто на ZX.

survivor
25.07.2005, 21:44
:) Бейсик не трожь - бейсик - это святое! :) ...
Должны ли использовать его настоящие спектрумисты. Это ведь практически таже надувная женщина! :)

Вот и получается, что некоторые "настоящие спектрумисты" приравняли бейсик к резиновой женщине, от чего у них ничего не получается и ничего не хочется.

bob5024
25.07.2005, 22:11
Вот и получается, что некоторые "настоящие спектрумисты" приравняли бейсик к резиновой женщине, от чего у них ничего не получается и ничего не хочется.

ай, малацца! :), 5 баллов!
отквотить чужую фразу так, что смысл меняется на противоположный - был кросс Ц-компилятор - надувная женсчина, стал бейсик :)
И вообще, чего ты к Бейсику то докопался, "настоящие спектрумисты" пишут сразу в исполняемом коде, и вся эта ассемблерно-сишная мутотень им вообще никчему! :)

bob5024
26.07.2005, 10:41
чего далеко ходить: ЧВ создан при помощи кросс-ассма. И у меня есть некоторые сомнения в возможности повторения этого подвига чисто на ZX.
Именно, какие нафиг сейчас подвиги ждать и от кого? На асме (пусть даже кросс для удобства) такое врядли кто повторит. А Ц хоть и генерит уродливый жирный код, дак на нем и писать на порядок проще и удобнее. ЧВ конечно скорее всего не получится, ну хоть готовую Контики бы кто портировал... ;)

icebear
26.07.2005, 12:06
А Ц хоть и генерит уродливый жирный код, дак на нем и писать на порядок проще и удобнее.

Кто мешает писать критичные куски на том же ассемблере? Преимущество С (и любого другого высокоуровнего языка) перед ассемблеров в скорости разработки, вот именно это хотелось бы поиметь на Спектруме.

bob5024
26.07.2005, 15:07
Кто мешает писать критичные куски на том же ассемблере? Преимущество С (и любого другого высокоуровнего языка) перед ассемблеров в скорости разработки, вот именно это хотелось бы поиметь на Спектруме.
ну так за чем дело стало? Качаем SDCC и вперёд! :)

icebear
26.07.2005, 16:11
ну так за чем дело стало? Качаем SDCC и вперёд! :)

Дык я не против :) Вот время подойдёт и буду писать на любимом С.

fk0
23.08.2005, 18:37
Посоветуйте, плз, сабж под Спекки. Ничего, кроме Hisoft C, в голову не приходит

Hitech C. Но он денег стоит. Есть ломанный. Но он только для DOS и вообще
старый.

fk0
23.08.2005, 18:38
Сообщение от vitasam
Посоветуйте, плз, сабж под Спекки. Ничего, кроме Hisoft C, в голову не приходит


А ничего больше для спека и не выпускалось, разве что кроссплатформенные компилеры СИ для PC.

НЕТ! А как же недо-C компилятор Андрея Демидова (C-Warp) ?

caro
24.08.2005, 11:52
НЕТ! А как же недо-C компилятор Андрея Демидова (C-Warp) ?Вспоминали уже про него в теме "C_Warp": http://zx.pk.ru/showthread.php?t=15
Кстати неплохой компилятор, только Андрей к нему описание не удосужился написать.

fk0
25.08.2005, 16:42
Кстати неплохой компилятор, только Андрей к нему описание не удосужился написать.

НЕПЛОХОЙ??? Ты не пробовал! Он, скорей, нерабочий.
Он же никаким стандартам по своим глюкам не соответствует.