реклама на сайте
подробности

 
 
> Опять про загрузчик..., Не получается передать управление.
EXeGLuMATOR
сообщение Apr 9 2008, 07:05
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305



Перечитал все что нашел, по этой теме - так и не дошло в чем проблема.
Итак. Написан загрузчик - все пишется, все обновляется, но не получается передать управление на основную программу. Ремаплю-передаю вот так:
Код
    MEMMAP = 2;                    //Map vector table from RAM
        // Copy vectors table
    src = (unsigned long *)START_ADDR;
    dst = (unsigned long *)0x00000000;
        size = 0x40 / sizeof(*dst);
        do  { *dst++ = *src++; } while (--size);

    //Reset controller
    ((void(*)(void))(0x00000000))();


Смотрю в симуляторе, все ремапится, но после перехода на 0 получаю вот это:
*** error 65: access violation at 0x00000000 : no 'execute/read' permission

Загрузчик линкуется вот так:
Код
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x00000000 0x00020000  {   ; load region size_region
  ER_IROM1 0x00000000 0x00020000  { ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x40000040 0x0000FFC0  { ; RW data
   .ANY (+RW +ZI)
  }
}


Основной модуль вот так:
Код
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x00006000 0x0001A000  {   ; load region size_region
  ER_IROM1 0x00006000 0x0001A000  { ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x40000000 0x00010000  { ; RW data
   .ANY (+RW +ZI)
  }
}


В связи с этим вопросы:
1. Что не так делаю?
2. Как надо компилить-линковать основной модуль и загрузчик по расположению в памяти?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
EXeGLuMATOR
сообщение Apr 11 2008, 19:10
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305



да, сорри забыл сказать. камень LPC2106. Память и вектора ремапятся нормально. А передача управления не происходит поскольку стоят неправильные адреса на векторах. Вопрос собсно как скомпилировать программу, чтобы вектора были рассчитаны на работу с 0 адреса, а сама прога с другого. Бьюсь уже сколько времени - все никак. Все компилится либо с 0 либо с адреса - соотв вектора все направлены в космос. Что-то я туплю походу где-то.
Go to the top of the page
 
+Quote Post
amw
сообщение Apr 11 2008, 19:51
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(EXeGLuMATOR @ Apr 11 2008, 22:10) *
да, сорри забыл сказать. камень LPC2106. Память и вектора ремапятся нормально. А передача управления не происходит поскольку стоят неправильные адреса на векторах. Вопрос собсно как скомпилировать программу, чтобы вектора были рассчитаны на работу с 0 адреса, а сама прога с другого. Бьюсь уже сколько времени - все никак. Все компилится либо с 0 либо с адреса - соотв вектора все направлены в космос. Что-то я туплю походу где-то.

Блин сколько уже сказано об этом.
1. Сделайте секцию с нулевого адреса.
2. Разместите в ней вектора.
3. Сделайте секцию с нужного Вам адреса.
4. Разместите в ней всю остальную программу.
5. Скомпилируйте.
6. Наслаждайтесь.
Пример для gcc см выше. С keil помочь не могу.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
EXeGLuMATOR
сообщение Apr 11 2008, 20:54
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305



Цитата(amw @ Apr 11 2008, 23:51) *
Блин сколько уже сказано об этом.
1. Сделайте секцию с нулевого адреса.
2. Разместите в ней вектора.
3. Сделайте секцию с нужного Вам адреса.
4. Разместите в ней всю остальную программу.
5. Скомпилируйте.
6. Наслаждайтесь.
Пример для gcc см выше. С keil помочь не могу.


За пример спасибо. Только в кейле както все иначе выглядит совсем. Насколько я смог разобраться. В этом и проблема. Даже примеры на CARM и Real View - разные. синтаксис другой. Вот и мучаюсь.
Go to the top of the page
 
+Quote Post
amw
сообщение Apr 12 2008, 08:29
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(EXeGLuMATOR @ Apr 11 2008, 23:54) *
За пример спасибо. Только в кейле както все иначе выглядит совсем. Насколько я смог разобраться. В этом и проблема. Даже примеры на CARM и Real View - разные. синтаксис другой. Вот и мучаюсь.

Возмите простейшую програмку. Пусть она ничего не делает полезного, но маленькой проще разбираться.
И размещая функции и переменные в разных секциях, подвигайте эти секции в скрипте линкера по разным адресам. Смотрите на резуль дизассемблирования. Что и по каким адресам располагается уже после компиляции.

Стартап придется переписывать. По крайней мере для второй программы, которую должен запускать бутлоадер. И переписать так, чтоб не было конфликтующих действий в разных стартапах.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
eml
сообщение Apr 17 2008, 09:44
Сообщение #6





Группа: Участник
Сообщений: 3
Регистрация: 21-07-07
Пользователь №: 29 278



Цитата(amw @ Apr 12 2008, 11:29) *
Возмите простейшую програмку. Пусть она ничего не делает полезного, но маленькой проще разбираться.
И размещая функции и переменные в разных секциях, подвигайте эти секции в скрипте линкера по разным адресам. Смотрите на резуль дизассемблирования. Что и по каким адресам располагается уже после компиляции.

Стартап придется переписывать. По крайней мере для второй программы, которую должен запускать бутлоадер. И переписать так, чтоб не было конфликтующих действий в разных стартапах.


Взял Ваш пример попытался скомпилить, вадало ошибку в скрипре линковшика
$ make
arm-elf-ld -Tboot-lpc2378.lds -nostdlib -o boot.elf crt0.o boot.o
arm-elf-ld:boot-lpc2378.lds:57: parse error
make: *** [boot.elf] Error 1
$ vi boot-lpc2378.lds
.ramvectors :
{
_ramvectors = .;
*(.ramvectors*)
. = _ramvectors + LENGTH(RAMVECTORS); // :57 ?
_eramvectors = .;
PROVIDE(eramvectors = .);
} > RAMVECTORS AT > FLASH

У вас собирался, что то не так сделал?
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение May 2 2008, 12:33
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(eml @ Apr 17 2008, 13:44) *
У вас собирался, что то не так сделал?


Так что там, победили загрузчик?
Переделал тутошний загрузчик для IAR 5.11 и немножко доработал.
Все отлично работает. Получилось, что прикладной программе ничего и знать не нужно
о существовании загрузчика.

Сообщение отредактировал Vitaliy_ARM - May 2 2008, 12:34


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
Guest_user234_*
сообщение May 12 2008, 08:58
Сообщение #8





Guests






Цитата(Vitaliy_ARM @ May 2 2008, 15:33) *
Так что там, победили загрузчик?


Здраствуйте, не подскажите, для инициализации стека достаточно
установить SYS_MODE (нужно ли устанавливать флаги: I_BIT,F_BIT )
и инициализации памяти где этот стек определен ?
--------------------------------------
_start:
ldr r0,=TOP_STACK
@ SET MODE
msr cpsr_c, #(SYS_MODE|I_BIT|F_BIT)
@ SET STACK
mov sp, r0

bl fn_initSdram
bl main_start
--------------------------------------
Нужно ли определяеть стек для FIQ, IRQ, Это необходимо делать ?
Не подскажите где можно скачать свежую версию binutils-arm для linux ?

Сообщение отредактировал user234 - May 12 2008, 09:00
Go to the top of the page
 
+Quote Post
amw
сообщение May 12 2008, 09:24
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(user234 @ May 12 2008, 11:58) *
Здраствуйте, не подскажите, для инициализации стека достаточно
установить SYS_MODE (нужно ли устанавливать флаги: I_BIT,F_BIT )
и инициализации памяти где этот стек определен ?
--------------------------------------
_start:
ldr r0,=TOP_STACK
@ SET MODE
msr cpsr_c, #(SYS_MODE|I_BIT|F_BIT)
@ SET STACK
mov sp, r0

bl fn_initSdram
bl main_start
--------------------------------------

Вопрос слишком расплывчатый.
По минимуму - достаточно переключить режим и занести нужное значение в SP.
А нужны ли Вам прерывания в каждом конкретном случае - решать Вам.
Цитата
Нужно ли определяеть стек для FIQ, IRQ, Это необходимо делать ?

Если используются прерывания - да.
Цитата
Не подскажите где можно скачать свежую версию binutils-arm для linux ?

Скачать исходник отсюда http://ftp.gnu.org/gnu/binutils/ и скомпилировать.
Как и все остальное.
Можете воспользоваться приложенными скриптами.
Перед запуском создайте каталоги:
build
downloads
log
patches
scripts
src
и положите исходники (архивы) в downloads.
Скрипты не шибко умные, только для облегчения набирания нужной последовательности команд.
Инсталлируется все в /usr/local/arm/arm-elf. У Вас должны быть права на запись в ӕтот каталог.
Смотрите начало файла tools.sh и поправте переменные.

Сообщение отредактировал amw - May 12 2008, 09:25
Прикрепленные файлы
Прикрепленный файл  tools.zip ( 6.63 килобайт ) Кол-во скачиваний: 98
 


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
Guest_user234_*
сообщение May 12 2008, 09:52
Сообщение #10





Guests






Цитата(amw @ May 12 2008, 12:24) *
Вопрос слишком расплывчатый.
По минимуму - достаточно переключить режим и занести нужное значение в SP.
А нужны ли Вам прерывания в каждом конкретном случае - решать Вам.
Если используются прерывания - да.


Спасибо за ссылочку и скрипты для binutils.

Стек:
не получается.
Пока мне не нужны прерывания, но возможно я не понимаю.
Если не нужны то мне не нужно определять флаги: I_BIT, F_BIT
и отводить стек в соответствующих режимах я правильно понял ?

Делаю простые арифметические операции в функции на "c"
// main.c
int f(int a)
{
int rez=1;
rez = rez + a; <---- пропускает инструкцию не изменяет переменную
return rez;
}
//
int main_start(void)
{
int a=2;
int b=8;
int c=0;
c = f(a); // после выхода из функции с=1
b = a + c;
return 0;
}

Смотрю через отладчик и у меня не происходит изменение переменной rez в функции f().
Не подскажите в чем может быть проблема, неправильно инициализирован стек ?
Если так то что может быть неправильно ?
Go to the top of the page
 
+Quote Post
amw
сообщение May 12 2008, 09:57
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(user234 @ May 12 2008, 12:52) *
Спасибо за ссылочку и скрипты для binutils.

Стек:
не получается.
Пока мне не нужны прерывания, но возможно я не понимаю.
Если не нужны то мне не нужно определять флаги: I_BIT, F_BIT
и отводить стек в соответствующих режимах я правильно понял ?

Делаю простые арифметические операции в функции на "c"
// main.c
int f(int a)
{
int rez=1;
rez = rez + a; <---- пропускает инструкцию не изменяет переменную
return rez;
}
//
int main_start(void)
{
int a=2;
int b=8;
int c=0;
c = f(a); // после выхода из функции с=1
b = a + c;
return 0;
}

Смотрю через отладчик и у меня не происходит изменение переменной rez в функции f().
Не подскажите в чем может быть проблема, неправильно инициализирован стек ?
Если так то что может быть неправильно ?

Возможно.
Возможно переменная rez в функции "заоптимизарована" до регистра. Но в таком случае возвращаемое значение должно быть правильным.
Смотрите в отладчике, что происходит со стеком.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
Guest_user234_*
сообщение May 12 2008, 11:08
Сообщение #12





Guests






Цитата(amw @ May 12 2008, 12:57) *
Возможно.
Возможно переменная rez в функции "заоптимизарована" до регистра. Но в таком случае возвращаемое значение должно быть правильным.
Смотрите в отладчике, что происходит со стеком.


1.
оптимизации кода нет, есть только добавление отладочной информации
CFLAGS = -g

Вот disassembler функции f:

0x80014104 <f>: mov r12, sp
0x80014108 <f+4>: stmdb sp!, {r11, r12, lr, pc}
0x8001410c <f+8>: sub r11, r12, #4 ; 0x4
0x80014110 <f+12>: sub sp, sp, #12 ; 0xc
0x80014114 <f+16>: str r0, [r11, -#16]
0x80014118 <f+20>: mov r3, #1 ; 0x1
0x8001411c <f+24>: str r3, [r11, -#20]
0x80014120 <f+28>: ldr r3, [r11, -#16]
0x80014124 <f+32>: add r3, r3, #1 ; 0x1
0x80014128 <f+36>: str r3, [r11, -#24]
0x8001412c <f+40>: strb lr, [r5, #1509]!
0x80014130 <f+44>: ldr r3, [r11, -#24]
0x80014134 <f+48>: add r3, r2, r3 <------ rez = rez + a r2- не определен ?
0x80014138 <f+52>: str r3, [r11, -#20]
0x8001413c <f+56>: ldr r3, [r11, -#20]
0x80014140 <f+60>: mov r0, r3
0x80014144 <f+64>: ldmdb r11, {r11, sp, pc}
End of assembler dump.

Я пока не трассировал с помощью Jtag только gdb, а gdb прыгает по строчкам c-кода
Это что, глюк моего компилятора ?

2. Не подскажите когда нужно определять флаги: I_BIT, F_BIT ?
3. (Плохо понимаю происходящее)
Не подскажите, при выходе из функции пременная возврвщаются в регистре r0 ?
Go to the top of the page
 
+Quote Post
amw
сообщение May 12 2008, 11:29
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(user234 @ May 12 2008, 14:08) *
1.
оптимизации кода нет, есть только добавление отладочной информации
CFLAGS = -g

Вот disassembler функции f:
Код
0x80014104 <f>: mov     r12, sp
0x80014108 <f+4>:       stmdb   sp!, {r11, r12, lr, pc}
0x8001410c <f+8>:       sub     r11, r12, #4  ; 0x4
0x80014110 <f+12>:      sub     sp, sp, #12; 0xc
0x80014114 <f+16>:      str     r0, [r11, -#16]
0x80014118 <f+20>:      mov     r3, #1; 0x1
0x8001411c <f+24>:      str     r3, [r11, -#20]
0x80014120 <f+28>:      ldr     r3, [r11, -#16]
0x80014124 <f+32>:      add     r3, r3, #1    ; 0x1
0x80014128 <f+36>:      str     r3, [r11, -#24]
0x8001412c <f+40>:      strb    lr, [r5, #1509]!
0x80014130 <f+44>:      ldr     r3, [r11, -#24]
0x80014134 <f+48>:      add     r3, r2, r3                  <------  rez = rez + a      r2- не определен ?
0x80014138 <f+52>:      str     r3, [r11, -#20]
0x8001413c <f+56>:      ldr     r3, [r11, -#20]
0x80014140 <f+60>:      mov     r0, r3
0x80014144 <f+64>:      ldmdb   r11, {r11, sp, pc}
End of assembler dump.

Я пока не трассировал с помощью Jtag только gdb, а gdb прыгает по строчкам c-кода
Это что, глюк моего компилятора ?

А перед вызовом функции чио в r2?
Цитата
2. Не подскажите когда нужно определять флаги: I_BIT, F_BIT ?

Дык когда нужно - тогда и определять.
Что значит "определять"?
Цитата
3. (Плохо понимаю происходящее)
Не подскажите, при выходе из функции пременная возврвщаются в регистре r0 ?

Вроде того smile.gif.
А вообще есть такой мануал ARM Procedure Calling Standart. Сокращенно APCS.
Берут его на arm.com.
Вот только что глянул
http://infocenter.arm.com/help/topic/com.a...0042B_aapcs.pdf

Сообщение отредактировал amw - May 12 2008, 11:32


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
Guest_user234_*
сообщение May 12 2008, 12:48
Сообщение #14





Guests






Цитата(amw @ May 12 2008, 14:29) *
А перед вызовом функции чио в r2?

Дык когда нужно - тогда и определять.
Что значит "определять"?


Извините.
Когда нужно добавлять флаги : I_BIT, F_BIT в маску ?
Скорее, нужно ли маскировать прерывания если у меня нет обработчиков прерываний,
не инициализированы вектора прерываний ? И не предполагается работать в других режимах ARM.


Перед Вызовом:
disassemble main_start
Dump of assembler code for function main_start:
0x80014148 <main_start>: mov r12, sp
0x8001414c <main_start+4>: stmdb sp!, {r11, r12, lr, pc}
0x80014150 <main_start+8>: sub r11, r12, #4 ; 0x4
0x80014154 <main_start+12>: sub sp, sp, #12 ; 0xc
0x80014158 <main_start+16>: mov r3, #2 ; 0x2
0x8001415c <main_start+20>: str r3, [r11, -#16]
0x80014160 <main_start+24>: mov r3, #8 ; 0x8
0x80014164 <main_start+28>: str r3, [r11, -#20]
0x80014168 <main_start+32>: mov r3, #0 ; 0x0
0x8001416c <main_start+36>: str r3, [r11, -#24]
0x80014170 <main_start+40>: ldr r0, [r11, -#16]
0x80014174 <main_start+44>: bl 0x80014104 <f> <---- call f()
0x80014178 <main_start+48>: mov r3, r0
0x8001417c <main_start+52>: str r3, [r11, -#24]
....

r2 так же не определен.
перед вызовом c-функции в r2 записан 0
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- EXeGLuMATOR   Опять про загрузчик...   Apr 9 2008, 07:05
- - aaarrr   Не знаю, как оформлены вектора в основной программ...   Apr 9 2008, 07:24
|- - EXeGLuMATOR   Цитата(aaarrr @ Apr 9 2008, 11:24) Не зна...   Apr 9 2008, 07:28
|- - aaarrr   Цитата(EXeGLuMATOR @ Apr 9 2008, 11:28) С...   Apr 9 2008, 07:41
|- - EXeGLuMATOR   Цитата(aaarrr @ Apr 9 2008, 11:41) После ...   Apr 9 2008, 07:51
|- - aaarrr   Цитата(EXeGLuMATOR @ Apr 9 2008, 11:51) С...   Apr 9 2008, 08:00
- - EXeGLuMATOR   То что лежит в 64 байтах от адреса 0х6000 переноси...   Apr 9 2008, 08:26
|- - aaarrr   Цитата(EXeGLuMATOR @ Apr 9 2008, 12:26) п...   Apr 9 2008, 08:32
- - EXeGLuMATOR   Может что не так скомпилировано? Не по тем адресам...   Apr 9 2008, 09:21
|- - aaarrr   Цитата(EXeGLuMATOR @ Apr 9 2008, 13:21) М...   Apr 9 2008, 09:28
- - EXeGLuMATOR   Тогда не понятно в чем проблема. Ладно-бы симуля...   Apr 9 2008, 10:01
- - EXeGLuMATOR   Глас вопиющего в пустыне. Все делают подобные про...   Apr 11 2008, 07:51
|- - Сергей Борщ   Цитата(EXeGLuMATOR @ Apr 11 2008, 10:51) ...   Apr 11 2008, 09:56
|- - amw   Цитата(EXeGLuMATOR @ Apr 11 2008, 10:51) ...   Apr 11 2008, 10:50
|- - amw   Цитата(eml @ Apr 17 2008, 12:44) У вас со...   Apr 17 2008, 16:54
|- - user234   Цитата(Vitaliy_ARM @ May 2 2008, 15:33) Т...   May 12 2008, 08:58
- - aaarrr   Цитата(user234 @ May 12 2008, 16:48) Когд...   May 12 2008, 13:00
|- - user234   Спасибо.   May 12 2008, 13:39
|- - amw   Цитата(user234 @ May 12 2008, 16:39) Спас...   May 12 2008, 16:56
- - Altemir   Здравствуйте, уважаемые. Понимаю, что этот вопрос ...   May 24 2008, 11:50
|- - Сергей Борщ   Цитата(Altemir @ May 24 2008, 14:50) Но, ...   May 24 2008, 13:45
||- - Altemir   Всё это понятно. Вы с Argon-ом на: Сахаре обсужда...   May 24 2008, 14:01
|- - zltigo   Цитата(Altemir @ May 24 2008, 13:50) Есть...   May 24 2008, 14:10
|- - Altemir   Цитата(zltigo @ May 24 2008, 18:10) Ну за...   May 24 2008, 15:21
|- - zltigo   Цитата(Altemir @ May 24 2008, 17:21) 3. П...   May 24 2008, 16:21
|- - Altemir   ЦитатаНет. Читаем комментарий: IRQ "Jump dir...   May 24 2008, 17:01
|- - zltigo   Цитата(Altemir @ May 24 2008, 19:01) Везд...   May 24 2008, 17:51
|- - Altemir   Цитата(zltigo @ May 24 2008, 21:51) Что т...   May 24 2008, 18:06
|- - Сергей Борщ   Цитата(Altemir @ May 24 2008, 21:06) 3. О...   May 24 2008, 19:38
|- - Altemir   Цитата(Сергей Борщ @ May 24 2008, 23:38) ...   May 24 2008, 19:53
|- - Altemir   Кстати, порывшись в опциях XLINK, обнаружил возмож...   May 24 2008, 21:15
- - Altemir   Всё сделал. Всё работает. Никакой правки и копания...   May 26 2008, 19:06
|- - zltigo   Цитата(Altemir @ May 26 2008, 21:06) Всё ...   May 26 2008, 19:31
|- - Altemir   Цитата(zltigo @ May 26 2008, 23:31) Сдела...   May 26 2008, 19:36
- - vesago   Хочу разобраться с ремапом основного приложения в ...   Mar 23 2009, 12:03


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 23:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01551 секунд с 7
ELECTRONIX ©2004-2016