Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
You are not logged in - nap
CSDb User Forums


Forums > C64 Coding > MPS803 external EPROM
2022-04-23 14:40
Fresh

Registered: Jan 2005
Posts: 101
MPS803 external EPROM

Hi everyone,
some time ago I purchased for nearly nothing an old MPS803 and these days I found the time to open it to clean it up and, well, to take a look at what's inside.
It turns out the motherboard has a couple of free sockets where you can put, respectively, a 74373 and a 2732 (or 2764).
The Service Manual states that by adding those ICs and shorting a jumper you can switch from internal D7811G ROM to external EPROM.
Looking at the emulators I only found a font file (mps803) so my first guess is it can only be used for fonts. Still, according to the Service Manual, the EPROM should basically replace the internal ROM.
Now, I do know the hardware is heavily limited, but I'm pretty curious about this extension: is it only useable for fonts or is it possibile to put code there?
And if the latter, is there any documentation about it?
Thanks you all!
2022-04-23 22:08
chatGPZ

Registered: Dec 2001
Posts: 11386
If you find out, let us know, so we can emulate it :)

I have only ever heard about alternative font ROMs for that matter
2022-04-25 21:35
BiGFooT

Registered: Mar 2002
Posts: 33
7811 can operate with an external ROM when the M0 (pin 29) and M1 (pin 27) set to low. Unfortunately, I'm not aware about any kind of dump or hacked MPS803 ROM in the wild. You can run any code with this external ROM method. In theory, running code above 4K and switching the M1 pin on-the-fly it's even possible to dump the internal ROM.

Here's a good read about 7811 hacking: http://zine.r-massive.com/casio-rz-1-firmware-hacking/
2022-04-25 22:21
Fresh

Registered: Jan 2005
Posts: 101
Thanks Bigfoot,
yes, that's the same site I found yesterday and I had the same idea: trying to add a switch to change MODE 1 while the device is on.
This evening I traced down some ports I'll use to test if my code is actually working. I'll test them tomorrow.
Then I'll try to create something more complex, copy it on both $0000 and $1000, and move the execution to $1000+: if changing M1 doesn't trigger reset or some other IRQs/NMIs, and - most of all! - if I've understood it correctly, the execution should transparently continue above $1000 on the first block of my EPROM.
If confirmed, this indeed could be used to dump the mask ROM.
There are a lot of assumptions but maybe it's going to work.
Will surely let you know!
2022-04-26 12:24
chatGPZ

Registered: Dec 2001
Posts: 11386
It isnt the same MCU as in 1520, right? https://e4aws.silverdr.com/hacks/6500_1/
2022-04-26 12:50
Krill

Registered: Apr 2002
Posts: 2980
Hmm no, should be one of https://en.wikipedia.org/wiki/78K#78K1_Series - more specifically https://www.cpcwiki.eu/imgs/7/74/UPD7811G_Datasheet.pdf =)
2022-04-27 12:04
Walt

Registered: May 2004
Posts: 47
Many years ago a friend and me wanted to modify the font of a Commodore printer (can't remember the model). It used an EPROM and we did get it to work after debugging the power-up code and realising it did a checksum of the whole EPROM and would halt if it was wrong...
2022-04-27 18:55
Fresh

Registered: Jan 2005
Posts: 101
Ok, I've just completed some first coding attempts.
At least the first assumption is verified: I could indeed execute code using the EPROM.
I read the button status (Port C - Bit 0) and used it to control power led (Port C - Bit 4).
As of now, the only downside is that playing with this stuff is quite slow as I need to reburn a EPROM everytime, nevertheless I'll try to go further.
2022-04-30 16:13
Fresh

Registered: Jan 2005
Posts: 101
It worked!
I managed to dump the whole mask ROM of the MCU of the printer so now I can start disassemble it.
I'd be glad to share both the dump codes and the dump itself somewhere, for preservation. Do you think there may be copyright problems putting it here?
2022-04-30 16:16
chatGPZ

Registered: Dec 2001
Posts: 11386
Not sure in what form it would qualify a release here - i'd put it on github and then send Bo Zimmermann a mail so he can put it on zimmers.net too
2022-04-30 19:44
Fresh

Registered: Jan 2005
Posts: 101
Ok, thanks Groepaz.
If you're curious you can find all the stuff here: https://bitbucket.org/freshness79/78c11romdumper/
I'll drop a drop email to Zimmermann, as you suggested.
2022-05-01 06:50
BiGFooT

Registered: Mar 2002
Posts: 33
Well Fresh, it's nice to see your first results and achievement.

The dump looks promising, as it's something, but it's not good. I don't know if it's misaligned, or something else, but doesn't add up.

The init seems to be good
LXI SP,0 ; init stack
MVI EOM,0 ; disable timer
JRE PC+2d ; jump to 0x35
...
0x35:
MVI A,8
MOV ???,A ; Move to unknown register? That 0 is not a valid register somewhat.
MVI A,0x8e
MOV ???,A ; Move to unknown register? That 0 is not a valid register somewhat.
MVI A,0
MOV PA,A
...

Also, it seems that the EI / RTI interrupt handling is looks good, but the overall picture of the dump is - at least for me - doesn't add up.

---

Anyway, I'm happy that you was able to do this and I hope that it's not an address / data collision/timing issue with the mode switching. I hope that you can figure out what's the problem or what happened and we can start to dissect this newer seen before piece of code.
2022-05-01 19:20
Fresh

Registered: Jan 2005
Posts: 101
Totally true, BigFooT.
There were indeed some errors in both printer and C64 sides:
The most impactful were on printer code, but in general the whole protocol was far from being reliable.
Now it's still quite ugly - first time I fiddle with serial cable - but at least it does its job pretty well and way faster than the first version.
A preview of the first lines:

0000: 04 00 00    LXI     SP,$0000     ; Init stack pointer
0003: 64 83 90    MVI     EOM,$90      ; Set LV1 and enable output
0006: 4e 2d       JRE     $0035        ; => 0035
<...>
0035: 69 08       MVI     A,$08        ; Enable RAM 
0037: 4d d0       MOV     MM,A
0039: 69 8e       MVI     A,$8E        ; Set control mode
003b: 4d d1       MOV     MCC,A        ; for some pins of port C
003d: 69 ff       MVI     A,$FF        ; Put all ports in input mode
003f: 4d c0       MOV     PA,A
0041: 4d c1       MOV     PB,A
0043: 4d c2       MOV     PC,A
<...>
2022-05-01 21:13
Claus_2015

Registered: Oct 2012
Posts: 53
Cool stuff! Next step: run Doom on continuous paper \o/
2022-05-02 19:48
chatGPZ

Registered: Dec 2001
Posts: 11386
BTW, could you tell what exactly is printed on the IC? Is there a commodore specific part number? (I'm just renaming all the files in VICE to use the part numbers, and it would make sense to use this proper dump now :))

That said, i wonder where the charset data comes from... there should be at least 2k (1k for upper and 1k for lowercase) ... but... mmh :) how much RAM does this controller have? Is it decompressing it on the fly?
2022-05-02 20:54
BiGFooT

Registered: Mar 2002
Posts: 33
@Fresh: It's a good dump \o/ Great job mate.
I need to check the schematics to start the dissecting, but it's a nice code with weird jumptables. :)

@Groepaz: It's from $0c3f of the dump, 160 characters in total, 7x6 bits. The offset calculation code is at $09c0 in the rom code.

2022-05-02 21:40
Fresh

Registered: Jan 2005
Posts: 101
@BigFooT: nice finding! :)
I'm going to start looking at the code now, pity there doesn't seem to be some ASCII signature or similar, would have been a nice trivia. Yes, space is really tight...

@Groepaz, BigFooT already answered most of your questions, for completeness:
- The MCU part number is "D7811G 111-U32053A", its socket is labeled "#4" on PCB.
- It has 4k internal ROM and 256 byte RAM.
"U32053A" is the ROM revision, maybe there are printers with different firmware version which we could dump.
2022-05-03 12:57
chatGPZ

Registered: Dec 2001
Posts: 11386
Cool cool! Bigfoot: is it "bit packed"? Can you tell a bit more so i dont have to work it out as well? =) nvm, got it :)
RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Advanced
Users Online
ptoing
Guests online: 63
Top Demos
1 Next Level  (9.7)
2 13:37  (9.7)
3 Mojo  (9.7)
4 Coma Light 13  (9.6)
5 Edge of Disgrace  (9.6)
6 What Is The Matrix 2  (9.6)
7 The Demo Coder  (9.6)
8 Uncensored  (9.6)
9 Comaland 100%  (9.6)
10 Wonderland XIV  (9.6)
Top onefile Demos
1 Layers  (9.6)
2 No Listen  (9.6)
3 Party Elk 2  (9.6)
4 Cubic Dream  (9.6)
5 Copper Booze  (9.6)
6 Rainbow Connection  (9.5)
7 Dawnfall V1.1  (9.5)
8 Onscreen 5k  (9.5)
9 Morph  (9.5)
10 Libertongo  (9.5)
Top Groups
1 Performers  (9.3)
2 Booze Design  (9.3)
3 Oxyron  (9.3)
4 Triad  (9.3)
5 Censor Design  (9.3)
Top NTSC-Fixers
1 Pudwerx  (10)
2 Booze  (9.7)
3 Stormbringer  (9.7)
4 Fungus  (9.6)
5 Grim Reaper  (9.3)

Home - Disclaimer
Copyright © No Name 2001-2024
Page generated in: 0.052 sec.