Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 21:54

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: FVM для AVR32
СообщениеДобавлено: Вс май 24, 2009 15:52 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Ср дек 06, 2006 09:23
Сообщения: 660
Благодарил (а): 7 раз.
Поблагодарили: 25 раз.
УДК 519.687, 519.682.8

А.В. КАЛАЧЕВ

ВИРТУАЛЬНАЯ ФОРТ МАШИНА ДЛЯ AVR32

В данной работе представлена модель виртуальной форт машины для контроллеров на базе процессорного ядра avr32. Осуществлена привязка регистров и областей памяти форт машины к регистрам и модели памяти ядра avr32. Произведены оценки затрат на эмуляцию стековой машины.
This work presents model of Forth virtual machine for microcontrollers based on AVR32 processors core. It's linking of registers and memory areas Forth machines to registers and memory model of the AVR32 core. An assessment of the cost of emulation stack machine.

ВВЕДЕНИЕ
Целью данной работы является создание модели виртуальной форт машины для процессорного ядра avr32, построение концепции компилятора языка Форт для данной архитектуры.
Основные задачи - свести к минимуму накладные расходы на эмуляцию стековой машины, обеспечить поддержку операций цифровой обработки сигналов, обеспечить совместимость со стандартами языка форт - FORTH83 и ANS FORTH 94.

Краткая характеристика архитектуры AVR32
Avr32 позиционируется как высокопроизводительное ядро с низким энергопотреблением, предназначенное для функций цифровой обработки данных, контроля периферии [1,2]. Также компанией заявляется высокая плотность кода (компактность), что в принципе подтверждается тестами и исследованиями.
AVR32 имеет 16 регистров, объединенных в регистровый файл (регистры R0-R15). Стоит отметить, что указатель стека (SP), программный счётчик (PC) и регистр связи (LR) отражаются в регистровом файле - регистры R13, R15 и R14 соответственно. Возможно выполнение инструкций, таких как, сложение и вычитание с использованием SP, PC и LR регистров, что приводит к более эффективной адресации памяти. Данные регистры могут использоваться в качестве операнда источника или приёмника (регистра назначения) во всех инструкциях, которые используют регистровые операнды, включая арифметические или логические инструкции и инструкции загрузки/сохранения.
Инструкции, использующие PC как приёмник, следует рассматривать как инструкции перехода. Это подразумевает, что очищается конвейер и выполнение возобновляется с адреса, определяемым новым значением PC.
Регистр R12 предназначен для возврата значения из функций вызова, а так же выступает как скрытое возвращаемое значение команд перемещения и тестирования. Многоадресные команды загрузки и извлечения из стека имеют те же самые функциональные возможности, которые позволяют им использоваться как инструкции возвращения. Указатель стека также неявно используется некоторыми инструкциями.
Во всех режимах регистр общего назначения R14 используется как регистр связей (LR). Он сохраняет адрес возврата из программы. Когда подпрограмма вызова выполняется разновидностью команд call LR запоминает адрес возврата из программы. Возврат из подпрограммы происходит при копировании LR в PC одной из разновидностью команды mov таких как ldm, popm или ret. Во всех остальных случаях регистр связей R14 можно использовать как регистр общего назначения. Для работы с числами двойной точности используются регистровые пары R0-R1, R2-R3 и т.д. Ортогональный набор команд ядра AVR32 позволяет все регистры использовать как указатели.
Процессор имеет набор инструкций для цифровой обработки сигналов (DSP): умножение с накоплением - MAC, команды SIMD и инструкции поддержки языка JAVA.
Архитектура AVR32 определяет различные микроархитектуры, имеющие отличающиеся характеристики по величине расхода и сохранения энергии, составу регистров и порядке обработки прерываний и исключительных ситуаций.

Модель виртуальной форт машины (Forth Virtual machine - FVM)
AVR32 позиционируется как ядро MCU/DSP, поэтому, особое внимание уделено реализации команд групп SIMD (одиночный поток команд, множественный поток данных) и MAC (умножение с накоплением). Слова с действиями DSP, SIMD выносятся в отдельные словари. Для сохранения стиля имена SIMD и DSP слов совпадают с именами слов (перегрузка слов, если воспользоваться терминологией языка С) обычных операций: +, -, +-, D+, D-, D+-,MIN, MAX, RSHIFT, LSHIFT и др, для операций с байтами и словами (16бит) соответственно. Данные также берутся со стека, семантика данных и контроль за их использованием лежит на программисте. При этом не вводится новых типов данных, при работе с различными данными достаточно переключения словаря.
Традиционная модель виртуальной форт машины состоит из двух стеков – данных и возвратов, общей области памяти в которой организован словарь форт-системы и свободная область памяти. Соответственно, для реализации на целевой платформе выделяют регистры указатели стека данных и возвратов, программный счетчик, иногда указатель свободной памяти, в случае многозадачной системы добавляется указатель области задачи.
Для большинства современных систем характерно выделение (кэширование) вершины стека данных, иногда стека возвратов, в отдельном регистре. Типичный состав регистров форт-машины в этом случае следующий (например в SwiftX):
U - пользовательский указатель - указатель области памяти задачи;
T - вершина стека данных;
SP - указатель стека данных;
R - указатель стека возвратов;
LR - регистр связи (вершина стека возвратов);
PC - программный счетчик.
При переключении задач сохраняются указатели стеков и кэширующие регистры.
Для более эффективной поддержки приложений цифровой обработки сигналов рассматривается следующая модификация FVM. К классической модели добавляется четыре регистра - регистры указатели и временного хранения данных – A, B, и индексные регистры X, Y [4]. Для данных регистров возможны операции автоинкремента-автодекремента. Как правило, в аппаратном варианте реализуются только регистры A и B [3], индексные регистры X, Y реализуются в моделях FVM для процессоров общего назначения.

Регистровая модель FVM
С учетом возможностей различных вариантов архитектур (AVR32A, AVR32B), «системные» регистры форт-машины располагаются в регистрах с R8 по R15. Основная задача при спецификации функций регистров - найти оптимальное распределение регистров, минимизировать количество промежуточных операций при моделировании работы стековой машины.
К рассмотрению предлагается модель FVM с кэшированием верхних элементов стеков возврата и данных (см. Таблицу 1).
Данная модель позволяет сохранять основные регистры форт системы при возникновении прерываний для любой микроархитектуры процессора. Позволяет за счет двух временных регистров кэшировать данные стека для осуществления арифметико-логических операций, как одинарной, так и двойной точности, временно сохраняя данные в регистровых парах.
При создании ядра виртуальной форт-машины были рассмотрены наборы слов, реализуемых в различных системах на низком уровне. Для анализа были взяты системы: dsforth [6], ориентированная на работу в мобильных устройствах под управлением Windows CE; SwiftX [7] ориентированная на самостоятельную работу вне операционных систем и содержащая в себе небольшую систему – SwiftOS и SP-Forth – 32 битная система под Windows 9*/2000/XP [8].

Таблица 1 - Регистровая модель FVM для AVR32

регистр обозначение функция в FVM
PC(R15) PC программный счетчик
LR(R14) R0 вершина стека возвратов
SP(R13) RP указатель стека возвратов
R12 B Индексный регистр/регистр временного хранения данных
R11 S / A Индексный регистр/регистр временного хранения данных/второй элемент стека данных
R10 T вершина стека данных
R9 SP указатель стека данных
R8 U указатель пользовательской области
R7-R0 отведены под локальные переменые
ACBA базовый регистр вызова подпрограмм/функций.(используется acall) может быть использован, как указатель текущего словаря системы
JAVA_LVx регистры локальных переменных (? в том случае, если есть возможность использовать их в RISC режиме)

Основные часто используемые слова реализованы на низком уровне в виде макроассемблерных вставок, часть слов составляет словарь системы в виде набора подпрограмм. Такое решение позволяет сохранить баланс между размером программного кода и его быстродействием. Также в виде макроассемблерных вставок реализованы наборы слов реализующие SIMD и DSP операции. В ядро системы включены слова операций со стеками, арифметических (включая умножение и деление), строковые операции, доступ к памяти, операции сравнения.
Накладные расходы на организацию работы виртуальной машины для случая смешанного подпрограммного кода с прямыми кодовыми вставками представлены в таблице 2.

Таблица 2 – Затраты на реализацию виртуальной форт машины

тип операций FVM количество RISC команд (среднее)
стековые операции одинарной точности 1-4 (2)
операции с памятью и переменными 2-3 (2)
арифметико-логические операции 2-5 (3)
переходы и циклы 2-8 (3)

Таким образом, переход к виртуальной форт-машине снижает производительность примерно в два раза. С другой стороны, переход к языку высокого уровня упрощает построение алгоритмов, структур данных. Выигрыш от кэширования верхнего элемента стека составляет примерно в два раза для стековых и арифметических операций [9].


ЛИТЕРАТУРА

1.32-разрядные микроконтроллеры / ЦПОС семейства AVR32 - http://www.gaw.ru/html.cgi/txt/ic/Atmel ... /start.htm.
2.Сидоренко Б. AVR32- микроконтроллеры для применений 21-го столетия. / Chip News Украина. №8, 2008.
3.IntellaSys - SEAforth 40C18 - http://www.intellasys.net/index.php?opt ... &Itemid=75
4. Stephen Pelc. Extreme Forth - http://www.ddj.com/hpc-high-performance ... JVN?pgno=2)
5. С.Н. Баранов, Н.Р. Ноздрунов. Язык Форт и его реализации. Ленинград. Машиностроение, Ленинградское отделение,1988.
6. DELOSOFT./ www.delosoft.com.
7. SwiftX embedded systems development - embedded Forth. / http://www.forth.com/embedded/index.html.
8. SP-FORTH - ANS FORTH 94 for Win95/98/ME/NT/2000/XP Open source project / http://spf.sourceforge.net.
9. kernel.S - AVR32 Forth kernel. / http://nic-nac-project.de/~swestres/code/kernel.S


Последний раз редактировалось diver Пн май 25, 2009 21:33, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 26, 2009 07:47 
Не в сети
Аватара пользователя

Зарегистрирован: Вс мар 04, 2007 08:02
Сообщения: 229
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
diver писал(а):
7. SwiftX embedded systems development - embedded Forth. / http://www.forth.com/embedded/index.html.


File Not Found.
Please verify the URL and try again.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 26, 2009 09:40 
Не в сети
Аватара пользователя

Зарегистрирован: Вт сен 11, 2007 11:07
Сообщения: 187
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
chu, только и всего, что точку в конце убрать, экая мелочь....


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 26, 2009 12:43 
Не в сети
Аватара пользователя

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
Ничего личного или подрывного! Что сорока на хвосте приносила! :)

По информации последних месяцев наблюдается массовый отход проектировщиков и производителей, попробовавших-было реализовать новые изделия на avr32. Народ опять на arm-ики возвращается.
Основная причина - "перетяжелённость" авр32 для выбранного сегмента рынка изделий. Отличия от привычных архитектур. Там ещё что-то с кодогенерирующими частями компиляторов связано (оптимизация), я не разбирался.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 26, 2009 13:53 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Ср дек 06, 2006 09:23
Сообщения: 660
Благодарил (а): 7 раз.
Поблагодарили: 25 раз.
Тенденции рынка честно не смотрел и не интересовался. Просто привожу в некое подобие порядка начатые ранее работы, может что и выйдет :-).

Отличия в архитектуре на мой взгляд не должны уж так сильно сказываться. всё равно ж основная масса народа пишет на языках высокого уровня. Линукс под этот проц портировали к тому же. Проблема скорее в существующих уже наработках на армы, да стоимости разработки новых систем на этом ядре. периферия на авр32-м реально мощная и навороченная.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 26, 2009 17:40 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
хотелось бы более подробной статьи по организации ФВМ и компилятора для AVR-a, в частности по кешированию данных в регистрах очень интересно, а так же хотелось бы посмотреть на примеры организации работы "с перегрузкой операций" то есть о том, как сделана работа с данными различной разрядности. Статья-то к сожалению лишь обзорная 8(

да, желательно указать дату и место публикации статьи...

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб май 30, 2009 21:09 
Не в сети
Аватара пользователя

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
diver писал(а):
Линукс под этот проц портировали к тому же.

Если Вы про avr32linux.org - то там сырое всё и не обновлялось давненько многое. Человек, который-было рыпнулся с год назад всё это дело осваивать, матюгался страшно. Там "качели" получается по сложности: с одной стороны нужно что-то высокоуровневое, что бы нормально сложно-расчётные вещи писать + управления банками памяти, с другой - часто задачи не выходят за пределы привычных микроконтроллерно-встроенных... Получается ощущение "раздвоенности", "межнишевости" avr32... - всё из рассуждений знакомого. Именно он после года обещаний и энтузиазма опять решил на ARM7 вернуться с постепенным переходом под ARM9 - вот там - да Линукс ЖЕЛЕЗНО уже работает.
Единственно, под что знакомый видит применение адекватное для avr32 - это обработка звук и видео в плеерах. Да и то - пока ещё будут переписаны кодогенерирующие части компиляторов с учётом системы команд для выжимания максимума по обработке?...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс май 31, 2009 10:44 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Ср дек 06, 2006 09:23
Сообщения: 660
Благодарил (а): 7 раз.
Поблагодарили: 25 раз.
в продолжении статьи, по мере упорядочивания материала.... :-)
работа со стеком данных

основой для программной реализации является форт-ассемблер для avr32-го. все управляющие конструкции и способы построения целевого кода.

все слова данного раздела при компиляции кода работают как макроассемблерные вставки.

CODE DUP ( x -- x x )
CODE pusht
st.w --SP, T
END-CODE
END-CODE

CODE pushs
st.w --SP, S
END-CODE

CODE DROP ( x2 x1 -- x2 )
CODE popt
ld.w T, SP++
END-CODE
END-CODE

CODE NIP ( x1 x2 x3 -- x1 x3 )
CODE pops
ld.w S, SP++
END-CODE
END-CODE

CODE PICK ( ...x0 n -- x0 xn )
add S, SP, T << 2
ld.w T, S[0]
END-CODE

CODE TUCK
CODE SWAP ( x2 x1 -- x1 x2 )
xchg S, SP, T
mov T, S
END-CODE

CODE OVER ( x2 x1 -- x2 x1 x2 )
pusht
ld.w T, SP[4]
END-CODE
END-CODE

CODE ROT
pops
xchg B, SP, S
pusht
mov T, B
END-CODE


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс май 31, 2009 10:53 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Ср дек 06, 2006 09:23
Сообщения: 660
Благодарил (а): 7 раз.
Поблагодарили: 25 раз.
аналогично организована работа со стеком возвратов и указателями стеков

стек возвратов и указатели стеков

\ работа со стеком возвратов

CODE R@
pusht
mov T, R0
END-CODE

CODE R>
st.w --RP, R0
mov R0, T
popt
END-CODE

CODE >R
pusht
mov T, R0
CODE popr
ld.w R0, RP++
END-CODE
END-CODE

CODE RDROP
popr
END-CODE


CODE 2>R
st.w --RP, R0
pops
st.w --RP, S
mov R0, T
popt
END-CODE

CODE 2R>
pusht
ld.w S, RP++
pushs
mov T, R0
ld.w R0, RP++
END-CODE

CODE 2RDROP
ld.w R0, RP++
ld.w R0, RP++
END-CODE

CODE R= \ (compare)
ld.w S, RP[0]
sub R0, 1
cp.w R0, S
END-CODE

\ Указатели стеков

CODE SP@
pusht
mov T, SP
END-CODE

CODE SP!
mov SP, T
popt
END-CODE

CODE RP@
pusht
mov T, RP
sub T, 4
END-CODE

CODE RP!
st.w --RP, R0
mov RP, T
popr
popt
END-CODE


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс май 31, 2009 11:07 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Ср дек 06, 2006 09:23
Сообщения: 660
Благодарил (а): 7 раз.
Поблагодарили: 25 раз.
арифметико-логические операции одинарной точности

CODE +
pops
add T, S
END-CODE

CODE -
pops
sub T, S
END-CODE

CODE RSHIFT
pops
lsr T, T, S
END-CODE

CODE LSHIFT
pops
lsl T, T, S
END-CODE

CODE 2*
lsl T, 1
END-CODE

CODE 2/ \ с сохранением знака
asr T, 1
END-CODE

CODE *
pops
mul T, S
END-CODE

CODE UM*
ld.w S, SP[0]
mulu.d T, T, S
st.w SP[0], S
END-CODE

CODE MOD
CODE /
pops
divs T, S, T
END-CODE
mov T, S
END-CODE

CODE /MOD
ld.w S, SP[0]
divs T, S, T
st.w SP[0], S
END-CODE

CODE XOR
pops
eor T, S
END-CODE

CODE OR
pops
or T, S
END-CODE

CODE AND
pops
and T, S
END-CODE

CODE compare \ - служебное слово, используется для выставления флагов
pops
cp.w T, S
END-CODE

CODE =
compare
sr eq T
END-CODE

CODE <>
compare
sr ne T
END-CODE

CODE <
compare
sr lt T
END-CODE

CODE >
compare
sr gt T
END-CODE

CODE MIN
pops
min T, T, S
END-CODE

CODE MAX
pops
min T, T, S
END-CODE


CODE */MOD
CODE M*
ld.w S, SP[0]
muls.d T, T, S
st.w SP[0], S
END-CODE
CODE UM/MOD
( udh udl d -- o ch )
( sp[4] sp[0] d -- o ch )
st.w --RP, R0
mov R0, 33
mov S, T \ в s - делитель
eor T, T \ очищаем частное
n: l2
ld.w B, SP[4] \ берём старший байт делимого
sub B, B, S
\ сравниваем делитель и делимое, рельтат в делитель
st.w sp[4], B
sr cc B \ если переноса не было в регистре 1
lsl T, 1
or T, B \ если был перенос вдвигаем в частное 0, если нет 1
br cc n@ l4
ld.w B, SP[4]
add B, B, S
st.w sp[4], B
n: l4
eor B, B \ сбрасываем перенос
bld B, 0
ld.w B, SP[0] \ сдвигаем делимое
ror B
st.w SP[0], B
ld.w B, SP[4]
ror B
sub R0, 1
br eq n@ l2
pops
ld.w R0, SP++
END-CODE
END-CODE

ps. блок с */MOD сильно не тестировался. возможны ошибки


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс май 31, 2009 12:06 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Ср дек 06, 2006 09:23
Сообщения: 660
Благодарил (а): 7 раз.
Поблагодарили: 25 раз.
операции с памятью

CODE @
mov S, T
ld.w T, S[0]
END-CODE

CODE W@
mov S, T
ld.uh T, S[0]
END-CODE

CODE C@
mov S, T
ld.ub T, S[0]
END-CODE

CODE !
pops
st.w T[0], S
popt
END-CODE

CODE W!
pops
st.h T[0], S
popt
END-CODE

CODE C!
pops
st.b T[0], S
popt
END-CODE


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс май 31, 2009 13:36 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Все-таки код в теге [сode][/сode] читается легче, а код с подсветкой еще лучше - легко делается в редакторе(например в скайте) путем экспорта подсвеченного кода в хтмл.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс май 31, 2009 14:35 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
код с подсветкой еще лучше - легко делается в редакторе(например в скайте) путем экспорта подсвеченного кода в хтмл.
не каждый редактор позволяет


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 03, 2009 20:11 
Не в сети
Аватара пользователя

Зарегистрирован: Вт сен 11, 2007 11:07
Сообщения: 187
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
вопрос писал(а):
не каждый редактор позволяет

http://tohtml.com/forth/ - не вижу проблем в "наше прогрессивное время" :-)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 03, 2009 20:29 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
пробуем
<pre style='color:#000000;background:#ffffff;'><span style='color:#800000; font-weight:bold; '>: </span><span style='color:#000000; background:#a8a800; '>fff</span> <span style='color:#800000; font-weight:bold; '>DUP</span> VAR1 <span style='color:#800000; font-weight:bold; '>@</span> <span style='color:#800000; font-weight:bold; '>+</span> VAR1 <span style='color:#800000; font-weight:bold; '>!</span> <span style='color:#800000; font-weight:bold; '>SWAP</span> VAR1 <span style='color:#800000; font-weight:bold; '>@</span> <span style='color:#800000; font-weight:bold; '>-</span> <span style='color:#800000; font-weight:bold; '>SWAP</span> ;
</pre>
Хм, что не так?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB