Home C64 Section
ArticlesGame CheatsContribute!

From: CCS64 Messageboard (go to the original page)
Topic: CCS64 Bug
Date: September 16, 2002 at 23:08:14
Author: Luigi Di Fraia

The bug with Haunted House is caused by a problem with sprite collision detection (sprite-background characters, I would say).

Sprite to Background Collision Detect Register ($D01F)

Every bit that is set to 1 indicates that the corresponding sprite was involved in a collision with background data. On a real C64 the bits in this register remain set until read (PEEKed). Once read, the register is automatically cleared so that it can detect next collision.

CCS64 doesn't clear it after it's been read. Older versions of CCS64 suffer a deeper problem: collision with background data is not even detected in certain cases.

This behaviour may be causing the problem with "Haunted House". A sure fact is that the bug with this game is caused by a wrong emulation of the Sprite to Background Collision Detect Register. If you change the "LDA $D01F" at $1850 with "LDA #$00" followed by a "NOP" (in other words disable Sprite-background collision detection), the bug disappears (you've just gained an Action Replay "Sprite Killer" :).

Topic: Turbo Loaders pulse decoding
Date: August 16, 2003 at 12:08:25
Author: Luigi Di Fraia

Bits aknowledgment is commonly done by comparing the delay between 2 consecutive negative edges coming from the Datasette read-line and the underflow of one of the CIA timers. There are also some more intricated schemes (e.g. Pavloda, IRQ Loaders, etc.) but I won't discuss them here.

First of all, the chosen timer is initialized to a threshold value which depends on the turbo loader. Once that is done, the loader routine waits for a negative edge from the datasette by checking a flag contained in the second 6526, at $DC0D (second bit). As said, negative edges from Datasette read-line set this bit, so that when the first one occurrs, countdown is started by writing the appropriate value to the Timer Control Register (one-shot mode). After that, the routine once again checks the flag for a negative edge coming from the datasette read-line. When next one occurrs, the timer flag is read, usually by moving it to the Carry bit. Carry is 0 when the read pulse period is shorter than threshold (since when timer flag was read, the countdown wasn't yet over and the flag not yet set). On the other side, Carry is 1 when the read pulse period is longer than threshold (since when timer flag was read, it was already set because of the countdown completion).

This way, a byte can be reconstructed by repeating that process 8 times.

Topic: Open letter to C64 community
Date: February 17, 2005 at 20:00:00
Author: Luigi Di Fraia

I've recently seen a lot of RARE C64 software and hardware sold on eBay at high prices. I cannot afford many of them at such prices.
I don't know which will be the use buyers will do of those items, but I hope they won't just sit on a table or on a shelf in a cellar.

I feel like pointing the finger against sellers. If they don't really need those items, they should consider the fact to DONATE them to C64 experts which could preserve the software and the hardware for future generations.

From my view point, I won't be able to carry out the C64 related work forever. A lot of things must be done and the C64 preservation project is far from being complete. Either the software/hardware we require comes to our hands as soon as possible, or I won't process ANYTHING after 31 Dec 2005 from sources which haven't shown interest before that date.

C64 software (tape/disk) owners together with C64 hardware (datasettes, disk drives, etc.) owners, this is your chance to give a serious contribution. I will give full credit to anyone wanting to donate or sell at low prices their C64 stuff. Stop selling single items. Submit a full package to experts first.

Luigi Di Fraia.

Email the author comments/suggestions

Comers since area creation: Since April 2002 - Best viewed at 800x600

Last Modified: 17 Feb 2005