CP/M-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Memberlist || Home || Statistik || Kalender || Staff Willkommen Gast!
[ Unofficial CP/M Website ] [ Z80 Family Support Page ] [ Forum-Regeln ] [ Impressum/Kontakt ]

CP/M-Forum » CP/M 3.0 » CPM 3 Z80 und HD64180 Computer Fragen » Threadansicht

Autor Thread - Seiten: -1-
000
28.12.2006, 17:14 Uhr
hschuetz

Avatar von hschuetz

Hallo,
mal ein paar Fragen zu CPM 3
1. Wie machen CPM 3 Maschinen das mit der Bank Umschaltung
Hardwaremässig?
2. Wo ist das festgelegt? Im Bios?
3. Wie ist das mit der HD64180 CPU, wie funktioniert das da?
4. Hat mal einer sich mit der Z80180 CPU beschäftigt? Anscheinend kann
diese CPU einen HD64180 emulieren!?
Fragen über Fragen wer weiss etwas darüber?
Gruß und guten Rutsch ins neue Jahr

Hans- Werner
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
001
28.12.2006, 19:38 Uhr
HD64180CPM



Hallo Hans- Werner,

siehe mal auf www.prof80.de da gibt es auch einen Prof 180.

>2. Wo ist das festgelegt? Im Bios?

Es wird im Bios festgelegt.

>3. Wie ist das mit der HD64180 CPU, wie funktioniert das da?

Es geht per Hardware wie beim Z80 und auch per Sonderbefehle
des HD64180 oder Z80180.

> 4. Hat mal einer sich mit der Z80180 CPU beschäftigt? Anscheinend kann
diese CPU einen HD64180 emulieren!?

Z80180 und HD64180 sind fast gleich.

Z80180 Hersteller Zilog
Speicher bis 1 MB

HD64180 Hersteller Hitachi
Speicher bis 524 KB

Gruss
Rolf
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
002
28.12.2006, 21:05 Uhr
hschuetz

Avatar von hschuetz

Hallo Rolf,
diese Seite hab ich mir auch schon angesehen... nur so wirklich kann ich nicht erkennen wie die beiden 64Kb Bänke umgeschaltet werden. Schaltet CPM3 die Bänke komplett um oder wird immer Häppchenweise umgeschaltet? wie werden Daten zwischen den Bänken transferiert...
Um es klarer zu machen: mein NKC hat eine sogenannte Bankbootkarte, die steht mit einem Eprom auf Adresse 0 (Flomon) und hat zusätzlich 8 K Ram! Unter CPM2.2 funktioniert das meiner Meinung folgendermassen: Daten von Bank 0 ins Zusatz RAm, Bank umschalten Daten in Bankx kopieren. Unter CPM2.2 ist das auch kein Problem (Ramfloppy ist kein Problem) unter CPM3 scheint das aber anders zu funktionieren... Bei der Bankboot wird über eine IO Adresse die Bank umgeschaltet und die Adressen 16 bis 19 generiert.
Anscheinend ist das aber unter CPM3 nicht so hinzubekommen..oder doch?
Daaaaaaaaa ist mein Problem.. Es gab eine CPM3 Lösung mit Zusatzhardware und ich frage mich ob das wirklich nötig ist.
Gruß
Hans- Werner
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
003
29.12.2006, 10:59 Uhr
Alfred

Avatar von Alfred

Hallo zusammen,

der 64180 hat die Peripherie wie MMU/DMAC/SIO/Timer etc. intern.
Die ersten Derivate gab es mit 4-8 Mhz, später kamen noch 10Mhz Varianten und OTPs dazu:

HD64180R0
HD64A180R0P (4Mhz/DP64S) 512KB
HD64B180R0P (6Mhz/DP64S) 512KB
HD64A180R0F (4Mhz/FP80) 512KB
HD64B180R0F (6Mhz/FP80) 512KB
HD64A180R0CP (4Mhz/CP68) 512KB
HD64B180R0CP (6Mhz/CP68) 512KB

HD64180R1
HD64180R1P4 (4Mhz/DP64S) 512KB
HD64180R1P6 (6Mhz/DP64S) 512KB
HD64180R1P8 (8Mhz/DP64S) 512KB
HD64180R1F4 (4Mhz/FP-80) 1MB
HD64180R1F6 (6Mhz/FP-80) 1MB
HD64180R1F8 (8Mhz/FP-80) 1MB
HD64180R1CP4 (4Mhz/CP-68) 1MB
HD64180R1CP6 (6Mhz/CP-68) 1MB
HD64180R1CP8 (8Mhz/CP-68) 1MB

HD64180Z
HD64180ZP4 (4Mhz/DP64S) 512KB
HD64180ZP6 (6Mhz/DP64S) 512KB
HD64180ZP8 (8Mhz/DP64S) 512KB
HD64180ZF4 (4Mhz/FP-80) 1MB
HD64180ZF6 (6Mhz/FP-80) 1MB
HD64180ZF8 (8Mhz/FP-80) 1MB
HD64180ZCP4 (4Mhz/CP-68) 1MB
HD64180ZCP6 (6Mhz/CP-68) 1MB
HD64180ZCP8 (8Mhz/CP-68) 1MB

Zilog (R0 Mask)
Z64180R-4PS (4Mhz/DP64S) 512KB
Z64180R-6PS (6Mhz/DP64S) 512KB

Zilog (R1 Mask)
Z6418006PSC (6Mhz/DP64S) 512KB
Z6418008PSC (8Mhz/DP64S) 512KB
Z6418006VSC (6Mhz/CP68) 1MB
Z6418008VSC (8Mhz/CP68) 1MB

HD64180Z will be marketed by Zilog Inc.

Die internen Register belegen 64 (3FH) Adressen, die per Initalisierung auf 0-3F, 40-7F, 80-BF oder C0-FF gelegt werden könnnen.
Bei mir liegt die interne I/O auf 80H:

iobase equ 80h
iostop equ 0

;
; HD64180 initalisieren
;
ld a,iobase+iostop
out0 icr-iobase,a

Die MMU wird so intialisiert, daß der Bereich F000-FFFF immer da ist und
0-EFFF als Bank komplett umgeschaltet wird.

; mmu
ca equ 11110000b ; f000-ffff - common 1
ba equ 00000000b ; 0000-0000 - common 0
cb equ 0
bb equ 0 ; 10,20,30h... = bank 1,2,3...

;
; MMU initialisieren
;
ld a,cb
out0 cbr,a ; common base
ld a,bb
out0 bbr,a ; bank base
ld a,ca+ba
out0 cbar,a ; common- bank area

Im BIOS sieht die Umschaltung im Modul "Move" dann so aus:

title 'bank & move module for cp/m3 bios'

.z80
cseg
org 0


maclib BIOSDEF
maclib 64180

public ?xmove, ?move, ?bank
extrn @cbnk

cseg ; must be resident

?xmove:
ld (sbank),bc ; lege source und dest. bank ab
ld a,0ffh ; setze flag fuer xmove
ld (x$flg),a ;
ret

sbank: defb 0 ; source bank fuer xmove
dbank: defb 0 ; destination bank fuer xmove
x$flg: defb 0 ; flag fuer xmove aktiv
sadrs: defw 0 ; zwischenspeicher fuer xmove
dadrs: defw 0
length: defw 0


?move:
ex de,hl ; we are passed source in de and dest in hl
ld a,(x$flg) ; xmove aktiv?
inc a ;
jr z,xmv ; sprung wenn ja
ldir ; use z80 block move instruction
ex de,hl ; need next addresses in same regs
ret

xmv:
ld (dadrs),de ; save destination
ld (length),bc ; save length
ld a,(sbank) ; switch to source bank
call ?bank ;
ld de,xmv$buff ; ziel ist buffer
ldir ; uebertrage
ld (sadrs),hl ;
ld a,(dbank) ; switch to dest. bank
call ?bank ;
ld de,(dadrs) ;
ld bc,(length) ;
ld hl,xmv$buff ;
ldir ;
ld a,(@cbnk) ; orginal bank ein
call ?bank ;
ex de,hl ;
ld de,(sadrs) ;
xor a ;
ld (x$flg),a ;
ret

xmv$buff:
defs 128,0

?bank:
push bc
and 00000111b
inc a
ld b,a
ld a,0f0h
bloop: add a,10h
djnz bloop
out0 bbr,a
pop bc
ret
;

end


GENCPM sieht dann so aus:

15F>gencpm

CP/M 3.0 System Generation
Copyright (C) 1982, Digital Research

Default entries are shown in (parens).
Default base is Hex, precede entry with # for decimal

Use GENCPM.DAT for defaults (Y) ?

Create a new GENCPM.DAT file (N) ?

Display Load Map at Cold Boot (N) ?

Number of console columns (#80) ?
Number of lines in console page (#24) ?
Backspace echoes erased character (N) ?
Rubout echoes erased character (N) ?

Initial default drive (E: ) ?

Top page of memory (FF) ?
Bank switched memory (Y) ?
Common memory base page (F0) ?

Long error messages (Y) ?

Accept new system definition (Y) ?

Setting up Allocation vector for drive A:
Setting up Checksum vector for drive A:
Setting up Allocation vector for drive B:
Setting up Checksum vector for drive B:
Setting up Allocation vector for drive C:
Setting up Checksum vector for drive C:
Setting up Allocation vector for drive D:
Setting up Checksum vector for drive D:
Setting up Allocation vector for drive E:
Setting up Checksum vector for drive E:
Setting up Allocation vector for drive F:
Setting up Checksum vector for drive F:

*** Bank 1 and Common are not included ***
*** in the memory segment table. ***

Number of memory segments (#7) ?

CP/M 3 Base,size,bank (B0,40,00)

Enter memory segment table:
Base,size,bank (0E,9E,00) ?
Base,size,bank (0E,E2,02) ?
Base,size,bank (00,F0,03) ?
Base,size,bank (00,F0,04) ?
Base,size,bank (00,F0,05) ?
Base,size,bank (00,F0,06) ?
Base,size,bank (00,F0,07) ?

CP/M 3 Sys B000H 4000H Bank 00
Memseg No. 00 0E00H 9E00H Bank 00
Memseg No. 01 0E00H E200H Bank 02
Memseg No. 02 0000H F000H Bank 03
Memseg No. 03 0000H F000H Bank 04
Memseg No. 04 0000H F000H Bank 05
Memseg No. 05 0000H F000H Bank 06
Memseg No. 06 0000H F000H Bank 07

Accept new memory segment table entries (Y) ?

Setting up directory hash tables:
Enable hashing for drive A: (N) ?
Enable hashing for drive B: (N) ?
Enable hashing for drive C: (N) ?
Enable hashing for drive D: (N) ?
Enable hashing for drive E: (Y) ?
Enable hashing for drive F: (Y) ?

Setting up Blocking/Deblocking buffers:

The physical record size is 0400H:

Available space in 256 byte pages:
TPA = 00F1H, Bank 0 = 009EH, Other banks = 0552H

Number of directory buffers for drive A: (#1) ?

Available space in 256 byte pages:
TPA = 00F1H, Bank 0 = 0099H, Other banks = 0552H

Number of data buffers for drive A: (#1) ?
Allocate buffers outside of Common (Y) ?

Available space in 256 byte pages:
TPA = 00F1H, Bank 0 = 0099H, Other banks = 054EH

Number of directory buffers for drive B: (#1) ?

Available space in 256 byte pages:
TPA = 00F1H, Bank 0 = 0095H, Other banks = 054EH

Number of data buffers for drive B: (#1) ?
Allocate buffers outside of Common (Y) ?

Available space in 256 byte pages:
TPA = 00F1H, Bank 0 = 0095H, Other banks = 054AH

Number of directory buffers for drive D: (#1) ?

Available space in 256 byte pages:
TPA = 00F1H, Bank 0 = 0091H, Other banks = 054AH

Number of data buffers for drive D: (#1) ?
Allocate buffers outside of Common (Y) ?

The physical record size is 0200H:

Available space in 256 byte pages:
TPA = 00F1H, Bank 0 = 0091H, Other banks = 0546H

Number of directory buffers for drive E: (#8) ?

Available space in 256 byte pages:
TPA = 00F1H, Bank 0 = 0081H, Other banks = 0546H

Number of data buffers for drive E: (#8) ?
Allocate buffers outside of Common (Y) ?

Available space in 256 byte pages:
TPA = 00F1H, Bank 0 = 0080H, Other banks = 0536H

Number of directory buffers for drive F: (#8) ?

Available space in 256 byte pages:
TPA = 00F1H, Bank 0 = 0070H, Other banks = 0536H

Number of data buffers for drive F: (#8) ?
Allocate buffers outside of Common (Y) ?

The physical record size is 0080H:

Available space in 256 byte pages:
TPA = 00F1H, Bank 0 = 006FH, Other banks = 0526H

Number of directory buffers for drive C: (#1) ?

Available space in 256 byte pages:
TPA = 00F1H, Bank 0 = 006EH, Other banks = 0526H


Accept new buffer definitions (Y) ?

BNKBIOS3 SPR F700H 0900H
BNKBIOS3 SPR DB00H 1500H
RESBDOS3 SPR F100H 0600H
BNKBDOS3 SPR AD00H 2E00H

*** CP/M 3.0 SYSTEM GENERATION DONE ***

Viele Grüsse
Alfred
--
Das Leben ist verdammt kurz (meine Meinung)!

Dieser Post wurde am 29.12.2006 um 11:01 Uhr von Alfred editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
004
29.12.2006, 11:05 Uhr
Alfred

Avatar von Alfred

Und hier noch die M80 Definitionen und Macros für den HD64180:

;
; sio
;
cntla0 equ 0+iobase
cntla1 equ 1+iobase
cntlb0 equ 2+iobase
cntlb1 equ 3+iobase
stat0 equ 4+iobase
stat1 equ 5+iobase
tdr0 equ 6+iobase
tdr1 equ 7+iobase
rdr0 equ 8+iobase
rdr1 equ 9+iobase
cntr equ 0ah+iobase
trdr equ 0bh+iobase
;
; timer
;
tmdr0l equ 0ch+iobase
tmdr0h equ 0dh+iobase
rldr0l equ 0eh+iobase
rldr0h equ 0fh+iobase
tcr equ 10h+iobase
;
; dma
;
sar0l equ 20h+iobase
sar0h equ 21h+iobase
sar0b equ 22h+iobase
dar0l equ 23h+iobase
dar0h equ 24h+iobase
dar0b equ 25h+iobase
bcr0l equ 26h+iobase
bcr0h equ 27h+iobase
mar1l equ 28h+iobase
mar1h equ 29h+iobase
mar1b equ 2ah+iobase
iar1l equ 2bh+iobase
iar1h equ 2ch+iobase
bcr1l equ 2eh+iobase
bcr1h equ 2fh+iobase
dstat equ 30h+iobase
dmode equ 31h+iobase
dcntl equ 32h+iobase
;
; int, trap, refresh
;
il equ 33h+iobase
itc equ 34h+iobase
rcr equ 36h+iobase
;
; mmu
;
cbr equ 38h+iobase
bbr equ 39h+iobase
cbar equ 3ah+iobase
;
; i/o control
;
icr equ 3fh+iobase
;
; macros
;
?a equ 7
?b equ 0
?c equ 1
?d equ 2
?e equ 3
?h equ 4
?l equ 5
??bc equ 0
??de equ 1
??hl equ 2
??sp equ 3
;
slp macro
defb 11101101b
defb 01110110b
endm
;
mlt macro ?r
defb 11101101b
defb 01001100b+(??&r and 3) shl 4
endm
;
in0 macro ?r,?p
defb 11101101b
defb 00000000b+(?&?r and 7) shl 3
defb ?p
endm
;
out0 macro ?p,?r
defb 11101101b
defb 00000001b+(?&?r and 7) shl 3
defb ?p
endm
;
otim macro
defb 11101101b
defb 10000011b
endm
;
otimr macro
defb 11101101b
defb 10010011b
endm
;
otdm macro
defb 11101101b
defb 10001011b
endm
;
otdmr macro
defb 11101101b
defb 10011011b
endm
;
tstio macro
defb 11101101b
defb 01110100b
defb ?f
endm
;
tstr macro ?r
defb 11101101b
defb 00000100b+(?&?r and 7) shl 3
endm
;
tstd macro ?p
defb 11101101b
defb 01100100b
defb ?p
endm
;
tstp macro
defb 11101101b
defb 00110100b
endm
;
tst macro
defb 11101101b
ifidn <'&?r'>,<'(hl)'>
defb 00110100b
else
ifdef ?&?r
defb 00000100b+(?&?r and 7) shl 3
else
defb 01100100b
defb ?r
endif
endif
endm
--
Das Leben ist verdammt kurz (meine Meinung)!
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
005
29.12.2006, 13:02 Uhr
hschuetz

Avatar von hschuetz

Hallo Alfred,
wenn ich das so richtig sehe wird der Rambereich f000 bis ffff der Bank 0 bei dir in jeder weiteren Bank eingeblendet. Ist das so richtig? Das würde bedeuten, das dir immer 8K Speicher fehlen, da sie ja alles zum verschieben zwischen den Bänken enthalten! Oder sind die 8K in allen Bänken vorhanden.

ManoMan so ganz hab ich das noch nicht kapiert...
Schaltest du dann mit der I/O einzelne Rambereiche ein und aus oder wie funktioniert das...???
tschuldigung für die Fragerei... aber ich möcht kapieren warum mit cpm2.2 kein Problem besteht.. mit CPM3 jedoch meine Banklogik nicht anpassbar ist.
Mittlerweile ist mir ja bekannt geworden, das bei meinem NKC die komplette Speicherverwaltung für CPM3 umgemodelt werden muss... nur warum...??
Gruß
Hans- Werner
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
006
29.12.2006, 14:44 Uhr
Alfred

Avatar von Alfred

Hallo Hans- Werner,

ja das ist richtig, der Bereich von f000h bis ffffh ist immer eingeblendet (4K).
Dort befindet sich der residente Teil von BIOS und Buffern, ergibt bei mir eine TPA von 60K.
Die MMU macht nichts anderes als die Übersetzung des logischen Adressbereiches
von 64K 16Bit (0-ffffh) in den physikalischen Bereich von 512k 19Bit (0-7ffffh) oder 1Mb 20Bit (0-fffffh).

Grüsse
Alfred
--
Das Leben ist verdammt kurz (meine Meinung)!
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
007
29.12.2006, 14:54 Uhr
HD64180CPM



Hallo Hans- Werner,

auch der Commodore 128 hat ein CP/M 3 mit Bank 0 und Bank 1.
Der Common-Bereich ist von E000H bis FFFFH.

Dieser Bereich ist jederzeit ohne irgendwelches Umschalten ansprechbar.

Gruss
Rolf
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
008
29.12.2006, 16:01 Uhr
hschuetz

Avatar von hschuetz

Hallo,
wie wird das denn anders gemacht als unter CPM2.2, bzw wie wird das Hardwaremässig beim Z80 gemacht?? Oder kann soetwas nur die mmu vom hd64180. Wie soll man das steuern? wenn ich die letzten 4K festnagel (adressen A15 bis A19 ignorieren?)... Wie jetzt....Also bin ich jetzt etwas ratlos....
Gruß
Hans- Werner
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
009
29.12.2006, 23:34 Uhr
runni



Hi,

sehr schön wird es im Prof80 Manual erklärt, einfach mal downloaden und anschauen.

http://oldcomputers.dyndns.org/public/pub/rechner/conitec/manual/prof80_man_bw_ger.pdf

auch das hier könnte helfen:

http://oldcomputers.dyndns.org/public/pub/rechner/conitec/manual/prof180x.pdf

Gruß, Ralf N.

Guten Rutsch ins Jahr 2007
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
010
30.12.2006, 18:55 Uhr
HD64180CPM



Hallo Hans- Werner,

wenn Dich das mit der Z180MMU interessiert siehe folgenden Link.

http://www.harrmann-rolf.de/9.html

Gruss
Rolf
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
011
30.12.2006, 19:22 Uhr
HD64180CPM



Hallo Hans- Werner,

wenn Dich das mit der Z180MMU interessiert siehe folgenden Link.

http://www.hd64180cpm.de/12707.html

Gruss
Rolf
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
012
02.01.2007, 12:42 Uhr
hschuetz

Avatar von hschuetz

Hallo Rolf,
deine Seiten werfen eher mehr Fragen auf, als sie beantworten... Ich hoffe ich bekomme die Zusatzkarte bald und dann schaun wir mal was da so abgeht.
Also soweit hab ich es kapiert CPM3 braucht einen Common Bereich (4K) welcher in allen Bänken genutzt wird, über einen IO Bereich werden die Adressleitungen A16 bis A19 generiert wobei der Commonbereich immer auf der Bank 0 liegt!.. mal sehen was meine Hardware dazu sagt wenn ich versuche Ihr das beizubringen...
Gruß
Hans- Werner
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
013
03.01.2007, 18:28 Uhr
hschuetz

Avatar von hschuetz

Hallo Leute,
hab heute mal in meine Quellen gesucht wo der Common-Bereich ist(sein sollte), konnte nichts richtiges finden, aber

; ****************
; Systemadressen
; ****************

tpa equ 00100h ; Start des TPA-Bereiches
ccp equ tpa ; Einsprung in CCP
bbram equ 04000h ; Start RAM in BOOT-Karte
monseg equ 0f400h ; Start des Monitorsegmentes
ioseg equ 0fc00h ; IO-Segment USER-AREA

; nachfolgende UP's rufen Programmsegmente in MONIO
; (den IO-Segment von ELMON ) auf - welche ihrerseits
; auf das BOOT-ROM-Segment in FLOMON zurueckgreifen.
; Diese (etwas umstaendliche) Prozedur ist fuer CP/M3
; notwendig, da hier der IO-Einsprung aus verschiedenen
; Banken erfolgen kann - FLOMON dies aber nicht unterstuetzt
; gleichzeitig wurde der Vorteil einer 3k groesseren TPA
; erreicht

econist equ 0fc00h ; Konsolenstatus (EIN) aus MONIO
econin equ 0fc03h ; Konsoleneingabe aus MONIO
econout equ 0fc06h ; Standart-Ausgabe
esetbnk equ 0fc24h ; Bankumschaltung (mit ROM-Ausschaltung)
efloppy equ 0fc27h ; Floppy-Treiber
ecurbnk equ 0fc34h ; Bankadresse (gueltige)
e@dbnk equ 0fc35h ; @DBNK in MONIO
e@cbnk equ 0fc36h ; @CBNK in MONIO

auf meiner Bankbootkarte ist 8K Ram welches auch ansprechbar ist!!
Nun bin ich mir nicht sicher wie der Commonbereich hier aussiehen muss.
Mit ein bisschen Hardware wäre es kein Problem einen Commonbereich in der Bank 0 in allen anderen Bänken zur Verfügung zu stellen, ob das aber mein Problem löst. Wer nochmals schauen möchte (alles Files sind DOS lesbar)
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
014
03.01.2007, 18:31 Uhr
hschuetz

Avatar von hschuetz

Sorry zu schnell gedrückt...
hier der Link schuetz.thtec.org/cpm3.exe, herunterladen, ausführen, ist alles gezippt.
Gruß Hans- Werner
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
Seiten: -1-     [ CP/M 3.0 ]  



gaby.de

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek