Excellent! Yeah that's the self test at power-on, always does that. The boxes are supposed to be the 4 colors of the built-in pens, in order, blue, green, red, black. Apparently this same mechanism was also used in the Sharp MZ-731 which has a built-in 4-pen plotter but that computer doesn't seem to be in MAME (and roms don't seem to be available). It would probably fit into sharp/mz700.cpp if roms can be found. Edit: Found out the plotter was sold separately as Sharp MZ-1P01 (https://original.sharpmz.org/mz-700/useplot.htm and https://original.sharpmz.org/mz-700/plotterctrl.htm) and plugs into the MZ-700 motherboard to make it into a MZ-731. That plotter rom is available on that site in the MZ-700 section but it uses a 8050 microcontroller so it appears only the plotter mechanism is the same not the controller board, although the schematic looks very similar to the Commodore one (https://original.sharpmz.org/mz-700/mz-1p01.htm). It could be added to the MZ-700 driver if it can be emulated since the motherboard can accept it as a standard peripheral add-on then basically it 'just works' hehe! There's more technical info about the plotter in the service manual (https://original.sharpmz.org/mz-700/download/sm700.pdf) which may relate also to the Commodore version.
Last edited by Guru; 07/28/2403:22 PM. Reason: added more info
I decided to read up again on the commodore iec bus and try to grok what was happening. I looked at understanding the IEC bus awhile back and couldn't make head nor tails of it but it actually made some sense to me.
The 6500/1 looked like it wasn't reading from the port A properly.
After modifying a single line in 6500_1.cpp:
Code
u8 m6500_1_device::read_port(offs_t offset)
{
if (!machine().side_effects_disabled() && !m_port_in_cb[offset].isunset())
{
u8 const prev(m_port_in[offset]);
m_port_in[offset] = m_port_in_cb[offset]();
if (!offset)
{
u8 const diff((prev ^ m_port_in[0]) & m_port_buf[0]);
if (BIT(diff, 0) && BIT(m_port_in[0], 0))
m_cr |= CR_A0ED;
if (BIT(diff, 1) && !BIT(m_port_in[0], 1))
m_cr |= CR_A1ED;
update_irq();
}
}
// return m_port_in[offset] & m_port_buf[offset];
return m_port_in[offset]; // not seeing all of the data, try this
}
and boom it starts working!
Reading the code, it adds #$24 to the 3 bit IEC number from the jumpers, so it ends up getting device 11 since I'm returning 7 from the jumpers. I've got the steppers going in the wrong direction, but it's doing something!
OPEN 4,11,0 PRINT #4,"HELLO" PRINT #4,"IS THAT CYRILLIC?"
Excellent!! That demo program is a bit crap really, it's doing it as a bitmap. In reality the pen can draw proper arcs and lines very quickly. That whole demo shouldn't take more than 60 seconds if it was done using proper geometric shapes instead of little jagged lines. Would be interesting to see it in action on a C128 using BASIC 7 or a Plus/4 with BASIC 3.5 as the newer basics have many graphic drawing commands. But yeah great to see it working and I'm looking forward to trying it out in MAME.
I read somewhere there's a similar plotter with the same mech for one of the early Atari computers too. The Atari 1020 service manual with schematic is here.... https://www.atarimania.com/documents/atari_1020_Field_Service_manual.pdf Looks like it has a 6805 and a 68705P3. Of course no dump because most people (especially the Atari collector crowd) believe their gear will last forever so there is no attempt to archive the ROMs etc.
Found a couple of schematics of the Atari 1029 dot matrix printer along with a rom and was able to get it to do the self test. It's very similar to the Amstrad DMP1 (seikosha uni-hammer) but also has significant differences (no 8243 i/o expander and no centronics interface). Hopefully I can get the SIO to work.
There was an issue with the a800 antic not liking multiple screens,
Ignoring MAME exception: No screen specified for device ':antic', but multiple screens found Fatal error: No screen specified for device ':antic', but multiple screens found
Adding the line m_antic->set_screen seemed to fix it.
Doing research on other printers, I was interested in the Commodore MCS-801 (not to be confused with the MPS-801). This was a color printer that used a "4-hammer method."
Interestingly, it could do 4 colors in a single pass of the printhead. How is that possible? I came across a patent that's quite interesting.
So it's just like the uni-hammer printer, only this time it has 4 hammers that will each print a specific color in a specific column as the printhead sweeps from left to right.
If you like simultaneous color have a look at the MCS-810/820 These are Commodore re-branded Okidata Okimate 20 which is a thermal printer. It can use thermal paper (printing in black only) or it can use a ribbon cartridge that has a 1-time-use plastic tape ribbon with some sort of wax 'ink' that gets heated and fused to plain paper. I had an Okimate 20 around 1986 but the head went bad after a few years so I tossed it.
Looks like a 16kB EPROM, 8kB x8-bit RAM and a 8051 but maybe the 8051 is in external ROM mode and can be coaxed to do something just with the EPROM code.
It was hellishly slow so if you get it working insert some time delays and a bang noise every time the printer head moved forwards onto the paper then backwards off the paper to make it more real-life ;-P
Thought I'd try the MPS-801 and was able to get it to go into the self test. It wasn't working at all and that baffled me for a couple of days, then I had the idea to negate the dot sensor input and it started working!
There's also a Sams computerfacts on the okimate 20.