Previous Thread
Next Thread
Print Thread
Page 1 of 2 1 2
Joined: Feb 2021
Posts: 12
T
Member
OP Offline
Member
T
Joined: Feb 2021
Posts: 12
Does anyone plan to implement both printers into MAME emulator?

I found technical manuals and their schematics show that we can implement both into MAME to emulate Gemini 10X/15X and Okimate 20. Okimate 20 can print in colors. Also Gemini 10X/15X can print graphics data from Print Shop software.

Gemini 10X/15X schematics showed that it uses 7801 microcomputer with 4K ROM/2K RAM (or optional 4K/8K RAM for buffers). It needs 4 version of ROM dumps (parallel w/optional 4K/8K buffer and serial w/optional 4K/8K).

I used my Gemini 10X printer for many years but I do not have it anymore. I now need ROM dumps.

Thanks,
Tim

Joined: Mar 2001
Posts: 16,989
Likes: 84
R
Very Senior Member
Offline
Very Senior Member
R
Joined: Mar 2001
Posts: 16,989
Likes: 84
We'd like to implement a lot of printers, but there's currently a hangup about a central paper abstraction that we'd like to solve before emulating more printers. Specifically we have one and it more or less works for monochrome dot matrix printers, but there's obviously a wide world of paper output devices beyond that. If you (or anyone reading this) has C++ skills and an interest in helping with that, we could certainly point you towards what it should look like.

If you just want to emulate Print Shop, the Epson Action Printer 2000 emulation works in current MAME and it's back-compatible to Epson MX and FX so it works with Print Shop and many other software packages.

2 members like this: Tim Stark, sairuk
Joined: Feb 2014
Posts: 927
Likes: 75
G
Senior Member
Offline
Senior Member
G
Joined: Feb 2014
Posts: 927
Likes: 75
I've got a few printers that are waiting on the paper abstraction like Silentype, Imagewriter, FX-80 / JX-80 and EX-800.

The Okimate 20 is the same as the Commodore MCS 820.

Joined: Feb 2021
Posts: 12
T
Member
OP Offline
Member
T
Joined: Feb 2021
Posts: 12
Ok thanks for replies. A paper abstraction is new to me. Can you explain me more? I would look toward color printing because Printshop can print in colors.

Does you plan to implement PDF printouts since we can only print on screen at this time?

Yes I have C++ skills. I was able compiling MAME into executable on Linux. Wow. it takes 4 hours to complete!

Joined: Mar 2001
Posts: 16,989
Likes: 84
R
Very Senior Member
Offline
Very Senior Member
R
Joined: Mar 2001
Posts: 16,989
Likes: 84
The -j flag to make speeds up the builds considerably. Traditionally you do -j(number of cores plus 1), so -j9 on an 8-core system or -j13 on a 12-core or whatever.

The paper abstraction is a class that models sheets of paper (you'd set what size and dots-per-inch) and has a virtual drawing pen you can move around vertically and horizontally in real-world units and tell to print in black/cyan/magenta/yellow, which will then properly mix with the color that's already there (just like real multi-color dot matrix or ink jet works). The existing one is in src/devices/machine/bitmap_printer.cpp and .h. If you have real-world C++ experience beyond building MAME, I can find the 5-page email I got listing the defects in it and distill it into actionable tasks with fewer swear words ;-) In the meantime, you can look it over and see what it's trying to do.

One thing for starters: it has the steppers in the paper class when those are an implementation detail of the printer and should just be communicating position changes to the paper class.

Joined: Feb 2014
Posts: 927
Likes: 75
G
Senior Member
Offline
Senior Member
G
Joined: Feb 2014
Posts: 927
Likes: 75
The feedback I got from the bitmap_printer was that it sucks and we hate it. 8-) Which is fine, just tell me why you hate it.

Joined: Aug 2009
Posts: 1,180
Likes: 59
Very Senior Member
Offline
Very Senior Member
Joined: Aug 2009
Posts: 1,180
Likes: 59
Because a printer is not a "screen" to begin with?

Joined: Mar 2001
Posts: 16,989
Likes: 84
R
Very Senior Member
Offline
Very Senior Member
R
Joined: Mar 2001
Posts: 16,989
Likes: 84
For MAME purposes, it's at least a bitmap. And it's fun to watch the printing happen line by line like on a real printer.

GC: I gave you the first reason as a freebie: the paper doesn't care how the print position's being moved, so the steppers should've stayed in the Epson driver and just communicated fractions of an inch or whatever.

Joined: Jul 2019
Posts: 21
E
Member
Offline
Member
E
Joined: Jul 2019
Posts: 21
Originally Posted by R. Belmont
We'd like to implement a lot of printers, but there's currently a hangup about a central paper abstraction that we'd like to solve before emulating more printers. Specifically we have one and it more or less works for monochrome dot matrix printers, but there's obviously a wide world of paper output devices beyond that.

Are daisywheels in scope?

Joined: Mar 2001
Posts: 16,989
Likes: 84
R
Very Senior Member
Offline
Very Senior Member
R
Joined: Mar 2001
Posts: 16,989
Likes: 84
Daisywheels can be in scope, but how to do accurate fonts for them makes my head hurt.

Joined: Feb 2014
Posts: 927
Likes: 75
G
Senior Member
Offline
Senior Member
G
Joined: Feb 2014
Posts: 927
Likes: 75
>> GC: I gave you the first reason as a freebie: the paper doesn't care how the print position's being moved, so the steppers should've stayed in the Epson driver and just communicated fractions of an inch or whatever.

so then just have a bitmap representing the paper and not much else, that's cool.

Couldn't I have a dot matrix printer device that has steppers for the carriage, paper feed, ribbon and draws the printhead? Most of the dot matrix printers need those things and it can just use the paper class for the paper bitmap.

Joined: Feb 2021
Posts: 12
T
Member
OP Offline
Member
T
Joined: Feb 2021
Posts: 12
Does MAME have freetype library for handling fonts for daisywheels and mainframe line printers?

Yeah. I reviewed bitmap_printer.cpp but it need some additional coding for daisywheels/line printers. It may need to implement additional PDF routines for producing printouts in PDF file.

Hercules Studio (for IBM mainframe emulator) already do produces printouts in PDF file in line printer emulation. There is Hercules Studio repository on Sourceforge. May take a look on that.

Joined: Mar 2008
Posts: 220
Likes: 4
R
Senior Member
Offline
Senior Member
R
Joined: Mar 2008
Posts: 220
Likes: 4
I've been scanning Amstrad PCW daisywheels, and I'm trying to make a ttf font out of one of them.

Let's see how it goes laugh

1 member likes this: exidyboy
Joined: Mar 2001
Posts: 16,989
Likes: 84
R
Very Senior Member
Offline
Very Senior Member
R
Joined: Mar 2001
Posts: 16,989
Likes: 84
MAME does output printer output as a series of PNGs right now, one per page. So you really can get your Print Shop on as-is.

Joined: Feb 2008
Posts: 127
Likes: 5
G
Senior Member
Offline
Senior Member
G
Joined: Feb 2008
Posts: 127
Likes: 5
For initial development work there's plenty of mono-spaced daisywheel-like fonts out there already. For the purpose of emulation it doesn't matter which font is used. Anything close is fine for work in progress and it might be fun to substitute any font you want, selectable from a list of installed fonts. The main thing is use any mono-spaced font and get it working, then you could replace the font with one built from scans of an actual daisywheel or just use the freely available daisywheel font. It takes 3 seconds to find it (i.e. https://www.fonts4free.net/daisy-wheel-font.html). No point wasting days/weeks making new truetype fonts from scratch when the emulation of daisywheel printers isn't even implemented.

Joined: Feb 2021
Posts: 12
T
Member
OP Offline
Member
T
Joined: Feb 2021
Posts: 12
Originally Posted by R. Belmont
MAME does output printer output as a series of PNGs right now, one per page. So you really can get your Print Shop on as-is.


How do I save printouts into PNG file?

Joined: Feb 2014
Posts: 927
Likes: 75
G
Senior Member
Offline
Senior Member
G
Joined: Feb 2014
Posts: 927
Likes: 75
Code
void bitmap_printer_device::write_snapshot_to_file()
{
        machine().popmessage("writing printer snapshot");

        emu_file file(machine().options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
        std::error_condition const filerr = machine().video().open_next(file, "png");

        if (!filerr)
        {
                static const rgb_t png_palette[] = { rgb_t::white(), rgb_t::black() };

                // save the paper into a png
                util::png_write_bitmap(file, nullptr, m_page_bitmap, 2, png_palette);
        }
}
you probably don't even need to have the png_palette stuff, I was cribbing from another driver.

Page 1 of 2 1 2

Link Copied to Clipboard
Who's Online Now
7 members (Stick, Cpt. Pugwash, yugffuts, z9k9, 3 invisible), 18 guests, and 5 robots.
Key: Admin, Global Mod, Mod
ShoutChat
Comment Guidelines: Do post respectful and insightful comments. Don't flame, hate, spam.
Forum Statistics
Forums9
Topics9,171
Posts120,123
Members5,039
Most Online1,283
Dec 21st, 2022
Our Sponsor
These forums are sponsored by Superior Solitaire, an ad-free card game collection for macOS and iOS. Download it today!

Superior Solitaire
Forum hosted by www.retrogamesformac.com