CPC Rulez https://cpcrulez.fr/forum/ |
|
programmer en asm 8080 sur CPC (sous CP/M) https://cpcrulez.fr/forum/viewtopic.php?f=4&t=4794 |
Page 3 sur 5 |
Auteur : | TotO [ 02 Juin 2012, 14:53 ] |
Sujet du message : | Re: programmer en asm 8080 sur CPC (sous CP/M) |
Et si tout simplement, le code source de la version 3.0 (dispo plus haut) comportait l'identifiant 3.1 à tord ? |
Auteur : | sPOKE [ 02 Juin 2012, 15:51 ] |
Sujet du message : | Ecrit sur un CPC, assemblé et lancé sur un Osborne Executive |
TotO a écrit : Et si tout simplement, le code source de la version 3.0 (dispo plus haut) comportait l'identifiant 3.1 à tort ? C'est d'appeller ça une "version 3.0" qui est une erreur. Tout ce qui retourne 31h est une version 3.1Et on retrouve aussi la valeur 31h sur le CBM 128, le CPC 6128, le PCW, le MSX 2 et le Spectrum+3. Mon programme a été exécuté sur la vraie machine Osborne Executive qui rapporte 3.1 également. Les programmeurs maison de chez Digital Research parlent clairement d'une version 3.1 dans certains programmes externes dont ils ont également fourni le code source. Comme CP/M 3 était appellé CP/M Plus, je pense que son n° de version exact a pris moins d'importance. Ouvre le manuel Amstrad CPC 6128, première page de l'introduction (6ème page du manuel) et tu verras le n° de version pour CPC. (j'ai vu ça avant-hier seulement!) Je pensais pouvoir trouver un ordinateur ancien commercialisé avec une version 3.0, mais il n'y en a eu aucun apparemment. (ça m'aurait permis, par curiosité, de voir quelle fonction a été ajoutée ou quel bug a été corrigé). Certains constructeurs rajoutent eux-même quelquefois un troisième chiffre au numéro de version, (L'Otrona Attaché annonce une version 2.2.5) mais seuls les 2 premiers chiffres sont pris en compte pour la classification officielle. Pour l'Osborne Executive, en faisant un DUMP Hexa-Ascii de son fichier CPM3.EMS, on voit tout simplement ceci à l'offset 2B2A1h : C'est ici que la fonction 12 du BDOS vient chercher le numéro de version. 0002B280 C3 0F FF C3 83 01 00 00 00 00 00 00 00 00 00 00 ................ 0002B290 00 00 00 00 00 00 00 03 06 00 00 00 00 00 00 00 ................ 0002B2A0 00 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .1.............. 0002B2B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0002B2C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0002B2D0 00 6A 04 24 00 00 9C 05 80 00 00 00 00 00 00 00 .j.$............ 0002B2E0 00 00 00 00 00 00 01 00 00 FF FF FF 00 00 00 00 ................ 0002B2F0 00 00 00 80 FF FF FF FF FF 00 00 C3 7C FC 06 00 ............|... Voilà le code source écrit par les programmeurs de Digital Research, qui montre que quand la valeur trouvée est 31h, la version est une 3.1 Ceci dit, je ne me pose pas en expert de CP/M, loin de là. Je suis juste un débutant depuis quelques mois, mais le titre du livre micro-application du CP/M sur Amstrad étant faux, j'ai voulu tirer ça au clair. Post-scriptum : Il ne vous aura pas échappé que dans le code source ci-dessus écrit par les ingénieurs de chez DRI, ils ne prennent même pas le soin de tester avec une valeur 30h : directement 31h pour déterminer CP/M 3! C'est selon moi un autre signe que CP/M 3.0 n'a jamais été commercialisée. |
Auteur : | Kris [ 03 Juin 2012, 08:23 ] |
Sujet du message : | Re: programmer en asm 8080 sur CPC (sous CP/M) |
AH !!!ça sent bon la passion par ici, ça me plait ! bravo Spoke pour tes explications et le partage de tes trouvailles |
Auteur : | TotO [ 03 Juin 2012, 22:27 ] |
Sujet du message : | Re: programmer en asm 8080 sur CPC (sous CP/M) |
Effectivement, la 3.0 n'a jamais du être publiée et seul les docs devaient-être déjà imprimées lorsqu'une correction mineure du code fut apportée. Du coup, pour ne pas perdre l'utilisateur ils a du être demandé d'afficher 3.0 à l'écran. |
Auteur : | sPOKE [ 09 Juin 2012, 10:00 ] |
Sujet du message : | Re: programmer en asm 8080 sur CPC (sous CP/M) |
TotO a écrit : Effectivement, la 3.0 n'a jamais du être publiée et seul les docs devaient-être déjà imprimées lorsqu'une correction mineure du code fut apportée. C'est une possibilité, mais ça reste une hypothèse. La seule façon de le savoir,Du coup, pour ne pas perdre l'utilisateur ils a du être demandé d'afficher 3.0 à l'écran. ce serait de retrouver un ancien ingénieur de DRI et de lui poser la question. Mais peut être que seul Gary Kildall le savait. Par contre, j'ai la re-confirmation d'un très bon spécialiste CP/M qui m'a confirmé qu'il n'a jamais vu de version 3.0 : Citer : I haven't seen an actual 3.0 anywhere. Je lui ai demandé s'il pensait aussi que les fichiers appellés "CP/M 3.0 source" sur le site ci-dessus "Unofficial CP/M website" étaient bien une 3.1,il a regardé les fichiers et me l'a confirmé : Citer : Searching for 'version' labels in both zipfiles gives: En fait, il faut comprendre que même si le site de Gaby Chaudry n'est plus maintenu à jour désormais, la personne a fait un super boulot, version: db 31h ;version 3.1 et n'est certainement pas intéressé à des petits détails insignifiants comme un numéro de version. Moi oui, car en programmant je me demandait d'où venait ce 31h, puis j'ai fini par le retrouver partout. |
Auteur : | Megachur [ 09 Juin 2012, 10:07 ] |
Sujet du message : | Re: programmer en asm 8080 sur CPC (sous CP/M) |
au cas où: ftp://ftp.barnyard.co.uk/cpm contient également des archives et pgms cpms |
Auteur : | sPOKE [ 02 Juil 2012, 06:45 ] |
Sujet du message : | Maintenant sur un Osborne 1! |
Pas vraiment pour tester le n° de version cette fois, c'est juste pour rendre hommage à ce grand Monsieur qu'est Adam Osborne : http://technologizer.com/2011/04/01/osborne-computer/ Bon, pas de surprise, c'est bien une 2.2 Voir mon code-source CPC tourner sur un vrai Osborne 1, c'est juste trop cool! Merci à Andy de me laisser "utiliser" son computer, c'est chic! Voici, en bonus, pour les anglophones, une vidéo avec Adam Osborne discutant avec Gary Kildall. http://www.youtube.com/watch?v=GNdBBI5tpuk |
Auteur : | sPOKE [ 29 Oct 2012, 19:52 ] |
Sujet du message : | Créer une commande CLS sous CP/M |
Bon, voyons aujourd'hui comment créer une commande CLS sous CP/M : C'est très utile d'effacer l'écran dans les programmes, donc ça sert souvent. Au début, j'affichais 25 retour chariot, mais c'est lent, et le curseur reste en bas de page. Pas pratique. En fait, on utilise tout simplement les codes d'échappement du terminal VT-52 (Escape Codes), un peu comme les caractères de contrôles du CPC quand on fait des cat'art ou autre. Pour effacer l'écran, on envoie simplement un code ESC (27), suivi de 'E'. Pour remettre le curseur en haut à gauche (Home) c'est ESC suivi de 'H'. On utilise la fonction BDOS 9 qui affiche une phrase, $ étant le pointeur de fin (24H ici) Puis on revient à CP/M, le CCP par un JMP 0. Le fichier s'appelle CLS.ASM, il suffit de l'assembler en .COM Puis de taper simplement CLS chaque fois qu'on veut effacer l'écran du terminal. Prochaine leçon : On verra comment passer en mode 0,1,2 sous CP/M : nous créerons la commande MODE. Ce sera intéressant de voir comment passer des paramètres à un programme... |
Auteur : | sPOKE [ 30 Oct 2012, 07:31 ] |
Sujet du message : | Créer la commande MODE 0,1,2 sous CP/M |
Pour changer de mode écran avec le CPC sous CP/M, il faut envoyer la séquence ESC 3 <m> m = &20+mode. On peut ainsi passer en mode 0,1 ou 2. Pratique pour afficher le titre d'un programme en gros caractère ou tout simplement travailler quelquefois en 40 colonnes, faire un petit jeu en mode 1, etc... Le fichier s'appelle MODE1.ASM, il suffit d'assembler et de taper MODE1 : Ca marche très bien, mais ça a un gros inconvénient : le mode sélectionné étant écrit dans le programme lui-même, il faudra créer 3 programmes pour les 3 modes écran. Ce serait mieux d'envoyer une valeur en paramètres, de la récupérer et de la traiter. Style : MODE 0, MODE 1 ou MODE 2 Les bouquins n'étant pas très bavards sur comment faire ça, j'ai cherché un petit moment, mais j'ai trouvé : Les programmes commencent à l'adresse &100 sous CP/M (256), mais quand on envoie des paramètres à un programme, ils sont récupérés par CP/M à l'adresse &80 en brut, et &5D,&6D en mode "parsé" au format FCB (ce qui veut dire que CP/M a viré pour vous les virgules entre vos valeurs envoyées). L'octet &80 contient la longueur de la chaine pour que vous puissiez tout récupérer. Ensuite à vous de choisir votre méthode. Admettons que je crée un programme "COLOR" qui change les couleurs de l'écran, et que je veuille un fond noir monochrome vert : COLOR BLACK,GREEN : COLOR.COM est le programme, BLACK et GREEN sont les 2 valeurs envoyées en paramètres. Si vous regardez la mémoire avec le debugger, ça ressemble à ça : Voilà, il nous suffit de récupérer les valeurs en mémoire et de les traiter : Vous pouvez voir que je récupère 0, 1 ou 2 à l'adresse &82 dans le registre H (l'équivalent d'un PEEK donc) puis je le mets dans l'accumulateur et je compare avec les 3 valeurs ASCII de 0,1,2 et je redirige vers la routine adéquate. On peut faire plus court en retranchant &H10 de la valeur ASCII et en POKANT cette valeur directement dans la routine. Aucun besoin de faire des tests puisqu'on traite le paramètre envoyé, comme ceci : Le code ASCII de "0" étant &H30, celui de "1" étant &H31 et "2" étant &H32, retirer &H10 permet bien d'obtenir m = &20+mode Voilà, il suffit maintenant d'assembler MODE.ASM, de taper Mode 0, 1 ou 2 comme sous AMSDOS/BASIC pour changer de mode écran. Petite astuce par exemple : tapez DIR[full] au lieu de DIR en Mode 1, ce sera mieux affiché. Bonne prog, exploitez bien votre CPC. |
Auteur : | TotO [ 30 Oct 2012, 11:45 ] |
Sujet du message : | Re: programmer en asm 8080 sur CPC (sous CP/M) |
Great ! Super sympa de reprogrammer l'existant sous BASIC en commandes CP/M. C'est instructif et concret, en plus d'être utile ! |
Auteur : | sPOKE [ 30 Oct 2012, 12:04 ] |
Sujet du message : | Nouvelle commande Couleur pour CP/M |
En complément des 2 commandes précédentes, voici la nouvelle commande COULEUR: Il existe déjà la commande "Palette" sur le CP/M du CPC (c'est une commande AMSTRAD only), mais elle ne me convient pas. Tout simplement parcequ'il faut donner des nombres comme paramètres. Genre Palette 0,44 pour un fond Noir et texte Ambre. C'est beaucoup plus simple à faire pour le programmeur, mais à vous de vous souvenir de chaque n° de couleur! Pénible! La commande "COULEUR" accepte 18 couleurs différentes, avec arguments en français svp! La première pour le fond, la seconde pour le texte : (en minuscules ça marche aussi bien sûr) N = Noir ; B = Blanc ; J = Jaune ; JP = Jaune Pastel V = Vert ; VB = Vert bouteille ; VP = Vert Pastel VI= Violet ; K = Kaki ; R = Rouge ; RS = Rose G = Gris ; M = Marron ; O = Orange ; C = Cyan ; BE = Bleu BM = Bleu Marine ; I = Indigo Récupérer les paramètres demandait juste de faire attention aux couleurs qui comportent 2 lettres, comme le bleu marine : dans ce cas le "M" ne signifie pas "Marron" et ne se trouve donc pas en forcément en &83 ou &85 si la valeur est passée en 2eme argument après une couleur à 2 lettres... Mis à part ça, c'est du gateau : Escape codes : &62 et &63 Exemple : COULEUR BE,B Facile non ? code source COULEUR.ASM et fichier exécutable COULEUR.COM fournis |
Auteur : | sPOKE [ 11 Déc 2012, 10:01 ] |
Sujet du message : | Changer les couleurs du système CP/M 2.2 sur CPC |
Cette commande "COULEUR" est bien sympa, mais elle ne fonctionne pas sous CP/M 2.2, qui ne comporte pas l'émulation du Z19/29-VT-52. La commande "Palette" de CP/M Plus ne fonctionne pas non plus, évidemment. On doit donc ruser en utilisant les caractères de contrôles fournis par le constructeur AMSTRAD, comme pour les catalogues décorés : Un article très intéressant dans Amstrad 100% n°5, page 48 nous montre le "truc" suivant : Lien : http://www.abandonware-magazines.org/affiche_mag.php?mag=23&num=182&album=oui il suffit de lancer SETUP.COM et de taper la séquence de caractères suivants : ^\@MM^\a@@^]mm (en Qwerty) ou bien : ^çàmm^çaàà^]mm (en Azerty) Mais qu'est-ce que c'est que ce charabia??? C'est plus simple que ça n'en a l'air : ^\ représente la commande INK (le fond d'écran) @ représente le nombre 0 : INK 0 donc. M est la 13ème position après @ en ASCII, donc couleur INK 0,13 : fond gris. (insensible à la casse) on ajoute un deuxième M au cas ou on voudrait faire clignoter les couleurs ^\a représente la commande INK 1 (la couleur du texte). A vaut 1, B vaut 2, etc.(insensible à la casse) @@ représente donc INK 1,0 : texte noir ^] représente la commande Basic BORDER suivie de 2 octets pour la couleur, ici du gris donc. Avec un clavier azerty \ est remplacé par ç, tandis que @ est remplacé par à. ^çààà^çarr^]àà donnera donc un fond noir, texte vert. ( ^\@@@^\arr^]@@ en Qwerty ) ^çàaa^çazz^]aa donnera donc un fond bleu marine, texte blanc, comme CP/M Plus. ( ^\@aa^\azz^]aa en Qwerty ) ------------------------------------- PASSONS A L'ACTION : ------------------------------------- - chargez CP/M 2.2, tapez : SETUP - répondez Y à la question "Inititial commande buffer... Is this correct", - répondez N à la question "Sign-on-string ... Is this correct". - entrez la séquence ^çàaa^çazz^]aaCP/M 2.2 - Amstrad Consumer Electronics plc ^J^M - puis laissez la touche Y enfoncée jusqu'au reboot de CP/M : les nouvelles couleurs sont enregistrées dans le système! ------------------------------------------------------------------------------------------------------- Bon voilà, j'ai vraiment adoré cette astuce dévoilée par l'article d'A100%. Mais je n'ai pas pu m'empêcher d'y relever une coquille... Il y a bien une erreur, je vous laisse la trouver pour ceux qui sont joueurs : (on répond par MP, merci de ne pas trop écrire dans ce topic ^-^ ) Bon, pour ceux qui souhaiteraient une technique beaucoup plus simple pour changer l'horrible couleur cyan sous CP/M 2.2 Tonton sPOKE a pensé à vous : Allez en Piste 0, secteur 2 de votre disquette CP/M 2.2 (une copie bien sûr, pas l'originale!!) Les plus perspicaces d'entre vous auront reconnu les caractères de contrôle &1C et &1D qui sont respectivement INK et BORDER. Les mega-perspicaces auront repéré la valeur &24 en fin de chaine, ce qui nous indique la fonction BDOS 9 est appelée. On voit donc ici clairement comment les ingénieurs d'Amstrad changent la couleur en bleu cyan/texte noir du CP/M 2.2 Les deux premiers octets "77" (hexa) représentent le fond d'écran bleu cyan Les deux octets "40" (hexa) représentent la couleur noire du texte Les deux derniers octets "77" représentent la bordure bleu cyan Vous mettez directement les numéros de couleur du CPC : &12 pour du vert vif, &01 pour du bleu marine, etc. Et voilà, fini de vous crever les yeux sous CP/M 2.2 P.S: Merci à Kukulcan et à hERMOL qui m'ont gentiment fourni la disquette d'origine CP/M 2.2 qui m'a permis de réaliser ce tuto. |
Auteur : | sPOKE [ 04 Jan 2013, 15:33 ] |
Sujet du message : | Analyse de Language.com (Amstrad CP/M) |
En créant un logo en ASCII pour le boot de CP/M, on s'aperçoit qu'il faut en plus gérer plusieurs langues! car certains caractères affichés ne sont pas les mêmes : CP/M Plus disposant de la commande LANGUAGE.COM qui permet de changer la langue, je suis allé regarder comment elle fonctionne : On se rend compte en la désassemblant ou en faisant un simple DUMP Hexa-Ascii que Locomotive Software a écrit un très long programme pour faire ça! (et ce n'en est qu'une partie...) alors qu'il suffisait d'envoyer une séquence ESC de 2 caractères + un paramètre! Anectode amusante, j'ai trouvé dans un tutoriel CP/M de CPC magazine l'article suivant : L'auteur s'interroge : Amstrad a t-il placé une protection anti-déplombage dans CP/M ?? Il semble le croire. En fait, il n'en est rien. C'est pourtant vrai que le moniteur-debugger DDT ou SID plante quand on veut lancer une commande Trace pas à pas des commandes CP/M créees par Amstrad... pourquoi ???? Oui, j'avoue, je suis "un petit curieux", comme dit l'auteur. Désassemblons LANGUAGE.COM : On voit que le moniteur-debugger SID, qui est un outil 8080, ne comprend pas la valeur &H18 à l'adresse &H100 car cette instruction n'existe pas dans le processeur 8080! C'est du Z80 : c'est un saut relatif JR index à l'adresse 016C (6A+0100+2=016C) et ça, les outils Digital Research 8080 ne peuvent ni le desassembler ni le tracer ni l'exécuter. Donc ça plante. Mais ce n'est en aucun cas une "protection". Ça montre simplement que l'équipe de Locomotive Software programmait les utilitaires CP/M du CPC en Z80, vu que c'est suffisant pour fonctionner sur le CPC. Voilà pourquoi on ne peut pas les tracer pas à pas avec les outils Digital Research qui sont eux en 8080. CQFD. Comme la commande LANGUAGE.COM n'est compatible que CP/M Plus,on voit que Locomotive Software emploie la fonction BDOS 12 pour tester si on se trouve sous CP/M 2.2 ou 3.1 et stopper le programme si besoin : (le code inconnu &28 08 est JR Z,index+08 en Z80) Par contre, ce n'était pas utile de tester à nouveau si la valeur reçue est &22 : Si ce n'est pas &31, c'est forcément &22 sur un Amstrad CPC. Un seul test suffit pour déterminer l'OS. Bon, trève de bla-bla, écrivons une commande LANG.com, qui sera beaucoup plus courte que Language.com : (et surtout beaucoup plus respectueuse de l'environnement CP/M-80, donc qui ne plantera pas les outils DDT/SID) Voilà, nous pouvons à présent changer la langue avant d'afficher un logo ASCII-ART sous CP/M PLus et obtenir les caractères souhaités. Par exemple utiliser l'anti-slash (contre-oblique) le caractère ASCII &H5C sans problème pour faire notre logo sous CP/M Plus. Avec une petite routine fait-maison svp! La séquence ESC étant directement incrustable dans le logo lui-même si on le souhaite! |
Auteur : | sPOKE [ 28 Fév 2013, 14:01 ] |
Sujet du message : | Turbo Pascal sur CPC |
Pour ceux qui trouvent le langage d'assemblage un peu trop ardu sous CP/M, il y a une solution sympathique qui vous permettra de créer des programmes exécutables en .com : Le TURBO PASCAL de Borland. Turbo Pascal n'est pas un langage de programmation, (le langage c'est Pascal) mais un IDE (Environnement de Développement Intégré) avec un compilateur 1 passe très rapide. On a vraiment l'impression de travailler avec un langage interprété! C'est bien plus rapide que de taper le code source dans un éditeur de texte puis taper les commandes pour compiler. Ceux qui ont déjà compilé des programmes MBasic en ligne de commande avec Bascom verront la différence de rapidité! On peut, par exemple, en plein édition d'un source, exécuter un autre programme .com sur le disque, puis on revient automatiquement à notre code source qui n'a pas été modifié et est toujours présent en mémoire et à l'écran! Essayez de faire ça avec un autre langage... De plus, beaucoup de personnes semblent confondre les termes "assembler" et "compiler". La pratique de Turbo Pascal ne peut leur être que bénéfique. Vous ne serez pas dépaysé si vous l'utilisez sur un CBM 128 ou un IBM PC en tous cas : Commodore 128: Amstrad CPC: IBM PC: Avantages de Turbo Pascal : - Idéal pour un débutant qui veut aller plus loin que le Basic et découvrir la programmation structurée. - Il est encore utilisé aujourd'hui dans l'enseignement de l'informatique, les lycées, etc. - Il y a énormément de tutoriels sur Internet, même en français, et très bien faits. - Très facile d'insérer du langage machine 8080 ou Z80, CP/M ou Amsdos. - Turbo Pascal 7 est gratuit de nos jours sur un PC moderne, il y a aussi freePascal et bien d'autres. Il n'y a pas d'instructions Ink, Pen, Paper, Border, Mode, comme en Locomotive Basic ? Il suffit de créer par exemple une fonction TextColor, et d'utiliser les caractères de contrôles du CPC. Pour les graphismes, vous avez le choix : soit vous utilisez GSX (le plus facile), soit vous insérez du langage machine pour accéder à l'Amsdos du CPC (tout dépend de votre philosophie et de votre niveau). Voilà, bonne programmation, cet IDE est un régal. Code : program hello; begin write('Hello World!'); end. P.S : Merci à Ross (CP/M USER sur cpcwiki) pour son aide et ses très bons conseils pour la programmation firmware. son site web : http://turpas3.angelfire.com/ |
Auteur : | sPOKE [ 08 Mars 2013, 17:51 ] |
Sujet du message : | Nouveau cousin du CPC identifié |
Voici un nouveau cousin du CPC mis à jour et identifié : le superbe EPSON QX-10 qui dispose, comme notre CPC 6128, à la fois de CP/M 2.2 et de la version CP/M Plus. Sûr qu'un jour cette machine trônera sur mon bureau à côté de mon CPC 6128 pour les faire communiquer. Comme je suis toujours à la recherche d'une version CP/M Plus 3.0 qui aurait existé, j'ai décidé de tester la bécane, et j'ai contacté plusieurs collectionneurs possédant cet ordinateur. L'un d'eux m'a même répondu : " Pourquoi une telle demande farfelue, alors qu'il y a un émulateur QX-10 ? " J'ai donc demandé à un autre collectionneur de taper ceci dans le CP/M Plus de son vrai EPSON QX-10: MVI C,0C CALL 5 SHLD 0130 RST 7 Comme il ne disposait pas de DDT ni de SID, mais seulement du programme ZSID qui n'accepte que les mnémoniques Z80, nous avons traduit le programme en mnémoniques Z80 (le code hexa langage machine reste le même), puis effectué le test. Résultat : une version 3.1 clairement identifiée! La valeur Hexa 31 est bien visible à l'adresse 0130, ceci étant le contenu du registre L, écrit en Binary Coded Decimal. Suivi du 00 qui est le contenu du registre H, indiquant qu'il s'agit de CP/M et non de MP/M (qui serait indiqué lui par la valeur 01). Grâce à la fonction BDOS 12, H permet d'identifier le Système d'Exploitation utilisé et L le numéro de version exact. Je vous laisse comparer avec les valeurs originales qui étaient en mémoire avant d'implanter et lancer notre routine : Thanks to Mr Fred Jan, from Netherlands for his kind help to have done this on his computer QX-10! to visit his website : http://fjkraan.home.xs4all.nl/comp/qx10/ |
Page 3 sur 5 | Le fuseau horaire est UTC+1 heure |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |