CFFA1 — data corrupted only in the card's SRAM range ($1000–$8FFF)

1 post / 0 new
guibrush's picture
Online
Last seen: 4 min 45 sec ago
Joined: Apr 12 2020 - 13:45
Posts: 41
CFFA1 — data corrupted only in the card's SRAM range ($1000–$8FFF)

Today I got my CFFA1 from ReactiveMicro, many thanks to him!

 

I have unfortunately a problem while using it:

 

my Apple 1 replica corrupts data loaded through the CFFA1, but only above $1000. Text in my programs comes out garbled, and the garbling moves from one load to the next. The files themselves are fine — they run correctly under CFFA1 emulation (Honeycrisp)

Setup: replica board, Uncle Bernie reliability mods under the board,  CFFA1 v1.0 RevD, firmware 1.1, in the onboard slot. No expansion board, no ACI. A–T jumper installed. S1: 2 OFF, 4 OFF, 5 ON, 6 ON. Motherboard RAM at $0000–$0FFF and $E000–$EFFF.

 

How I measured it. Rather than trusting what I see on screen, I load a file with L, then write it straight back with W two or three times without reloading, then compare checksums on a modern machine.

What I found:

Same file (2625 bytes), three consecutive writes each time:

  • loaded at $E000 — three identical files
  • loaded at $0300 — identical files
  • loaded at $2000 — files differ

With a 14 KB program at $0300, errors pile up across successive writes without reloading: 13, then 18, then 21 bytes. Corrupted bytes never recover. Everything below $1000 is always clean.

Leaving the machine idle for 20 minutes adds nothing, and the prefix stored in $8000–$8FFF survives. So retention is fine — it only goes wrong during bus activity.

 

Two more things that may mean something to someone: across three independent runs and 60+ corrupted bytes, every faulty address has A2, A3, A4, A8, A9 and A10 high at the same time. And the value written over the original byte is $44 in most cases, whatever the original byte was.

MEMORYTEST won't run here either — it returns to the prompt immediately with no PASS. Since it loads through the same path, 

 

Has anyone seen this pattern? I'd particularly like to know whether marginal motherboard DRAM can corrupt transfers into a card's SRAM without failing its own memory tests. I muss say that I'm a bit puzzled...

 

I join a cmp comparaison that show the differences between two saves with W and a screen of my game (in french) where we see that the text is messed up or characters (le before braconnier) is missing.

 

Thanks for your help!

 

 

UPDATE:

 

he CF card is not involved at all.

I asked Claude to write a small 6502 test program that runs from $E000 (motherboard DRAM, which is clean here). It fills the CFFA1 SRAM with a known pattern, then repeatedly re-reads it and counts mismatches. It has two entry points: one that also triggers CF block reads between passes, and one that does nothing but read the pattern back.

Both behave the same. Around 50 corrupted bytes after 8–9 passes, with or without any CF activity.

So the corruption happens on plain 6502 reads and writes to $1000–$7FFF. No file loading, no firmware calls, no block driver, no CF card access. The faulty addresses are the same ones every run, and they all still satisfy (address AND $071C) = $071C.