CPC Rulez
https://cpcrulez.fr/forum/

Problème éxécution d'un bin avec load ou run
https://cpcrulez.fr/forum/viewtopic.php?f=4&t=4984
Page 1 sur 2

Auteur :  stephbb75 [ 14 Déc 2012, 12:46 ]
Sujet du message :  Problème éxécution d'un bin avec load ou run

Bonjour,

Une question pour les pros du firmware et hard du cpc :D

J'ai fait un tit programme mais une partie ne fonctionne pas de la même façon si je le lance avec un LOAD ou un RUN !
C'est la partie de chargement que voici (elle n'a rien d’extraordinaire !)

Code :
org &4000

.load_file
ld b,end_filename-filename  ; B = length of the filename in characters
ld hl,filename ; HL = address of the start of the filename
ld de,0 ;DE = address of a 2k buffer
call &bc77 ; firmware function to open a file for reading

ld hl,&c000 ; HL = load address
call &bc83  ; read file
call &bc7a  ; firmware function to close a file opened for reading

ret

; the filename to load
.filename
defb "SCREEN.SCR"
.end_filename


Si je compile en mémoire et fait sous basic un CALL &4000, cela fonctionne mon fichier et bien chargé (affiché à l'écran).
Si je le met sur disque (l'entête Amdos semble ok) et que je fait un LOAD"nom.bin",&4000:CALL &4000 cela fonctionne aussi.
Par contre si je fait directement un RUN"nom.bin" le CPC me demande d’appuyer sur play et une touche, en fait il veut charger sur une K7 !!???

Que faut il faire pour que cela fonctionne correctement avec les disquettes ?
Je suis sur un CPC6128....

Merci de votre aide.
Steph

Auteur :  shap [ 14 Déc 2012, 12:49 ]
Sujet du message :  Re: Problème éxécution d'un bin avec load ou run

Salut,

Normal tu n'as pas précisé d'adresse d'exécution.

Rajoute (sous DAMS) un ENT $ ou #4000 à la suite de ton ORG

Auteur :  stephbb75 [ 14 Déc 2012, 13:00 ]
Sujet du message :  Re: Problème éxécution d'un bin avec load ou run

Salut shap,

shap a écrit :
...
Normal tu n'as pas précisé d'adresse d'exécution.
Rajoute (sous DAMS) un ENT $ ou #4000 à la suite de ton ORG


Je ne pense pas que cela vienne de la, le reste du programme fonctionne bien (tracé de ligne, saisie clavier, affichage de texte,...)
La je n'est pas tout mis le programme, juste la partie qui pose problème.
Et même en ne compilent que ce bout de code ou tout mon prog j'ai le problème.

C'est vraiment au moment du call &bc77 que s'affiche "Press Play then any key :" ?

Auteur :  Beb [ 14 Déc 2012, 13:02 ]
Sujet du message :  Re: Problème éxécution d'un bin avec load ou run

Faut juste initialiser la ROM Disc en debut de prog pour que ca fonctionne.
(Shap t'as loupé ca ?)

Auteur :  stephbb75 [ 14 Déc 2012, 13:06 ]
Sujet du message :  Re: Problème éxécution d'un bin avec load ou run

Salut Beb,

Beb a écrit :
Faut juste initialiser la ROM Disc en debut de prog pour que ca fonctionne.
(Shap t'as loupé ca ?)


Et on fait comment ?

Auteur :  Beb [ 14 Déc 2012, 13:10 ]
Sujet du message :  Re: Problème éxécution d'un bin avec load ou run

http://tj.gpa.free.fr/html/coding/sources.htm

Regarde le code : "Initialisation du système disque (Another World), maj du 07/02/2006"
Merci a Tom&Jerry/GPA pour ses sources bien eclairés.

Auteur :  stephbb75 [ 14 Déc 2012, 13:11 ]
Sujet du message :  Re: Problème éxécution d'un bin avec load ou run

Beb a écrit :
...Regarde le code : "Initialisation du système disque (Another World), maj du 07/02/2006"....

Merci je regarde.

Auteur :  sPOKE [ 14 Déc 2012, 14:35 ]
Sujet du message :  Re: Problème éxécution d'un bin avec load ou run

stephbb75 a écrit :
Si je compile en mémoire et fait sous basic un CALL &4000,

Non, tu ne compiles pas, tu assembles le code source assembleur (langage d'assemblage en fait) pour en faire un fichier binaire exécutable.

Un compilateur (C,Basic,Pacal ou autre) compile le code source en utilisant ses propres routines en langage machine
et ses propres bibliothèques.
Donc avec un langage compilé tu ne programmes pas en bas-niveau, tu lances le compilateur, c'est très différent.

Auteur :  shap [ 14 Déc 2012, 14:40 ]
Sujet du message :  Re: Problème éxécution d'un bin avec load ou run

sPOKE a écrit :
stephbb75 a écrit :
Si je compile en mémoire et fait sous basic un CALL &4000,

Non, tu ne compiles pas, tu assembles le code source assembleur (langage d'assemblage en fait) pour en faire un fichier binaire exécutable.

Un compilateur (C,Basic,Pacal ou autre) compile le code source en utilisant ses propres routines en langage machine
et ses propres bibliothèques.
Donc avec un langage compilé tu ne programmes pas en bas-niveau, tu lances le compilateur, c'est très différent.

Merci, un peu de précision c'est frais.

Pour la ROm disc mea culpa, j'avais pas fait gaffe à la référence au "press play", désolé, je pensais plutôt à un reset.

Auteur :  stephbb75 [ 14 Déc 2012, 15:06 ]
Sujet du message :  Re: Problème éxécution d'un bin avec load ou run

sPOKE a écrit :
Non, tu ne compiles pas, tu assembles le code source assembleur...

Oui tu a raison, ... on a tous un réfrigérateur chez soit, pourtant on dit toujours "c'est dans le frigo" :P

Auteur :  hERMOL [ 14 Déc 2012, 15:17 ]
Sujet du message :  Re: Problème éxécution d'un bin avec load ou run

le code pour l'initialisation de l'amsdos (ROM 7) avant le changement d'un fichier est:
Code :
ld      de,&40
ld      hl,&0ABFF
ld      c,&7
call    &BCCE

src/url: https://cpcrulez.fr/coding_asm46b.htm

Auteur :  stephbb75 [ 14 Déc 2012, 15:21 ]
Sujet du message :  Re: Problème éxécution d'un bin avec load ou run

Je vais préciser un peut plus, une fois que j'ai assemblé le code que j'ai mis dans mon 1er message, la manière de l’exécuter fait qu'il fait ou pas ce que je souhaiter, c'est a dire afficher une image qui se trouve sur la disquette à l'écran !

- Si j'assemble en mémoire et que je fait un CALL &4000 -> OK

Je le sauve sur un disque et que je l’exécute :
- Si en basic je fait : MEMORY &4000:LOAD"nom.bin",&4000:CALL &4000 -> Ok
- Si en basic je fait : RUN"nom.bin" la pas OK j'ai le message "Press Play then any key :" qui s'affiche à l’écran.
- Si en basic je fait : MEMORY &4000:RUN"nom.bin" la pas OK j'ai le message "Press Play then any key :" qui s'affiche à l’écran.

Mon programme a bien comme Adresse de début et point d'entrée à 0x4000 dans l'entête.

Comme dit, ce que je développe fait plus que cela, tous les autres appel au firmware fonctionne (tracé, touche, ...) c'est bien au moment du "call &bc77" que se message apparais, en fait dans les entailles du firmware je ne passe pas par le même code, mais je ne comprend pas pourquoi.

Auteur :  stephbb75 [ 14 Déc 2012, 15:30 ]
Sujet du message :  Re: Problème éxécution d'un bin avec load ou run

Salut hERMOL
hERMOL a écrit :
le code pour l'initialisation de l'amsdos (ROM 7) avant le changement d'un fichier est:...

Ok, cela fonctionne, je ne savais pas qu'il y avais des différence ente load et run du basic sur les ROM.

Merci :D

Auteur :  sPOKE [ 14 Déc 2012, 15:54 ]
Sujet du message :  Re: Problème éxécution d'un bin avec load ou run

stephbb75 a écrit :
sPOKE a écrit :
Non, tu ne compiles pas, tu assembles le code source assembleur...

Oui tu a raison, ... on a tous un réfrigérateur chez soit, pourtant on dit toujours "c'est dans le frigo" :P

Non, ce n'est pas comme d'utiliser le terme "frigo" ou la marque "frigidaire" à la place de réfrigérateur :
Le mot frigo est passé dans le langage courant par facilité, mais le terme "compiler" que tu emploies est une erreur.

En informatique, et d'autant plus en rétro-informatique, il est important d'utiliser les termes adéquats
pour ne pas semer la confusion car c'est une technologie qui tend à être oubliée. Si en plus on massacre les termes... :wink:

Auteur :  Longshot [ 17 Déc 2012, 16:48 ]
Sujet du message :  Re: Problème éxécution d'un bin avec load ou run

Avant de réinitialiser la rom disque, pense aussi à récupérer le drive courant pour rebasculer dessus, car la réinitialisation te repositionne sur le drive A, ce qui peut être ennuyeux si tu lances ton programme à partir d'un drive B...

Page 1 sur 2 Le fuseau horaire est UTC+1 heure
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/