News:

Printed Amstrad Addict magazine announced, check it out here!

Main Menu

amstrad cpc "acid" test

Started by arnoldemu, 20:56, 20 January 16

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

andycadley

Looks like Kev has already updated the wiki but my tests seem to agree, accessing the sprite pixel data disables the sprite for the duration of the read/write. Accessing the position registers doesn't seem to have the same effect.

arnoldemu

Quote from: andycadley on 19:13, 06 August 17
Looks like Kev has already updated the wiki but my tests seem to agree, accessing the sprite pixel data disables the sprite for the duration of the read/write. Accessing the position registers doesn't seem to have the same effect.
yeah it didn't take that long to test :)

My games. My Games
My website with coding examples: Unofficial Amstrad WWW Resource

andycadley


Quote from: arnoldemu on 19:36, 06 August 17
yeah it didn't take that long to test :)


yeah, a few quick and dirty tests demonstrates it. :-)

arnoldemu

Quote from: andycadley on 20:32, 06 August 17

yeah, a few quick and dirty tests demonstrates it. :-)
It takes a bit longer to make a nice polished test that tries all of the possibilities in one screen, but that's what I'll do :)

My games. My Games
My website with coding examples: Unofficial Amstrad WWW Resource

roudoudou

I'm trying to do a cool SPLIT_ADR test cartridge but i think i have to work better on DMA cause i do not succeed in highlitghting the wait-state effect of DMA


Some capture to show you what it looks like now


But i can already tell:
- low byte of SPLIT_ADR & high byte of SPLIT_ADR are taken into account simultaneously
- Arnold is reading SPLIT_ADR 2 nops too late (the screen goes wrong 2 lines before the real CPC when the code has more NOPS before the register override)


Will work tomorrow on it  ;D


code extract



macro InnerSplit64
attente=15
repeat 16
ld e,(hl) : inc h : ld d,(hl) : inc h : ld a,c : ld (#6801),a : ld (#6802),de
defs attente+8,0
exx : ld (hl),b : exx ; <- Here is the register override
if attente>0
defs 15-attente,0
endif
; update counters
inc c : ld a,(hl) : inc l : dec h : dec h : ld (#6804),a ; the purpose is not to test the SSR
defs 64-31-15-8,0
attente=attente-1
rend
mend
My pronouns are RASM and ACE

ThomH

#105
Quote from: arnoldemu on 14:08, 13 May 17
It depends on the drive. My 3.5" drive is very quick to go ready and not-ready (the test can't measure it).

My 3" drives are much slower and they are not all the same.

I'm a year late, but while having terrible difficulty trying to get good substantive detail on the FDC I stumbled upon this thread.

Almost certainly the 3" drives implement the traditional meaning of RDY: it goes active two index pulses after motor on. The assumption is that proper speed will have been reached by then. How long it takes you to get to two index pulses obviously depends on initial rotation position plus how long your drive motor actually takes to get up to speed.

IBM redefined it. With any drive intended for a PC, RDY is inactive when you insert a disk. It becomes active after the head has stepped. It remains active until the disk has been ejected. So it's no longer related to rotation speed at all, it's effectively a disk-has-changed indicator.

roudoudou

Hey, i discussed with Offset about ACE emulator and testing AND sprites artefacts some people found
During the discussion, we were talking about splitrasters timing changes according to the instruction doing the change (see the previous pages of the topic)
Offset told me the time-shift between instructions used is always the same BUT there is another time-shift between functionnalities used in the ASIC
So i made a little (an incomplete test)
During sprite drawing, i'm changing X, then i'm changing zoom (to zero)
I noticed there is a little difference with changing X, then changing zoom to smaller width (i think it's the real end of the big sprite/2 width)
Then 4 lines doin nothing
Then changing X and changing Y position. This time we can see a very small and delicate line when switching back to full width
The CPR is not finished, i may change the visuals (for a moar visible evidence)
Juste some screens attached to this post


My pronouns are RASM and ACE

roudoudou

ouuuups, did not post the last cartridgethis side effect occurs also with read access to sprites...

My pronouns are RASM and ACE

roudoudou

Hi Folks! A new ACID test for emulators  :P
This one display all registers values at boot (i've red that Z80 must set SP and AF to 0xFFFF at reset but neither M4 nor C4CPC are able to do it!)
Also there is a visual demonstration of PSG concurrency access waitstates (3 DMA list + OUT to PSG at the "same" time)

My pronouns are RASM and ACE

gerald

Quote from: roudoudou on 15:37, 11 May 20
i've red that Z80 must set SP and AF to 0xFFFF at reset but neither M4 nor C4CPC are able to do it!
Where did you read that  :o

From Z80 user manual
"Reset (input, active Low). RESET initializes the CPU as follows: it resets
the interrupt enable flip-flop, clears the PC and registers I and R, and sets
the interrupt status to Mode 0
. During reset time, the address and data bus
go to a high-impedance state, and all control output signals go to the
inactive state.
"

roudoudou

Quote from: gerald on 16:01, 11 May 20
Where did you read that  :o

From Z80 user manual
"Reset (input, active Low). RESET initializes the CPU as follows: it resets
the interrupt enable flip-flop, clears the PC and registers I and R, and sets
the interrupt status to Mode 0
. During reset time, the address and data bus
go to a high-impedance state, and all control output signals go to the
inactive state.
"
https://acpc.me/ACME/MATERIEL/COMPOSANTS/CIRCUITS_INTEGRES/Z80/Z80_The_Undocumented_Z80_Documented(2005)[ENG].pdf
This register init is not a big deal anyway

BUT now i checked a CPC at startup is in IM 0 mode in contrary of Winape (that's why many Winape programmers cannot run their programms on a real machine)

My pronouns are RASM and ACE

gerald

Quote from: roudoudou on 16:08, 11 May 20
https://acpc.me/ACME/MATERIEL/COMPOSANTS/CIRCUITS_INTEGRES/Z80/Z80_The_Undocumented_Z80_Documented(2005)[ENG].pdf
This register init is not a big deal anyway

BUT now i checked a CPC at startup is in IM 0 mode in contrary of Winape (that's why many Winape programmers cannot run their programms on a real machine)
If needed, I can force AF and SP on start when loaded via CprSelect (of when cart image is bigger than 128k).
For direct load (card image smaller than 128k) SP will be modified due to the way the C4CPC make the Z80 wait : RST0. Side effect is also that RAM is filled with 0x0001 ;D
If you really need to have the Z80 in a true out of reset state is to first power the C4CPC via the USB port, then power the CPC.
Now to know if the SP and AF are really reset or they value is a side effect of the reset / powerup one would need to reverse engineer the Z80 layout. 
Set / Reset cost 2 NAND per register bit, and that's usually the reason to have set/reset on reset to the minimum.

roudoudou

Quote from: gerald on 17:25, 11 May 20
For direct load (card image smaller than 128k) SP will be modified due to the way the C4CPC make the Z80 wait : RST0. Side effect is also that RAM is filled with 0x0001 ;D
For most of my cartridges, i erase all the memory to be sure  ;D
My pronouns are RASM and ACE

roudoudou

new DMA test (still not complete)

My pronouns are RASM and ACE

Powered by SMFPacks Menu Editor Mod