[CPC] Fichier TZX pour CPC... où en est-on?
Modérateur : Politburo
[CPC] Fichier TZX pour CPC... où en est-on?
Salut,
J'ai besoin d'un cassette virtelle de réference pour addapter mon
TzxManager pour le CPC... (pas compatible pour le moment!)
http://dskcenter.free.fr/zxtools.html
Toujours pour "Moon-Control"... qui ne marche que pour le CPC464.
C'est pour regarder la structure des entêtes CPC...
Afin de créer des Tzx qui fonctionnent...
Si quelqu'un a un exemple de TZX ou un URL...
Je suis parti sur des blocks en mode standard "&h10"
Blocs de 2048 octets avec headers ams separés sans porteurs de synchro.
Comme les fichiers spectrum... d'ailleurs.
Merci d'avance.
J'ai besoin d'un cassette virtelle de réference pour addapter mon
TzxManager pour le CPC... (pas compatible pour le moment!)
http://dskcenter.free.fr/zxtools.html
Toujours pour "Moon-Control"... qui ne marche que pour le CPC464.
C'est pour regarder la structure des entêtes CPC...
Afin de créer des Tzx qui fonctionnent...
Si quelqu'un a un exemple de TZX ou un URL...
Je suis parti sur des blocks en mode standard "&h10"
Blocs de 2048 octets avec headers ams separés sans porteurs de synchro.
Comme les fichiers spectrum... d'ailleurs.
Merci d'avance.
Re: [CPC] Fichier TZX pour CPC... où en est-on?
Salut,
Je pensais vous annoncer une bonne nouvelle...
... la mise à jour de TzxManager.
La conversion de fichiers AMS type basic avec Header AMS est prêt.
J'étais sur la conversion en wav...
Je m'apprêtais à modifier ZxSpectape pour récuperer les cassettes...
Mais, j'ai un gros problême qui bloque les projets !
Un problême de conversion C# vers Visual Basic...
Car ce CRC n'est pas usuel et je n'arrive pas à le coder.
Le CRC Polynomiale sur les fichiers cassettes n'est pas codé.
Donc, ca me donne un "Read error b" au chargement du TZX.
8-(
... j'ai cherché ...
Et tout le monde semblent avoir "honteusement" copier le même code:
(sources OTLA , 2CDT et 2CPC)
Bon...
^=XOR.
<<=rotation bits.
Le réél problème, c'est que c'est du C#... et pas du Visual Basic.
J'ai trouvé ca http://www.freevbcode.com/ShowCode.asp?ID=2755 d'approchant.
Mais, le code ne donne pas la même chose.
Si quelqu'un peut m'aider, ça peut débloquer beaucoup d'autre choses...
J'ai déjà passé des heures à tripoter le code... et toujours des CRC differents à ceux du fichier K7.
Autre infos dans la doc de Tape2HDD :
Je pensais vous annoncer une bonne nouvelle...
... la mise à jour de TzxManager.
La conversion de fichiers AMS type basic avec Header AMS est prêt.
J'étais sur la conversion en wav...
Je m'apprêtais à modifier ZxSpectape pour récuperer les cassettes...
Mais, j'ai un gros problême qui bloque les projets !
Un problême de conversion C# vers Visual Basic...
Car ce CRC n'est pas usuel et je n'arrive pas à le coder.
Le CRC Polynomiale sur les fichiers cassettes n'est pas codé.
Donc, ca me donne un "Read error b" au chargement du TZX.
8-(
... j'ai cherché ...
Et tout le monde semblent avoir "honteusement" copier le même code:
(sources OTLA , 2CDT et 2CPC)
Code : Tout sélectionner
#define kCRCpoly 4129
//------------------------------------------------
//------------------------------------------------
// from 2CDT Copyright (c) Kevin Thacker :
/* CRC code shamelessly taken from Pierre Guerrier's AIFF decoder! */
#define kCRCpoly 4129 /* used for binary long division in CRC */
/* CRC polynomial: X^16+X^12+X^5+1 */
unsigned int CRCupdate(unsigned int CRC, unsigned char new_byte)
{ unsigned int aux = CRC ^ (new_byte << 8);
int i;
for(i=0; i<8; i++)
if (aux & 0x8000)
aux = (aux <<= 1) ^ kCRCpoly;
else
aux <<= 1;
return (aux);}
//------------------------------------------------
^=XOR.
<<=rotation bits.
Le réél problème, c'est que c'est du C#... et pas du Visual Basic.
J'ai trouvé ca http://www.freevbcode.com/ShowCode.asp?ID=2755 d'approchant.
Mais, le code ne donne pas la même chose.
Si quelqu'un peut m'aider, ça peut débloquer beaucoup d'autre choses...
J'ai déjà passé des heures à tripoter le code... et toujours des CRC differents à ceux du fichier K7.
Autre infos dans la doc de Tape2HDD :
The checksum is generated bitwise, in a rather odd way: The initial value
is FFFFh, for each bit in the 256 byte section the value is adjusted as
follows:
IF (newbit XOR value.bit15)=0 THEN value=value*2
ELSE value=(value XOR 810h)*2+1
The result is XORed by FFFFh, and saved to tape (upper byte first).
Re: [CPC] Fichier TZX pour CPC... où en est-on?
Salut,
Toujours rien du côté du CRC...
Mais, pour info... le format TZX et le format CDT sont identiques.
L'extension Tzx a été changée... car l'Amstrad CPC... n'est pas un Zx Spectrum.
Donc, il est possible de créer les images cassettes en "TZX"... puis de changer l'extension en "CDT" pour le rendre compatible.
Toujours rien du côté du CRC...
Mais, pour info... le format TZX et le format CDT sont identiques.
L'extension Tzx a été changée... car l'Amstrad CPC... n'est pas un Zx Spectrum.
Donc, il est possible de créer les images cassettes en "TZX"... puis de changer l'extension en "CDT" pour le rendre compatible.
- gilles
- Fonctionne à 9600 bauds
- Messages : 3100
- Enregistré le : 17 avr. 2007 21:25
- Localisation : 44
- Contact :
Re: [CPC] Fichier TZX pour CPC... où en est-on?
peut etre que le
aux = (aux <<= 1) ^ kCRCpoly;
doit se traduire en 2 expressions en basic
genre
...
then
aux=aux*2
aux=aux XOR kCRCpoly
else
...
poste donc ton essai le plus approchant qu'on regarde...
aux = (aux <<= 1) ^ kCRCpoly;
doit se traduire en 2 expressions en basic
genre
...
then
aux=aux*2
aux=aux XOR kCRCpoly
else
...
poste donc ton essai le plus approchant qu'on regarde...
Re: [CPC] Fichier TZX pour CPC... où en est-on?
Ok, je vais mettre TzxManager en ligne demain.gilles a écrit :peut etre que le
aux = (aux <<= 1) ^ kCRCpoly;
doit se traduire en 2 expressions en basic
genre
...
then
aux=aux*2
aux=aux XOR kCRCpoly
else
...
poste donc ton essai le plus approchant qu'on regarde...
La routine CRC sera à jour. (mais toujours avec des problème)
le "<<" est une rotation de bits vers la droite.
Dans l'exemple donné en vb... elle est vers la gauche.
Un problème de signe en long!!!
Donc, suivant les explications de l'auteur de l'exemple,
kCRCpoly doit être modifié et inversé.
Je télécharge le code dès que possible.
Xav.
- gilles
- Fonctionne à 9600 bauds
- Messages : 3100
- Enregistré le : 17 avr. 2007 21:25
- Localisation : 44
- Contact :
Re: [CPC] Fichier TZX pour CPC... où en est-on?
rotation ou décalage? en C le << est plutôt un décalage (sans réintroduire le bit (excusez du peu)).Xavier a écrit :Ok, je vais mettre TzxManager en ligne demain.gilles a écrit :peut etre que le
aux = (aux <<= 1) ^ kCRCpoly;
doit se traduire en 2 expressions en basic
genre
...
then
aux=aux*2
aux=aux XOR kCRCpoly
else
...
poste donc ton essai le plus approchant qu'on regarde...
La routine CRC sera à jour. (mais toujours avec des problème)
le "<<" est une rotation de bits vers la droite.
Dans l'exemple donné en vb... elle est vers la gauche.
Un problème de signe en long!!!
Donc, suivant les explications de l'auteur de l'exemple,
kCRCpoly doit être modifié et inversé.
Je télécharge le code dès que possible.
Xav.
pour faire de la rotation en C on fait un truc comme
(aux<<1)&((aux&0x8000!=0)?1:0); (pour du 32 bits).
enfin il me semble...
Re: [CPC] Fichier TZX pour CPC... où en est-on?
Salut,
Oui, à bits perdus avec ">>" ou "<<".
Donc, il faut rajouter le bit en mlb ou mhb.(truc comme ça!)
donc value<<8 = value *256 !!!
??? il calcule son CRC sur l'octet "fort".
Bon...
TzxManager est en ligne : http://dskcenter/download/TzxManager.zip
Je peut aussi faire une DLL... mais :
1/ c'est pas marrant.
2/ je sais pas faire.
Deux bonnes raisons pour me creuser la tête.
Oui, à bits perdus avec ">>" ou "<<".
Donc, il faut rajouter le bit en mlb ou mhb.(truc comme ça!)
donc value<<8 = value *256 !!!
??? il calcule son CRC sur l'octet "fort".
Bon...
TzxManager est en ligne : http://dskcenter/download/TzxManager.zip
Je peut aussi faire une DLL... mais :
1/ c'est pas marrant.
2/ je sais pas faire.
Deux bonnes raisons pour me creuser la tête.
Re: [CPC] Fichier TZX pour CPC... où en est-on?
Salut,
La recherche dans le code de TzxManager est plutôt longue...
Alors voilà le code VB:
La recherche dans le code de TzxManager est plutôt longue...
Alors voilà le code VB:
Code : Tout sélectionner
Public Function CRCP16(datas() As Byte) As Double
Dim L As Long
Dim ICRC As Double
Dim Constpoly As Double
' Initialise. Integer maths used.
'=> X^16+ X^12+X^5+1
' Bit 16: Bit12+bit5+bit0
'
'4129=&h1021 = 1-0001000000100001
' (pour une rotation gauche 16 bits)
' on inverse...
' 1000010000001000=&h8408=33800
' (pour une rotation droite 16bits)
Constpoly = 33800 ' Normalement OK
ICRC = &HFFFF
' On calcule le CRC pour le tableau [Datas]
' Déjà défini lors de l'appel.
' Mise à jour de chaque octets dans [DATAs]
For L = 0 To UBound(datas)
CRCUpdate ICRC, datas(L), Constpoly
Next
Debug.Print "CRC16="; Hex(ICRC) ', "Const:"; Constpoly; Hex(ICRC Xor &HFFFF)
CRCP16 = (ICRC)
End Function
Private Function CRCUpdate(CRC As Double, B As Byte, Constpoly As Double)
Dim Bits As Byte
Dim Aux As Double
CRC = CRC Xor (CLng(B) * 256) ' Rotation de la nouvelle valeur sur 8bits-> &H**00
For Bits = 0 To 7
' Vu que la rotation change...
' nous ne somme plus sur le test du dernier bit &h8000...
' mais du premier &h1
If (Aux And 1) > 0 Then ' test LSB
' only xor with polynomial if lsb set.
CRC = (rightShift(CRC) Xor Constpoly)
Else
' LSB zero, just shift.
CRC = rightShift(CRC)
End If
Next
Debug.Print CRC
End Function
Private Function rightShift(ByVal V) As Double
rightShift = V And 65534 ' &hFFFE
rightShift = rightShift \ 2
rightShift = rightShift And 32767 ' &h7FFF
End Function
Private Function leftShift(ByVal V) As Double
'
' Non testé !
' ---------
'
leftShift = V And 32767 ' &h7FFF
leftShift = (leftShift * 2)
leftShift = leftShift And 65534 ' &hFFFE
End Function