Re: The Naked Atari 800
Posted: 04 Jan 2026 13:51
Cool thanks 😁stephen_usher wrote: 04 Jan 2026 13:24
And, yes, I agree with your idea for the clock generator connection.
We welcome retro users & hardware gurus alike! Come and join the party :)
https://www.exxosforum.co.uk/forum/
Cool thanks 😁stephen_usher wrote: 04 Jan 2026 13:24
And, yes, I agree with your idea for the clock generator connection.
Great. One of the best things you can do on an 800, that doesn't work on XL/XE models, is to play MULE with 4 players. Of course, you need 3 other players :)rubber_jonnie wrote: 03 Jan 2026 15:28 So I'm going to get back to the Si5351 shortly, but I had a care package from Best today:
And in it was a PAL GTIA, Antic, 6502B, 6502C (Sally) and four PAL 3.546894 MHz crystals.
...
OK, so the naked 800 is fully working :)
Indeed, one of my favourite games, even single player :)ijor wrote: 05 Jan 2026 13:39Great. One of the best things you can do on an 800, that doesn't work on XL/XE models, is to play MULE with 4 players. Of course, you need 3 other players :)rubber_jonnie wrote: 03 Jan 2026 15:28 So I'm going to get back to the Si5351 shortly, but I had a care package from Best today:
And in it was a PAL GTIA, Antic, 6502B, 6502C (Sally) and four PAL 3.546894 MHz crystals.
...
OK, so the naked 800 is fully working :)
There is only one version. The difference is that the 800 has 4 joystick ports, and the XL has only two. MULE supports paddles, and you can put two paddles per joystick port. But at least one joystick is required. So in the XL you can connect two paddles and one joystick for maximum 3 players. For 4 players, an 800 is required.rubber_jonnie wrote: 05 Jan 2026 13:44 I used to play M.U.L.E on my XLs, wonder if it was a later version?
Sorry, I misunderstood, I thought you meant M.U.L.E didn't work at all on the XL, my mistake.ijor wrote: 05 Jan 2026 13:54There is only one version. The difference is that the 800 has 4 joystick ports, and the XL has only two. MULE supports paddles, and you can put two paddles per joystick port. But at least one joystick is required. So in the XL you can connect two paddles and one joystick for maximum 3 players. For 4 players, an 800 is required.rubber_jonnie wrote: 05 Jan 2026 13:44 I used to play M.U.L.E on my XLs, wonder if it was a later version?
Sorry, I can see now it was my phrasing that was misleading. But come on, if MULE wouldn't work in the XL, who will buy an XL at all in the first place? :)rubber_jonnie wrote: 05 Jan 2026 13:59 Sorry, I misunderstood, I thought you meant M.U.L.E didn't work at all on the XL, my mistake.
Yep. One of the many brilliant details implemented in MULE. Be aware it is a little bit awkward, though. You need the joystick for the developing phase. So if you are playing with paddles and it's your developing turn, you must take the joystick. This is why at least one joystick is required.I hadn't heard about the paddles though, I must try that!
100%, it was the first game I EVER saw running on an 8 Bit Atari and if you want to phrase it in modern terms, then it was a 'killer app'ijor wrote: 05 Jan 2026 14:20
Sorry, I can see now it was my phrasing that was misleading. But come on, if MULE wouldn't work in the XL, who will buy an XL at all in the first place? :)
I do have another 800 as well, fully cased and with Incognito Gold and I love it to bits, the 'Naked 800' is purely because I want spares and it is useful for tesing some stuff I'm doing.ijor wrote: 05 Jan 2026 14:20 Yep. One of the many brilliant details implemented in MULE. Be aware it is a little bit awkward, though. You need the joystick for the developing phase. So if you are playing with paddles and it's your developing turn, you must take the joystick. This is why at least one joystick is required.
It's using I2C to send over the data to the clockgen, so only 2 pins required for that, and the code should be very small. The current Python code on the RPi is this:stephen_usher wrote: 11 Jan 2026 16:44 Looks excellent!
How easy is it to get the ATTiny85 to program the clock gen? The ATTiny 85 only has a little memory and four(?) I/O pins.
Code: Select all
#SMBUS programming script to directly program the Si5351 boards. Used because the I2C method failed.
#This requires the registers from Clockbuilder Pro to work. This programs the Si5351 to output 3.546894 MHz on CLK0.
from smbus2 import SMBus
# I2C bus 1 on Raspberry Pi
bus = SMBus(1)
addr = 0x60 # Si5351 default I2C address
# ClockBuilder Pro register dump
registers = [
(2, 0x53),
(3, 0x00),
(4, 0x20),
(7, 0x00),
(15, 0x00),
(16, 0x0F),
(17, 0x8C),
(18, 0x8C),
(19, 0x8C),
(20, 0x8C),
(21, 0x8C),
(22, 0x8C),
(23, 0x8C),
(26, 0xEB),
(27, 0xC2),
(28, 0x00),
(29, 0x0F),
(30, 0xF2),
(31, 0xB6),
(32, 0x04),
(33, 0x1C),
(42, 0x00),
(43, 0x01),
(44, 0x00),
(45, 0x7C),
(46, 0x80),
(47, 0x00),
(48, 0x00),
(49, 0x00),
(90, 0x00),
(91, 0x00),
(149, 0x00),
(150, 0x00),
(151, 0x00),
(152, 0x00),
(153, 0x00),
(154, 0x00),
(155, 0x00),
(162, 0x00),
(163, 0x00),
(164, 0x00),
(165, 0x00),
(183, 0x92),
]
# Write all registers
for reg, val in registers:
bus.write_byte_data(addr, reg, val)
print("Si5351 programmed successfully.")
Code: Select all
#include <TinyWireM.h> // I2C master library for ATtiny85
#define SI5351_ADDR 0x60
// ClockBuilder Pro register dump
const uint8_t regs[][2] = {
{2, 0x53},
{3, 0x00},
{4, 0x20},
{7, 0x00},
{15, 0x00},
{16, 0x0F},
{17, 0x8C},
{18, 0x8C},
{19, 0x8C},
{20, 0x8C},
{21, 0x8C},
{22, 0x8C},
{23, 0x8C},
{26, 0xEB},
{27, 0xC2},
{28, 0x00},
{29, 0x0F},
{30, 0xF2},
{31, 0xB6},
{32, 0x04},
{33, 0x1C},
{42, 0x00},
{43, 0x01},
{44, 0x00},
{45, 0x7C},
{46, 0x80},
{47, 0x00},
{48, 0x00},
{49, 0x00},
{90, 0x00},
{91, 0x00},
{149, 0x00},
{150, 0x00},
{151, 0x00},
{152, 0x00},
{153, 0x00},
{154, 0x00},
{155, 0x00},
{162, 0x00},
{163, 0x00},
{164, 0x00},
{165, 0x00},
{183, 0x92}
};
void writeReg(uint8_t reg, uint8_t val) {
TinyWireM.beginTransmission(SI5351_ADDR);
TinyWireM.write(reg);
TinyWireM.write(val);
TinyWireM.endTransmission();
}
void setup() {
TinyWireM.begin();
// Write all registers
for (uint8_t i = 0; i < sizeof(regs)/2; i++) {
writeReg(regs[i][0], regs[i][1]);
}
// Optional: reset PLLs (recommended by Silicon Labs)
// Register 177: bit 7 = reset PLLA, bit 6 = reset PLLB
// writeReg(177, 0xA0);
// Done
}
void loop() {
// Nothing to do — ATtiny just configures the Si5351 once at boot
}