Archive for February, 2020

Strange parallel ROM pinouts

February 27, 2020

I’ve been working a lot this past year on old computers and arcade machines so that means gaining a familiarity with different rom pin layouts.  Looking up datasheets for each and every one repeatedly got old, so I found some helpful charts.  The first one looks like this:

eprom

I have no idea where this came from [EDIT: it’s from here. Much credit to the original author Thomas Scherrer Tangen for who showed up in the comments] , but it’s a great resource and covers all common 27xx ROMs in the 24 and 28 pin packages.  Thankfully there’a someone who liked this as much as I did and made it a little prettier and easier to read:

eprom_table-1

That’s all good, but for some oddball stuff that isn’t quite food enough.  Commodore PETs, Colecovision carts, plenty of older boards use different style roms than the now-standard 27xx series.  Let me introduce you to one of the strangest ones I found, this is taken from the manual for the Midway 8080 Tornado Baseball manual:

chip-alternatives

This chart has  a lot of information, and some of it is misleading without understanding the rest of the schematic.  The main takeaway is that this chart shows what various pins on each rom should be connected to in order to function.  Three columns however do not represent pins on the rom, they represent pins on the chip select decoder, those are labeled S6a, S6b, and S6c.  ignoring those for a moment this gives us an idea of how the pinouts differ from one rom to another, but what about how the pinouts are the same? well, by correlating the 2708 (the only chip in both the original diagram and this table) you can see how the remaining pins are the single chip select and data and address pins (as well as ground).  Getting back to the columns of address lines, take a look at the schematic right next to this chart:

tornado-baseball-decoding

I really like this setup, it uses a 7442 as a chip select decoder and you get to choose what size roms you have.  For example if you have the smallest roms, 512B ones, you only get 9 bits of address per chip (A0-A8) so A9, A10, and A11 go into the decoder and that picks which of the 8 roms you are talking to based on where in the memory map you are (breaks the memory map into 512B chunks).  If you have 10 bits of address per chip you then run A10, A11, and A12 into the decoder and it’s now breaking up into 1K chunks.  This datasheet only has jumper settings called out for one 2K rom, the 9216, and with that in place you get 8 chunks of 2K using 13 address bits total.  You can’t hook a 2716 directly up using the jumpers and the table, but with a couple of bodge wires between the jumper blocks I think it would work.

newer-roms

This all led me to make my own ‘universal’ rom tables so I could find equivalents or adapters to make one type read as another.  I broke it up into two sheets because otherwise it’s un-usably huge (as it is it’s pretty bad).  I have 23xx, 25xx, 27xx, 28xx, tms47xx, 93xx all on one page and all the older stuff from tornado baseball on a second page.  I left the 2704 with the older roms because I haven’t had call for one and most people start the 27xx series at 2708.  I added the sizes for the roms I’m not familiar with and will be expanding these spreadsheets as I find more information I want to reference.

older-roms

These screenshots are just a snapshot in time and are not meant to be kept around as the gold standard, it’s kinda hard to read without a ruler they’re so big.  There are other ROM pinouts not included here like the infamous Intel 1702  or various smaller 4bit roms, but those have other pages elsewhere and really this is a tool for my own reference.  Other links are here:

32pin rom strangeness

Reading Irem MASKROM’s

https://www.mikesarcade.com/cgi-bin/spies.cgi?action=url&type=info&page=PromRef.txt

https://www.mikesarcade.com/cgi-bin/spies.cgi?action=url&type=info&page=ROMref.txt

Post script, sometimes I hate commodore:

6540outline

Google Home Autopsy

February 20, 2020

I had a google home die the other week.  The internet claimed it could have been a bad OTA flash and that I should get support to replace it even out of warranty.  I called and found out that (at least my rep) would extend the warranty out to two years, but not three which I would need.  I also found out that there aren’t any warranty void stickers inside  or anything so I would have taken one of my google homes that was in warranty and swapped out the misbehaving motherboard but that seemed overly complicated and I thought I maybe had a solution anyway.

20200218_192702

One thing I did remember was that the google home has a ‘hidden’ usb micro port that is for ‘service’.  After some research it seems that no one has hacked this thing using that port, but there are reports that you can use a chromecast ultra power supply on it and give it a wired network connection (which means it’s a usb on the go port).   I took a look about the chip inside and saw that it runs uboot for a bootloader and that I might be able to dump the onboard flash via that rather than desoldering a bga.  Looking at the ifixit teardown there’s two pads right next to the processor, those are probably serial so off I go.

20200218_192706

This is a useful page explaining how to determine the baud rate of an rs232 connection from the shortest pulse, I have duplicated the table here.

Time Baud Rate
3333µs (3.3ms) 300
833µs 1200
416µs 2400
208µs 4800
104µs 9600
69µs 14400
52µs 19200
34µs 28800
26µs 38400
17.3µs 57600
8µs 115200
4.34µs 230400

We were running at 115200, a very common baud rate.  I hooked up to the pins and found that the one closer to the center of the board transmits (the other one presumably is supposed to receive but it wouldn’t listen to me) and they’re a full 5v serial port (I was expecting something dumb like 1.8v).

The first boot capture saved is here.  it all seems to be going well until:

{line: 1131} tz_en_start: 0x120000 tz_en_end: 0x360000 tz_en_size: 0x240000
Uncorrectable error @ 0x00260000
Read failed @ 0x00260000
verify 0k:0x402c0de, 1k:0xd6749664, 2k:0xccd3d16e
verify image 0, size=1237488, waitcount=49
tz_loader: image4 verified.
tz_en image load verify success
verify 0k:0x201c237, 1k:0xf01c0de, 2k:0x0
verify image e0000301, size=0, waitcount=1
{line: 1158} bl_en_start: 0x5a0000 bl_en_end: 0x640000
Uncorrectable error @ 0x005c0000
Read failed @ 0x005c0000
verify 0k:0x400c0de, 1k:0xe16f5f14, 2k:0xe92d43f8
verify image 0, size=120408, waitcount=4

What’s a few uncorrectable errors between friends? There was also a problem with:

[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
block 1021: !!! UNRANDOMIZED !!! (page=0)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
block 1022: !!! UNRANDOMIZED !!! (page=0)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)
[is_chunk_blank:455] not blank! data_len=2080, ecc=48, zero_bits=49
[mv_nand_read_large_page:2232] ECC uncorrectable error (page=0xlx)

I’m not sure if this is normal because I’ve only opened a broken one but I assume it’s not.  I also tried to boot it while holding the mute button, that ended the boot cycle with :

Detected button press — booting from USB
USB: Register 10011 NbrPorts 1
USB EHCI 1.00
scanning bus for devices… 1 USB Device(s) found
0 Storage Device(s) found
ERROR: No USB storage device detected
Booting from NAND failed, booting from USB….!
USB: Register 10011 NbrPorts 1
USB EHCI 1.00
scanning bus for devices… 1 USB Device(s) found
0 Storage Device(s) found
ERROR: No USB storage device detected
FATAL ERROR! There is no bootable image on this machine!
tbdzz—- Img_Ld_And_Start error! Spinning now!

So it looks like you can boot this from a flash drive which is cool.  if I were more skilled I could probably dump a good one and make a bootable image out of it to boot the bad one but alas I’m not.  this is where I box it up and wait until someone else comes up with a solution for this.