Detecting VBL on 800 in 700-mode

Jo Even
Site Admin
Posts: 110
Joined: Wed Jan 17, 2018 9:28 pm

Re: Detecting VBL on 800 in 700-mode

Post by Jo Even » Wed Sep 18, 2019 12:31 pm

I'm tempted to ask my friend to probe PC7 with a logic analyzer to see what's actually happening.

Jo Even
Site Admin
Posts: 110
Joined: Wed Jan 17, 2018 9:28 pm

Re: Detecting VBL on 800 in 700-mode

Post by Jo Even » Wed Sep 18, 2019 12:53 pm

hlide wrote:
Wed Sep 18, 2019 12:12 pm
Did you try with EmuZ-800?
I have not been able to get these emulators working on my Windows 10 PC. 700-emulator shows blue and black bars on the "screen", 800-emulator just a black screen.

hlide
Posts: 285
Joined: Thu Jan 25, 2018 9:31 pm

Re: Detecting VBL on 800 in 700-mode

Post by hlide » Sun Sep 22, 2019 8:28 pm

You must add IPL.ROM (1Z-13A) and FONT.ROM in the same directory as EmuZ-700.exe. As you should know Japanese people are fearful of copyrighted ROM so they don't include them. I had the same issue as yours without those ROM files.

Jo Even
Site Admin
Posts: 110
Joined: Wed Jan 17, 2018 9:28 pm

Re: Detecting VBL on 800 in 700-mode

Post by Jo Even » Sun Sep 22, 2019 9:39 pm

Jo Even wrote:
Mon Sep 16, 2019 1:29 pm

Code: Select all

while (*(unsigned char *)0xe002 & 0x80);
This is working on the 700 but always returns immediately on the 800 emulator in 700 mode.
Why did I write "700" and not "700 emulator"? Because when I finally managed to test this on a REAL 700 it shows exactly the same behaviour. So the problem *is* with the emulator, just not with the 800 emulator :)

Jo Even
Site Admin
Posts: 110
Joined: Wed Jan 17, 2018 9:28 pm

Re: Detecting VBL on 800 in 700-mode

Post by Jo Even » Mon Sep 23, 2019 9:28 am

This piece of code stolen from the monitor works.

Code: Select all

	__asm
	push af
wait1:	ld a,(0e002h)
	rlca
	jr nc,wait1
wait2:	ld a,(0e002h)
	rlca
	jr c,wait2
	pop af
	__endasm
Maybe the compiled C code isn't fast enough. VBL is low for less than 3ms, but it should take some pretty inefficient code to miss that.

Edit: Just replicated the functionality from the asm above in C, and can confirm that it does not work in the 800 emulator. The compiled code is almost certainly to slow, and I guess it only works in the 700 emulator due to inaccurate emulation.

Edit2: I can also confirm that this is working on both a real 800 and a real 700. So problem solved :)

Post Reply