Monday, March 6, 2023
Bega's Battle - Sync Generator Replacement - Testing with Super Don NTSC decoder
Thursday, February 16, 2023
Bega's Battle Sync Generator Replacement - How to install
Wednesday, October 5, 2022
Cobra Command (dedicated) confirmed working with Dexter!
Very exciting progress to show here.
Thanks to Mike Treu for testing for me!
By the way, not only will this mod work with Dexter, but it will also work with the Sony LDP-1450 which Mike also tested.
The mod replaces 16K on the bottom Data East board with a custom PCB that I designed. So unfortunately, it will require modifying the game hardware, which I have tried to avoid as much as possible but which was ultimately the only feasible solution I could find for these games (Bega's Battle, Cobra Command and Road Blaster).
After the mod is installed, the game will work with:
- The original Sony LDP-1000A (yes, I maintained backward compatibility)
- Dexter
- Sony LDP-1450 and probably most other Sony players.
Friday, September 9, 2022
Making a MC44144 tester for Cobra Command / Dexter research
I've pondered about whether the "obsolete" MC44144 chip could be useful for making Bega's Battle (and Cobra Command dedicated) work with Dexter. Although it isn't in production anymore, from what I can tell, it's still fairly obtainable.
Here's the PCB I've designed to help test it and see how well it works.
Friday, August 6, 2021
DEXTER Data line 6 of 7 was being held high
This is a note to myself in case I ever have to troubleshoot this problem again.
On a Dexter board I was testing, I noticed that one of the data bits was stuck high. After some non-trivial testing, I finally isolated it to a bad diode, which really surprises me. This is the last part that I thought would be the problem!
NOTE to future self: try removing this diode if the problem ever happens again.
Tuesday, July 13, 2021
Finding solder bridge using thermal camera
I had a Dexter with the RESET and DIAGNOSE lines tied together somewhere. I suspected a solder bridge but I couldn't find it. So I decided to send some current through RESET and DIAGNOSE and get out my thermal camera to see where things were getting hot. Here's what I saw:
I eventually found the bridge, but was not in the most intense place on the PCB:
In the future, instead of looking for the most intense spot on the PCB, I should observe the path that the heat is traveling. The fact that the heat was traveling down and left of where I was applying power was a clue that I would find the bridge somewhere along that path.
Tuesday, December 29, 2020
Dragon's Lair (and Space Ace) boot-up explained
I occasionally get questions about whether Dexter is 'the problem' when a Dragon's Lair or Space Ace doesn't work. Here's a video to shed some light on where boot problems may be.
Monday, May 25, 2020
Re-purposing a blank Dexter PCB!
Monday, April 6, 2020
Sunday, April 5, 2020
Latest Atari Dragon's Lair progress with Dexter
Fixes since last time include:
- no screen blanking at the beginning of scenes
- audio level increased
Saturday, September 28, 2019
DL Euro + Dexter running inside of a cabinet!
...
Monday, June 17, 2019
Dexter Sony LDP-1450 bug finally found and fixed!
Well, I've been working behind the scenes to figure out what the bug was and pulling my hair out in frustration looking at my code.
It turns out that the bug had nothing to do with my changes that caused the problem but instead was a buffer overflow bug in some other code that hadn't been a problem by sheer luck :)
Once I added some new serial port code, this buffer overflow was overwriting my memory. I finally had to attach an AVR Dragon (AVR programmer and debugger) and set a memory breakpoint to catch the problem.
Here is the code that caused the problem. It's part of the LDP-1000/1450 interpreter:
uint16_t g_ldp1000i_tx_buf[12]; // this should be small enough so as to not waste space but big enough to hold things like current frame number
uint16_t *g_ldp1000i_pTxBufStart = 0;
uint16_t *g_ldp1000i_pTxBufEnd = 0;
const uint16_t *g_ldp1000i_pTxBufLastGoodPtr = (g_ldp1000i_tx_buf + sizeof(g_ldp1000i_tx_buf) - 1);
The fix is to change the last line to:
const uint16_t *g_ldp1000i_pTxBufLastGoodPtr = (g_ldp1000i_tx_buf + (sizeof(g_ldp1000i_tx_buf)/sizeof(uint16_t)) - 1);
The problem with working in C is that these types of mistakes are easy to make and the compiler often won't even warn you about it. This is the price of working with lower level languages :o
Using the sizeof keyword is kind of dangerous because it always returns a value in bytes which doesn't work when your pointer is a uint16_t :) I still use sizeof all over the place, though, because most of my pointers are uint8_t's :)
For future reference, when adding to a pointer, if you are going to use sizeof, you need to divide by the size (in bytes) of the element that makes up the array. In this case, the TX buffer is 12 2-byte elements, so sizeof would return a 24 (12*2 is 24). But when adding, I actually wanted to just add 12, not 24, because I wanted to add the number of elements, not the number of bytes. So I needed to divide by the number of bytes per element (2 in this case).
After some testing, I expect to finally release some new firmware for Dexter in preparation for officially supporting the European version of Dragon's Lair (woohoo!).
Sunday, January 27, 2019
Monday, December 10, 2018
Dexter closer to fully supporting European Dragon's Lair!
Thursday, August 30, 2018
Had to make a new VP932 adapter
Saturday, July 21, 2018
Euro DL PCB arrived today!
Thanks to Matteo Marioni, I now have a Euro Dragon's Lair PCB on loan for Dexter development. The molex connector that I soldered up for the Dexter add-on board seems to fit! Phew!
I just happened to have the 36-pin connector type (which isn't available to buy anymore!) so my next step is to create a test bench wiring harness and then hook up a logic analyzer to sniff the serial I/O. This is exciting progress!