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


Вапрос - Rio - 27.03.2011 20:01

sh-elf-gcc -ml -Wl,-Ttext,0x8c010000 -nostartfiles -nostdlib -e _start prog.c -o prog.elf -lgcc
sh-elf-objcopy -O binary prog.elf prog.bin
scramble prog.bin 1ST_READ.BIN


RE: Вапрос - Rio - 27.03.2011 20:28

PS: убунту подойдет для девелопмента?


RE: Вапрос - sc_maxim - 28.03.2011 00:38

скачай DDEr4 и не парь себе мозг с линуксом. Поставишь все оттуда и сможешь программировать для дрима под Windows. Там есть примеры которые просто разобрать и изменитьпод свои нужды. Сборка программ делается через Makefile. После сборки появляется elf-файл (это универсальный формат для объектных и исполнимых файлов для разных ОС и устройств, в том числе и для Дрима), этот файл легко конвертировать через 1st_read.bin checker в bin и запустить на дриме или на эмуле.


RE: Вапрос - Rio - 29.03.2011 16:20

Да токо оно кучу ошибок выдает.


RE: Вапрос - SWAT - 29.03.2011 18:38

Сплошные проблемы у тебя... Не судьба Smile


RE: Вапрос - sc_maxim - 29.03.2011 21:53

Ошибки анализируешь и смотришь что их провоцирует.
Ничего там сложного нет.


RE: Вапрос - SWAT - 30.03.2011 06:11

Да Rio, если ты не научишься фиксить ошибки, у тебя никогда ничего не получится Smile


RE: Вапрос - Rio - 30.03.2011 16:01

Сват, ну я же не настолько дурак)) Естессно, я фиксю их. Но после двадцатого запроса в гугл, нечто на подобии, "Kallisti Os errors" или "KOS errors list", и не находя нужного ответа, уже как-то, честно, опускаются руки))


RE: Вапрос - SWAT - 30.03.2011 18:28

Хмм что то ты не то ищешь... Что у тебя за ошибки вообще?


RE: Вапрос - Rio - 30.03.2011 18:50

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


RE: Вапрос - sc_maxim - 30.03.2011 19:09

Так ты ничего не скомпилишь. Если уж нужно скомпилировать отдельный файл, то используй это:
kos-cc -o prog.elf prog.c
а вообщето заходи в папку /usr/local/dc/kos/kos/examples/dreamcast
печатай:
make
Так ты соберешь примеры. Если все правильно соберется то найди пример поменьше и попробуй переделать его. Там вроде есть что-то типа Hello world вот с него и начни.


RE: Вапрос - Rio - 31.03.2011 01:43

Цитата:Так ты ничего не скомпилишь.
Почему?
Цитата:kos-cc -o prog.elf prog.c
Откуда ты узнал что компилить надо именно так?
Цитата:Там вроде есть что-то типа Hello world вот с него и начни.
Конечно. Я уже пробовал. Он не работает.


RE: Вапрос - sc_maxim - 31.03.2011 01:59

1) Потому что sh-elf-gcc - это голый компилятор, который не знает где лежать хэдеры и либы, А kos-cc - это врепепер, которий создан специально для того чтобы упростить компиляцию. Узнать о нем можно посмотрев в файлы environ*.sh.

2) Так компилятся программы через gcc компилятор. Не уверен что собранная таким образом программа заработает на дриме, тем более что там еще нужно указывать кучу библиотек. Это я так для примера показал.

3) Если у тебя это не работает, то скорей всего ты не зашел в папки .../kos/kos и /kos/kos-ports и не ввел там make. Или же ты не выполнил команду source environ.sh находясь в папке .../kos/kos, которую нужно выполнять каждый раз при запуске Cygwin.

Если ничего из этого тебе не поможет то скинешь скриншот ошибки, которая возникает при попытке собрать hello.


RE: Вапрос - SWAT - 31.03.2011 08:06

Суда по ошибке, у тебя не загружен environ.sh
Его можно прописать в /etc/profile вместо строки:
Код:
cd "${HOME}"

Напиши:
Код:
cd /usr/local/dc/kos/kos
./environ.sh

После этого при запуске консоли cygwin, ты будешь находится в нужной папке с выставленными параметрами для компиляциями.
Заходишь в директорию examples/dreamcast/hello и пишешь make. Если собралось, можешь дальше экспериментировать с этим примером.

Да и кстати, если ты все устанавливал сам, а не с готового установщика, то файл environ.sh нужно взять из doc и сконфигурять в нем пути. Но судя по скриншоту он у тебя уже есть.


RE: Вапрос - Rio - 01.04.2011 17:09

PHP код:
# base-files version 4.0-6
# /etc/profile: executed by the command interpreter for login shells.

# The latest version as installed by the Cygwin Setup program can
# always be found at /etc/defaults/etc/profile

# Modifying /etc/profile directly will prevent
# setup from updating it.

# System-wide profile file

# Some resources...
# Customizing Your Shell: http://www.dsl.org/cookbook/cookbook_5.html#SEC69
# Consistent BackSpace and Delete Configuration:
#   http://www.ibb.net/~anne/keyboard.html
# The Linux Documentation Project: http://www.tldp.org/
# The Linux Cookbook: http://www.tldp.org/LDP/linuxcookbook/html/

# Setup some default paths. Note that this order will allow user installed
# software to override 'system' software.
# Modifying these default path settings can be done in different ways.
# To learn more about startup files, refer to your shell's man page.
PATH="/usr/local/bin:/usr/bin:${PATH}"
MANPATH="/usr/local/man:/usr/share/man:/usr/man:${MANPATH}"
INFOPATH="/usr/local/info:/usr/share/info:/usr/info:${INFOPATH}"

# Set the user id
USER="$(id -un)"

# TMP and TEMP are defined in the Windows environment. Leaving
# them set to the default Windows temporary directory or unset
# can have unexpected consequences. 
unset TMP TEMP
TMP
="/tmp"
TEMP="/tmp"

# Define default printer
p='/proc/registry/HKEY_CURRENT_USER/Software/Microsoft/Windows NT/CurrentVersion/Windows/Device'
if [ -"${p}] ; then
  read 
-r PRINTER "${p}
  
PRINTER=${PRINTER%%,*}
fi
unset p

# Default to removing the write permission for group and other
#  (files normally created with mode 777 become 755; files created with
#  mode 666 become 644)
umask 022

# Here is how HOME is set, in order of priority, when starting from Windows
#  1) From existing HOME in the Windows environment, translated to a Posix path
#  2) from /etc/passwd, if there is an entry with a non empty directory field
#  3) from HOMEDRIVE/HOMEPATH
#  4) / (root)
# If the home directory doesn't exist, create it.
if [ ! -"${HOME}]; then
  
if mkdir -"${HOME}"then
    
echo "Copying skeleton files."
    
echo "These files are for the users to personalise their cygwin experience."
    
echo
    echo 
"They will never be overwritten nor automatically updated."
    
echo
    
cd /etc/skel || echo "WARNING: Failed attempt to cd into /etc/skel!"
    
/usr/bin/find . -type f | while read f; do
      
fDest=${f#.}
      
if [ ! -"${HOME}${fDest}-! -"${HOME}${fDest}]; then
        
/usr/bin/install ---"${f}" "${HOME}/${fDest}"
      
fi
    done
    
unset fDest
  
else
    echo 
"${HOME} could not be created."
    
{ [ -"${TEMP}] && HOME="${TEMP}"; } ||
    { [ -
"${TMP}] && HOME="${TMP}"; } ||
    { [ -
/tmp ] && HOME=/tmp; } ||
    
HOME=/
    echo 
"Setting HOME to ${HOME}."
  
fi
fi

# Make sure we start in home unless invoked by CHERE
if [ ! -"${CHERE_INVOKING}]; then
  
unset CHERE_INVOKING
else
  
cd "${HOME}|| echo "WARNING: Failed attempt to cd into ${HOME}!"
fi

# Shell dependent settings
profile_d ()
{
  
saved_LC_COLLATE=${LC_COLLATE}
  
LC_COLLATE=C
  
for file in /etc/profile.d/*.$1; do
    [ -e "${file}" ] && . "${file}"
  done
  LC_COLLATE=${saved_LC_COLLATE}
  unset saved_LC_COLLATE
}

if [ ! "x${BASH_VERSION}" = "x"  ]; then
  HOSTNAME=$(/usr/bin/hostname)
  profile_d sh
  [ -f "/etc/bash.bashrc" ] && . "/etc/bash.bashrc"
elif [ ! "x${KSH_VERSION}" = "x" ]; then
  typeset -l HOSTNAME=$(/usr/bin/hostname)
  profile_d sh
  PS1=$(print '\033]0;${PWD}\n\033[32m${USER}@${HOSTNAME} \033[33m${PWD/${HOME}/~}\033[0m\n$ ')
elif [ ! "x${ZSH_VERSION}" = "x" ]; then
  HOSTNAME=$(/usr/bin/hostname)
  profile_d zsh
  PS1='(%n@%m)[%h] %~ %% '
elif [ ! "x${POSH_VERSION}" = "x" ]; then
  HOSTNAME=$(/usr/bin/hostname)
  PS1="$ "
else 
  HOSTNAME=$(/usr/bin/hostname) 
  profile_d sh
  PS1="$ "
fi

export PATH MANPATH INFOPATH USER TMP TEMP PRINTER HOSTNAME PS1 

# Check to see if mkpasswd/mkgroup needs to be run try and cut down the emails
#   about this on the lists!
#
# The following are the conditions under which the group name special cases 
#   will appear (where uid and gid are the effective user and group ids
#   for the current user, and pgsid is the primary group associated with the
#   SID for the current user):
#       mkpasswd:
#         gid is not in /etc/group
#         uid is not in /etc/passwd
#       passwd/group_GID_clash(<gid>/<pgsid>):
#         gid is not in /etc/group
#         uid is in /etc/passwd
#         pgsid is in /etc/group (and does not match gid)
#       mkgroup:
#         gid is not in /etc/group
#         uid is in /etc/passwd
#         pgsid is not in /etc/group
#
# If this message keeps appearing and you are sure it's a mistake (ie, don't
#   email about it!), comment out the test below.
case "$(id -ng)" in
mkpasswd )
  echo "Your group is currently \"mkpasswd\".  This indicates that your"
  echo "gid is not in /etc/group and your uid is not in /etc/passwd."
  echo
  echo "The /etc/passwd (and possibly /etc/group) files should be rebuilt."
  echo "See the man pages for mkpasswd and mkgroup then, for example, run"
  echo
  echo "mkpasswd -l [-d] > /etc/passwd"
  echo "mkgroup  -l [-d] > /etc/group"
  echo
  echo "Note that the -d switch is necessary for domain users."
  ;;
passwd/group_GID_clash* )
  echo "Your group is currently \"passwd/group_GID_clash(gid/pgsid)\".  This"
  echo "indicates that your gid is not in /etc/group, but the pgsid (primary "
  echo "group associated with your SID) is in /etc/group."
  echo
  echo "The /etc/passwd (and possibly /etc/group) files should be rebuilt."
  echo "See the man pages for mkpasswd and mkgroup then, for example, run"
  echo
  echo "mkpasswd -l [-d] > /etc/passwd"
  echo "mkgroup  -l [-d] > /etc/group"
  echo
  echo "Note that the -d switch is necessary for domain users."
  ;;
mkgroup )
  echo "Your group is currently \"mkgroup\".  This indicates that neither"
  echo "your gid nor your pgsid (primary group associated with your SID)"
  echo "is in /etc/group."
  echo
  echo "The /etc/group (and possibly /etc/passwd) files should be rebuilt."
  echo "See the man pages for mkpasswd and mkgroup then, for example, run"
  echo
  echo "mkpasswd -l [-d] > /etc/passwd"
  echo "mkgroup  -l [-d] > /etc/group"
  echo
  echo "Note that the -d switch is necessary for domain users."
  ;;
esac


cd /usr/local/dc/kos/kos
source environ.sh 
вот полный текст моего файла. судя по всему заданная строка в нем уже есть.
при попытке вызвать из консоли команду make пишет ругательное "command not found".


RE: Вапрос - sc_maxim - 01.04.2011 20:01

значит ты установил Cygwin не полностью. Ты устанавливал с DDEr4?
Если да то попробуй все переустановить заново, удавлив предварительно все его папки. И нужно щелкнуть при выборе компонентов Cygwin по All - Default, чтобы оно изменилось на All - Install, иначе опять не будет команды make.


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

Вот еще такой вопрос. Откомпайлил я hello world. В папке, соответсвенно, появилось несколько файлов, в том числе и файл hello.elf огромного (просто таки ужасающего) размера - аж целых 998 Кбайт. Что не мало, согласитесь.
Итак, что мне надо дальше с этим файлом делать? На попытки выполнить из командной строки утилиты elf2bin и scramble интерпретатор отвечает что команды не найдены.


RE: Вапрос - SWAT - 02.04.2011 13:03

Ну конечно он их не нашел, потому что их там нет.

Замени в Makefile строки:

PHP код:
$(TARGET): $(OBJS)
    
kos-cc -$(TARGET) $(OBJS

На эти:

PHP код:
$(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 

Если у тебя нет утилиты utils/scramble/scramble то закинь туда ее.
Размера файла пугаться не стоит, в нем есть куча ненужно инфы, которая потом удалится с помощью KOS_STRIP. Да и при конвертации в бинарник, он еще немного уменьшится.


RE: Вапрос - Rio - 02.04.2011 13:04

Не понял. Еще разочек пожалуйста. Что делать с hello.elf.


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

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