Having fixed the delay code I’ve spent most of the evening reading up on the SX52’s memory architecture and the PAL timing signal. To start with I’ve created the signal needed for each scanline (see previous blog with timing diagram)

The first attempt didn’t go too well

No VSync

No VSync

It was only a few minutes though before I realise my timing was out by a few clock cycles. The reason? Well in order to generate the SYNC pulse 0.0V on the RE port for 4.7µs a delay of 4.7µs*1000/12.5ns = 376 clock cycles is needed, so I did the following

mov RE, VID_SYNC
DELAY(376)

The problem though is that 378 clock cycles have been taken up and thus the code is executing for 25ns longer than it needs to. When all the other mov/delay statements throughout the signal generation code are summed, that’s quite a lot of cycles out of sync. The solution is simple, a mov takes 1 cycle or in the case of a compound mov (which this is) 2 cycles, so reduce the delay by 2 cycles to give

mov RE, VID_SYNC       ; 2
DELAY(376-2)           ; 376-2

The result is a lot more promising. Using VID_WHITE (1.0v) for the output port RE gives a nice white screen. It’s not quite finihsed however, there is no handling of the vertical sync yet. Yes, the following image is a screenshot of a white screen ;)

Fixed Delay duration

Fixed Delay duration

That’s as far as I managed to get by the end of Saturday. I expected to have a good few hours Sunday to work on getting the vsync sorted and plotting a specific pixel, but plans changed. If I’m lucky I’ll squeeze in a few hours Sunday night to hopefully finish things off.