rdemming wrote:Sorry for the confusion. With "it doesn't use any borders" I meant it doesn't display graphics in any border. So it is not full screen. Actually the visible height of the screen is about 16! lines smaller because the hardware scroll snoops away the top lines.
Yes, strange one. Although the code is synchronizing with the shifter, all freq / res switches are made 16 cycles too soon than the expected value. As the right border for example really needs a 4 cycles precision, this can't work.
The code only does NOP after syncing before the first hi/lo switch to remove left border, so I don't think the error comes from there.
Perhaps the game is using a kind of bugged self calibration routine similar to Enchanted Lands, but I didn't see anything like that too.
shifter=0x02 video_cyc_w=33780 line_cyc_w=500 @ nHBL=65/video_hbl_w=65 pc=bffe instr_cyc=8
shifter=0x00 video_cyc_w=33788 line_cyc_w=508 @ nHBL=65/video_hbl_w=65 pc=c000 instr_cyc=8
sync=0x00 video_cyc_w=34152 line_cyc_w=360 @ nHBL=66/video_hbl_w=66 pc=c0b4 instr_cyc=8
sync=0x02 video_cyc_w=34160 line_cyc_w=368 @ nHBL=66/video_hbl_w=66 pc=c0b6 instr_cyc=8
shifter=0x02 video_cyc_w=34220 line_cyc_w=428 @ nHBL=66/video_hbl_w=66 pc=c0d2 instr_cyc=8
shifter=0x00 video_cyc_w=34232 line_cyc_w=440 @ nHBL=66/video_hbl_w=66 pc=c0d6 instr_cyc=8
So the technique used is quite the usual way to achieve hardware scroll by removing left/right border, it's just that the code is not correctly synchronized with the shifter when using emulators (right border timings should be 376/384 not 360/368).