Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AVR CPU Core
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Страницы: 1, 2
BSACPLD
Здравствуйте!

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

В проекте создан CPU с SPI (master), GPIO, интерфейсом к DataFlash и линиями внешних прерываний.
Тестовая программа реализует обмен по Ethernet через ENC28J60 (ARP, Ping и частично UDP).
Из особенностей CPU:
Программируемые адреса прерываний.
Уменьшенное время выполнения некоторых команд.

Список поддерживаемых команд находится в файле cpu.txt.

Файлы:
test_cpu.qar - проект с CPU.
test_avr - тестовая программа
I8I16.exe - конвертер файлов из Intel HEX в HEX для инициализации памяти в Quartus.

С уважением, BSACPLD.
Leka
А что в test_cpu.qar ? У меня ISE, Квартуса нет.
BSACPLD
Цитата(Leka @ Dec 7 2007, 23:44) *
А что в test_cpu.qar ? У меня ISE, Квартуса нет.

rar подойдет?
Leka
rar подошел beer.gif, но вижу, что без Квартуса все равно не обойтись. crying.gif
BSACPLD
Цитата(Leka @ Dec 8 2007, 00:16) *
rar подошел beer.gif, но вижу, что без Квартуса все равно не обойтись. crying.gif

Если есть хороший инет, можно скачать по ссылке:
ftp://ftp.altera.com/outgoing/release/61_dvd_windows.iso
vetal
добавлю в свою коллекцию....авось пригодится smile.gif
Leka
Цитата(BSACPLD @ Dec 8 2007, 00:22) *
Если есть хороший инет, можно скачать по ссылке:
ftp://ftp.altera.com/outgoing/release/61_dvd_windows.iso

Web edition позже скачаю, объем меньше.

Цитата(BSACPLD @ Dec 7 2007, 23:27) *
...
I8I16.exe - конвертер файлов из Intel HEX в HEX для инициализации памяти в Quartus.
...

Без Квартуса залить не получится? У меня тоже есть проект с софт-процессором(самопальным), скомпилированная прошивка заливается/обновляется через последовательный порт после конфигурации.
BSACPLD
Цитата(Leka @ Dec 8 2007, 01:08) *
Web edition позже скачаю, объем меньше.
Без Квартуса залить не получится? У меня тоже есть проект с софт-процессором(самопальным), скомпилированная прошивка заливается/обновляется через последовательный порт после конфигурации.

Без Квартуса залить не получиться, потому, что память программ организована как ROM.
Если сделать логику заливки, то можно будет заливать и после конфигурации.
Данный вариант не окончательный, он является лишь частью двух больших проектов.
Я заливаю следующим образом:
1) I8I16.exe
2) Update Memory Initialization File
3) Assembler
4) JTAG
mse
Цитата(BSACPLD @ Dec 7 2007, 23:27) *
...
Программируемые адреса прерываний.
...

Тут, конечно, оригинальный АВР курит тихонько в стороне...
Leka
(Скачать Квартус не получилось.) Кстати, почему Циклон, а не Спартан? У Альтеры нет блочной памяти с асинхронным чтением (у Xilinx есть альтернатива - распределенная память), поэтому у софт-процессоров(альтеровских) с коротким конвейером хуже с компактностью и быстродействием.
dvladim
Пара вопросов возникла:
Есть ли возможность создать программу на "C", и скомпилить под этот процессор? У вас пример на ассемблере. Если реализовано лишь подмножество AVR, то потребуется доводка компилятора.
Или разработка программ планируется только на ассемблере?

И второй.
Процессор написан на AHDL. Это ограничивает его использование Альтерой. Почему небыл выбран Verilog или VHDL?
BSACPLD
Цитата(Leka @ Dec 8 2007, 13:13) *
(Скачать Квартус не получилось.) Кстати, почему Циклон, а не Спартан? У Альтеры нет блочной памяти с асинхронным чтением (у Xilinx есть альтернатива - распределенная память), поэтому у софт-процессоров(альтеровских) с коротким конвейером хуже с компактностью и быстродействием.

Cyclone потому, что этот процессор делался для проекта на Cyclone.
К тому же у Альтеры несколько выше быстродействие, в проекте для которого создавался процессор весь упор был на быстродействие логики (генератор синхроимпульсов), а не процессора.

Цитата(den_realan @ Dec 8 2007, 15:20) *
Пара вопросов возникла:
Есть ли возможность создать программу на "C", и скомпилить под этот процессор? У вас пример на ассемблере. Если реализовано лишь подмножество AVR, то потребуется доводка компилятора.
Или разработка программ планируется только на ассемблере?

И второй.
Процессор написан на AHDL. Это ограничивает его использование Альтерой. Почему небыл выбран Verilog или VHDL?

Что Вы понимаете под подмножеством AVR? Если Вы имеете ввиду, что он совместим по системе команд, то да.
Данный процессор, скорее даже не AVR, а совместимый по командам с AVR, у него своя собственная периферия и несколько отличная организация памяти.
РОН и РВВ не отображаются на область ОЗУ. Сейчас процессор поддерживает не все команды (см. cpu.txt), если можно будет настроить компилятор соответствующим образом, то можно использовать и "C".

AHDL потому, что Verilog я сейчас только изучаю, а AHDL пользуюсь уже давно.
Кстати, а Вы не можете мне посоветовать какую-нибудь толковую книжку по Verilog?
Leka
Цитата(BSACPLD @ Dec 8 2007, 16:09) *
...посоветовать какую-нибудь толковую книжку по Verilog?

На русском - очень мало литературы, для первого знакомства можно:
www.compitech.ru --> архив --> 2..5'2001 С.Емец, 6..7'2001 В.Стешенко.
http://www.platan.ru/shem/pdf/verilog.pdf
http://www.platan.ru/shem/pdf/verilog2.pdf
http://www.platan.ru/shem/pdf/verilog3.pdf
BSACPLD
Цитата(Leka @ Dec 8 2007, 18:51) *
На русском - очень мало литературы, для первого знакомства можно:
www.compitech.ru --> архив --> 2..5'2001 С.Емец, 6..7'2001 В.Стешенко.
http://www.platan.ru/shem/pdf/verilog.pdf
http://www.platan.ru/shem/pdf/verilog2.pdf
http://www.platan.ru/shem/pdf/verilog3.pdf

Спасибо за ссылки! a14.gif
WEST128
Так на opencores.org давно уже выложено AVR ядро, как там написано, на 100 % совместимое по системе команд, и можно использовать любой компилятор, поддерживающий AVR.
Leka
2 ALL
Тема интересная, и думаю - нужная. 1111493779.gif
Хотел бы поучаствовать в открытом Verilog-проекте по АВР-совместимому софт-процессору - при условии, если кто-то возмется за разработку/изготовление/рассылку, за недорого, простых макеток со Spartan3A(AN)/Cyclone2(3) (те с одинаковым форм-фактором, но разными FPGA) - на которых и будет доводка.

"Чистый" АВР мне неинтересен(зачем клонировать изъяны), я бы подумал об
1) максимально ортогонализированной системе 18-битных команд и программе перекодирования скомпилированного 16-битного кода АВР в загружаемый 18-битный код софт-процессора (естественно, придется отказаться от поддержки команд LPM/ELPM/SPM),
2) однотактном исполнении всех команд (по возможности - опция вставки пустых тактов для совместимости по таймингам).
Это позволит оптимизировать софт-процессор по компактности/быстродействию
и сохранить возможность использовать ПО для АВР.

Под максимальной ортогонализацией понимаю, например, такие частные случаи для команды "MOV dst, src" - как раз укладывается в 18 бит и в 1 такт(по предварительным прикидкам для Спартанов), и вроде охватывает все случаи АВР
(кроме LPM/ELPM/SPM):

MOV Rd, Rs
MOV Rd, (Rs)
MOV Rd, (-Rs)
MOV Rd, (Rs+)
MOV Rd, (s) // (s) ::= {SR|(PC+)|(SP)|Pn|,...}

MOV (Rd), Rs
MOV (Rd), (Rs)
MOV (Rd), (-Rs)
MOV (Rd), (Rs+)
MOV (Rd), (s)

MOV (-Rd), Rs
MOV (-Rd), (Rs)
MOV (-Rd), (-Rs)
MOV (-Rd), (Rs+)
MOV (-Rd), (s)

MOV (Rd+), Rs
MOV (Rd+), (Rs)
MOV (Rd+), (-Rs)
MOV (Rd+), (Rs+)
MOV (Rd+), (s)

MOV (d), Rs // (d) ::= {SR|(PC+)|(SP)|Pn|,...}
MOV (d), (Rs)
MOV (d), (-Rs)
MOV (d), (Rs+)
MOV (d), (s)

MOV Rd, K
MOV Rd, (Rz) // Rz ::= {X|Y|Z}
MOV (Rz), Rs // Rz ::= {X|Y|Z}

Ну и остальные команды (арифметико-логические и переходов) - тоже ортогонализировать. smile.gif
dvladim
Цитата(Leka @ Dec 8 2007, 20:23) *
Хотел бы поучаствовать в открытом Verilog-проекте по АВР-совместимому софт-процессору

Вот в чем смысла не вижу, так именно в этом.
Если пользоваться каким-либо готовым ПО - надо делать копию или надмножество. Если делать "свое" - то в первую очередь задумываться о компиляторе.

PS. Где-то тут проскакивала тема о компактном RISC ядре. Оставался вопрос о переделке backend компилятора.
Leka
Цитата(den_realan @ Dec 8 2007, 21:49) *
Вот в чем смысла не вижу, так именно в этом.
Если пользоваться каким-либо готовым ПО - надо делать копию или надмножество. Если делать "свое" - то в первую очередь задумываться о компиляторе.


Имею в виду именно надмножество - разница в кодировании инструкций. Написать перекодировщик - вообще не проблема. Проблемные инструкции(типа LPM) замещать переходом на подпрограмму.

Цитата
PS. Где-то тут проскакивала тема о компактном RISC ядре. Оставался вопрос о переделке backend компилятора.

Какого компилятора - Си? Это проблема. Ассемблер? Нет проблем!
des00
Цитата(Leka @ Dec 8 2007, 12:23) *
2 ALL
Тема интересная, и думаю - нужная. 1111493779.gif
Хотел бы поучаствовать в открытом Verilog-проекте по АВР-совместимому софт-процессору - при условии, если кто-то возмется за разработку/изготовление/рассылку, за недорого, простых макеток со Spartan3A(AN)/Cyclone2(3) (те с одинаковым форм-фактором, но разными FPGA) - на которых и будет доводка.
Ну и остальные команды (арифметико-логические и переходов) - тоже ортогонализировать. smile.gif


Смысла нет никакого. Если уж и делать процессор то не аврку. А что то легко расширяемое и конвейеризируемое.
Иначе, если нужен универсальник проще XSOC16 взять, если жалко 500 баков за ниос, микроблейз отдавать или в асик ставить будете.
На очень худой конец берем пиклоблейз и расширяем его до нужной функциональности.
dvladim
Цитата(Leka @ Dec 8 2007, 22:46) *
Какого компилятора - Си? Это проблема. Ассемблер? Нет проблем!

Си.
sektoris
А каков смысл альтернативных процев? Быстрее? Меньше по объему? Проще писать? Ну за исключением цены естественно. А то я на ниосе зациклился...
alexander55
Цитата(sektoris @ Dec 11 2007, 10:37) *
А каков смысл альтернативных процев? Быстрее? Меньше по объему? Проще писать? Ну за исключением цены естественно. А то я на ниосе зациклился...

Смысла в альтернативных uC нет никаких:
-цена
-геморрой с компиляторами.
Смысл есть только в связке готовый uC-ПЛИС.
torik
Ну вот, взяли и раскритиковали человека по полной sad.gif

Ну и что, что не видите смысла. Зачем их тогда создают? На одном опенкорс куча всяких контроллеров.
А ведь это какой замечательный опыт работы, многие ли могут похвастаться такими проектами?
des00
Цитата(torik @ Dec 13 2007, 16:40) *
Ну вот, взяли и раскритиковали человека по полной sad.gif

Ну и что, что не видите смысла. Зачем их тогда создают? На одном опенкорс куча всяких контроллеров.
А ведь это какой замечательный опыт работы, многие ли могут похвастаться такими проектами?


вы не внимательно читали, смысла нет делать универсальный контроллер ибо таки туева хуча и первыми из них идут арм7, леон, ниос, микроблейз.

А вот сделать специализированный это пожалуйста. опыт создания есть, преимущества вроде тоже просматриваются, но подчеркну еще раз это специализированный, а не универсальный процессор.
Kuzmi4
2 des00 - не ругайте сильно, я товарисч новый в этом деле , но можно примеры специализированных контроллеров ?
tims
Специализированные контроллеры - заточенные под определенные задачи со спецефически оптимизированными инструкциями и ресурсами. От небольших микропрограмных автоматов до процессоров с N - количеством инструкций. Иногда автоматы делать проще.
alexf
Нет смысла говорить "нет смысла". smile.gif
Почти все подходит под определенные задачи.

У меня был проэкт на Спартане 3 с Nanoblaze. Потом перешел на Cyclone, и передал управляющие функции PICу, найденному на opencores. Почему PIC? Для него все ассемблеры/компайлеры/симуляторы заточены.

A AVR IMHO на порядок удобнее в работе с достаточно ортогональной системой комманд. Я их много повсюду понатыкал, в основном небольшие - от TINY15 do MEGA162.

Так что в след. раз надо будет проц в FPGA - попробую этот AVR. a14.gif
des00
Цитата(alexf @ Dec 15 2007, 17:08) *
Нет смысла говорить "нет смысла". smile.gif
Почти все подходит под определенные задачи.

У меня был проэкт на Спартане 3 с Nanoblaze. Потом перешел на Cyclone, и передал управляющие функции PICу, найденному на opencores. Почему PIC? Для него все ассемблеры/компайлеры/симуляторы заточены.

A AVR IMHO на порядок удобнее в работе с достаточно ортогональной системой комманд. Я их много повсюду понатыкал, в основном небольшие - от TINY15 do MEGA162.

Так что в след. раз надо будет проц в FPGA - попробую этот AVR. a14.gif


Опять же вы не внимательно(!!!) читаете мои посты.

Нет смысла РАЗРАБАТЫВАТЬ универсальный процессор. Про применение универсального процессора я не сказал ни слова.

Рассмотрим ваш пример. Может быть я ошибаюсь, но из вашего поста видно что вы не стали разрабатывать собственное ядро, а взяли его готовое с опенкоресов ? Вы же не стали сами с нуля делать полностью совместимое ядро.

А вот разработать процессор для конкретной задачи, как это сделал iosifk (www.iosifk.narod.ru) это был правильный вариант решения. Подробности смотрите у него на сайте, все с пояснениями и графиками.

ИМХО смысл разрабатывать универсальный процессор есть только в следующих случаях :

1. из-за любви к искусству, что мы и видим на опенкорес.
2. специфика применения (лицензионная частота например для асика, военные применения).
3. реклама, и это мы тоже видим на опенкорес.

Удачи.
alexf
Цитата(des00 @ Dec 16 2007, 19:39) *
Опять же вы не внимательно(!!!) читаете мои посты.


Я не спорил с Вами, а скорее с другим постом, но это не так важно.

Цитата(des00 @ Dec 16 2007, 19:39) *
Нет смысла РАЗРАБАТЫВАТЬ универсальный процессор. Про применение универсального процессора я не сказал ни слова.

Рассмотрим ваш пример. Может быть я ошибаюсь, но из вашего поста видно что вы не стали разрабатывать собственное ядро, а взяли его готовое с опенкоресов ? Вы же не стали сами с нуля делать полностью совместимое ядро.


Не стал посколько нашел готовый для решения своей задачи. Надо было не шашечки, а ехать.
А в другой раз, когда было скучно, сделал свой просто так...

Цитата(des00 @ Dec 16 2007, 19:39) *
А вот разработать процессор для конкретной задачи, как это сделал iosifk (www.iosifk.narod.ru) это был правильный вариант решения. Подробности смотрите у него на сайте, все с пояснениями и графиками.

ИМХО смысл разрабатывать универсальный процессор есть только в следующих случаях :

1. из-за любви к искусству, что мы и видим на опенкорес.
2. специфика применения (лицензионная частота например для асика, военные применения).
3. реклама, и это мы тоже видим на опенкорес.

Удачи.


Не спорю ни по одному пункту. Удачи и Вам!
alexander55
Цитата(torik @ Dec 14 2007, 00:40) *
Ну вот, взяли и раскритиковали человека по полной sad.gif

Ну и что, что не видите смысла. Зачем их тогда создают? На одном опенкорс куча всяких контроллеров.
А ведь это какой замечательный опыт работы, многие ли могут похвастаться такими проектами?

Смысл м.б. только для создателей ядер попробовать на железе нюансы. Это лучше и быстрее, чем моделировать.
Т.е. мы предполагаем, а чем собственно располагаем.
PS. ARM торгует корками на Verilog.
Leka
Опять все сваливается в "раз не умеем, значит не нужно". sad.gif
alexander55
Цитата(Leka @ Dec 17 2007, 14:41) *
Опять все сваливается в "раз не умеем, значит не нужно". sad.gif

Один классик сказал :"Кем-то можно стать, если изучить, что выработало человечество ".
Вопрос. А как изучить: либо шпионов надо засылать (выкрасть) или выкупать фирму под корень. biggrin.gif
А зачем она нужна.
BSACPLD
Обнаружил ошибки при выполнении команд типа ld YL, X+.
Исправленный файл прилагается.
BSACPLD
Добавил команды MUL, MULS, SLEEP.
Также добавлен захват прерываний, т.е. если сигнал прерывания исчез до того как прерывания были разрешены, то прерывание все равно будет обработано.
Флаг прерывания нужно сбрасывать записью лог. 1 в EINT_IF.

Поздравляю всех с Новым Годом! santa2.gif
BSACPLD
Немного обновленный вариант.
Добавлен интерфейс к FT245BM.
Postoroniy_V
Цитата(BSACPLD @ Mar 29 2008, 04:10) *
Немного обновленный вариант.
Добавлен интерфейс к FT245BM.

2 Админам
Мож эта.. Приколоть эту тему, автор вроде как никак бесплатно делает и часто обновляет свой проект smile.gif
des00
Цитата(BSACPLD @ Mar 28 2008, 14:10) *
Немного обновленный вариант.
Добавлен интерфейс к FT245BM.


А может быть лучше на opencores ? smile.gif ну и релизы сюда зеркалить %)
Kuzmi4
2 BSACPLD - а как для начинающих - можно описание как вы заливаете полученный хекс в плисину ??
BSACPLD
Цитата(Kuzmi4 @ Apr 9 2008, 12:45) *
2 BSACPLD - а как для начинающих - можно описание как вы заливаете полученный хекс в плисину ??

Читайте тему с начала.
Цитата
Я заливаю следующим образом:
1) I8I16.exe
2) Update Memory Initialization File
3) Assembler
4) JTAG

Программа I8I16.exe используется для конвертирования HEX файлов в файлы для инициализации памяти процессора.
Путь к данному файлу необходимо указать в параметре INIT_PROGRAM.
BSACPLD
Вот, наконец, появилось немного свободного времени. Добавил поддержку команд lds/sts. Больше не нужно использовать I8I16.exe.
Просто необходимо зайти в меню Assignments->Compilation Process Settings->More Settings... и установить параметр "Reading or writing Hexadecimal(.hex) File in byte addressable mode" в значение "On". Проект (Quartus 7.2 SP3) и список поддерживаемых команд во вложенном архиве.
Vitaliy_ARM
Цитата(WEST128 @ Dec 8 2007, 21:23) *
Так на opencores.org давно уже выложено AVR ядро, как там написано, на 100 % совместимое по системе команд, и можно использовать любой компилятор, поддерживающий AVR.


Скомпилировал недавно opencore AVR на VHDL, получилось около 44 МГц при 3400 логических ячейках на самом маленьком втором циклоне.

А какая у вас тактовая частота получилась?
Postoroniy_V
Цитата(Vitaliy_ARM @ Sep 3 2008, 20:52) *
Скомпилировал недавно opencore AVR на VHDL, получилось около 44 МГц при 3400 логических ячейках на самом маленьком втором циклоне.

А какая у вас тактовая частота получилась?

отвечу за автора smile.gif
2400
50 МГц
Leka
Цитата(Postoroniy_V @ Sep 3 2008, 16:38) *
отвечу за автора smile.gif
2400
50 МГц

А сколько ЛЕ приходится на регистровый файл(чтобы сравнить с вариантами для Xilinx)?
Postoroniy_V
Цитата(Leka @ Sep 3 2008, 21:51) *
А сколько ЛЕ приходится на регистровый файл(чтобы сравнить с вариантами для Xilinx)?

чуток соврал smile.gif
2624 точная цифра
Нажмите для просмотра прикрепленного файла
регистровый файл занимает столько сколько бит в каждом регистре * колво регистровsmile.gif
Нажмите для просмотра прикрепленного файла
Vitaliy_ARM
Цитата(Postoroniy_V @ Sep 3 2008, 16:38) *
отвечу за автора smile.gif
2400
50 МГц


Ну тогда автору a14.gif . Еще бы отладку сделать и будет блеск. Opencor'ный авр отдыхает.
А кто-нибудь это ядро уже использует? Есть ли нюансы
Leka
Цитата(Postoroniy_V @ Sep 3 2008, 17:34) *
регистровый файл занимает столько сколько бит в каждом регистре * колво регистровsmile.gif

Sorry, имел в виду - со всей обвязкой, те вместе с декодерами/мультиплексорами чтения/записи. У Альтеры нет распределенной памяти, поэтому при сравнении размера ядер регистровые файлы лучше считать отдельно, если они не в блочной памяти. Например, для Xilinx однопортовый регистровый файл 32*8бит занимает 16 LUT(Спартан3).
Postoroniy_V
Цитата(Leka @ Sep 3 2008, 23:48) *
Sorry, имел в виду - со всей обвязкой, те вместе с декодерами/мультиплексорами чтения/записи. У Альтеры нет распределенной памяти, поэтому при сравнении размера ядер регистровые файлы лучше считать отдельно, если они не в блочной памяти. Например, для Xilinx однопортовый регистровый файл 32*8бит занимает 16 LUT(Спартан3).

это будет зависеть от плис, тоесть в стратиксе поменьше в циклоне больше
я уже привел цифры для циклонов для всего авр-а
а сравнить кол-во лутов для регистрового файла между альтерами и хилыми мне кажется несколько странным желанием.
вы можете посмотреть на приатаченые картинки и увидеть что control_сpu:control_avr занимает 2255 LE/1880(1282) LUT-only LCs/266(151) LUT-Register LCs
внутри оного и сидит: рег файл, обвязка и т.д.

добавил картинку с инфой про луты
Нажмите для просмотра прикрепленного файла
тактовая 52 Мгц
slog
Цитата(Postoroniy_V @ Sep 3 2008, 17:34) *
чуток соврал smile.gif
2624 точная цифра

Я тоже попробовал скомпилировать. Но у меня другая цифра почему-то 2259. Откуда может быть такая разница? Тактовая 50.34MHz Остальные цифры те же. У меня QuartusII v7.1 sp1. При открытии проекта ругался на строчку #set_global_assignment -name READ_OR_WRITE_IN_BYTE_ADDRESS ON и я её убрал. В остальном все нормально. Разбираться пока не пробовал.


А control_cpu:control_avr занимает 1941LE.
BSACPLD
Исправил глюк с неправильной записью в регистры INT_ADDR[7..1].
Добавил WDT с прерыванием. Тактовая частота 51.72 МГц (оптимизация по занимаемой площади) - 52.63 МГц (оптимизация по скорости).

Цитата(slog @ Sep 4 2008, 10:50) *
Я тоже попробовал скомпилировать. Но у меня другая цифра почему-то 2259. Откуда может быть такая разница? Тактовая 50.34MHz Остальные цифры те же. У меня QuartusII v7.1 sp1. При открытии проекта ругался на строчку #set_global_assignment -name READ_OR_WRITE_IN_BYTE_ADDRESS ON и я её убрал. В остальном все нормально. Разбираться пока не пробовал.
А control_cpu:control_avr занимает 1941LE.

Возможно, все зависит от версии Квартуса.
У меня было примерно 2400 и 52 МГц, Quartus 7.2 SP3.
Строчка READ_OR_WRITE_IN_BYTE_ADDRESS ON необходима для того, чтобы Квартус читал HEX файл с байтовой адресацией.
По умолчанию там стоит пословная адресация. В данном случае нужно будет использовать конвертер I8I16.exe.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.