nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 17 Apr 2024 19:32



Reply to topic  [ 193 posts ]  Go to page Previous  1 ... 6, 7, 8, 9, 10, 11, 12, 13  Next
Реальный 8086/88 + FPGA 
Author Message
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Post 
Мда :(
Не знаю, чем китайцы паяли эту плату, но 6 ног коротят на землю с разным сопротивлением от 30 Ом до 2 кОм. А та нога, что я считал битой, была попросту соплей замкнута на соседнюю с питанием. Собственно, только ее и удалось починить. Отмывка спиртобензином и другие манипуляции ничего не дали.
2 ноги кое-как работают в таком виде, одна у меня каким-то чудом оказалась незадействована, остальные 3 приходятся как раз на видеочасть (R,B,VSYNC). Заменить их нечем - свободная нога аж одна.
По-видимому, придется отдельно отлаживать CGA на рабочих ногах, и совмещать все это только на финальной конструкции.


25 Feb 2015 06:40
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 707
Location: WWW
Reply with quote
Post 
Случайно ни у кого нет доступа к реальной PC или PC XT (обязательно с процессором 8088) проверить, работает ли одна игрушка ? Буду очень благодарен !

upd - вопрос снялся... Блин, я злой - похоже, старая игрушка была упакована более современным самораспаковщиком, в котором использовалась команда, отсутствующая в 8086/88, а я столько времени угробил, пытаясь понять, почему у меня не работает, а вот в Dosbox - пожалуйста...


27 Feb 2015 10:05
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 707
Location: WWW
Reply with quote
Post 
На этих выходных наконец-то закончил (о чем говорил ранее) приведение в минимальный порядок проекта и полный перевод его со схемного дизайна в VHDL. Сначала шло туговато - тяжело было перестроить мозг со схем в странный код, но к концу я понял тех, кто советовал изначально не заморачиваться со схемным дизайном.

Итак, что есть - более-менее совместимая с PC XT машина, на которой выполняются все имеющиеся у меня программы, работающие на оригинальной XT. В качестве BIOS используется практически оригинальный BIOS от XT, за исключением Int 13 (естественно - работаю с SD картой вместо диска).

Чего нет, или что работает не до конца:

- некоторые регистры CGA, не нужные для обычной работы. Кроме того, не совсем правильно работает атрибут в последнем знакоместе строки, нет мигания символов и нет режима 40х25 (не видел ни одной программы, использующей его)
- DMA - реализованы только несколько регистров, которые странные программы используют для тайминга, самого DMA нет в принципе
- 8259 в самом минимальном варианте, но вроде написанного хватает для всего
- 8253 сам не делал, взял из других проектов. Во множественном числе, потому что попробовал (и добавил в архив) два варианта. Оба они имеют плюсы и минусы, при этом работают не очень... Если дойдут руки, то нормальный 8253 первый кандидат на написание.
- естественно, нету куска BIOS'а, который тестирует систему и определяет конфигурацию - необходимый минимум вписан вручную.

В BIOS'е также оставил разные отладочные процедуры - не удивляйтесь подпрограммам, на которые нет ссылок.

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

Хотя подавляющее большинство частей сделал сам, есть тянутые куски. Довольно большой кусок алфавитно-цифровой части видеоадаптера был взят из чужого проекта, о 8253 уже говорил, еще что-то по мелочам. Некоторые вещи, хотя напрямую не заимствовал, подсматривал в других проектах. Пробую написать нормальный readme, там хочу указать конкретные ссылки на использованные проекты.

BIOS по работе с SD картой рассчитан на старые не-HD карты (как правило, 2 и меньше GB), переделать на новые довольно просто, но пока лень. И еще - все рассчитано на работу с конкретным образом диска, который можно найти здесь - http://zet.aluzina.org/index.php/Altera ... tion_guide У меня слегка голова пошла кругом от пересчета головок/цилиндров и прочих LBA вкупе с обработкой MBR, поэтому я поступил проще и использовал жестко заданные значения, которые просто посмотрел для этого образа.

Если в проекте что-то покажется странным - не ищите глубокого смысла. Это мой первый реальный проект на VHDL, и многие вещи, особенно в начале, я просто не знал, поэтому применял очень странные решения. Даже ассемблер после 20 с лишним лет не-использования потребовал некоторое время, чтобы вспомнить. Именно поэтому говорил и говорю - лучше спрашивайте, если есть конкретные вопросы.

Проект сделан для платы Terasic DE2-115, использует SRAM в качестве основной памяти, и некоторое количество внутренней памяти FPGA для буферов видео и SPI, а также BIOS.

Моя платка (так как делал подобное первый раз) оказалась совсем неправильной с точки зрения согласования сигналов. Чтобы привести некоторые сигналы (идущие от моей платки к плате FPGA по длинному шлейфу) в норму, пришлось резать дорожки и впаивать небольшие резисторы.

Возможно (по настроению и наличию времени) попробую вместо своей платки подключить один из доступных "софтовых" 8086/88, хотя все они рассчитаны на слегка другую идеологию системы.


http://www.nedopc.org/nedopc/upload/XT.pdf - схема моей платки с процессором и обрамлением

http://www.nedopc.org/nedopc/upload/BIOS.zip - исходники BIOS

http://www.nedopc.org/nedopc/upload/cpu8288.zip - собственно, проект для Quartus


Last edited by newold86 on 02 Mar 2015 11:56, edited 1 time in total.



02 Mar 2015 09:38
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22523
Location: Silicon Valley
Reply with quote
Post 
Убрал лирические отступления в мусорку...

_________________
:dj: https://mastodon.social/@Shaos


02 Mar 2015 09:47
Profile WWW
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Post 
По схеме - а где второй 373 латч на AD8-AD15?
Последовательных резисторов согласования там тоже нет, я так понял? Касаемо них - это вы, как и я, AN447 начитались? Я тоже паниковал, потом перекрестился и врубил напрямую (4 шлейфа 10-20 см). Никто не умер (пока).

По биосу - код пока не смотрел, но не понял фразы "за исключением int13". Если его нет, непонятно как у вас работает ДОС, да и любые дисковые утилиты.

Что касается 8259, не видел ни одного кода, который бы использовал его возможности кроме IMR/ISR. Т.е. все эти auto-EOI, сдвиг приоритетов и пр., имхо, можно смело игнорировать.

А вот DMA я бы сделал полностью. Скорость циклона (точно) и SRAM на вашей плате (скорее всего) позволят реализовать такие скорости обмена память-память, которые строковым инструкциям 8086 и не снились. Учитывая, что регенерации нет, 0 канал вполне для этого подходит.
Впрочем, с другой стороны, эта оптимизация, вероятнее всего, будет не востребована, ибо приложениям ее не подсунешь, а в биосе я что-то мест для такого кода навскидку не вижу.

Черт его знает короче. Диск-память тоже неплохо должно смотреться. UDMA какое-нибудь... Но тут от памяти все зависит, UDMA-4 вроде 66 МГц надо.

Для таймера наибольшую сложность вижу в получении базовой частоты (1.193_или_сколько_там МГц).

Quote:
Возможно (по настроению и наличию времени) попробую вместо своей платки подключить один из доступных "софтовых" 8086/88

А смысл? Тогда, имхо, проще NIOS поднять, да эмулятор x86 под него написать. Даже с блекджеком и протмодой.

О реализации EGA/VGA не думали? У вас на плате RAMDAC недеЦкий с 10-битным цветом. Так что самое сложное, имхо, уже есть.


02 Mar 2015 18:34
Profile
God

Joined: 02 Jan 2006 02:28
Posts: 1390
Location: Abakan
Reply with quote
Post 
Vic3Dexe wrote:
По биосу - код пока не смотрел, но не понял фразы "за исключением int13". Если его нет, непонятно как у вас работает ДОС, да и любые дисковые утилиты.
А я понял, что BIOS не оригинален в части int13, так как используется работа с SD/MMC.


02 Mar 2015 21:25
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 707
Location: WWW
Reply with quote
Post 
Vic3Dexe wrote:
По схеме - а где второй 373 латч на AD8-AD15?


Все остальное - в VHDL. Первая защелка в таком виде появилась только по причине того, что я не смог придумать нормального способа рулить двухнаправленным согласователем уровня на шине AD. Все очевидные и сразу же приходящие в голову способы при внимательном рассмотрении временных диаграмм оказываются неверными. Впрочем, я это уже обсуждал и в этой теме, и в другом месте - все со мной согласились. Кстати, потом я понял, что, хотя согласователей на AD придется оставить, как сейчас, два (один - в сторону от процессора - для адреса, второй - двухнаправленный, для данных), даже первую защелку можно тоже убрать в VHDL.

Vic3Dexe wrote:
Последовательных резисторов согласования там тоже нет, я так понял? Касаемо них - это вы, как и я, AN447 начитались? Я тоже паниковал, потом перекрестился и врубил напрямую (4 шлейфа 10-20 см). Никто не умер (пока).


Как уже писал, пришлось резать дорожки. Причем не от теории, а от того, что долго боролся со странными сбоями, и обнаружил, в частности, что звон от одного из сигналов по уровню такой, что ИНОГДА хватает для лишнего переключения логики внутри FPGA. Причем к этому моменту я уже научил свою конструкцию работать даже в таких условиях :)

Vic3Dexe wrote:
По биосу - код пока не смотрел, но не понял фразы "за исключением int13". Если его нет, непонятно как у вас работает ДОС, да и любые дисковые утилиты.


Vic3Dexe уже выше правильно заметил, что именно Int 13 у меня не родное от XT, а написанное мною, так как вместо диска используется SD карта.

Vic3Dexe wrote:
Что касается 8259, не видел ни одного кода, который бы использовал его возможности кроме IMR/ISR. Т.е. все эти auto-EOI, сдвиг приоритетов и пр., имхо, можно смело игнорировать.


Именно это я и обнаружил

Vic3Dexe wrote:
А вот DMA я бы сделал полностью. Скорость циклона (точно) и SRAM на вашей плате (скорее всего) позволят реализовать такие скорости обмена память-память, которые строковым инструкциям 8086 и не снились.


А зачем ? Мне хотелось сделать упор на совместимость, а не на новые возможности/характеристики, отсутствующие у оригинальной XT. Даже без DMA и совершенно неоптимизированным Int 13 скорость работы с диском сейчас выше, чем у оригинальной XT (сравниваю именно с HDD), а внешних устройств, требующих DMA, пока не подключаю. Если дойдет до Sound Blaster, тогда придется подумать.

Vic3Dexe wrote:
Для таймера наибольшую сложность вижу в получении базовой частоты (1.193_или_сколько_там МГц).


Эээ... А в чем сложность-то ??? У меня базовая частота соответствует "родной" (сделано через PLL), поделил ее, как в XT сделано, и вот она (что и сделано). Проблема именно в правильной эмуляции режимов. Например, в самой полной эмуляции 8254, которую я нашел, все хорошо, за исключением того, что делитель 0 воспринимается как отсутствие делителя, а не как максимальный делитель. Поэтому и хочу, если руки дойдут, сделать "правильный" 8253

Vic3Dexe wrote:
А смысл? Тогда, имхо, проще NIOS поднять, да эмулятор x86 под него написать. Даже с блекджеком и протмодой.


Это тоже не понял... Зачем такой двухступенчатый проект, когда есть несколько готовых реализаций 8086 в VHDL/Verilog ? Вопрос только, как всегда, в мотивации и наличии времени.

Vic3Dexe wrote:
О реализации EGA/VGA не думали? У вас на плате RAMDAC недеЦкий с 10-битным цветом. Так что самое сложное, имхо, уже есть.


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


02 Mar 2015 22:39
Profile
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Post 
newold86 wrote:
Все остальное - в VHDL. Первая защелка в таком виде появилась только по причине того, что я не смог придумать нормального способа рулить двухнаправленным согласователем уровня на шине AD. Все очевидные и сразу же приходящие в голову способы при внимательном рассмотрении временных диаграмм оказываются неверными. Впрочем, я это уже обсуждал и в этой теме, и в другом месте - все со мной согласились. Кстати, потом я понял, что, хотя согласователей на AD придется оставить, как сейчас, два (один - в сторону от процессора - для адреса, второй - двухнаправленный, для данных), даже первую защелку можно тоже убрать в VHDL.

Тогда совсем непонятно
Code:
AddrHighLatch : LatchXX
   port map (
      din => AAt,
      en => ALE,
      dout => AAi(19 downto 16)
   );

AAi(15 downto 0) <= AA;

...

LatchAddr: LatchXX
   generic map (
      M => 20
   )
   port map (
      din => AAi(19 downto 0),
      en => ALE,
      dout => AAl(19 downto 0)
   );

Т.е. по ALE фиксируются старшие 4 бита в AAi, дальше все 20 бит еще раз фиксируются по ALE в AAl, а кроме того, младшие 8 бит фиксируются в 373. Не многовато? :)

newold86 wrote:
Эээ... А в чем сложность-то ??? У меня базовая частота соответствует "родной" (сделано через PLL), поделил ее, как в XT сделано, и вот она (что и сделано). Проблема именно в правильной эмуляции режимов. Например, в самой полной эмуляции 8254, которую я нашел, все хорошо, за исключением того, что делитель 0 воспринимается как отсутствие делителя, а не как максимальный делитель. Поэтому и хочу, если руки дойдут, сделать "правильный" 8253

Эээ... ну например в этом:
Code:
clk0_divide_by => 2500000,
clk0_multiply_by => 715909,

У меня такие коэффициенты не проходят, говорит, мол, за пределами допустимых значений, да и мегагерц для PLL маловато, у меня даже 25 на 3 делить не захотел. Может, у BGA-циклонов другие возможности в этом плане? Почитаю.

newold86 wrote:
Это тоже не понял... Зачем такой двухступенчатый проект, когда есть несколько готовых реализаций 8086 в VHDL/Verilog ? Вопрос только, как всегда, в мотивации и наличии времени.

Ну, например, затем, что "готовую" реализацию наверняка придется дорабатывать напильником до действительно готовой. А ковыряться в чужом коде - сами понимаете. NIOS же вылизан альтерой (ну я надеюсь), а софтовый эмулятор отлаживать попроще будет.
Впрочем, главной мыслью было - эмулировать неинтересно :)

newold86 wrote:
Уже несколько раз смотрел на убогую CGA-шную графику и брал в руки описание EGA. Потом смотрел на количество регистров, реально нужных для нормальной эмуляции, и откладывал описание обратно. Проблема в том, что работа большая, но не особо интересная - описывать один за одним работу нескольких десятков регистров, поэтому заниматься этим пока лень.

Ну регистры не самая большая беда. Памяти много надо (EGA - 256k, VGA - 512k). И если в случае с 16k CGA она вполне влазит в циклон в двухпортовом варианте, то EGA/VGA уже не помещаются.
Двухпортовая внешняя во-1 дорогая, во-2 требует кучу ног. Не считал, но не уверен, что влезет в FBGA256.
С однопортовой надо как-то делить доступ между процом и "видеочипом". Пока идея в том, чтобы запустить память на частоте поболее, чем у проца. Такая частота будет 100% больше, чем выборка из памяти при формировании растра (пиксельклок 25М, выбираем байт или даже целое слово - итого 25/8 или 25/16 МГц). Тогда можно успеть и данные для видео выбрать и проц к памяти допустить.

Но это пока просто размышления.


03 Mar 2015 07:14
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 707
Location: WWW
Reply with quote
Post 
Vic3Dexe wrote:
Т.е. по ALE фиксируются старшие 4 бита в AAi, дальше все 20 бит еще раз фиксируются по ALE в AAl, а кроме того, младшие 8 бит фиксируются в 373. Не многовато? :)


Ха ! Это еще не заметили SRAM_ADDR - еще одна защелка поверх всего остального :) Частично здесь то, о чем я сразу предупредил - не нужно искать глубокий смысл в непонятных вещах, просто издержки процесса обучения и отладки. Но именно со SRAM у меня были большие разборки, в ходе которых проблему я решил, но причину пока еще не понял. Сами разборки - http://electronix.ru/forum/index.php?sh ... 24966&st=0

Vic3Dexe wrote:
Code:
clk0_divide_by => 2500000,
clk0_multiply_by => 715909,

У меня такие коэффициенты не проходят, говорит, мол, за пределами допустимых значений, да и мегагерц для PLL маловато, у меня даже 25 на 3 делить не захотел. Может, у BGA-циклонов другие возможности в этом плане? Почитаю.


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

Vic3Dexe wrote:
Ну регистры не самая большая беда. Памяти много надо (EGA - 256k, VGA - 512k). И если в случае с 16k CGA она вполне влазит в циклон в двухпортовом варианте, то EGA/VGA уже не помещаются.


На моей плате DE2-115 можно под 400К внутренней памяти сотворить, так что должно хватить. Кстати, минимальный вариант EGA - 64K, в его сторону я пока иногда смотрю...


03 Mar 2015 07:29
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 707
Location: WWW
Reply with quote
Post 
newold86 wrote:
Но именно со SRAM у меня были большие разборки, в ходе которых проблему я решил, но причину пока еще не понял.


На свежую голову еще раз подумал - вроде есть потенциальная причина такого поведения. Вполне вероятно, что ALE тоже звенит, нужно будет проверить.

Хотя правильнее всего было бы новую платку с более правильной разводкой сделать, но рука никак не поднимается - не мое это...


03 Mar 2015 10:45
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Post 
С интересом слежу за проектом. У меня вопрос - а оно может 8086 процессор? Или только 8088?


03 Mar 2015 14:32
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 707
Location: WWW
Reply with quote
Post Re:
Tronix wrote:
С интересом слежу за проектом. У меня вопрос - а оно может 8086 процессор? Или только 8088?


На мой взгляд, вопрос не очень корректный, односложно ответить невозможно.

С одной стороны, просто поменять процессор на 8088, естественно, невозможно - все рассчитано на 8-битную шину данных, сигнала BHE вообще нет.
С другой стороны, переделать, естественно, можно. Только с таким же успехом можно переделать и на 486, да и вообще на все, что угодно.

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


03 Mar 2015 22:45
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22523
Location: Silicon Valley
Reply with quote
Каким-то чудом на старый сервер пролезло сообщение от Vic3Dexe:

newold86 wrote:
Вполне вероятно, что ALE тоже звенит, нужно будет проверить.

Для начала, я бы почистил VHDL от излишков. :) Без обид, там каша, которая вполне может давать вам такие эффекты.
Например, тройная (ну или сколько там) фиксация адреса.
Смотрите, есть первый D-триггер, т.е. защелка, его выход соединен со входом следующего. Оба тактируются одним сигналом (ALE).
Первый триггер фиксирует адрес. А что фиксирует второй? А это зависит от того, когда на него приходит тактовый перепад по сравнению с первым триггером. Если одновременно - то предыдущее состояние первого триггера. А если с задержкой - то уже новое. А если задержка "на грани", то вообще непонятно что.

newold86 wrote:
Хотя правильнее всего было бы новую платку с более правильной разводкой сделать, но рука никак не поднимается - не мое это...

И это тоже, 8284 засуньте в циклон, чтобы 15 МГц не гонять по шлейфу, вот моя вполне рабочая реализация (верилог, но, я думаю, разберетесь):

Code:
//----- i8284 -----
module i8284(
  input wire RESET_INV,    //кнопка RESET, замыкается на землю
             OSC_IN,       //15 MHz
             RDY,        //вх. READY
  output wire CLK, RESET, READY);

//-- CLK
reg [1:0] CLK_CNT = 2'b00;
wire CLK_CNT_RES = CLK_CNT[0] | ~CLK_CNT[1]; //00 -> 01 -> 10 -> 00
always @(posedge OSC_IN)
begin
  CLK_CNT[0] <= ~CLK_CNT[0] & CLK_CNT_RES;
  CLK_CNT[1] <= CLK_CNT[0] & CLK_CNT_RES;
end

assign CLK = CLK_CNT[1];

//-- READY
reg RDY1 = 0;
reg RDY2 = 0;
always @(posedge CLK) RDY1 <= RDY;
always @(negedge CLK) RDY2 <= RDY & RDY1;
assign READY = RDY2;

//-- RESET
reg RES_FF;
always @(negedge CLK) RES_FF <= RESET_INV;

assign RESET = ~RES_FF;

endmodule


04 Mar 2015 22:03
Profile WWW
Devil

Joined: 30 Nov 2013 11:08
Posts: 707
Location: WWW
Reply with quote
Shaos wrote:
Для начала, я бы почистил VHDL от излишков. :)


Помнится, я сам несколько раз говорил о диком месиве в проекте. Причем, должен заметить, по сравнению с тем, что было пару недель назад - это образец изящности, правильности и документированности проекта :)

Не нужно забывать, что еще пару месяцев назад все мои знания VHDL заканчивались на конструкции типа "A <= B and C" , да и знания в области цифровой электроники были, в основном, теоретически идеализированными...

Shaos wrote:
Без обид, там каша, которая вполне может давать вам такие эффекты.


Ровно наоборот - именно данная каша как раз родилась, в основном (но, естественно, не только), в борьбе с этим эффектом.

Shaos wrote:
Смотрите, есть первый D-триггер, т.е. защелка, его выход соединен со входом следующего. Оба тактируются одним сигналом (ALE).
Первый триггер фиксирует адрес. А что фиксирует второй? А это зависит от того, когда на него приходит тактовый перепад по сравнению с первым триггером. Если одновременно - то предыдущее состояние первого триггера. А если с задержкой - то уже новое. А если задержка "на грани", то вообще непонятно что.


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


05 Mar 2015 01:33
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 707
Location: WWW
Reply with quote
Можно сказать, в целом проект в данном виде завершен. Любое ощутимое улучшение возможно только при появлении у меня принципиально нового уровня знаний схемотехники/VHDL, на что пока особо времени нет.

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

В качестве небольшого финального аккорда добавил еще одну мелочь - expanded memory LIM 4.0. Идею и драйвер стащил отсюда - http://www.lo-tech.co.uk/wiki/Lo-tech_2MB_EMS_Board , сама реализация заняла целых 5 минут - все-таки VHDL/FPGA прикольные штуки :)


Attachments:
IMG_0399.JPG
IMG_0399.JPG [ 44.44 KiB | Viewed 7671 times ]
10 Mar 2015 11:03
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 193 posts ]  Go to page Previous  1 ... 6, 7, 8, 9, 10, 11, 12, 13  Next

Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.