ASSEMBLEUR CANON X07

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Répondre
Avatar du membre
spacemax
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 86
Enregistré le : 05 nov. 2011 12:45
Localisation : Alpes de Haute Provence

ASSEMBLEUR CANON X07

Message par spacemax »

Hello les Silis,

Il y a quelques mois, je mettais plongé dans l'assembleur du canon X07 et je mettais cassé la tête et les dents et le moral avec la méthode d'intégration du code assembleur dans le Basic. Faut dire qu'il faut en vouloir avec l'adressage qui change en fonction des modifications du programme...
Suite à la lecture de la Gazette 7, qui soit dit en passant est un cru d'une exceptionnelle qualité, je tombe sur l'article de Caloubugs, expliquant la démarche pour coder la suite de Syracuse en assembleur...
Je lis la moitié de l'article seulement car je suis vite débordé mais l'envie d'en faire de même ressurgit comme une maladie enfouie au fin fond de mon cerveau... Enfin, ce qui me sert de cerveau !
Alors, je me décide à reprendre mon dernier essai infructueux de coder une simple boucle mais comme Caloubugs, je commencerai par incrémenter une variable.
Après quelques heures de boulot et de nombreux reset de mon canon X07, je décide d'arrêter les frais et de passer par un émulateur qui devrait me faciliter la vie. Heureusement, je tombe sur l'émulateur X_Xo7 de Jacques Brigaud présenté sur votre site à cette adresse : http://silicium.org/oldskool/calc/x07/emulateur.htm
Je relis tranquillement les mystères du X-07 et je décide de faire mes tests avec l'intégration du code dans les lignes REM et dans les variables mais comme le listing change après l'implémentation de la routine, j'abandonne ces 2 techniques au profit d'une implémentation dans la zone des chaînes...Après moult rateaux, voilà, j'ai enfin fait ce que je souhaitais : une boucle de 1 à 255...car l'accumulateur est codé sur 8 bits et les instructions de comparaisons (CP) ne se font qu'avec le registre A. Je ne vais pas me compliquer la tâche plus que çà pour l'heure...
Voici le code que j'ai recopié de l'émulateur car :x j'ai pas trouvé le moyen de le transférer sur le PC :twisted:

Les REM sont là pour me permettre d'ajuster les adresses des variables en cas de modifications. Le INPUT Z me sert juste à faire un break au cas où...

Code : Tout sélectionner

10 A$=STRING$(20,"@")
20 AD%=VARR(A$):AD%=PEEK(AD%+1)+256*PEEK(AD%+2)
30 A%=1:B%=255
40 PRINT "AD%:";HEX$(AD%);" A%:";HEX$(VARPTR(A%));" B%:";HEX$(VARPTR(B%))
50 INPUT Z
55 REM
60 FOR I%=0 TO 13:READ B$:POKE AD%+I%,VAL("&H"+B$):NEXT I%
70 EXEC AD%
100 PRINT A%:REM 90123456789123
110 DATA 3A,70,06,3C,32,70,06,FE,FF,DA,EB,5F,C9,C9
L’exécution en images:

http://www.hostingpics.net/viewer.php?id=902714RUN1.png
http://www.hostingpics.net/viewer.php?id=975917RUN2.png

Hourra, ma variable A est égale à 255. Prochaine étape, travailler sur une boucle avec une fin supérieure à 1 octet et en affichant l'incrémentation depuis la routine sur l'écran du canon.
Don't forget the spirit of the game...

Canon X-07 / Casio fx-850P / TI74 / Casio fx-8500G / Psion 3 / Psion 3a / Psion II XP / Psion II Lz / Psion Revo / Fx-4000p / Dell Axim x50V / Spiga Sagem / Casio fx-3900p / Casio fc-200 / Sharp 1403
Avatar du membre
phm
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1361
Enregistré le : 08 avr. 2016 18:36
Localisation : Est Parisien

Re: ASSEMBLEUR CANON X07

Message par phm »

Bon courage !
C'est plutôt du langage machine que tu fais lá :wink:
Il y a quelques années, je jouais avec du Z80 et si j'avais du temps...
J'ai pu récupérer une carte assembleur XP-140 pour mon X-07 et un jour je le testerais.
HEWLETT-PACKARD : The best
CANON
X-07 X-730 X-711 XR-100 XM-101 XP-110F XP-120F XP-130F XP-140

AMSTRAD CPC-464 CPC-6128 ATARI STF DAI Indata
Avatar du membre
spacemax
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 86
Enregistré le : 05 nov. 2011 12:45
Localisation : Alpes de Haute Provence

Re: ASSEMBLEUR CANON X07

Message par spacemax »

Il faudra que je me trouve une de ces cartes. Ca doit être plus aisé de coder avec les codes asm. Faut compter combien en moyenne pour la xp-140 ?
Don't forget the spirit of the game...

Canon X-07 / Casio fx-850P / TI74 / Casio fx-8500G / Psion 3 / Psion 3a / Psion II XP / Psion II Lz / Psion Revo / Fx-4000p / Dell Axim x50V / Spiga Sagem / Casio fx-3900p / Casio fc-200 / Sharp 1403
Avatar du membre
Gege34
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 1167
Enregistré le : 03 oct. 2014 11:19
Localisation : 31

Re: ASSEMBLEUR CANON X07

Message par Gege34 »

Faut surtout la trouver, ça doit pas courir les rues.
Je me demandais si on peut pas copier le contenu et le mettre sur une carte ram ?
Commodore (64/128/Amiga), HP (28/41/48/50/71/75/200/Prime) et autres (Ti, Canon X07, Psion, Casio, Palm, Thomson, Exl, Amstrad)
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: ASSEMBLEUR CANON X07

Message par remy »

Il faudra qu'un jour je me penche sur la programmation en assembleur du X07 dans PockEmul.
Je crois avoir le dump de la XP-140 (je ne sais plus si je l'ai émulée).
Il faudrait que je rajoute un assembleur Z-80 dans l'environnement de développement de PockEmul, ce qui permettra, après "assemblage" d'injecter automatiquement le code machine dans le X-07 émulé.
En plus, un ASM Z-80 serait utile pour le PC-1600 et le G850.
Je vais ajouter cela comme tâche.

en attendant, pour ceux que ça intéresse et qui ne les ont pas déjà, j'ai mis en ligne trois docs intéressantes:
le XP-140 guide technique
XP-140 guide de l'utilisateur
Applications en asm dans l'univers du X-07

[Edit] en fait le XP-140 marche dans PockEmul:
Image
Rémy
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
Avatar du membre
phm
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1361
Enregistré le : 08 avr. 2016 18:36
Localisation : Est Parisien

Re: ASSEMBLEUR CANON X07

Message par phm »

Gege34 a écrit :Faut surtout la trouver, ça doit pas courir les rues.
Effectivement, j'ai attendu plusieurs mois avant de tomber sur une version boite complète.
achat bay 101€ il y a 1 an environ.
HEWLETT-PACKARD : The best
CANON
X-07 X-730 X-711 XR-100 XM-101 XP-110F XP-120F XP-130F XP-140

AMSTRAD CPC-464 CPC-6128 ATARI STF DAI Indata
Avatar du membre
spacemax
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 86
Enregistré le : 05 nov. 2011 12:45
Localisation : Alpes de Haute Provence

Re: ASSEMBLEUR CANON X07

Message par spacemax »

Bonjour,

Merci pour ces documentations fortes intéressantes. Elle me serviront tôt ou tard.
Don't forget the spirit of the game...

Canon X-07 / Casio fx-850P / TI74 / Casio fx-8500G / Psion 3 / Psion 3a / Psion II XP / Psion II Lz / Psion Revo / Fx-4000p / Dell Axim x50V / Spiga Sagem / Casio fx-3900p / Casio fc-200 / Sharp 1403
Avatar du membre
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4412
Enregistré le : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: ASSEMBLEUR CANON X07

Message par charognard »

Bonjour,

j'avais fais un comparo ASM <--> sur un programme de casse brique (sur G850V mais c'est extrapolable sur X07)
ça peut te servir pour comprendre certains mécanismes

Code : Tout sélectionner

10      ORG   0100H     'Adresse d'implantation
20GRAPH EQU   093CBH    'Si PEEK&H93CD=&HE5 mettre 093CDH
----------------------------------------------------------
30      JR    START     'On saute à START
----------------------------------------------------------
40SC:   DB    0         'Déclaration des variables
50X:    DB    0         '    "
60Y:    DB    0         '    "
70OX:   DB    0         '    "
80OY:   DB    0         '    "
90RX:   DB    0         '    "
100RY:  DB    0         '    "
110PROV:DB    0         '    "
120     DB    0         '    "
----------------------------------------------------------
130START:CALL CLS       'Effacement de l'écran -- 10 CLS
--------------------------
140     LD    HL,59     '20 LINE (59,0)-(135,30),B
150     LD    DE,0      '    "
160     LD    IX,135    '    "
170     LD    IY,30     '    "
180     LD    A,1       '    "
190     LD    B,1       '    "
200     CALL  LINE      '    "
--------------------------
210     LD    HL,60     '30 LINE (60,0)-(134,3),BF
220     LD    DE,0      '    "
230     LD    IX,134    '    "
240     LD    IY,3      '    "
250     LD    A,1       '    "
260     LD    B,2       '    "
270     CALL  LINE      '    "
--------------------------
280     LD    HL,60     '40 LINE (60,6)-(134,9),BF
290     LD    DE,6      '    "
300     LD    IX,134    '    "
310     LD    IY,9      '    "
320     LD    A,1       '    "
330     LD    B,2       '    "
340     CALL  LINE      '    "
----------------------------------------------------------
350     LD    A,0       '50 SC=0,X=99,Y=10,OX=0,OY=10,RX=-3,RY=2
360     LD    (SC),A    '    "
370     LD    A,99      '    "
380     LD    (X),A     '    "
390     LD    (OX),A    '    "
400     LD    A,10      '    "
410     LD    (Y),A     '    "
420     LD    (OY),A    '    "
430     LD    A,-3      '    "
440     LD    (RX),A    '    "
450     LD    A,2       '    "
460     LD    (RY),A    '    "
----------------------------------------------------------
470REP: LD    A,(RY)    '60 REPEAT:Y=Y+RY,X=X+RX
480     LD    B,A       '    "
490     LD    A,(Y)     '    "
500     ADD   A,B       '    "
510     LD    (Y),A     '    "
520     LD    A,(RX)    '    "
530     LD    B,A       '    "
540     LD    A,(X)     '    "
550     ADD   A,B       '    "
560     LD    (X),A     '    "
----------------------------------------------------------
570     CP    60        '70 IF X<60 GOTO *OK1
580     JR    C,OK1     '    "
--------------------------
590     CP    133       '80 IF X<133 GOTO *SU1
600     JR    C,SU1     '    "
--------------------------
610OK1: LD    A,(RX)    '90 *OK1:RX=-RX,X=X+2*RX
620     XOR   255       '    "
630     ADD   A,1       '    "
640     LD    (RX),A    '    "
650     ADD   A,A       '    "
660     LD    B,A       '    "
670     LD    A,(X)     '    "
680     ADD   A,B       '    "
690     LD    (X),A     '    "
----------------------------------------------------------
700SU1: LD    A,(Y)     '100 *SU1:IF Y>=30 GOTO *OK2
710     CP    30        '    "
720     JR    NC,OK2    '    "
--------------------------
730     CP    -2        '110 IF Y<>-2 GOTO *SU2
740     JR    NZ,SU2    '    "
--------------------------
750OK2: LD    A,(RY)    '120 *OK2:RY=-RY,Y=OY+RY 
760     XOR   255       '    "
770     ADD   A,1       '    "
780     LD    (RY),A    '    "
790     LD    B,A       '    "
800     LD    A,(OY)    '    "
810     ADD   A,B       '    "
820     LD    (Y),A     '    "
----------------------------------------------------------
830SU2: LD    A,(X)     '130 *SU2:IF POINT (X,Y)<>1 THEN *SU3
840     LD    E,A       '    "
850     LD    A,(Y)     '    "
860     LD    D,A       '    "
870     CALL  POI       '    "
880     CP    1         '    "
890     JR    NZ,SU3    '    "
--------------------------
900     LD    A,(SC)    '140 SC=SC+5
910     ADD   A,5       '    "
920     LD    (SC),A    '    "
--------------------------
930     LD    A,(X)     '150 LINE (X,Y)-(X+2,Y+1),R,B
940     LD    H,0       '    "
950     LD    L,A       '    "
960     ADD   A,2       '    "
970     LD    (PROV),A  '    "
980     LD    IX,(PROV) '    "
990     LD    A,(Y)     '    "
1000    LD    D,0       '    "
1010    LD    E,A       '    "
1020    ADD   A,1       '    "
1030    LD    (PROV),A  '    "
1040    LD    IY,(PROV) '    "
1050    LD    A,0       '    "
1060    LD    B,1       '    "
1070    CALL  LINE      '    "
--------------------------
1080    LD    A,(RY)    '160 Y=Y-RY,RY=-RY:ENDIF
1090    LD    B,A       '    "
1100    LD    A,(Y)     '    "
1110    SUB   B         '    "
1120    LD    (Y),A     '    "
1130    LD    A,(RY)    '    "
1140    XOR   255       '    "
1150    ADD   A,1       '    "
1160    LD    (RY),A    '    "
----------------------------------------------------------
1170SU3: LD   A,(X)     '170 LINE (X,Y)-(X+2,Y+1),B
1180    LD    H,0       '    "
1190    LD    L,A       '    "
1200    ADD   A,2       '    "
1210    LD    (PROV),A  '    "
1220    LD    IX,(PROV) '    "
1230    LD    A,(Y)     '    "
1240    LD    D,0       '    "
1250    LD    E,A       '    "
1260    ADD   A,1       '    "
1270    LD    (PROV),A  '    "
1280    LD    IY,(PROV) '    "
1290    LD    A,1       '    "
1300    LD    B,1       '    "
1310    CALL  LINE      '    "
--------------------------
1320    LD    A,(OX)    '180 LINE (OX,OY)-(OX+2,OY+1),R,B
1330    LD    H,0       '    "
1340    LD    L,A       '    "
1350    ADD   A,2       '    "
1360    LD    (PROV),A  '    "
1370    LD    IX,(PROV) '    "
1380    LD    A,(OY)    '    "
1390    LD    D,0       '    "
1400    LD    E,A       '    "
1410    ADD   A,1       '    "
1420    LD    (PROV),A  '    "
1430    LD    IY,(PROV) '    "
1440    LD    A,0       '    "
1450    LD    B,1       '    "
1460    CALL  LINE      '    "
--------------------------
1470    LD    A,(X)     '190 OX=X:OY=Y
1480    LD    (OX),A    '    "
1490    LD    A,(Y)     '    "
1500    LD    (OY),A    '    "
1510    LD    A,(SC)    '    "
----------------------------------------------------------
1520    CP    205       '200 UNTIL SC>200
1530    JP    C,REP     '    "
----------------------------------------------------------
1540     RET            '210 END


------------------------------------------
ROUTINES GRAPHIQUES
------------------------------------------
1550CLS: LD    A,020H   'Effacement de l'écran
1560     LD    B,144
1570     LD    DE,0
1580     CALL  0BFEEH
1590     RET
------------------------------------------
1600POI: LD    H,0      'Lecture d'un point
1610     LD    L,E
1620     LD    E,D
1630     LD    D,0
1640    CALL  N1
1650     AND   C
1660     RET   Z
1670     LD    A,1
1680     RET
1690N1:  CALL  GRAPH
1700     DB    0EH
1710     DW    0CA08H
------------------------------------------
1720PSET:LD    H,0      'tracé d'un point
1730     LD    L,E
1740     LD    E,D
1750     LD    D,0
1760     LD    (7967H),HL
1770     LD    (7969H),DE
1780     LD    IX,0FFFFH
1790     LD    (777DH),IX
1800     LD    (777FH),A
1810     CALL  GRAPH
1820     DB    0DH
1830     DW    0C595H
1840     RET
------------------------------------------
1850LINE:LD    (7967H),IX'Tracé d'une Ligne/Rectangle/Box
1860     LD    (7969H),IY
1870     LD    IX,0FFFFH
1880     LD    (777DH),IX
1890     LD    (777FH),A
1900     LD    A,B
1910     CP    1
1920     JR    C,LIN
1930     JR    Z,BOX
1940FBOX:CALL  GRAPH
1950     DB    0DH
1960     DW    0C4CBH
1970     RET
1980LIN: CALL  GRAPH
1990     DB    0DH
2000     DW    0C595H
2010     RET
2020BOX: CALL  GRAPH
2030     DB    0DH
2040     DW    0C442H
2050     RET
Avatar du membre
spacemax
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 86
Enregistré le : 05 nov. 2011 12:45
Localisation : Alpes de Haute Provence

Re: ASSEMBLEUR CANON X07

Message par spacemax »

Merci. Mais j'en suis pas encore à faire des jeux en assembleurs. Il me faudra quelques années supplémentaires !!!
En ce moment, j'essaie d'utiliser à l'intérieur de ma fameuse boucle, la routine LM D5B0 (page 109 des mystères du x07) qui est censée afficher un message sur l'afficheur LCD une fois le registre HL chargé avec l'adresse de la chaîne mais rien ne s'afffiche...
La chaine devant être terminée soit par 0 soit par 0d.

L'adresse de la chaîne est calculée en Basic comme suit : ad=varptr(b$):ad = peek (ad+2) *256 + peek(ad+1)
varptr(b$) pointe sur l'octet contenant la longueur de la chaîne
varptr(b$) + 1 contient le LSB dans l'exemple ci-dessous 148D donc 94H
varptr(b$) + 2 contient le MSB dans l'exemple ci-dessous 5D donc 5H

j'ai essayé des trucs du style
avec
b$"=max0D" <--adresse calculée 0594H
2A,94,05<-- charge HL avec l'adresse de la chaîne
CD,B0,D5 <-- appel de la routine
C9
mais rien ne s'affiche alors qu'un peek(ad) renvoie bien la 1ere lettre de la chaîne...
Je poursuis donc mes investigations...
A ce rythme, il va falloir que je sois patient et CALME :mrgreen:
Don't forget the spirit of the game...

Canon X-07 / Casio fx-850P / TI74 / Casio fx-8500G / Psion 3 / Psion 3a / Psion II XP / Psion II Lz / Psion Revo / Fx-4000p / Dell Axim x50V / Spiga Sagem / Casio fx-3900p / Casio fc-200 / Sharp 1403
Avatar du membre
Metalion
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 63
Enregistré le : 18 févr. 2008 13:46
Localisation : Belgique & Nord

Re: ASSEMBLEUR CANON X07

Message par Metalion »

spacemax a écrit :2A,94,05<-- charge HL avec l'adresse de la chaîne
CD,B0,D5 <-- appel de la routine
C9
Le code $2A c'est pour l'instruction qui charge le contenu de l'adresse dans HL

Code : Tout sélectionner

LD HL,(nn)
Ce dont tu as besoin c'est l'instruction qui charge directement le nombre dans HL, dont le code est $21

Code : Tout sélectionner

LD HL,nn
Daewoo DPC-200 (MSX1)
Sony HB-F9P (MSX2)
Panasonic FS-A1WX (MSX2+)
Avatar du membre
spacemax
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 86
Enregistré le : 05 nov. 2011 12:45
Localisation : Alpes de Haute Provence

Re: ASSEMBLEUR CANON X07

Message par spacemax »

Yes Yes Yes :D

Merci.
Don't forget the spirit of the game...

Canon X-07 / Casio fx-850P / TI74 / Casio fx-8500G / Psion 3 / Psion 3a / Psion II XP / Psion II Lz / Psion Revo / Fx-4000p / Dell Axim x50V / Spiga Sagem / Casio fx-3900p / Casio fc-200 / Sharp 1403
Répondre

Retourner vers « Tous les Pockets »