Inscription : 05 Avr 2012, 08:02 Message(s) : 109 Localisation : Sur terre, mais souvent dans les nuages !
Bonjour,
Une question pour les pros du firmware et hard du cpc
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....
Inscription : 05 Avr 2012, 08:02 Message(s) : 109 Localisation : Sur terre, mais souvent dans les nuages !
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 :" ?
Dernière édition par stephbb75 le 14 Déc 2012, 13:02, édité 1 fois.
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.
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.
Inscription : 05 Avr 2012, 08:02 Message(s) : 109 Localisation : Sur terre, mais souvent dans les nuages !
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.
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"
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...
Inscription : 28 Août 2008, 23:41 Message(s) : 257
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...
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 22 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