Post Reply 
ERAMCO MLDL MCODE Source Listings
04-01-2018, 08:41 PM
Post: #1
ERAMCO MLDL MCODE Source Listings
I recently acquired a hard copy of the ERAMCO MLDL ROM MCODE source code listing, complete with lots of detailed comments, so I scanned it to share with the community. Angel has confirmed this is *not* the same ROM image that is in the 41CL library, and I have no other info on where it's from or what it's for; most likely this is an earlier version than the one in the CL ROM package, but I share it here for those interested in some well-documented sophisticated MCODE from back in the day.

ERAMCO MLDL MCODE Listing, part-1

ERAMCO MLDL MCODE Listing, part-2

If anyone can provide insights into what this was for, and how it could be relevant or better understood, please share that information.

--Bob Prosperi
Find all posts by this user
Quote this message in a reply
04-02-2018, 10:46 PM (This post was last modified: 04-12-2018 03:35 AM by Didier Lachieze.)
Post: #2
RE: ERAMCO MLDL MCODE Source Listings
Thanks for sharing !

There are some documents on TAS about the ERAMCO MLDL, and some pictures on Meindert's HP41 Museum.

Here is a review from the JPC n12 (March 1984), which was originally published along with another user evaluation in the PPC Journal - V11N1 Jan-Feb 1984:

Quote:ON THE ADVANTAGES OF USING AN ERAMCO SYSTEMS MLDL-BOX

Although most of the issues that will be covered by this article are common knowledge amongst MLDL users, specially ERAMCO Systems ESMLDL1 users, there are still enough readers of this magazine that have not even heard of an MLDL box, let alone know the differences and advantages of one or another MLDL-box. This article is intended to give a better view on the ERAMCO Systems ESMLDL1 MLDL-box without trying to give an opinion on other MLDL-boxes.

HARDWARE OVERVIEW

To give a view on the ESMLDL1 I will first review the hardware before turning to the included software. The hardware consists of a box measuring 6.25" * 3.25" * 2.0" (160 * 80 * 54 mm) with a plug to the HP-41 on a flat cable of approx. 6" (15 cm) length. The box is made of PVC and has cutouts for the cable and for the switches that are used to en/dis-able the RAM pages and to select the RAM page address.

Internaly you will find three printed circuit boards each filled to maximum with integrated circuits and a few discrete components. One printed circuit board is reserved for the placement of 12 EPROMS forming, together 24K Bytes of MLDL Eprom space. Each two (2) Eproms form one 4K page and can be en/dis-abled independently of the other Eproms on this board. Eproms have a fixed address in the HP-41 addressing space, occupying almost all available pages in the port addressing space. This results in the use of all ports except for a part of port 4, which remains free for use by the Card reader and a part of port 2 which could be used for a 4K application module.
The second board in this box is used to connect everything together and to connect the box to the HP-41. This is the controller board of the system containing timing and read/write logic for the ESMLDL1. Lots can be said on how to interface a MLDL to the outside world and to the HP-41, let it suffice to say here that the electronics of this board are well designed and able to cope with most HP-41's around. Machines running at more than 2x might suffer some problems due to the reduced load capability of the HP-41 circuits at those speeds. No other problems have been found until now.
The third board is the RAM board of the ESMLDL1 box and is the most interesting part of an MLDL box. This board contains 8K bytes of continuous memory (as long as the back-up battery is not empty) segmented in two blocks of 4K each. Each of these blocks can be placed independently of the other on a 4K address boundry. The en/dis-abling of one page is also independent of the other page and independent of the Eprom pages as long as no two pages share the same addressing space while being enabled. (Two or more pages can reside in the same address space but a maximum of one page can be enabled in this address space). An interesting feature of this RAM card is that it uses standard components and readily available parts to minimize cost and realize an 8K*10 bit memory space.

Memory retention is warranted through the use of a lithium battery that retains the memory contents for approx. 5 months, depending on how often the box is left connected to the HP-41. No current will be drawn from this battery as long as the box is connected to the HP-41. So the longer you leave the box connected to your system, the longer your battery will last.

Here also lays one weak point of the ESMLDL1: to replace the battery you will need a soldering iron as the battery is soldered into place. It is not a large operation however. Ask a friend if you are inexperienced with soldering irons. The battery is a standard Radio Shack part and should be available in most countries of the world. You might even consider to replace this battery with two used HP-41 batteries giving 3 volts together. It works and is a nice way to get most out of the hardware you have to buy for your system.

SOFTWARE OVERVIEW

A MLDL box without software is like a car without petrol. You can look at it, you can clean it and show it but you can do nothing useful with it. To an MLDL box applies the same. Without an operating system of some kind you will not be able to write into the memory of your box.This compared to a Protocoder is a disadvantage. The speed and ease of data entry using the included operating system Eprom try to makeup for this disadvantage. As the ESMLDL1 box is designed to conform to the existing standards in MLDL world all software written for other MLDL boxes will run on the ESMLDL1. The one exception is the software that uses the memory write properties of the ProtoCoder system. All other software, including the software of ProtoCoder systems, will run on the ESMLDL1.

The included software consists of three types of routines. The first type of routines cover all the actions that modify the memory contents of the ESMLDL1 box. These routines are a general read/modify/write routine, a routine to copy programs to MLDL memory area (the counterpart of COPY in the HP-41) a move utility and routines to clear the MLDL RAM, to save the contents of this RAM and various other utilities changing the contents of the RAM.
The second type of routines simplifies the access of the MLDL RAM without modifying anything in this area. Included functions are a function to locate a specified word in the MLDL RAM, to find the last used word in this RAM, to check memory contents for alterations (memory checksum). Also included in this section of routines is a Compile routine that calculates all XEQ's and GTO's, changing the GTO shape from two to three bytes if needed. Of course a COD and a DECOD function (NH and HN) are included to code and decode non normalized numbers. To even further enhance the use of this MLDL, routines to disassemble hex codes into instruction mnemonics are included, as well as routines to count the length of a program in bytes, to perform a selective catalog of user ports (CAT 2 starting at a specified ROM address) and a few functions to be used while writing synthetic instructions.
The third type of routines are USER-Code routines utilizing a few of the routines described above to disassemble a block of code, to store 4K of RAM on cassette and to retrieve a 4K block from cassette.

GENERAL COMMENTS

All in all this box presents one of the best values for money you can get in MLDL land now-a-days. The drawbacks are the high initial investment for those persons who only want to experiment a little with MLDL boxes, the size (twice as thick as a HP-41 and slightly longer) and the battery replacement. (See comment in hardware section.)

The main positive points are the page addressability of the RAM section the en/dis-abling scheme of Eproms and RAM and the use of the standard 040 write NOP. Another major positive point is, the use of separate Eproms for each 4K block. The box is FCC approved as is requested for computer equipment. Warranty is 180 days worldwide on materials and workmanship for the hardware as well as for the Eprom set (4K) that comes with the box.

ERAMCO Systems has been in the MLDL and Eprom market for almost one year and a half and has proven to be a company with products worth using. Service of boxes in hardware sense, repairs and requested updates are handled in a neat way, software in various fields is available and can be delivered with the box on request. (not free of charge)
Find all posts by this user
Quote this message in a reply
04-02-2018, 11:50 PM (This post was last modified: 04-03-2018 01:10 AM by Sylvain Cote.)
Post: #3
RE: ERAMCO MLDL MCODE Source Listings
Hello Robert,
One of my MLDL boxes is an ERAMCO SYSTEMS ESMLDL 1 (ES 83120A) box.
The box has an EPROM containing the ERAMCO-MLDL ROM image that fit your listing.
I also have the HP-41 ES MLDL OS User Manual for it. ;-)
Sylvain
edit: add link to user manual
Find all posts by this user
Quote this message in a reply
04-03-2018, 12:24 AM
Post: #4
RE: ERAMCO MLDL MCODE Source Listings
These responses are great, more than I expected, especially so quickly; thanks for contributing guys.

Now if only we could find some way to clone that hardware as easily as the software...

--Bob Prosperi
Find all posts by this user
Quote this message in a reply
04-03-2018, 01:12 AM
Post: #5
RE: ERAMCO MLDL MCODE Source Listings
bump! (see previous message above)
Find all posts by this user
Quote this message in a reply
04-03-2018, 07:18 PM
Post: #6
RE: ERAMCO MLDL MCODE Source Listings
Thanks for the manual Sylvain !

There seems to be at least 3 versions of the ERAMCO ESMLDL OS ROM which have each some unique functions.

The first one seems to be the one listed in the JPC n13 (April 1984) and also referenced by the ES 83120A Eramco MLDL OS Manual available on TAS as both have the same FAT list with some user functions at the end. I’m not aware of a corresponding ROM file:

Code:
XROM 11        28 FONCTIONS
00: F3FF ERAMCO-MLDL
01: F4C5 RAMWR
02: F2EC MMTORAM
03: F3AD AFAT
04: F202 DFAT
05: F0E0 M0VE
06: F17E CLBL
07: F6D7 COPYR
08: F6F7 ROMSUM
09: F680 REG>ROM
10: F77A ---
11: FC4D COMPILE
12: F13A LOCA
13: F119 LROM
14: F164 COD
15: F16F DECOD
16: FD67 ROMCHKX
17: F61C ROM>REG
18: F803 MNEM
19: F725 DISASM
20: F453 CAT
21: F1B2 CBT
22: F3E8 GE
23: F77A ---
24: FE02 "WROM
25: FE99 "RROM
26: FF3D "XRSYN
27: FF08 "MDIS

The second is the one corresponding to the source file you just published which is matching Sylvain’s manual and the Eramco MLDL OS X11 ROM from TAS. The difference with the first version seems to be mainly due to the previous user functions being replaced by new Mcode functions.

Code:
ESMLDL-OS XROM 11,00       
RAMWR     XROM 11,01       RAM WRite
MMTORAM   XROM 11,02       Copy Program from Main Memory to RAM
AFAT      XROM 11,03       Append FAT entry
DFAT      XROM 11,04       Delete FAT entry
MOVE      XROM 11,05       MOVE RAM block
CLBL      XROM 11,06       Clear RAM block
COPYR     XROM 11,07       Copy ROM page
ROMSUM    XROM 11,08       Verify ROM checksum
REG>ROM   XROM 11,09       Registers to ROM
---       XROM 11,10       NOP (spacer between functions) routine
COMPILE   XROM 11,11       Add jump distance to every GTO & XEQ
LOCA      XROM 11,12       Locate word in 4K ROM/EPROM/MLDL-RAM
LROM      XROM 11,13       Last ROM word
COD       XROM 11,14       Code - hex in alpha to binary in X
DECOD     XROM 11,15       Decode binary in X to hex in alpha
ROMCHKX   XROM 11,16       ROM Check by X-register
ROM>REG   XROM 11,17       ROM to Registers
MNEM      XROM 11,18       Give HP-mnemonic for M-Code instruction
DISASM    XROM 11,19       Put contents of ROM into the display
CAT       XROM 11,20       Catalog
CBT       XROM 11,21       Count Bytes
SYNT      XROM 11,22       Synthesize 2 or 3 byte instructions
GE        XROM 11,23       Go to .END.
---       XROM 11,24       NOP (spacer between functions) routine
SAVEROM   XROM 11,25       Save ROM contents to cassette tape
GETROM    XROM 11,26       Input ROM contents from cassette tape
CMPDL     XROM 11,27       Compile and delete numeric labels
IPAGE     XROM 11,28       Initialize RAM page before loading
MKPR      XROM 11,29       Make programs private w/o card reader

The third one has a different XROM number (10 instead of 11), a different FAT organization, some different functions and is corresponding to the ROM in the 41CL library and to the Eramco MLDL OS X10 ROM on TAS:

Code:
-XROM----ADDR--FUNCTION --------------
010.00   A85B  ESMLDL-OS   MCode XROM 10.00  "ESMLDL-OS"
010.01   A5C1  AFAT        MCode XROM 10.01  "AFAT"
010.02   A51A  CLBL        MCode XROM 10.02  "CLBL"
010.03   AB6B  CLEAR       MCode XROM 10.03  "CLEAR"
010.04   A783  COPYR       MCode XROM 10.04  "COPYR"
010.05   AFBA  CRNAME      MCode XROM 10.05  "CRNAME"
010.06   A573  DFAT        MCode XROM 10.06  "DFAT"
010.07   A435  GETROM      MCode XROM 10.07  "GETROM"
010.08   A041  IPAGE       MCode XROM 10.08  "IPAGE"
010.09   A683  MMTORAM     MCode XROM 10.09  "MMTORAM"
010.10   A86E  MOVE        MCode XROM 10.10  "MOVE"
010.11   A758  ROMSUM      MCode XROM 10.11  "ROMSUM"
010.12   A90D  UPDBL       MCode XROM 10.12  "UPDBL"
010.13   ACB9  UPDFAT      MCode XROM 10.13  "UPDFAT"
010.14   AF19  UPDLBL      MCode XROM 10.14  "UPDLBL"
010.15   AA99  UPD4K       MCode XROM 10.15  "UPD4K"
010.16   A5F7  --          MCode XROM 10.16  "--"
010.17   A533  CBT         MCode XROM 10.17  "CBT"
010.18   A099  CMPDL       MCode XROM 10.18  "CMPDL"
010.19   A50A  COD         MCode XROM 10.19  "COD"
010.20   A392  COMPILE     MCode XROM 10.20  "COMPILE"
010.21   A514  DECOD       MCode XROM 10.21  "DECOD"
010.22   AD9A  DISASS      MCode XROM 10.22  "DISASS"
010.23   A4F1  LOCA        MCode XROM 10.23  "LOCA"
010.24   A4D2  LROM        MCode XROM 10.24  "LROM"
010.25   A7A2  ROMCHKX     MCode XROM 10.25  "ROMCHKX"
010.26   A3DF  SAVEROM     MCode XROM 10.26  "SAVEROM"
010.27   AFF4  JGB&ML      MCode XROM 10.27  "JGB&ML"
Find all posts by this user
Quote this message in a reply
04-03-2018, 08:39 PM
Post: #7
RE: ERAMCO MLDL MCODE Source Listings
Thanks for the research and detailed notes Didier.

I recall that there were different model MLDL devices from ERAMCO, but I don't recall this fine level of detail, but... I do have (from somewhere? maybe TOS) a 1984 Price list from ERAMCO which does describe some of these differences, that may help.

ERAMCO Systems - price list 1984

--Bob Prosperi
Find all posts by this user
Quote this message in a reply
04-05-2018, 05:11 AM (This post was last modified: 04-05-2018 05:13 AM by Ángel Martin.)
Post: #8
RE: ERAMCO MLDL MCODE Source Listings
Adding to the seemingly confusing versions and revisions situation, there is another EPROM that looks like a derivative / evolution of the initial ones. That's the -MLEPROM_1H, which contents are shown below. The XROM# is also different, #4

I've been looking into the code for this last one in more detail. It *assumes* that the X-Functions module is plugged in page #8 and makes direct calls to addresses in that page, not a good practice but I understand why they did it back them. I have converted many of those calls to a CX-based schema, with the exception of cases were the routine called is in the bank-switched page #5 - this makes two functions unusable, "SUB$" and "KEY".

Code:
XROM    Function
XROM 04.00    -MLEPROM_1H
XROM 04.01    BCDBIN
XROM 04.02    GOLONGA
XROM 04.03    RXR
XROM 04.04    RXL
XROM 04.05    X+Y
XROM 04.06    X+X
XROM 04.07    NSTO
XROM 04.08    NRCL
XROM 04.09    CODE
XROM 04.10    DECODE
XROM 04.11    PURFCN
XROM 04.12    FAT
XROM 04.13    NAME
XROM 04.14    NAME?
XROM 04.15    "P8"
XROM 04.16    XCAT
XROM 04.17    AVIEW
XROM 04.18    TFX
XROM 04.19    ROM-REG
XROM 04.20    REG-ROM
XROM 04.21    READEM
XROM 04.22    WRTEM
XROM 04.23    NEWDIR
XROM 04.24    FLLENG
XROM 04.25    INIT
XROM 04.26    COPYROM
XROM 04.27    MNEMO
XROM 04.28    DCDROM
XROM 04.29    HEXPR
XROM 04.30    D-H
XROM 04.31    H-D
XROM 04.32    ENTRY?
XROM 04.33    POKE
XROM 04.34    XYZPOKE
XROM 04.35    SUB$
XROM 04.36    COMPARE
XROM 04.37    LB
XROM 04.38    NNN
XROM 04.39    /MOD
XROM 04.40    XYZASN
XROM 04.41    NOT
XROM 04.42    USER
XROM 04.43    COMPILE
XROM 04.44    NEWCAT
XROM 04.45    BINBCD
XROM 04.46    KEY
XROM 04.47    MLIADDR
XROM 04.48    RSUM

"To live or die by your own sword one must first learn to wield it aptly."
Find all posts by this user
Quote this message in a reply
04-10-2018, 04:10 PM
Post: #9
RE: ERAMCO MLDL MCODE Source Listings
Very nice to see old MCODE with comments!

Thank you for sharing!

I find this area of the forum very hard to find things in, due to its default sort order. I just found this by accident as it happened to show up as the most recent post in the overview page.

Håkan
Find all posts by this user
Quote this message in a reply
04-11-2018, 01:30 AM
Post: #10
RE: ERAMCO MLDL MCODE Source Listings
(04-10-2018 04:10 PM)hth Wrote:  Very nice to see old MCODE with comments!

Thank you for sharing!

I find this area of the forum very hard to find things in, due to its default sort order. I just found this by accident as it happened to show up as the most recent post in the overview page.

Håkan

Thanks, glad it's of some use and interesting.

When you come to the various Fora that are not sorted by date by default, I find the easiest thing to do (contrary to the instructions at the top of the page) is to just click on "Last Post" at the top of the rightmost column and the contents are now sorted by date with newest posts on top, the way God intended them to be seen.

--Bob Prosperi
Find all posts by this user
Quote this message in a reply
04-11-2018, 06:06 AM
Post: #11
RE: ERAMCO MLDL MCODE Source Listings
(04-11-2018 01:30 AM)rprosperi Wrote:  When you come to the various Fora that are not sorted by date by default, I find the easiest thing to do (contrary to the instructions at the top of the page) is to just click on "Last Post" at the top of the rightmost column and the contents are now sorted by date with newest posts on top, the way God intended them to be seen.

Triple thank you!

Now I can actually follow this area. I was here so seldom due to this issue, now I know an easy work around for it.

Håkan
Find all posts by this user
Quote this message in a reply
04-11-2018, 04:07 PM
Post: #12
RE: ERAMCO MLDL MCODE Source Listings
I have a question for the MCode gurus here: do you know for which assembler the ERAMCO source code has been written?

I mean for example the first function name is defined by:
Code:
       NAM      20 IPAGE   say we want a two digit numeric argument

Which tool does support this type of function name definition? I don’t think it’s supported by SDK41 nor SDS II …
Find all posts by this user
Quote this message in a reply
04-11-2018, 04:36 PM
Post: #13
RE: ERAMCO MLDL MCODE Source Listings
(04-11-2018 04:07 PM)Didier Lachieze Wrote:  I have a question for the MCode gurus here: do you know for which assembler the ERAMCO source code has been written?

I mean for example the first function name is defined by:
Code:
       NAM      20 IPAGE   say we want a two digit numeric argument

Which tool does support this type of function name definition? I don’t think it’s supported by SDK41 nor SDS II …

I have no idea. Back in the days I think the only alternative available was the one from HP, but I do not know when it became available to the public. It does not match that source for sure.

My guess is that some wrote assemblers on their own and kept them by themselves. This was at a time when it was not so easy to distribute software in small numbers and the computer market was very diversified.

IBM PC was just out and way too expensive for individuals.

I had a Nut assembler for the Commodore 64, written in 6502 assembly and the poor machine had to struggle to bring in the source in three parts from the super slow floppy disk. I think it took a minute or two (caused by the floppy disk, the assembler itself did the work in a couple of seconds). I used bit banging on the parallel port to download it to a hand built MLDL, which I remember took 37 seconds.

That assembler was never released. I do not remember exactly why and I do not even remember considering it. Maybe it was because I focused on the 6502 variant, which never reached the market as the distributor eventually declined it.

I suspect other may have made their own assemblers for in-house use, and my guess this source is for such assembler.

I am very happy this source code was shared. I have just started to collect such matter as I hope to resurrect some using modern tools and make it available, when time permits.

If there are more out there, bring it on! I want to see original comments and it does not matter if it is hand written.

Håkan
Find all posts by this user
Quote this message in a reply
04-11-2018, 07:06 PM
Post: #14
RE: ERAMCO MLDL MCODE Source Listings
(04-11-2018 04:07 PM)Didier Lachieze Wrote:  Which tool does support this type of function name definition? I don’t think it’s supported by SDK41 nor SDS II …

IIRC, and that's a very big initial "I", ERAMCO supplied their own tools Assembler, loader, etc.) so it's possible this code is written in it's own flavor of MCODE mnemonics.

Warren's SDK41 is much later, and SDS II also snuck its way out of HP well after there were a couple of community assemblers already established.

Sorry I can't help much here.

--Bob Prosperi
Find all posts by this user
Quote this message in a reply
04-11-2018, 08:18 PM
Post: #15
RE: ERAMCO MLDL MCODE Source Listings
(04-11-2018 07:06 PM)rprosperi Wrote:  IIRC, and that's a very big initial "I", ERAMCO supplied their own tools Assembler, loader, etc.) so it's possible this code is written in it's own flavor of MCODE mnemonics.

Warren's SDK41 is much later, and SDS II also snuck its way out of HP well after there were a couple of community assemblers already established.

Sorry I can't help much here.

Interesting, does anyone know about these assemblers and what host computers were used?

I was so lost from the community (living in a desolate place of the world) after PPC took my renewal cheque and ran.

Håkan
Find all posts by this user
Quote this message in a reply
01-28-2022, 10:20 PM
Post: #16
RE: ERAMCO MLDL MCODE Source Listings
Is there today anyone interested in a set of eramco boxes, eprom’s. Just wondering, since they were build in the early 80-ties. Are there still folks who love the tinker withere HP41 and these boxes?
Ron
Find all posts by this user
Quote this message in a reply
01-30-2022, 06:31 AM
Post: #17
RE: ERAMCO MLDL MCODE Source Listings
(01-28-2022 10:20 PM)RonP Wrote:  Is there today anyone interested in a set of eramco boxes, eprom’s. Just wondering, since they were build in the early 80-ties. Are there still folks who love the tinker withere HP41 and these boxes?
Ron
I am Smile PM sent!
Find all posts by this user
Quote this message in a reply
01-30-2022, 12:02 PM
Post: #18
RE: ERAMCO MLDL MCODE Source Listings
How good to hear. I was cleaning out my cupboards and found a few of these boxes, eproms and documentation from the past including the first prototype on a PCB board.
I was one of the 3 founders of Eramco (the “R”). The othe two founders were “A” from Arne and “M” from Martin.
We did assembled quite a few of the literraly on the kitchentable in Amsterdam. Jan Buitenhuis who was a KLM pilot took care of the FCC approval by visiting them with the box for testing etc.
We had a lot of fun that time and worries, scaling up up from a breadboard design to a nice reliable PCB in a solid enclosure was for sure not an easy piece of cake for us as 3 enthousiast students at that time. We made the masks for the PCB’s by hand with plastic sheets and black tape.

As I came across in my cupboard the old prototype it made me wonder if there were still folks using these or doing microcoding, using this nice old hardware etc.

Kind regards from the Netherlands,

Ronald
Find all posts by this user
Quote this message in a reply
10-20-2022, 09:06 PM
Post: #19
RE: ERAMCO MLDL MCODE Source Listings
To my suprise i thing all the shared version off the ES-MLDL-X11 ROM don't work. I try CLBL on a real HP-41CX with the ROM in a Clonix-modul or with the ROM as 2 EPROMs in a real MLDL. The Result is allways the same: CLBL don't come back. With the X10 Version it works. The iOS app i41CX shows the same behave. Also RAMRW break after the input of one or two adress-digits.

Sylvain, please, is it possible for you to share your ERAMCO-MLDL ROM image?
Find all posts by this user
Quote this message in a reply
10-21-2022, 03:48 AM
Post: #20
RE: ERAMCO MLDL MCODE Source Listings
Hello Klaus,

(10-20-2022 09:06 PM)Klaus Overhage Wrote:  Sylvain, please, is it possible for you to share your ERAMCO-MLDL ROM image?
Sure, here it is → ESMLDL.ROM

CAT 2 listing (ROM revision is MLDL)
Code:
ERAMCO-MLDL
RAMWR
MMTORAM
AFAT
DFAT
MOVE
CLBL
COPYR
ROMSUM
REG>ROM
---
COMPILE
LOCA
LROM
COD
DECOD
ROMCHKX
ROM>REG
MNEM
DISASM
CAT
CBT
GE
---
'WROM
'RROM
'XRSYN
'MDIS
Find all posts by this user
Quote this message in a reply
Post Reply 




User(s) browsing this thread: 2 Guest(s)