DC-SWAT Forum
Вапрос - Версия для печати

+- DC-SWAT Forum (http://www.dc-swat.ru/forum)
+-- Форум: Sega Dreamcast (/forum-2.html)
+--- Форум: Programming (/forum-8.html)
+--- Тема: Вапрос (/thread-1543.html)

Страниц: 1 2 3 4 5 6


RE: Вапрос - Rio - 02.04.2011 14:53

Не компилится.
36: missing separator
(в этой строке: $(KOS_CC) $(KOS_CFLAGS) $(KOS_LDFLAGS) -o $(TARGET) $(KOS_START) $(OBJS) $(OBJEXTRA) )
далее. при попытке поставить двоеточие между $KOS_CC и KOS_CFLAGS
пишет ошибку в 37 (то же самое). ставим и там двоеточие, пока не: mutiple target patterns, stop.
Проверь у себя еще раз и если у тебя запустится то значит у меня косяки.


PHP код:
#
# Basic KallistiOS skeleton / test program
# Copyright (C)2001-2004 Dan Potter
#   

# Put the filename of the output binary here
TARGET hello.elf

# List all of your C files here, but change the extension to ".o"
# Include "romdisk.o" if you want a rom disk.
OBJS hello.o romdisk.o

# If you define this, the Makefile.rules will create a romdisk.o for you
# from the named dir.
KOS_ROMDISK_DIR romdisk

# The rm-elf step is to remove the target before building, to force the
# re-creation of the rom disk.
allrm-elf $(TARGET)

include $(
KOS_BASE)/Makefile.rules

clean
:
    -
rm -$(TARGET) $(OBJSromdisk.*

rm-elf:
    -
rm -$(TARGETromdisk.*

#$(TARGET): $(OBJS)
#    kos-cc -o $(TARGET) $(OBJS)
#Remade the string by the SWAT advise:
#


$(TARGET): $(OBJS)
    $(
KOS_CC) $(KOS_CFLAGS) $(KOS_LDFLAGS) -$(TARGET) $(KOS_START) $(OBJS) $(OBJEXTRA) $(KOS_LIBS)
    $(
KOS_STRIP) $(TARGET)
    $(
KOS_OBJCOPY) -.stack -O binary $(TARGETunscrambled.bin
    
$(KOS_BASE)/utils/scramble/scramble unscrambled.bin 1ST_READ.BIN 

run
: $(TARGET)
    $(
KOS_LOADER) $(TARGET)

dist:
    
rm -$(OBJSromdisk.o romdisk.img
    
$(KOS_STRIP) $(TARGET

[Изображение: 3887d52cdb90t.jpg]


RE: Вапрос - SWAT - 02.04.2011 15:26

Проверь чтобы перед каждой командой стояла табуляция. Именно табуляция! Там у тебя скорее всего пробелы.
Никаких двоеточий нам лепить не нужно.


RE: Вапрос - Rio - 02.04.2011 17:34

[Изображение: b1918a55baaa38d0da4e8d27815c9639.jpg]


RE: Вапрос - SWAT - 02.04.2011 18:42

Замени это
PHP код:
allrm-elf $(TARGET

на это
PHP код:
all: $(TARGET

Вообще конечно странно, у тебя прописана эта команда в Makefile, почему он говорит что ее нет... Может быть ты удалил случайно это?

PHP код:
rm-elf:
    -
rm -$(TARGETromdisk.* 



RE: Вапрос - Rio - 02.04.2011 20:19

Сват, можешь скинуть полный текст рабочего makefile'а? Пожалуйста.


RE: Вапрос - Rio - 02.04.2011 20:48

No rule to make target hello.elf


RE: Вапрос - SWAT - 03.04.2011 10:56

Лови. Я проверил, работает.

PHP код:
# KallistiOS ##version##
#
# Makefile example
# Copyright (C) 2011 SWAT
#

TARGET hello
OBJS 
hello.o romdisk.o
KOS_ROMDISK_DIR 
romdisk

all
rm-elf $(TARGET).elf

include $(KOS_BASE)/Makefile.rules

rm
-elf:
    -
rm -f 1ST_READ.BIN $(TARGET).bin $(TARGET).elf romdisk.*

cleanrm-elf
    
-rm -$(OBJS)

$(
TARGET).elf: $(OBJS)
    $(
KOS_CC) $(KOS_CFLAGS) $(KOS_LDFLAGS) -$(TARGET).elf $(KOS_START) $(OBJS) $(OBJEXTRA) $(KOS_LIBS)
    $(
KOS_STRIP) $(TARGET).elf
    
$(KOS_OBJCOPY) -.stack -O binary $(TARGET).elf $(TARGET).bin
    
$(KOS_BASE)/utils/scramble/scramble $(TARGET).bin 1ST_READ.BIN 



RE: Вапрос - Rio - 04.04.2011 20:30

О чё добился!

[Изображение: 926570m.jpg]

Однако хотелось бы, чтобы буковки "Hello, World!" выводились на экран приставки, а не в консоль-дебаг.


RE: Вапрос - sc_maxim - 04.04.2011 22:42

Используй для этого SDL_ttf. ну по крайней мере я через нее выводил Smile Щас напишу пример.


RE: Вапрос - Rio - 04.04.2011 23:26

Спасибо большое)) И еще, где-то объясняется значение этих переменных?
PHP код:
$(TARGET).elf: $(OBJS)
    $(
KOS_CC) $(KOS_CFLAGS) $(KOS_LDFLAGS) -$(TARGET).elf $(KOS_START) $(OBJS) $(OBJEXTRA) $(KOS_LIBS)
    $(
KOS_STRIP) $(TARGET).elf
    
$(KOS_OBJCOPY) -.stack -O binary $(TARGET).elf $(TARGET).bin
    
$(KOS_BASE)/utils/scramble/scramble $(TARGET).bin 1ST_READ.BIN 
?


RE: Вапрос - sc_maxim - 05.04.2011 02:10

Вот текст программы:
PHP код:
#include <kos.h>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>

extern uint8 romdisk[];

KOS_INIT_FLAGS(INIT_DEFAULT INIT_MALLOCSTATS);

KOS_INIT_ROMDISK(romdisk);

int main(int argcchar **argv
{
    
// Инициализация подсистем SDL.    
    
if( SDL_InitSDL_INIT_VIDEO ) < || TTF_Init() < 
    {
        
printf"Error: %s\n\n",SDL_GetError() );
        return 
1;
    }
    
// Установка видеорежима.
    
SDL_Surface*    screen SDL_SetVideoMode
                                            
64048016
                                            
SDL_SWSURFACE SDL_DOUBLEBUF );
    if( 
screen == NULL )
    {    
        
printf"Error: %s\n\n"SDL_GetError() );
        return 
2;
    }
    
// Загрузка рисунка.
    
SDL_Surface*    image SDL_LoadBMP"/rd/hello.bmp" );
    
// Загрузка файла шрифта.
    
TTF_Font*    font TTF_OpenFont"/rd/font.ttf"24 );
    if( 
font == NULL )
    {
        
printf"OpenFont error: %s\n\n"SDL_GetError() );
        return    
3;
    }
    
// Цвет для выводимого текста.
    
SDL_Color    color =  { 2552550};
    
// Рендеринг текста в отдельную поверхность.
    
SDL_Surface*    text TTF_RenderText_Solid(
                                
font
                                
"Hello, World!",
                                
color );
    
SDL_BlitSurfaceimageNULLscreenNULL );
    
// Наложение поверхности текста на поверхность экрана.
    
SDL_BlitSurfacetextNULLscreenNULL );
    
// Обновление экрана (т.е. вывод того что нарисовали на экран). 
    
SDL_Flipscreen );
    for( ; ; ){};
    return 
0;

И собственно Makefile:
PHP код:
#    ljsdcdev
#    showfont makefile
#    Lawrence Sebald
#    Based on KOS makefiles by Dan Potter
#

KOS_CFLAGS += -I$(KOS_BASE)/../kos-ports/include/SDL-1.2.9 \
    -
I$(KOS_BASE)/../kos-ports/include/freetype
TARGET 
hello

all
1ST_READ.BIN

include $(KOS_BASE)/Makefile.rules

OBJS 
= $(TARGET).o

1ST_READ
.BIN: $(TARGET).elf
    
$(KOS_STRIP) $(TARGET).elf
    
$(KOS_OBJCOPY) -.stack -O binary $(TARGET).elf $(TARGET).bin
    
$(KOS_BASE)/utils/scramble/scramble $(TARGET).bin 1ST_READ.BIN 

$(TARGET).elf: $(OBJSromdisk.o
    
$(KOS_CC) $(KOS_CFLAGS) $(KOS_LOCAL_CFLAGS) $(KOS_LDFLAGS) -$@ $(KOS_START) $^ -lSDL_ttf -lfreetype -lSDL -lm $(KOS_LIBS)

romdisk.img:
    $(
KOS_GENROMFS) -f romdisk.img -d romdisk -v

romdisk
.oromdisk.img
    
$(KOS_BASE)/utils/bin2o/bin2o romdisk.img romdisk romdisk.o

clean
:
    
rm -$(OBJSromdisk.o romdisk.img $(TARGET).elf $(TARGET).$(TARGET).bin 1ST_READ.BIN 



RE: Вапрос - SWAT - 05.04.2011 06:10

(04.04.2011 23:26)Rio писал(а):  Спасибо большое)) И еще, где-то объясняется значение этих переменных?

В файлах environ которые лежат в корне kos.

Для простого вывода текста на экран можно использовать bfont (bios font).


RE: Вапрос - Rio - 10.04.2011 18:29

sc_maxim, где именно должны стоять символы табуляции, а где можно оставить пробелы? Возможен ли перенос строк? Если да, то каких?
PHP код:
ExceptionSTATUS_ACCESS_VIOLATION at eip=6100F02F
eax
=0022DAD4 ebx=00000000 ecx=00000000 edx=FFFFFFFF esi=00660420 edi=0040435E
ebp
=0022CB18 esp=0022CA60 program=C:\cygwin\usr\local\dc\kos\kos\utils\genromfs\genromfs.exepid 3308thread main
cs
=001B ds=0023 es=0023 fs=003B gs=0000 ss=0023
Stack trace
:
Frame     Function  Args
0022CB18  6100F02F  
(000000016116CF086116CF080022CB70)
0022CCE8  004027A5  (000000066116CE20006600900022CC70)
0022CD98  61006198  (000000000022CDD0610055100022CDD0)
61005510  61004416  (0000009CA02404C7E8611021FFFFFF48)
      
[maingenromfs 3308 _cygtls::handle_exceptionsError while dumping state (probably corrupted stack
[Изображение: 8Z0C2rBc.jpg]
Вообще, почему так сложно писать эти make-файлы?


RE: Вапрос - SWAT - 11.04.2011 05:58

Табуляция должна быть перед командами, все остальное можно пробелами.
Если ты хочешь перенести часть строки с командой на новую, то ставь на месте переноса \ (бэкслеш).
Писать makefile не сложно, если знать их принцип.
Попробуй скомпилить сам genromfs.


RE: Вапрос - Rio - 12.04.2011 20:53

Та принцип то мне в приципе понятен.... Просто непонятны некоторые закарлючки там, типа символа собаки и т.п. Ладно, неважно все это...
Вобще, честно говоря, грустно мне немного как-то. Думал, скачаю КОС, почитаю, ну максимум там, апи, и буду писать свои проги под дрим... А оказалось столько всего изучить надо - и компиляторы (все другое, не такое как в винде), и командную строку, и makefile'ы, и принцип организации кос, и вообще кучу кучу всего... вот так и разбиваются мечты "юных" девелоперов. за день напишу пинг-понг... ага, куда там... Эх! А ведь так хотелось, так...


RE: Вапрос - SWAT - 13.04.2011 06:19

Ну а как ты хотел Smile По сути это *nix style программирование.
Собака отключает вывод результата команды в консоль.


RE: Вапрос - Rio - 13.04.2011 20:29

Сват, а есть какие-то 3d-движки ну или хотя бы интерфейся для создания 3d-графики на Дриме? Библиотеки там, я хз.


RE: Вапрос - SWAT - 14.04.2011 10:38

Ну только порты типа кваки и yeti3d.
А так только API PVR и OpenGL.


RE: Вапрос - Rio - 13.05.2011 16:04

Вот кстати идея возникла. Недавно в какой-то умной книжке прочитал, что все библиотечные функции по умолчанию линкуются по одним и тем же адресам. соответственно, возрастает шанс декомпиляции дримовских программ.
это так или нет? (насчет линковки)?


RE: Вапрос - SWAT - 13.05.2011 17:26

На сколько я понимаю сей процесс, они линкуются в том порядке, в котором они прописаны компилятору. Так как стандартные библиотеки прописаны по умолчанию в конфигах, то соответственно они как правило сидят в одних и тех же местах. Но вот дополнительные библиотеки могут распихивать как угодно.
То же касается компилируемых исходников, если файлы поменять местами в порядке линковки, то они будут находится по другим адресам.
Поэтому то и при компилировании в начало линковки ставят asm код для инициализации железа. Если его поставить вторым или еще каким, но не первым, программа не запустится, так как в начале будет что то другое.
Так что тут зависит от среды, если эта полностью автоматизированная среда, аля Visual Studio, то там вполне может так и быть.
Но я за это не ручаюсь, не читал нужной литературы, все выводы только по собственному опыту делал.