• Hello MLAers! We've re-enabled auto-approval for accounts. If you are still waiting on account approval, please check this thread for more information.

Overclock LC475/P475/Q605 without soldering or spicy-o-clock

Tried the setup made by Phipli on my mystic upgraded Color Classic, which has a full 68040 CPU inside. I managed to get 40mhz in there as well.
 

Attachments

  • IMG_3146.jpeg
    IMG_3146.jpeg
    3 MB · Views: 68
  • IMG_3149.jpeg
    IMG_3149.jpeg
    1.1 MB · Views: 59
  • IMG_3148.jpeg
    IMG_3148.jpeg
    1 MB · Views: 67
Can confirm that I replicated the same black screen behavior while changing resolution at 40mhz, though the OS was still running and could be gracefully shut down by the keyboard. On reboot it came up with the new resolution just fine.

A QOL change that could be good to implement is detect if the monitors applet is running and temporary back off clocks while it's open in order to allow dynamic resolution changes to work. Or, if you can hook whatever the OS does immediately before calling cscSwitchMode.
 
I read some parameters to set for each frequency from ROM:

Configuration 0x50F0E030
RefreshInterval 0x50F0E034
FrameBufferConfiguration 0xF9800010

BIOSTimeout 0x50F18600
BIOSConfig 0x50F18000

Configuration, RefreshInterval, and FrameBufferConfiguration are well understood from MEMCjr datasheet.

BIOSTimeout and BIOSConfig are not written to MEMCjr but to SCSI controler 53C96 if I am right.
Does anyone know what register of 53C96 were populated by these values?
 
Those aren't 53C96 registers. Those are for the "TurboSCSI" implementation, which inserts wait states when accessing the 53C96.

Bits 8 and 9 are the read wait states (0 and 1 = 5, 2 = 4, 3 = 3), and bits 11 and 12 are the write wait states (same units).

BIOSTimeout is the delay for deciding the 53C96 has died if it stops responding.
 
Hang on, did I se LC575 is supported too? Does the utility have any issue with old school overclocked 33Mhz LC475s?
 
Hang on, did I se LC575 is supported too? Does the utility have any issue with old school overclocked 33Mhz LC475s?

I’ve tested the system extension made by Phipli on a stock 475 and on a resistor swapped (overclocked to 33mhz) 475, as well as a stock 575 inside my Color Classic. It works!

The software overclock might also work on the 630 and 580 machines, too. I haven’t tested those myself, yet.
 
Last edited:
I’ve tested the system extension made by Phipli on a stock 475 and on a resistor swapped (overclocked to 33mhz) 475, as well as a stock 575 inside my Color Classic. It works!

The software overclock might also work on the 630 and 580 machines, too. I haven’t tested those myself, yet.

Yeah, my 475 was resistor-swapped to 33MHz. It runs fine from the initial benchmarking I did. I was honestly surprised. Hopefully that LC040 runs a little cooler too, compared to a full 040 at 40MHz. Still just a smidge below a 840av, though, ughh.
 
I read some parameters to set for each frequency from ROM:

BIOSConfig 0x50F1800

Those aren't 53C96 registers. Those are for the "TurboSCSI" implementation, which inserts wait states when accessing the 53C96.

Bits 8 and 9 are the read wait states (0 and 1 = 5, 2 = 4, 3 = 3), and bits 11 and 12 are the write wait states (same units).

BIOSTimeout is the delay for deciding the 53C96 has died if it stops responding.
Thank you for the reply.
ROM is writing only bit 0 to register 0x50F1800 (BIOSConfig) and register seems to be 8 bit long. I'm confused because things don't fit together.

LEA BIOSAddr,A2 ; get base of BIOS
MOVE.L BIOS_Config(A2),d0 ; get Config register value
andi.b #$F7,d0 ; drop old D0{0:0} value
or.b (@BIOS_Config,d3.w),d0 ; only change bit 0 of this register
MOVE.L d0,BIOS_Config(A2) ; and write it out (only bottom 8-bits "stick")
...
; BIOS Configuration Register initialization values <h28>

@BIOS_Config
@BIOS_Config20 dc.b %00000001 ; BCLK_25 = 1 <H28>
@BIOS_Config25 dc.b %00000001 ; BCLK_25 = 1 <H28>
@BIOS_Config33 dc.b 0 ; BCLK_25 = 0 <H28>
@BIOS_Config40 dc.b 0 ; BCLK_25 = 0 <H28>
 
The andi.b #$f7, d0 clears bit 3 of d0, not bit 0. $f7 is binary 11110111.

I was looking at the wrong thing earlier. BIOSConfig is 8 bits.
b7 = 0 to use BIOS's internal SWIM2, 1 for external
b6 = 0 to make MACE accesses take 2 MACE clocks, 1 for 3 MACE clocks (no BIOS machine has MACE)
b5 = 0 if the Ethernet chip is SONIC, 1 if it's MACE
b3 = 0 for SCC accesses to meet timing requirements for an 8 MHz SCC, 1 for a 16 MHz SCC
b2 = 0 for BIOS built-in ASC, 1 for external
b1 = 0 for external ADB handling, 1 to use BIOS's built-in ADB Master Cell (which doesn't work and didn't work until the G3 timeframe, at which point MacOS never used it anyway)
b0 = 0 for BCLK > 25 MHz, 1 for 25 MHz or less
 
The andi.b #$f7, d0 clears bit 3 of d0, not bit 0. $f7 is binary 11110111.

b0 = 0 for BCLK > 25 MHz, 1 for 25 MHz or less
You are right about $f7. So there is a typo at several copies of this code that can be found in the internet.

I understood that the bit the ROM was changing
b0 = 0 for BCLK > 25 MHz, 1 for 25 MHz or less
according the clock resistors soldered on the 475/605.

But what is this setting doing for or in which chip?
Is it related to SCSI (or something else)?
Ok I can just set it, as done by the ROM but I prefer to understand what is going on.
 
There aren't details available, but I'm gonna guess setting it wrong could glitch all of the things IOSB/BIOS handles (SCSI, serial/LocalTalk, sound, floppy, the VIA interface to Cuda).
 
No need - just wrap the actual register fiddling in SwapMMUMode calls. I should have put this in my extension; forgot I was running 7.6.1 which is 32 only. SwapMMUMode will do nothing if already in 32 (ie. harmless).

Code:
char busMode = 1;

SwapMMUMode(&busMode); // go 32 bit, if in 24 bit
(register stuff);
SwapMMUMode(&busMode); // return to original MMU mode
I tried to add this code but compiler throw an "function has no prototype" error.
Seems I need to include something, but I do not know what.

Someone can help?
 
I tried to add this code but compiler throw an "function has no prototype" error.
Seems I need to include something, but I do not know what.

Someone can help?
Try OSUtils.h

You may also use true32b instead of 1 for the busMode - that's the proper apple constatnt (which is 1), I was just lazy, and it's not like it's going to be changing.
 
OSUtils was the missing information!

#include <OSUtils.h>
...
signed char busMode = true32b;
SwapMMUMode(&busMode);

was compileable without errors or warnings.
 
All of the raw code talk has me wondering what the discussion is about. Are you adding more things that can be adjusted with the speed settings besides just CPU speed? Like keeping the SCSI controller chip from running so fast it freezes the machine? Or serial ports not functioning after a certain speed as is common?
 
More importantly, if the SCSI chip is accessed too fast it could potentially damage data on your writable SCSI devices.
 
Back
Top