Index du forum




Un petit coup de main... Vous pouvez nous aider à mettre ce site à jour: n'hésitez pas à me contacter !!!

* Connexion   * Inscription

* FAQ
Nous sommes actuellement le 29 Nov 2025, 16:00

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


[SCUMM] Code Z80 CPC conversion from SCUMMVM

Modérateur: poulette73



Publier un nouveau sujet Répondre au sujet  Page 5 sur 14
 [ 201 message(s) ]  Aller vers la page Précédent  1, 2, 3, 4, 5, 6, 7, 8 ... 14  Suivant
  Aperçu avant impression Sujet précédent | Sujet suivant 
Auteur Message
qbert
 Sujet du message : Re: [SCUMM] Code Z80 CPC conversion from SCUMMVM
Message Publié : 28 Août 2010, 14:30 
Hors-ligne
Rulez
Rulez
Avatar de l’utilisateur

Inscription : 22 Août 2010, 16:23
Message(s) : 39
Bravo les gars,

Je suis (discrètement) votre discussion depuis le début.

Je ne peux qu'approuver l'efficacité avec laquelle le sujet est traité. En dehors de la seule faisabilité technique, c'est clair que vous avez pris en main les bons morceaux pour commencer.

Tous mes encouragements !


Haut
 Profil  
 
Megachur
 Sujet du message : Re: [SCUMM] Code Z80 CPC conversion from SCUMMVM
Message Publié : 29 Août 2010, 05:15 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 12 Juin 2008, 20:29
Message(s) : 1726
La suite du découpage de fichier au sabre "Pirate" :

j'ai utilisé SCUMMRev5_Build130
ouvert le fichier du premier disk DISK01.LEC (attention c'est la version amiga fr pour l'instant que j'utilise -> je passerai à la version pc quand je serai un peu plus avancé pour voir si ce que j'ai fait est compatible avec d'autres versions ce qui ne devrait plus trop tarder !!!) mais ce que je dis est valable pour les autres version bien sûr !

bref, pour l'utilitaire dont je parle plus loin, il vaut mieux se baser sur la version pc EGA disk par exemple... fr serait un plus ;-)


ensuite j'ai découpé le fichier et je n'ai récupéré que ce qui est hors graphique, sons, etc. (on peut aussi le voir à l'inverse je n'ai récupéré que ce qui est intéressant (cf liste des items à conserver à faire avec RO, LS, etc. ;-)))

cela m'a permis de réduire la premier room (&0a) de 61ko à 16ko... ce qui me va bien car tout doit rentrer dans un bank de 17ko ;-)

là, j'en suis donc à coder les opcodes (oulala y'en a un paquet) ce qui va faire exécuter des trucs à l'écran (ouaaaahhhhhhh !!!! :nage: )

Bon, donc je crois que je vais avoir besoin d'un petit utilitaire sur cmd dos pc pour faire un découp des fichiers rooms...


Voici un ptit cahier des charges à ce sujet pour un autre codeur fano, Demonial, ? :


1) tout d'abord, on passe en paramètre le fichier disk (ex : DISK01.LEC)
ensuite il faut faire un xor &69 sur tous les datas
après il faut interpréter le fichier comme cela :

4 octets longueur fichier
2 octets (doivent être égal à "LE")

SECTION "FO" (on ne va rien en faire...si ce n'est s'en servir pour aller au différente SECTION "LF")
4 octets longueur
2 octets = "FO"
32 bits d'offset jusqu'à fin longueur

pour chaque SECTION "LF"
4 octets longueur
2 octets = "LF"
2 octets = numéro de la room (très important ;-))

puis on va trouver 1 SECTION "RO"
4 octets longueur
2 octets = "RO"

puis on va trouver à l'intérieur divers éléments qu'il faut sauvegarder (cf MK1_AMFR_INDEX.asm) dans un répertoire "data\room\[numero de room]" comme cela :
NUM_OFFSET_TYPE.extract
où
NUM = un numéro de 01 à xx qu'on incrément à chaque object
OFFSET = offset par rapport au début de la section "RO"
TYPE = les deux caractères qu'on trouve après la 4 octets de la longueur de l'objet

Nota : chaque élément commence par sa longueur sur 4 octets, ensuite deux octets pour le type

la SECTION "LF" contient ensuite des scripts
4 octets longueur
2 octets = "SC"
qu'il faut sauvegarder à la suite avec les mêmes règles de nommage qu'au-dessus

puis les sons ou les costumes ou d'autres éléments à traiter de la même façon !!!

et on boucle tant que pas fin fichier "LE"

Voilà à la fin, on va a obtenir plein de fichiers dans data\room\numéro de room...

cela permettra ensuite d'appliquer des règles automatiques pour le calcul des offsets...
en effet, les objets de type "OI" - Object Image vont être enlever car les images seront charger séparément (comprendre dans une autre bank mémoire de 17ko)
idem pour les costumes
en fait, tous les trucs spécifiques à la plateforme finalement (son, image, costumes=sprites) que je traiterais à la façon cpc...

2) il faudra également produire un fichier "idem 3_0S.asm mais que pour les scripts de la room en question" (cf tout en bas pour l'exemple)
en recalculant l'offset à partir du début de la room
comme je vais charger tout ça en bank, l'idéal serait donc d'ajouter également &4000 à l'offset

je pense également qu'il faudra le faire pour les costumes et d'autres éléments, à voir !


ce qui donnerait par exemple:

premier script de la room &0A :
ancien offset &00007121 relatif au début du fichier ROOM
Nota : en fait l'offset dans le fichier est &0000716D mais il faut enlever les différents trucs avant : &0000716D - 6 (LE) - &3e (FO) - 8 (LF) = &7121

donc il est bien relatif au début de (RO) et on peut le recalculer facilement en faisant :
&7121 - les longueurs des trucs qu'on doit pas garder (cf liste des types qu'on garde pas) et on obtient le nouveau offset relatif à RO
qu'il faudra mettre dans un .asm pour modifier l'index !

Ensuite, il faudra vérifier que data qu'on garde de la ROom + les SCripts font pas plus de 17ko !
donc va falloir tester toutes les rooms ;-)
si c'est avéré, il faudra donc séparer room (RO) et script (SC) et du coup revoir les offsets des SC relatif au début de la bank (=&4000)...

au final pour l'exemple de la room &OA

NOMSECTION.numéro room

les deux fichiers serait :
RO.0A
SC.OA (si avéré)

il faudrait mettre un check si > à &4000 de long !!!

3) également, l'idéal serait au final de produire le fichier MK1_AMFR_INDEX.asm directement !!!
on pourrait même mettre en commentaire les fichiers son, image, etc...en gros ce qui ne sera pas dans une liste de type autorisé ;-) !

soit l'asm soit le fichier (ou les deux si on sépare RO et SC) en binaire directement...

facile non ? :pir8: :winner: :pir8:


fichier mis pour exemple :
3_0S.asm
db &0A
dw &038e,&0000 ; db &21,&71,&00,&00
ici j'ai changé l'offset d'origine &00007121 par le nouveau &0000038e (-> c'est un 32bits à l'origine mais je pense bien le changer en 16 bits après pour économiser de la place mémoire)

pour l'instant l'offset est toujours relatif au début du fichier de la room mais, comme indiqué, je pense qu'il faudra mettre les scripts à part (à vérifier selon la taille data RO + data SC)
Egalement, le +&4000 est fait dans le code pour se retrouver au bonne endroit pour l'instant...


Vous n’êtes pas autorisé(e) à consulter les fichiers insérés à ce message.


Haut
 Profil  
 
TotO
 Sujet du message : Re: [SCUMM] Code Z80 CPC conversion from SCUMMVM
Message Publié : 29 Août 2010, 08:23 
Hors-ligne
VIP
VIP

Inscription : 13 Jan 2010, 14:25
Message(s) : 2282
Super boulot ; Respect ! :sweatingbullets:

Pour info, les effets graphiques sont allégés d'une version à l'autre.
Il est donc fort possible que les scripts de la version CGA soient les plus "simples".
Par exemple, sur PC VGA, lorsque Guybrush profane la tombe, il y a des éclairs dans le ciel qui rythme chaque coup de pelle, et l'ambiance sonore qui va avec.
Sur Amiga, il n'y a déjà plus les éclairs ...

Pour les banks, elles font bien 16k et non 17 ?
(d'ou vient cette curiosité des screens de 17k à ce sujet ... 1k=1000 au lieu de 1024 ?)

_________________
Cent Pour Cent


Haut
 Profil  
 
MacDeath26
 Sujet du message : Re: [SCUMM] Code Z80 CPC conversion from SCUMMVM
Message Publié : 29 Août 2010, 15:25 
Hors-ligne
Rulezzzzz
Rulezzzzz
Avatar de l’utilisateur

Inscription : 06 Mars 2009, 15:15
Message(s) : 2104
Localisation : Valence
Citer :
1k=1000 au lieu de 1024 ?
Il est vrai que dans le temps on avait souvent une confusion entre les Kilo 1000 et kilo 1024...
ça a été rêglé car maintenant on différencie entre Kilo et Kibi.

Wikipedia :
Citer :
Traditionnellement, lorsqu'ils sont appliqués aux octets, les préfixes « kilo », « méga », « giga », etc., ne représentent pas un multiple de 103 = 1 000, mais un multiple de 210 = 1 024. Cependant cette tradition viole les normes en vigueur pour les autres unités, y compris le bit, et n'est même pas appliquée uniformément aux octets, notamment dans la mesure de la capacité des disques durs. Une nouvelle norme a donc été créée pour noter les multiples de 210 = 1 024 : les « kibi », « mébi », « gibi », etc.


De même la confusion était assez pénible car souvent 1Byte = 8 bits... Euh pas vraiment, mais sur les vieux ordis 8bits, peut être...

Re-wikipedia :
Citer :
1 kibioctet (Kio) = 2p10 octets = 1,024 octets
1 mebioctet (Mio) = 2p20 octets = 1,024 Kio = 1,048,576 octets
1 gibioctet (Gio) = 2p30 octets = 1,024 Mio = 1,073,741,824 octets
1 tebioctet (Tio) = 2p40 octets = 1,024 Gio = 1,099,511,627,776 octets
1 pebioctet (Pio) = 2p50 octets = 1,024 Tio = 1,125,899,906,842,624 octets
1 exbioctet (Eio) = 2p60 octets = 1,024 Pio = 1,152,921,504,606,846,976 octets
1 zebioctet (Zio) = 2p70 octets = 1,024 Eio = 1,180,591,620,717,411,303,424 octets
1 yobioctet (Yio) = 2p80 octets = 1,024 Zio = 1,208,925,819,614,629,174,706,176 octets

The SI prefixes kilo, mega, giga, tera, etc., stay the same as for all the SI units, based on power of 10. In this case:
1 kilooctet (ko) = 10p3 octets = 1,000 octets
1 megaoctet (Mo) = 10p6 octets = 1,000 ko = 1,000,000 octets
1 gigaoctet (Go) = 10p9 octets = 1,000 Mo = 1,000,000,000 octets
1 teraoctet (To) = 10p12 octets = 1,000 Go = 1,000,000,000,000 octets
1 petaoctet (Po) = 10p15 octets = 1,000 To = 1,000,000,000,000,000 octets
"p" pour puissance...

Mais en rétro-Amstrad, on continue de dire Ko comme avant non ?


Sinon bravo à Mégachur qui avance coûte que coûte, et bon courage pour la suite.
On es avec toi ! :pir8:

PS @ Fano : arf merd, je me plante décidément toujours...


Dernière édition par MacDeath26 le 29 Août 2010, 18:32, édité 2 fois.

Haut
 Profil  
 
fano
 Sujet du message : Re: [SCUMM] Code Z80 CPC conversion from SCUMMVM
Message Publié : 29 Août 2010, 18:18 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 15 Août 2008, 13:00
Message(s) : 968
Localisation : Troyes, France
TotO a écrit :
Pour les banks, elles font bien 16k et non 17 ?
C'est bien 16K , 16384 octets, comme la mémoire écran par défaut d'ailleurs.Depuis la normalisation fin 90 , 1Ko fait 1000 octets (quelle drôle d'idée , t'as déjà vu 1000 divisible par la taille d'une page ou d'un secteur ?) mais perso j'utilise toujours l'ancienne valeur car fondée sur l'agencement "naturel" de la mémoire.
Ceux sont les Japonais qui avaient tout compris car il exprimaient la taille des cartouches en bits ce qui ne prête à aucune confusion :D

Sinon Megachur , si tu peux me mettre les fichiers .LEC je vais regarder pour commencer à faire la moulinette ;)

_________________
"NOP" tel est le programme parfait ! court, rapide, lisible et sans bugs (connus)


Haut
 Profil  
 
hERMOL
 Sujet du message : Re: [SCUMM] Code Z80 CPC conversion from SCUMMVM
Message Publié : 29 Août 2010, 18:19 
Hors-ligne
Site Admin
Avatar de l’utilisateur

Inscription : 20 Août 2007, 18:21
Message(s) : 5103
TotO a écrit :
Pour les banks, elles font bien 16k et non 17 ?
(d'ou vient cette curiosité des screens de 17k à ce sujet ... 1k=1000 au lieu de 1024 ?)


16k ou plutôt &3FFF (16383 octets) l'amsdos t'arrondis au ko suppérieuse ( 17k )


Haut
 Profil  
 
Megachur
 Sujet du message : Re: [SCUMM] Code Z80 CPC conversion from SCUMMVM
Message Publié : 29 Août 2010, 18:20 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 12 Juin 2008, 20:29
Message(s) : 1726
Bon, déjà 3 opcodes de codés...qui ont l'air de marcher en + !!! ;-)

par contre, je butte sur un truc à la con :

sachant que hl = var
et _bitVars est défini comme cela : byte *_bitVars;
la valeur est :
_bitVars = (byte *)calloc(_numBitVariables >> 3, 1);
et _numBitVariables = 4096

true equ 0
false equ 1

comment traduire en code z80 ->
return (_bitVars[var >> 3] & (1 << (var & 7))) ? 1 : 0;

Merci de votre aide !

P.S : D'ailleurs si quelqu'un veut m'aider à traduire les autres en z80 !? ;-)


Haut
 Profil  
 
fano
 Sujet du message : Re: [SCUMM] Code Z80 CPC conversion from SCUMMVM
Message Publié : 29 Août 2010, 18:22 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 15 Août 2008, 13:00
Message(s) : 968
Localisation : Troyes, France
MacDeath26 a écrit :
De même la confusion était assez pénible car en english 1Byte = 8 bits...

d'où la supériorité du Français qui dit Octet et évite ce genre de confusion, mais doit alors savoir que les Angophones sont un peu euh... confus.
http://fr.wikipedia.org/wiki/Byte :P

hERMOL a écrit :
16k ou plutôt &3FFF (16383 octets) l'amsdos t'arrondis au ko suppérieuse ( 17k )
C'est du aussi à l'entête AMSDOS de 128octets , 16384+128 = 16512 ce qui te fait 17Ko sur le cat/dir

_________________
"NOP" tel est le programme parfait ! court, rapide, lisible et sans bugs (connus)


Haut
 Profil  
 
TotO
 Sujet du message : Re: [SCUMM] Code Z80 CPC conversion from SCUMMVM
Message Publié : 29 Août 2010, 18:37 
Hors-ligne
VIP
VIP

Inscription : 13 Jan 2010, 14:25
Message(s) : 2282
Citer :
C'est du aussi à l'entête AMSDOS de 128octets , 16384+128 = 16512 ce qui te fait 17Ko sur le cat/dir
Merci pour cette réponse. :)

_________________
Cent Pour Cent


Haut
 Profil  
 
TotO
 Sujet du message : Re: [SCUMM] Code Z80 CPC conversion from SCUMMVM
Message Publié : 29 Août 2010, 18:55 
Hors-ligne
VIP
VIP

Inscription : 13 Jan 2010, 14:25
Message(s) : 2282
Megachur a écrit :
comment traduire en code z80 ->
return (_bitVars[var >> 3] & (1 << (var & 7))) ? 1 : 0;

Peut-être que redécomposer ce code C permettrait de mieux appréhender une version ASM ?

_________________
Cent Pour Cent


Haut
 Profil  
 
fano
 Sujet du message : Re: [SCUMM] Code Z80 CPC conversion from SCUMMVM
Message Publié : 29 Août 2010, 19:29 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 15 Août 2008, 13:00
Message(s) : 968
Localisation : Troyes, France
Megachur a écrit :
comment traduire en code z80 ->
return (_bitVars[var >> 3] & (1 << (var & 7))) ? 1 : 0;


ld A,L ; (1 << (var & 7)))
and 7
add A

srl H ;var>>3
rr L
srl H
rr L
srl H
rr L

ld DE,_bitvars ;_bitVars[]
add HL,DE
ld B,(HL)

and B ;&

or A ;? 1 : 0
jr z,null_val

ld A,1
ret

.null_val
xor A
ret

Ca devrait être correct , à tester tout de même car je ne suis pas spécialiste en C.
Si tu en as encore quelques uns, en décontractant du soir ça peut être sympa :D

_________________
"NOP" tel est le programme parfait ! court, rapide, lisible et sans bugs (connus)


Haut
 Profil  
 
Megachur
 Sujet du message : Re: [SCUMM] Code Z80 CPC conversion from SCUMMVM
Message Publié : 29 Août 2010, 20:20 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 12 Juin 2008, 20:29
Message(s) : 1726
je viens d'en traduire un autre comme cela (j'ai vu ta réponse après ;-)):

Code :
bc = var
de est réservé ... j'avais pas dit (pas tapé !!!)

;;            _bitVars[var >> 3] |= (1 << (var & 7));
      ld a,c
      and 7
      ld l,a
      or a
      ld a,1
      jr z,writeVar_1_multiply_end
writeVar_1_multiply
      add a,a
      dec l
      jr nz,writeVar_1_multiply
writeVar_1_multiply_end
      
      srl b
      rr c
      srl b
      rr c
       srl b
      rr c
      ld hl,_bitVars
      add hl,bc       ; go to _bitVars[var] byte right place
      or (hl)
      ld (hl),a


si je compare les deux codes...
je me suis trompé sur l'interprétation du 1 << décalage alors que c'est 1 la valeur du décalage en fait à gauche !!!
tant mieux le code ne sera que mieux -> juste un add a,a au lieu de ce gros bouzin :-) !!! oulala je fatigue moi ! :winner:

Merci fano pour ton aide !!!


Haut
 Profil  
 
Megachur
 Sujet du message : Re: [SCUMM] Code Z80 CPC conversion from SCUMMVM
Message Publié : 29 Août 2010, 20:22 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 12 Juin 2008, 20:29
Message(s) : 1726
le code final tout beau ;-) :winner: :winner: :winner: :winner: !!!
Code :
;;            _bitVars[var >> 3] |= (1 << (var & 7));
      ld a,c  ; (var & 7)
      and 7
      add a,a ; (1 << (var & 7))

      srl b   ; var >> 3]
      rr c
      srl b
      rr c
       srl b
      rr c

      ld hl,_bitVars
      add hl,bc       ; go to _bitVars[var] size(byte) right place
      or (hl)
      ld (hl),a


Haut
 Profil  
 
TotO
 Sujet du message : Re: [SCUMM] Code Z80 CPC conversion from SCUMMVM
Message Publié : 29 Août 2010, 20:26 
Hors-ligne
VIP
VIP

Inscription : 13 Jan 2010, 14:25
Message(s) : 2282
Megachur a écrit :
je me suis trompé sur l'interprétation du 1 << décalage alors que c'est 1 la valeur du décalage en fait à gauche


La valeur du décalage est toujours après l'opérateur.
<< 1
>> 1

_________________
Cent Pour Cent


Haut
 Profil  
 
Megachur
 Sujet du message : Re: [SCUMM] Code Z80 CPC conversion from SCUMMVM
Message Publié : 29 Août 2010, 20:33 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 12 Juin 2008, 20:29
Message(s) : 1726
j'ai juste changer un peu ton code fano ;-) (tu n'avais pas pensé au and (hl) et de plus une fois fait le and (hl) pas besoin de faire un or a car cela mets à jour les flags ;-) :

fano a écrit :
Megachur a écrit :
comment traduire en code z80 ->
return (_bitVars[var >> 3] & (1 << (var & 7))) ? 1 : 0;


;; return (_bitVars[var >> 3] & (1 << (var & 7))) ? 1 : 0;
ld a,h ; (var & 7)
and 7
add a,a ; (1 << (var & 7))

srl h ; var >> 3
rr l
srl h
rr l
srl h
rr l

ld bc,_bitVars
add hl,bc ; go to _bitVars[var] size(byte) right place
and (hl)
ret z ; a = 0
ld a,1
ret
euhhh...la fin aurait pu être correcte mais en fait c'est hl qu'il faut que je renvoie exactement :
and (hl)
jr z,readVar_return_false
ld hl,false
ret
readVar_return_false
ld hl,true
ret

hummm ! le z80 va digérer tout cela maintenant !!!


Haut
 Profil  
 
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  Page 5 sur 14
 [ 201 message(s) ]  Aller vers la page Précédent  1, 2, 3, 4, 5, 6, 7, 8 ... 14  Suivant

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 33 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Aller vers :  
cron
Powered by phpBB® Forum Software © phpBB Group
Traduit en français par Maël Soucaze.