Amstrad Plus Forum Index

Amstrad Plus
Découverte de la gamme Old et Plus des Cpc d'Amstrad.

 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Mise a jour de l'emulateur SugarBox
Goto page: <  1, 2, 39, 10, 11, 12, 13  >
 
Post new topic   Reply to topic    Amstrad Plus Forum Index -> Bienvenue sur ce forum -> Actualités
Previous topic :: Next topic  
Author Message
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,976
Masculin
Point(s): 389
Moyenne de points: 0.13

PostPosted: Wed 27 Sep - 11:10 (2017)    Post subject: Mise a jour de l'emulateur SugarBox Reply with quote

roudoudou wrote:
Le code

Code:
call DetectIM2Plus
or a
jr z,EmulatorKO

jr $ ; OK



DetectIM2Plus
di
ld a,#BE
ld i,a
ld hl,IntIM2_dma
ld (#BE00),hl
ld (#BE02),hl
ld (#BE04),hl
ld hl,IntIM2_38
ld (#BE06),hl
ld hl,#BE00
ld de,#BE08
ld bc,256-8
ldir


ld hl,RunIM2
ld de,#9000
ld bc,RunIM2End-RunIM2
ldir
call #9000
ld a,(#BF01)
or a
jr nz,DetectIM2PlusNext
inc a
ei
ret ; pas d'interruption DMA survenues c'est un émulateur

DetectIM2PlusNext
ld hl,RunIM2
ld de,#B000
ld bc,RunIM2End-RunIM2
ldir
call #B000
ld a,(#BF01)
ret ; si interruption DMA c'est un émulateur qui simule le bug alors qu'il ne devrait pas

RunIM2
im 2
xor a
ld (#BF00),a
ld (#BF01),a
ei
ld de,#BF04
ld bc,8
RunIM2Loop
repeat 64
ld (de),a
rend
djnz RunIM2Loop
dec c
jr nz,RunIM2Loop
im 1
di
ret
RunIM2End

IntIM2_38
push af
ld a,(#BF00)
inc a
ld (#BF00),a
pop af
ei
ret

IntIM2_dma
push af
ld a,(#BF01)
inc a
ld (#BF01),a
pop af
ei
ret












Merci pour le partage, ça pourra aider Lone, j'en suis certain ^^
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Publicité






PostPosted: Wed 27 Sep - 11:10 (2017)    Post subject: Publicité

PublicitéSupprimer les publicités ?
Back to top
roudoudou


Offline

Joined: 14 Jul 2016
Posts: 427
Localisation: LYON
Masculin
Point(s): 46
Moyenne de points: 0.11

PostPosted: Wed 27 Sep - 12:12 (2017)    Post subject: Mise a jour de l'emulateur SugarBox Reply with quote

En le regardant je m'aperçois qu'il manque un dernier test pour être complet, celui de tester le bug avec un code qui ne fait pas d'écriture mémoire.

Back to top
roudoudou


Offline

Joined: 14 Jul 2016
Posts: 427
Localisation: LYON
Masculin
Point(s): 46
Moyenne de points: 0.11

PostPosted: Wed 27 Sep - 12:30 (2017)    Post subject: Mise a jour de l'emulateur SugarBox Reply with quote

Voilà, testé avec succès Mr. Green

Il faut ajouter la sous-routine suivante

Code:
RunIM2NOWrite
xor a
ld (#BF00),a
ld (#BF01),a
im 2
ei
ld de,#BF04
ld bc,8
RunIM2LoopNOWrite
repeat 64
dec de
rend
djnz RunIM2LoopNOWrite
dec c
jr nz,RunIM2LoopNOWrite
im 1
di
ret
RunIM2EndNOWrite


Et patcher la routine DetectIM2PlusNext

Code:
DetectIM2PlusNext
ld hl,RunIM2
ld de,#B000
ld bc,RunIM2End-RunIM2
ldir
call #B000
ld a,(#BF01)
ret nz ; si interruption DMA c'est un émulateur qui simule le bug alors qu'il ne devrait pas car le code est en #B000

ld hl,RunIM2NOWrite
ld de,#9000
ld bc,RunIM2EndNOWrite-RunIM2NOWrite
ldir
call #9000
ld a,(#BF01)
ei
ret ; si interruption DMA c'est un émulateur qui simule le bug alors qu'il ne devrait pas car le code en #9000 ne fait pas d'écriture


Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,976
Masculin
Point(s): 389
Moyenne de points: 0.13

PostPosted: Wed 27 Sep - 13:01 (2017)    Post subject: Mise a jour de l'emulateur SugarBox Reply with quote

Pense à refaire un cpr complet !
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
roudoudou


Offline

Joined: 14 Jul 2016
Posts: 427
Localisation: LYON
Masculin
Point(s): 46
Moyenne de points: 0.11

PostPosted: Wed 27 Sep - 13:11 (2017)    Post subject: Mise a jour de l'emulateur SugarBox Reply with quote

celle là devrait être bonne (pas vérifiée sur le CPC+)
http://dl.free.fr/nCXUdnEZv
j'ai viré le fadeout à la fin aussi


Back to top
Lone


Offline

Joined: 17 Dec 2014
Posts: 139
Masculin
Point(s): 5
Moyenne de points: 0.04

PostPosted: Wed 27 Sep - 22:25 (2017)    Post subject: Mise a jour de l'emulateur SugarBox Reply with quote

Par le plus grand des hasards, aurais-tu le source complet ? J'ai un comportement bizarre vers le début....

Back to top
roudoudou


Offline

Joined: 14 Jul 2016
Posts: 427
Localisation: LYON
Masculin
Point(s): 46
Moyenne de points: 0.11

PostPosted: Wed 27 Sep - 22:34 (2017)    Post subject: Mise a jour de l'emulateur SugarBox Reply with quote

Faut que je dégrossisse encore plus, j'ai tronqué ma démo pour faire la cartouche et y a des includes de partout, etc.

Le mieux serait que tu lises le sujet sur CPCWiki, c'est assez limpide, tout comme le morceau posté ici.

Si le code qui est interrompu est exécuté à une adresse où A13=0 ET que l'instruction pendant laquelle l'interruption arrive fait une lecture/écriture mémoire alors le bug apparait

De là il y a trois choses à tester

Qu'avec un code exécuté depuis une adresse où A13=1 le bug n'arrive jamais
Qu'avec un code exécuté depuis une adresse où A13=0 le bug arrive si on a des instructions de lecture/écriture
Qu'avec un code exécuté depuis une adresse où A13=0 le bug n'arrive pas si on a que des instructions sans lecture/écriture
Voilà pourquoi après avoir configuré ma table de vecteurs je copie le code tantôt en #9000 tantôt en #B000, ça peut se tester ailleurs
L'adresse de la table des vecteurs d'interruption n'a pas d'importance
L'adresse du code d'interruption n'a pas d'importance


Back to top
roudoudou


Offline

Joined: 14 Jul 2016
Posts: 427
Localisation: LYON
Masculin
Point(s): 46
Moyenne de points: 0.11

PostPosted: Wed 27 Sep - 22:35 (2017)    Post subject: Mise a jour de l'emulateur SugarBox Reply with quote

Analyse logique de Gérald

When a raster interrupt is pending it has been found that the ASIC sees two interrupt acknowledge from the Z80.
With the first, it will auto-clear the raster interrupt, record the information in the DCSR register and output the raster interrupt vector onto the bus.
When it sees the second, because the raster interrupt has been seen and no DMA interrupts are pending, it defaults to the the vector for DMA channel 0.
The logic around the Z80 shortens or lengthens the IORQ based on A13 and that is why the bug doesn't happen when A13=1.


Back to top
Lone


Offline

Joined: 17 Dec 2014
Posts: 139
Masculin
Point(s): 5
Moyenne de points: 0.04

PostPosted: Wed 27 Sep - 22:50 (2017)    Post subject: Mise a jour de l'emulateur SugarBox Reply with quote

En fait (tu vas rire !) j'ai certainement un bug dès le début, sur un switch de cartouche : J'ai un comportement que je n'explique pas...
Du coup, je n'arrive même pas à l'endroit où je devrait voir quelque chose !


Ah, avec ça, on n'est pas rendu Smile (souhaitez moi bon courage)


Back to top
roudoudou


Offline

Joined: 14 Jul 2016
Posts: 427
Localisation: LYON
Masculin
Point(s): 46
Moyenne de points: 0.11

PostPosted: Wed 27 Sep - 22:59 (2017)    Post subject: Mise a jour de l'emulateur SugarBox Reply with quote

bon courage! (on a hâte!)

Back to top
Lone


Offline

Joined: 17 Dec 2014
Posts: 139
Masculin
Point(s): 5
Moyenne de points: 0.04

PostPosted: Wed 27 Sep - 23:02 (2017)    Post subject: Mise a jour de l'emulateur SugarBox Reply with quote

Ok, trouvé !
J'avais un comportement bizarre, qui faisait passer la RAM avant la cartouche, même lors que la lower rom était active (merci le bug)
Bon, du coup j'avance (en tout cas, j'ai ton fameux message "FlowLIB v1.1 - You should try on a real machine" )


Back to top
roudoudou


Offline

Joined: 14 Jul 2016
Posts: 427
Localisation: LYON
Masculin
Point(s): 46
Moyenne de points: 0.11

PostPosted: Thu 28 Sep - 08:23 (2017)    Post subject: Mise a jour de l'emulateur SugarBox Reply with quote

Sur la cartouche de test, il y a d'abord le test de lecture Asic
Pour rappel, quand on essaie de lire une adresse non mappée en lecture de l'Asic (ça peut aussi se situer sur un registre en écriture seule), la valeur lue est le dernier octet de l'opcode de l'instruction qui fait la lecture!!!
Ainsi, un ldir renverra #BO dans l'adresse de destination, par exemple Smile


Back to top
Lone


Offline

Joined: 17 Dec 2014
Posts: 139
Masculin
Point(s): 5
Moyenne de points: 0.04

PostPosted: Thu 28 Sep - 18:12 (2017)    Post subject: Mise a jour de l'emulateur SugarBox Reply with quote

Bon, j'ai un algo basé sur ce que j'ai compris, qui passe tout... Sauf... Le dernier test.


Celui basé sur &9000, avec des DEC DE : j'ai un certain nombre d'interruptions qui popent sur le DJNZ 9010 (que je considère comme un memory read (le 9010)).


Autre chose, j'ai découvert (est-ce exact ? ) que les interruptions classiques (toutes les 52 HBL) devraient provoquer une interruption avec un vecteur à 6 (autrement ça ne marche pas). Vous me confirmez ?


Dernier point : Je pensais que la ROM (installée ou via cartouche) supérieure était, au démarrage, déconnectée. J'ai désormais un doute.... Ca vous parle ?


Back to top
roudoudou


Offline

Joined: 14 Jul 2016
Posts: 427
Localisation: LYON
Masculin
Point(s): 46
Moyenne de points: 0.11

PostPosted: Thu 28 Sep - 20:00 (2017)    Post subject: Mise a jour de l'emulateur SugarBox Reply with quote

sur le CPC+ au démarrage, la rom 0 est connectée en #0000 et la rom 1 est connectée en #C000
en l'absence de rom 1, je crois que ça connecte la rom 0 mais le doute m'habite
quoi qu'il en soit, mes deux premières instructions sont de désactiver la rom haute Mr. Green

marrant que tu considère le DJNZ comme un memory read, je pense sans en être sûr que l'adresse de branchement est partie intégrante de l'opcode et lue à chaque fois pendant la décrémentation/comparaison pour gagner du temps, sinon l'instruction serait encore plus lente non?


Back to top
Lone


Offline

Joined: 17 Dec 2014
Posts: 139
Masculin
Point(s): 5
Moyenne de points: 0.04

PostPosted: Thu 28 Sep - 20:20 (2017)    Post subject: Mise a jour de l'emulateur SugarBox Reply with quote

roudoudou wrote:
sur le CPC+ au démarrage, la rom 0 est connectée en #0000 et la rom 1 est connectée en #C000
en l'absence de rom 1, je crois que ça connecte la rom 0 mais le doute m'habite
quoi qu'il en soit, mes deux premières instructions sont de désactiver la rom haute Mr. Green

marrant que tu considère le DJNZ comme un memory read, je pense sans en être sûr que l'adresse de branchement est partie intégrante de l'opcode et lue à chaque fois pendant la décrémentation/comparaison pour gagner du temps, sinon l'instruction serait encore plus lente non?



Super pour les ROM connectées !
Pour le DJNZ, je me base sur ce site qui m'a considérablement aidé lors du recodage du Z80 "timing perfect" :


http://baltazarstudios.com//files/xx.html#10


A priori, il fait, de toute façon, tout le temps le jump (sauf le dernier coup)
Je me suis également basé sur l'article du cpc wiki :
"The bug also doesn't occur with opcodes that don't use memory read/write or don't contain a memory read/write when fetching the opcode"


Ca marche d'autant mieux que mon code est simple : J'ai collé un booléen à vrai dans les phase de type Memory Read/ Write, pour savoir si l'instruction précédant l'interruption était de ce type.


Bon, par contre, vu que ça passe sur CPC+, c'est quand même pas bon signe (mais du coup, ça va être une horreur si je ne peux pas avoir un comportement un peu générique !)


Back to top
Display posts from previous:   
Post new topic   Reply to topic    Amstrad Plus Forum Index -> Bienvenue sur ce forum -> Actualités All times are GMT + 2 Hours
Goto page: <  1, 2, 39, 10, 11, 12, 13  >
Page 10 of 13

 
Jump to:  

Index | Administration Panel | Create a forum | Free support forum | Free forums directory | Report a violation | Cookies | Charte | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group