Was mit Preudozufall geht: Merke dir im EEPROM den letzten Zufallswert als seed für den nächstes Start-- ok, ist etwas stressig für's EEPROM.

'Richtige' Zufallswerte bekommst du folgendermassen:
Nach Power-On-Reset berechnest du einen Wert seed aus dem RAM-Inhalt. Dieser ist uninitialisiert und damit mehr oder weniger zufällig; zumindest für AVR-SRAM. Diesen Wert kannst du als Startwert für deine RND-Routine nutzen.
Ich poste hier mal einen C-Code, der mir nach jedem Einschalten einen anderen 16-Bit-Wert liefert. Habs eben mal abgecheckt

Meine BASIC-Zeiten sind seit C64 vorbei, vielleicht ist jemand so nett und übersetzt nach BASIC?

Code:
#define RAM_START 0x60
#define RAM_END   (RAM_START + 0x400)

// Deklariere eine 16-Bit Variable seed.
// Lege sie in Section .noinit, damit sie vom Startupcode (crtm8.o) 
// nicht überpinselt wird.
unsigned short seed __attribute__((section(".noinit")));

// Lege get_seed() in die Section .init0
// Diese wird direkt nach RESET-Interrupt aufgerufen,
// noch vor dem Startup-Code und Aufruf von main().

__attribute__((section (".init0")))
__attribute__((naked))
void get_seed() 
{
	unsigned char *pram;
	unsigned short _seed = 0;

	for (pram = (unsigned short*) RAM_START; pram < (unsigned short*) RAM_END; pram++)
		_seed += *pram; // Oder sonst was...
		
	seed = _seed;
}

// !!! Wichtig: get_seed() NICHT aufrufen!!!
void main()
{
	...
	... = seed;
	...
}