• Updated 2023-07-12: Hello, Guest! Welcome back, and be sure to check out this follow-up post about our outage a week or so ago.

Apple prototype ROM flasher utility

dougg3

Well-known member
The 9500 and 9600 are both 67 - they didn't change the gestalt because they were so similar. 9500 would make sense as a first gen TNT based machine.

Ahh, thanks for the correction. The site I was using confused me. I see after looking at Apple's developers docs. 67 = 9500/9600, 68 = 7500/7600, 69 = 8500/8600.

I was also surprised to not find the 7200. Maybe at the time this app was made, it wasn't in the plans yet? Interestingly, https://www.emaculation.com/forum/viewtopic.php?t=8836 says that 68 is also a "7200/120" but I think it might be a typo because the actual name on the left says 7500/120.
 

dougg3

Well-known member
Oh, one last thing is there is only one ROM SIMM (I guess maybe it's really a DIMM?) supported by the TNT Power Macs. According to the code I disassembled it would show up in the utility as "AMD 28F020 x 16". 16 of these chips would result in a total size of 4 MB, matching the final ROM size.
 

Phipli

Well-known member
Oh, one last thing is there is only one ROM SIMM (I guess maybe it's really a DIMM?) supported by the TNT Power Macs. According to the code I disassembled it would show up in the utility as "AMD 28F020 x 16". 16 of these chips would result in a total size of 4 MB, matching the final ROM size.
Only one SIMM. Multiple versions (not what you're asking).

They're always soldered except... One prototype and one weird one of mine (an 8600) that had a SIMM in it....

Which... I... I wonder if it is writeable?
 

Phipli

Well-known member
Nope, it's one time programmable. Shame.
 

Attachments

  • HITJS00342-1(1).pdf
    107.1 KB · Views: 2

tt

Well-known member
Thanks tt! Yeah, bootstrapping with the programmer is a pain, but I don't think I had any other way. It's similar to what I had to do with my original IIci ROM hacking before the programmer existed. I definitely have a few spares. I'll earmark one for you!
Awesome, thanks! With the PLCC flash chips available, is there a limitation on the max ROM size configuration compared to the flash used for 8MB ROM SIMMs? I'm not aware of any custom ROMs that added a boot disk for the Quadra machines. (Are there any?) I vaguely remember trying out bbraun's patch for a Quadra ROM outlined here: http://www.synack.net/~bbraun/djmemcrom.html

Here's a brief video of the Flasher tool in action. I flashed a custom...misleading...startup sound to my Performa 630. :cool:


Nice demo, appreciate the authentic hard drive and fan sounds for an immersive experience. :)
 
Last edited:

dougg3

Well-known member
Just posted a blog about this. If you've been following this thread there isn't really anything new (other than some fun stuff with my Performa 630), but it's a good summary for anyone who wants to catch up.

With the PLCC flash chips available, is there a limitation on the max ROM size configuration compared to the flash used for 8MB ROM SIMMs?

I don't think 8 MB will be possible, at least not without further hacks. These chips are only 256 KB a piece, so you'd need a boatload of them in order to get up to 8 MB. It definitely supports 8-chip SIMMs so you could probably get up to 2 MB with a fancier board design. I think the real end goal here would be to hack the software to be able to program newer chips though...

Nice demo, appreciate the authentic hard drive and fan sounds for an immersive experience.

Hehe, thanks! That's exactly what I was going for. Also, I don't currently have any modern IDE hard drive alternatives for my Performa 630!
 

Jockelill

Well-known member
Just posted a blog about this. If you've been following this thread there isn't really anything new (other than some fun stuff with my Performa 630), but it's a good summary for anyone who wants to catch up.



I don't think 8 MB will be possible, at least not without further hacks. These chips are only 256 KB a piece, so you'd need a boatload of them in order to get up to 8 MB. It definitely supports 8-chip SIMMs so you could probably get up to 2 MB with a fancier board design. I think the real end goal here would be to hack the software to be able to program newer chips though...



Hehe, thanks! That's exactly what I was going for. Also, I don't currently have any modern IDE hard drive alternatives for my Performa 630!
The RED ROM in the Macintosh Interactive TV is 2MB:

1700937874752.png1700937892666.png

So 99% sure this tool could program that :). I did look into also recreating that red ROM, but so far I have not been able to track down enough of those chips in the right package to make it worth while :(.
Been thinking also, I made a little breakoutboard a while ago intended for probing the ROM with a board loose (for troubleshooting), it just gives you 64 measurement points and has a ROM SIMM Socket. It would be quite easy to add a 5-12V buck converter on it and rewire it to match the "quadra wiring". With that adapter then it would be possible to use the ROM simm programmer (if you add support for the chips) to program also the Lobos and RED ROM. Maybe in practice not that useful, but if you want, I can send the project to you.
1700938232347.png
 

Attachments

  • 1700938307502.png
    1700938307502.png
    271.3 KB · Views: 0

dougg3

Well-known member
So 99% sure this tool could program that :).

Oh yes, I'm 100% sure that SIMM is supported by this program. It has eight Am28F020 chips. Based on the tables in my disassembly, I believe it would be programmable in all of the Quadras, including the 660AV/840AV. I'm pretty sure it would identify in the program as "AMD 28F020 x 8".

Apple appears to have also made a SIMM (well, DIMM) that uses 16 of those chips. The table entries were for early PowerPC stuff. I wonder what that one looks like...

You're right, an adapter board (and new firmware) could probably add support for Apple's SIMMs to the programmer, but I'm thinking it's probably not worth the effort versus the cool SIMM that you've been working on. Especially if I can hack this Flasher program to be compatible with it...
 

dougg3

Well-known member
Look at what I did with @Jockelill's prototype modern 8 MB SIMM that has the /WE signal wired up properly (and also my crazy bodge wire prototype too). Pay close attention to the SIMM type:

1701029088856.png

It doesn't actually work for programming yet. I only hacked the function that detects whether the SIMM is present. But it's definitely working because it detects it! Took a few hours of assembly hacking to get it working. I still would need to hack the erase function and the programming function the same way.

Unfortunately I think there are hardware limitations that will limit us to 4 MB of usable ROM space for in-system programming, but it's still going to be awesome!
 
Last edited:

Phipli

Well-known member
Look at what I did with @Jockelill's prototype modern 8 MB SIMM that has the /WE signal wired up properly (and also my crazy bodge wire prototype too). Pay close attention to the SIMM type:

View attachment 65810

It doesn't actually work for programming yet. I only hacked the function that detects whether the SIMM is present. But it's definitely working because it detects it! Took a few hours of assembly hacking to get it working. I still would need to hack the erase function and the programming function the same way.

Unfortunately I think there are hardware limitations that will limit us to 4 MB of usable ROM space for in-system programming, but it's still going to be awesome!
You weren't planning to do anything else this week were you? :)
 

dougg3

Well-known member
Haha, it's been nice having a few days off so I could think about stuff like this. No idea when I'll get around to it!
 

eharmon

Well-known member
Any thoughts on using this to run newer universal ROMs on older machines? I'm not sure how much point there is overall, but it could allow for things like SCSI Manager 4.3 in ROM on earlier devices for use with 7.1. Currently (iirc) that's limited to the 660av/840av. (This being the working replacement ROMs -- ISP being even more awesome!).

I've been curious for awhile about how "Universal" they really are, given it seems pretty unlikely new versions were ever tested against older machines to confirm bugs weren't introduced.
 

dougg3

Well-known member
it seems pretty unlikely new versions were ever tested against older machines to confirm bugs weren't introduced

There's a chance that the newer ROMs might work, but I definitely wouldn't expect it to work in all cases. I've played with this a bit on my IIci. The Color Classic ROM successfully boots my IIci. The 605/475 ROM also boots my IIci, but only if it has a NuBus video card installed. Apparently they stripped out the RBV driver. The LC 580 ROM chimes but never finishes booting. I think the developers were more likely to add in little model-specific hacks to the ROM as time went on, especially toward the end of the life of 68k stuff.

@Arbee has done some research on the ROM versions -- see this thread about Arbee's info dumper program. This tool provides a lot of interesting info about theoretical ROM compatibility. The 660av/840av ROM contains info in its Universal tables for a bunch of earlier Quadra models like the 700/900/610/650/800. The only model I have in the list is a 610, but I haven't installed a ROM SIMM socket in it yet. I'll probably give it a whirl with the AV ROM after I've installed one...
 

eharmon

Well-known member
There's a chance that the newer ROMs might work, but I definitely wouldn't expect it to work in all cases. I've played with this a bit on my IIci. The Color Classic ROM successfully boots my IIci. The 605/475 ROM also boots my IIci, but only if it has a NuBus video card installed. Apparently they stripped out the RBV driver. The LC 580 ROM chimes but never finishes booting. I think the developers were more likely to add in little model-specific hacks to the ROM as time went on, especially toward the end of the life of 68k stuff.

@Arbee has done some research on the ROM versions -- see this thread about Arbee's info dumper program. This tool provides a lot of interesting info about theoretical ROM compatibility. The 660av/840av ROM contains info in its Universal tables for a bunch of earlier Quadra models like the 700/900/610/650/800. The only model I have in the list is a 610, but I haven't installed a ROM SIMM socket in it yet. I'll probably give it a whirl with the AV ROM after I've installed one...
Of course @Arbee has beaten me :D

Interestingly it seems like the the 660av/840av ROM has the Quadras and...the IIsi! Wonder if it would work on an SE/30 too...but I grow off-topic.

EDIT:

The 660/840 ROM won't boot a Q650 (source: I tried it).

And @cy384 beat us to it, too. Interesting! Unless the Ramdisk hacks being worked on here fix the MMU space mapping issues?
 
Last edited:

dougg3

Well-known member
There's a possibility that opening up the MMU tables of the other machines so that the full 2 MB of ROM is mapped might magically fix the Quadra AV ROM's compatibility with the older machines, but I wouldn't hold my breath. :)

Good news: I hacked the erase and program functions of Flasher for compatibility with the Micron M29F160FB chip tonight. Remarkably, the assembly code I cobbled together for those two functions worked on the first try. I guess I had a bit of an advantage because I could look at the C code for my SIMM programmer to understand the algorithm for writing to the flash chip though!

So with those hacks in place, I can now program the first megabyte of the second half of @Jockelill's prototype 8 MB SIMM in-system in my Performa 630! Programming 1 MB of flash on the modern SIMM is...super fast! It only takes like 3 or 4 seconds. Kind of puts my USB SIMM programmer to shame, if I'm being honest.

Bad news: In its current form, it's kind of useless because I only have access to write to the second half of the SIMM due to the limitation of 0x40400000 being the write base address. And yes, I made a little utility to test write cycles and verified that only the upper 4 MB of the 8 MB of available ROM address space can physically do write cycles. If I write to 0x40800000 (or any of its numerous repetitions like 0x41000000) the /WE pin never goes low. I tested the crap out of it and verified it with my oscilloscope. The only way I can even verify that my in-system erase/write code works is to yank the SIMM out of the logic board afterward, put it in my programmer instead, and manually dump it. I can see whatever my hacked Flasher program wrote to the SIMM starting at the offset 0x400000.

If I were to hack @Jockelill's prototype so that the chips had their highest address lines tied to GND instead of A22 on the SIMM edge connector, I believe that would effectively turn it into a 4 MB SIMM and it would fully work for in-system flashing. Going forward, it probably makes more sense to only use two of the M29F160FB chips for a 4 MB SIMM though.

Alternatively, we could rig up something like what @Phipli discussed earlier in the thread about giving it two separate 4 MB halves and provide some way to select which half you're working with.
 
Last edited:
Top