nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 11:17



Reply to topic  [ 410 posts ]  Go to page Previous  1 ... 24, 25, 26, 27, 28  Next
Давайте думать над железкой (TRIADOR) 
Author Message
Doomed
User avatar

Joined: 27 Jul 2018 12:07
Posts: 608
Reply with quote
haqreu wrote:
где-то на тысячном корпусе микросхем для триадора я всё же запаял один задом наперёд :rotate:


И тогда вместо TRIMUX у Вас получился один XUMIRT :no:
Жду второй сезон о TRIADOR... когда будет анонс?


12 May 2020 12:44
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22411
Location: Silicon Valley
Reply with quote
haqreu wrote:
где-то на тысячном корпусе микросхем для триадора я всё же запаял один задом наперёд :rotate:

Image

LM324 - Quadruple Operational Amplifier?

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


12 May 2020 13:37
Profile WWW
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
TernarySystem wrote:
Жду второй сезон о TRIADOR... когда будет анонс?


Второй сезон, наверное, будет чисто софтверный о базовой архитектуре; а уже третий с непосредственными железками АЛУ, которые я потихоньку готовлю. Про даты боюсь загадывать :(
Но очень надеюсь гораздо быстрее, нежели прошедшие три года.


Shaos wrote:
LM324 - Quadruple Operational Amplifier?


Да, в качестве драйвера для светодиодов.


Attachments:
Screenshot from 2020-05-12 23-03-13.png
Screenshot from 2020-05-12 23-03-13.png [ 4.81 KiB | Viewed 10601 times ]
12 May 2020 14:10
Profile
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
Сделал наконец удобную либу для кикада, с которой приятно будет разводить модули АЛУ. Сегодня получил заказанные два месяца назад платы с сердцем операции RR - модулем инкремента/декремента. По факту просто каскад трёх обычных полусумматоров, 9 тримуксов в сумме (один полусумматор - это 3 тримукса). Ну а LM324 нужен для четырёх светодиодов на плате модуля.


Attachments:
photo5897708044597441272.jpg
photo5897708044597441272.jpg [ 125.12 KiB | Viewed 10599 times ]
12 May 2020 14:19
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22411
Location: Silicon Valley
Reply with quote
haqreu wrote:
TernarySystem wrote:
Жду второй сезон о TRIADOR... когда будет анонс?


Второй сезон, наверное, будет чисто софтверный о базовой архитектуре; а уже третий с непосредственными железками АЛУ, которые я потихоньку готовлю. Про даты боюсь загадывать :(
Но очень надеюсь гораздо быстрее, нежели прошедшие три года.


Shaos wrote:
LM324 - Quadruple Operational Amplifier?


Да, в качестве драйвера для светодиодов.

Image

Я что-то подобное пытался сделать при тестировании своего чипа, но оно не заработало и я в итоге вытащил операционники и проводочками соединил напрямую - двухцветные светодиоды после этого загорались нормально (резисторы я правда поменьше поставил в делитель) :lol:

Attachment:
test3-sch.jpg
test3-sch.jpg [ 121.51 KiB | Viewed 10597 times ]


Attachments:
test3-built.jpg
test3-built.jpg [ 121.75 KiB | Viewed 10597 times ]

_________________
:dj: https://mastodon.social/@Shaos
12 May 2020 14:42
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22411
Location: Silicon Valley
Reply with quote
Shaos wrote:
... сделать макрос JMP для дальних прыжков и пусть программист сам следит за своими адресами и содержимым R13:
Code:
JMP MACRO L
    R1 SEG L
    RR -13
    JP OFF L
ENDM
Этот ассемблер может выдавать листинг файлы, пригодные для скармливания в эмулятор триадора (адреса будут укзаны в каждой строке как комментарии), а также бинарные файлы 2К-образа ПЗУ для моего логисимовского симулятора триадора

Наверное всё-таки на последних версиях C++ надо этот макро-ассемблер писать - назвать его скажем TRIADORA :lol:

Кроме макросов поддержать ключевые слова ORG, EQU, INCLUDE и ALIGN (для выравнивания на границу сегментов надо будет писать ALIGN 27 при этом возможная дырка будет заполнена нулевой командой ничегонеделанья RR 0). Всяких там DB небудет т.к. память данных нет возможности инициализировать кроме как писать туда через EX инструкции обращения к памяти - переменные объявлять адресами через EQU (я так для пиков пишу уже много лет точно зная где у меня та или иная переменная сидит).

Кроме того на примере выше видно присутствие ключевых слов SEG и OFF, которые из константы или метки (которая суть тоже константа, которая становится известной на поздних проходах) выделяют старшую триаду (SEGment) и младшую триаду (OFFset). Также внутри макросов будет возможным указывать локальные (для макроса) метки через ключевое слово LOCAL:
Code:
; Refresh R13 with current segment identifier
RFR MACRO
    LOCAL L
    R1 SEG L
    RR -13
L:
ENDM

При кодогенерации при каждом использовании такого макроса будет ставиться метка с уникальным именем (с добавлением некоего уникального номера), например
Code:
RFR
JP LL
RFR
LL:

будет преобразовано при первом проходе в
Code:
R1 SEG L_1
RR -13
L_1:
JP LL
R1 SEG L_2
RR -13
L_2:
LL:

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

Ну и в дальнейшем надо будет добавить условную компиляцию с ключевыми словами IF, ELSE, ENDIF, NOT, AND, OR, EQ, NE, LT, LE, GT, GE ( всё по мотивам MASM ; )

А может в условия ещё добавить троичную инверсию INV ? :mrgreen:

P.S. IFDEF, IFNDEF и ELSEIF ненужны - планирую обойтись одним IF. Опция командной строки -DNAME для ассемблера будет означать тоже самое что и NAME EQU 1 внутри и далее можно писать IF NAME или IF NOT NAME и т.д. (отсутствие константы NAME будет равносильно 0). Плюс директива ERROR чтобы прервать ассемблирование с текстовым сообщением...

P.P.S. Обновлённый заголовочный файл для триадоры в соответствии с новыми веяньями:

 TRIADOR3.INC
Code:
; TRIADOR-3 definitions for assembler TRIADORA v1.0
; Created in May 2020 by Alexander A. Shabarshin <me@shaos.net>
; This file is considered PUBLIC DOMAIN (intentionally put there by creator)

; 1-trit balanced ternary numbers

N   EQU -1
O   EQU  0
P   EQU  1

; 2-trit balanced ternary numbers

NN  EQU -4
NO  EQU -3
NP  EQU -2
ON  EQU -1
OO  EQU  0
OP  EQU  1
PN  EQU  2
PO  EQU  3
PP  EQU  4

; 3-trit balanced ternary numbers

NNN EQU -13
NNO EQU -12
NNP EQU -11
NON EQU -10
NOO EQU -9
NOP EQU -8
NPN EQU -7
NPO EQU -6
NPP EQU -5
ONN EQU -4
ONO EQU -3
ONP EQU -2
OON EQU -1
OOO EQU  0
OOP EQU  1
OPN EQU  2
OPO EQU  3
OPP EQU  4
PNN EQU  5
PNO EQU  6
PNP EQU  7
PON EQU  8
POO EQU  9
POP EQU  10
PPN EQU  11
PPO EQU  12
PPP EQU  13

; Ternary logic constants

NEG EQU -1
UNK EQU  0
POS EQU  1

; >>>>> SKIP MACROS

IFR4LEZ  EQU -13
IFR4NEZ  EQU -12
IFR4GEZ  EQU -11
IFR3LEZ  EQU -10
IFR3NEZ  EQU -9
IFR3GEZ  EQU -8
IFR2LEZ  EQU -7
IFR2NEZ  EQU -6
IFR2GEZ  EQU -5
IFR1LEZ  EQU -4
IFR1NEZ  EQU -3
IFR1GEZ  EQU -2
IFBORROW EQU -1
IFNOOVER EQU  0
IFCARRY  EQU  1
IFR1LTZ  EQU  2
IFR1EQZ  EQU  3
IFR1GTZ  EQU  4
IFR2LTZ  EQU  5
IFR2EQZ  EQU  6
IFR2GTZ  EQU  7
IFR3LTZ  EQU  8
IFR3EQZ  EQU  9
IFR3GTZ  EQU  10
IFR4LTZ  EQU  11
IFR4EQZ  EQU  12
IFR4GTZ  EQU  13

; Long jump to label L
JMP MACRO L
    R1 SEG L
    RR -13
    JP OFF L
ENDM

; Refresh R13 with current segment identifier
RFR MACRO
    LOCAL L
    R1 SEG L
    RR -13
L:
ENDM

; Decrement R1 with updating flag C
DECR1 MACRO
    RR -1
ENDM

; No operation (OOOOO)
NOOP MACRO
    RR  0
ENDM

; Increment R1 with updating flag C
INCR1 MACRO
    RR  1
ENDM

; >>>>> EXTENDED INSTRUCTIONS

; Halt and catch fire
HLT MACRO
    EX -13
ENDM

; Program EX using R1,R2,R3 and R4 as identifier of EX command to program
PEX MACRO
    EX 0
ENDM

; Indirect jump to R13,R1 with storing PC+1 to R12,R11
JPI MACRO
    EX 13
ENDM

; >>>>> BINARY TRITWISE OPERATIONS

CMP MACRO
    EX 1
ENDM

MIN MACRO
    EX 2
ENDM

MAX MACRO
    EX 3
ENDM

MUL MACRO
    EX 4
ENDM

SUM MACRO
    EX 5
ENDM

CON MACRO
    EX 6
ENDM

; >>>>> PREDEFINED PERMUTATIONS

CLC MACRO
    EX 7
ENDM

RLC MACRO
    EX 8
ENDM

RRC MACRO
    EX 9
ENDM

; >>>>> DATA MEMORY ACCESS

; Write R2,R1 to data memory address R4,R3
WMM MACRO
    EX 10
ENDM

; Read data memory from address R4,R3 and store lower triade to R1
RML MACRO
    EX 11
ENDM

; Read data memory from address R4,R3 and store higher triade to R1
RMH MACRO
    EX 12
ENDM

; Read data memory from address A and store value to R2,R1
RMA MACRO A
    R1 SEG A
    RR -4
    R1 OFF A
    RR -3
    RMH
    RR -2
    RML
ENDM

; Write R2,R1 to data memory address A
WMA MACRO A
    R1 SEG A
    RR -4
    R1 OFF A
    RR -3
    WMM
ENDM

; Write constant C to data memory address A
WMC MACRO A C
    R1 SEG A
    RR -4
    R1 OFF A
    RR -3
    R1 SEG C
    RR -2
    R1 OFF C
    WMM
ENDM

; >>>>> SUBROUTINES MACROS (SP=R10,R9)

; subroutine is called by CALL label

; if subrouting is not calling anything else then it can just do RET at the end

; if subrouting is calling something else (including itself) while working
; then it should do PUSH in the beginning to store current R12,R11 on the stack
; and it should do RETURN at the end to return to proper address from the stack

; to store pair of registers on the stack use PUSHRR and POPRR to retrieve them

CALL MACRO A
    R1 SEG A
    RR -13
    R1 OFF A
    JPI
ENDM

RET MACRO
    RR 12
    RR -13
    RR 11
    JPI
ENDM

SSP MACRO A
    R1 SEG A
    RR -10
    R1 OFF A
    RR -9
ENDM

PUSH MACRO
    RR 10
    RR -4
    RR 9
    RR -3
    RR 12
    RR -2
    RR 11
    WMM
    RR 9
    RR -1
    RR -9
    RR 10
    SK IFNOOVER
    RR -1
    RR -10
ENDM

RETURN MACRO
    RR 9
    RR 1
    RR -9
    RR -3
    RR 10
    SK IFNOOVER
    RR 1
    RR -10
    RR -4
    RMH
    RR -13
    RML
    JPI
ENDM

PUSHRR MACRO H L
    RR 10
    RR -4
    RR 9
    RR -3
    RR H
    RR -2
    RR L
    WMM
    RR 9
    RR -1
    RR -9
    RR 10
    SK IFNOOVER
    RR -1
    RR -10
ENDM

POPRR MACRO H L
    RR 9
    RR 1
    RR -9
    RR -3
    RR 10
    SK IFNOOVER
    RR 1
    RR -10
    RR -4
    RMH
    RR -H
    RML
;    IF L NE 1
    RR -L
;    ENDIF
ENDM

P.P.P.S. IF в последнем макросе закомментирован, т.к. в первой версии ассемблера я не планирую иметь условную компиляцию (в этом конкретном макросе условная компиляция предотвратила бы декремент R1, если макрос используется для вытаскивания из стека регистров R2,R1 в виде POPRR 2 1 и кстати в PUSHRR тоже надо бы что-то выдумать на тему R2,R1)

P.P.P.P.S. (добавлено 17 мая 2020 года) ещё можно программно нагенерить макросов с равно (сделав символ '=' разрешённым в именах макросов) типа R1=R2, R13=NOP и даже сделать макросы умеющие скажем R13=-13 или R5=+5 путём искусственной вставки пробела при первом проходе перед символами '-' или '+' если его там небыло, тогда R13=-13 будет воспринято как R13= -13 и сассемблируется вот таким макросом:
Code:
R13= MACRO X
   R1 X
   RR -13
ENDM

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


13 May 2020 00:10
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22411
Location: Silicon Valley
Reply with quote
Ну так что, приступаю к написанию ассемблера triadora как описано выше?
Скажем сразу как PUBLIC DOMAIN :dj:

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


14 May 2020 00:26
Profile WWW
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
Я не очень понимаю, зачем он нам нужен. У меня же уже есть ассемблер...


14 May 2020 00:34
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22411
Location: Silicon Valley
Reply with quote
haqreu wrote:
Я не очень понимаю, зачем он нам нужен. У меня же уже есть ассемблер...

Чтобы большие приложения писать, например тетрис :mrgreen:
Без макросов это почти нереально
Ну и выход будет совместим с твоим эмулятором

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


14 May 2020 00:46
Profile WWW
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
Мне кажется, что ты бежишь сильно впереди паровоза :)


14 May 2020 00:49
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22411
Location: Silicon Valley
Reply with quote
Да не - нормально - в самый раз :lol:

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


14 May 2020 00:52
Profile WWW
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
Три года спустя отрисовки на бумаге развёл и заказал самый тримуксожоркий срез АЛУ: RR. 52 корпуса dg403!


14 May 2020 13:59
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22411
Location: Silicon Valley
Reply with quote
haqreu wrote:
Три года спустя отрисовки на бумаге развёл и заказал самый тримуксожоркий срез АЛУ: RR. 52 корпуса dg403!

Надо посчитать сколько у меня получилось в логисимовском симуляторе триадора - вроде меньше...

haqreu wrote:
Смерджил ; я помимо прочего исправил формат программ и перемешал скипы (если не забыл).

В методе cycle нужно засунуть return в условие для case -4 (строка 129), а то внешние EX-команды небудут нормально работать (PC небудет инкрементироваться):
Code:
        case -4: { // EX: halt and catch fire if not processed
                     if (!do_ex(arg)) {
                       fHalt = true;
                       return;
                     }
                 } break;

и поменять местами if (fHalt) break; // halt and catch fire и if (verbose) display_memory_state(); в конце метода run, чтобы при окончании программы состояние регистров не печаталось два раза для EX -13 (т.к. после хальта PC не проинкрементируется и инкрементировать его нельзя т.к. при этом эмулятор вывалиться по ошибке что PC вылез за пределы программы)

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


15 May 2020 01:33
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22411
Location: Silicon Valley
Reply with quote
Во какой интерфейс для гипотетического троичного компьютера TRIADOR-3A я придумал в текстовом экране 80x25 :mrgreen:
Code:
         1         2         3         4         5         6         7         8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
 R5       R6       R7       R8       R9       R10      R11      R12
                                                                                 < 1
  ####     ####     ####     ####     ####     ####     ####     ####    @@@@@@  < 2
 #    #   #    #   #    #   #    #   #    #   #    #   #    #   #    #   @@@@@@  < 3
 #    #   #    #   #    #   #    #   #    #   #    #   #    #   #    #   @@@@@@  < 4
  ####     ####     ####     ####     ####     ####     ####     ####    @@@@@@  < 5
 #    #   #    #   #    #   #    #   #    #   #    #   #    #   #    #   @@@@@@  < 6
 #    #   #    #   #    #   #    #   #    #   #    #   #    #   #    #   @@@@@@  < 7
  ####  #  ####  #  ####  #  ####  #  ####  #  ####  #  ####  #  ####  #         < 8
-------------------- ------------- ------------- -------------- ---------------- < 9
|()()()()()()()()()| |R1|()|()|()| |R5|()|()|()| |R9 |()|()|()| |R13 <|()|()|()| < 10
|()()()()()()()()()| ------------- ------------- -------------- ---------------- < 11
|()()()()()()()()()| |R2|()|()|()| |R6|()|()|()| |R10|()|()|()| |R13 >|()|()|()| < 12
|()()()()()()()()()| ------------- ------------- -------------- ---------------- < 13
|()()()()()()()()()| |R3|()|()|()| |R7|()|()|()| |R11|()|()|()| |PC()()()()()()| < 14
|()()()()()()()()()| ------------- ------------- -------------- ---------------- < 15
|()()()()()()()()()| |R4|()|()|()| |R8|()|()|()| |R12|()|()|()| |A|()|B|()|C|()| < 16
|()()()()()()()()()| ------------- ------------- -------------- ---------------- < 17
|()()()()()()()()()|                                                             < 18
|()()()()()()()()()| ##### ####   ###   ###  ####   ###  ####        ####   ###  < 19
|()()()()()()()()()|   #   #   #   #   #   # #   # #   # #   #           # #   # < 20
|()()()()()()()()()|   #   ####    #   ##### #   # #   # ####   ###   ###  ##### < 21
|()()()()()()()()()|   #   #   #   #   #   # #   # #   # #   #           # #   # < 22
--------------------   #   #   #  ###  #   # ####   ###  #   #       ####  #   # < 23
TRIADOR-3A v1.0.0                                                                < 24
________________________________________________________________________________ < 25

Пока будет как эмуль в линуксе (на базе эмуля haqreu с EX-расширениями), потом как эмуль в досе (а почему нет?), потом как эмуль в Xorya на PIC32 (с выходом на цветной телек), потом (возможно) как прошивка для FPGA с выходом на VGA ну и напоследок - как настоящий троичный (точнее гибридный) компьютер TRIADOR-3A построенный на троичном чипе Triador3000 :oidea: Вверху ряд 7-сегментных индикаторов (с точками) и экранчик 6x6 повторяющие интерфейс моей логисимовской версии триадора 2017 года (туда отображаются основных регистры). Далее слева экран из PEX-регистров 9x13 ( туда я буду делать ТЕТРИС : ) и справа - содержимое основных регистров (R13 представлен 2 раза - как вход и как выход) с расширенными флагами (A,B,C). Затем название TRIADOR-3A и последняя строка это вывод отладочной текстовой информации (если надо)...

P.S. В досе оно может выглядеть как-то вот так:


Attachments:
screen.gif
screen.gif [ 15.08 KiB | Viewed 10471 times ]

_________________
:dj: https://mastodon.social/@Shaos
16 May 2020 19:37
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22411
Location: Silicon Valley
Reply with quote
Shaos wrote:
В досе оно может выглядеть как-то вот так:

или так (ещё похимичил с псевдографикой):

Attachment:
screen2.gif
screen2.gif [ 20.21 KiB | Viewed 10468 times ]

P.S. Вот думаю наверное часы реального времени хотя бы с 1/10-секундной точностью не помешали бы.
Можно через виртуальную ячейку памяти данных организовать - рядом с особой ячейкой OOO OOO скажем.
2 трайта по 6 тритов, если инкрементировать их 10 раз в секунду, будут переполняться каждые 14.76 часов, а 3 трайта - каждые 448.4 дней
(чтобы поддержать полноценный unixtime с такой точностью потребуется чуть меньше 4 трайтов).
Либо сделать это программно по прерыванию от таймера 10 Гц - тогда ячейки лучше перенести в особое место, например 62,63,64 (трайт по адресу 64 считать младшим).
При обработке прерывания видимо придётся аппаратно сохранять регистры - как минимум R1,R2,R3,R4,R5,R11,R12 и R13.
Code:
 align 27
timer:
 r4 OPN
 r3 POP
 RMH
 rr -2
 RML
 rr 1
 sk IFCARRY
 jp timer1r
 rr -5
 rr 2
 rr 1
 rr -2
 sk 0
 jp timer2
 rr 5
timer1r:
 WMM
 RET ; 4 instructions
timer2:
 rr 5
 WMM
 r1 seg timer2r
 rr -13
 r3 POO
 RMH
 rr -2
 RML ; new segment starts here
 rr 1
 sk IFCARRY
 jp timer2r
 rr -5
 rr 2
 rr 1
 rr -2
 sk 0
 jp timer3
 rr 5
timer2r:
 WMM
 RET ; 4 instructions
timer3:
 rr 5
 WMM
 r3 PON
 RMH
 rr -2
 RML
 rr 1
 sk IFCARRY
 jp timer2r
 rr -5
 rr 2
 rr 1
 rr -2 ; new segment starts here
 ; ignore CARRY
 rr 5
 WMM
 RET ; 4 instructions
мда, проще по таймеру аппаратно инкрементировать - тогда особые ячейки таймера можно назначить в более логичном месте, скажем -1,-2,-3 (младшим будет трайт с адресом -1).

P.P.S. Наверное для круглоты имело бы смысл сделать счётчик времени не с 1/10, а с 1/9-секундной точностью или даже 1/27-секундной. В последнем случае для получения секунд надо будет просто отбросить младшую триаду счётчика, а в 4 трайта должен будет влезть 331.47 год (если считать 365.25 дней в году в среднем), но т.к. у нас половина диапазона будет с минусом, то это +165.73 лет в одну сторону и -165.73 в другую, т.е. от 1804 года до 2135-го (если точкой отсчёта такого юникстайма всё также считать 1 января 1970 года). Получается при частоте 27 Гц троичный таймер в
1 трайт будет покрывать 27 секунд (13.5 секунд без переполнения из плюса в минус)
2 трайта будут покрывать 5.47 часов (5 часов 28 минут и 3 секунды)
3 трайта будут покрывать 166.08 дней
4 трайта (как и было показано выше) будут покрывать 331.47 год

P.P.P.S. Хотя наверное считать десятые доли секунды всё-таки логичнее - тогда 4 трайта покроют почти 895 лет - от -447.48 до +447.48 или с 1522 по 2417 годы (если за ноль брать 1 января 1970 года), но мы можем начать с 3 трайтов, покрывающих только 448.4 дней (от 0 до 224.2 дней если использовать только положительные числа)...

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


16 May 2020 23:57
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 410 posts ]  Go to page Previous  1 ... 24, 25, 26, 27, 28  Next

Who is online

Users browsing this forum: No registered users and 13 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.