[Sharp PC-1403 / PC-1403H] - Instructions PEEK et POKE

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
wilou
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 52
Enregistré le : 20 juin 2012 18:26
Localisation : Lyon
Contact :

[Sharp PC-1403 / PC-1403H] - Instructions PEEK et POKE

Message par wilou »

Bonjour / Bonsoir (et vice et versa :P),

Je redécouvre petit à petit mon PC-1403H. Ces deux fonctions que je cite en titre m'intriguent. Je ne me suis jamais réellement penché dessus, mais il semble qu'elles donnent vraiment l'opportunité de faire beaucoup de choses.

Ce matin, je suis tombé (ouille ! :D) sur un *.PDF très intéressant que voici :

http://vininc.de/Literatur/Fischel-Arti ... 1%2C03.pdf

Il s'agit malheureusement d'un document en allemand, et je n'ai strictement aucune connaissance de cette langue. L'impossibilité de faire un copier/coller du contenu dans un traducteur n'est pas pour arranger les choses, ça va me prendre un sacré bout de temps pour tout traduire et tout comprendre.

Heureusement, malgré mon âge vénérable, il me reste un peu d'intelligence et de jugeote, et j'ai donc pu deviner certains concepts expliqués. :)

L'utilisation qui est faite de POKE dans le document vise à créer des caractères spécifiques et des animations.
J'ai compris que chaque ligne de pixel de la matrice était numérotée comme suit : 1,2,4,8,16,32,64. Jusque là, rien de compliqué. J'ai également compris que chaque point d'une colonne est défini par l'un de ces chiffres et qu'il faut additionner les chiffres correspondant à ceux que l'on souhaite activer. Si, sur la première colonne, on souhaite que, de haut en bas, le deuxième et le cinquième point s'affiche, alors on additionne 2 et 16, ce qui donne, après vérification, 18. On recommence l'opération pour la deuxième colonne et ainsi de suite pour les 5.

Ce que j'ai du mal à saisir, c'est le premier chiffre après POKE. Si j'ai bien compris, il représente le numéro de la matrice utilisée à l'écran. Si je souhaite afficher un caractère personnalisé sur le premier des 24 emplacements de mon écran, j'aurai POKE &3000 [...]. Le souci c'est que je ne comprends pas les schémas du document, et je ne sais donc pas le "code" alloué aux 23 autres matrices, et je ne sais pas non plus si ces matrices sont toutes entièrement distinctes ou si l'on peut avec une seule instruction POKE, créer quelque chose à cheval sur plusieurs matrices. Le schéma ne donne les infos que pour les 12 premières matrices visiblement.

Ce que je comprends encore moins, c'est l'utilité de la fonction "CALL 1208" dans ce contexte précisément. J'avais bien compris son intérêt dans mon topic parlant des systèmes d'équations (appel d'instructions présentes dans la ROM du Pocket), mais ici... Quid ? :P

Encore une petite question pour la route. En ayant créé un caractère spécial, ai-je la possibilité de lui attribuer une variable, et la réutiliser à plusieurs reprises, à la suite d'un PRINT par exemple ?
J'ai retrouvé mon programme de résolution des équations du 2nd degré, j'aimerais bien pouvoir afficher "Discriminant Δ =". Est-ce qu'il faut nécessairement renvoyer à une ligne avec POKE pour afficher le caractère "Δ" ou il est possible de l'afficher directement dans la chaîne de caractères en invoquant une variable (je sais pas, par exemple D$) ?

Merci ! :)
••• Inventeur du "CCMOS mystique" © ••• Amateur de BM et d'IBM •••
••• La petite famille SASFEPU s'agrandit : TI-57II v.3, Casio fx-7500G, Casio fx-8800G, Sharp PC-1403H, Casio FX-850P (+RP-33), Atari Porfolio, HP 200LX 2 Mo •••
Avatar du membre
treza
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 50
Enregistré le : 17 nov. 2011 22:55
Localisation : Toulouse

Re: [Sharp PC-1403 / PC-1403H] - Instructions PEEK et POKE

Message par treza »

Je pense que ce PDF est un extrait d'un bouquin édité par "Becker & Partner" (couvertures rouges) qui a publié de nombreux titres à propos des calculatrices Sharp, dont certains furent traduits en français.
J'ai :
- Le Grand Livre des Sharp PC 1403/03+
- Le Grand Livre du Langage Machine des SHARP PC (où j'ai appris l'existence de l'instruction DATA...)

Pour l'affichage du PC1403, il est situé entre les adresses &3000 et &306C, comme indiqué dans le PDF mais, certainement à cause du multiplexage des lignes, la moitié des caractères sont adressés à l'envers :
Caractère 1 : &3000 à &3004
Caractère 2 : &3005 à &3009
Caractère 13 : &306C à &3068 : À l'envers !
Caractère 14 : &3067 à &3063... etc...

Comme il s'agit d'adresser directement la mémoire vidéo, il n'est pas possible de copier les figures dans des variables. Comme le PC1403 n'a pas d'écran graphique, il n'est pas possible d'écrire entre les caractères (contrairement au légendaire PC1500...)

L'appel "CALL 1208" est, je cite :
"Cette routine en Langage machine commute l'affichage en graphique et attend qu'une touche soit actionnée pour mettre fin au programme"
Tu vois, le monde se divise en 10 catégories : Ceux qui connaissent le binaire, et ceux qui ne le connaissent pas.
Toi, tu creuses.
destroyedlolo
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1806
Enregistré le : 03 mai 2003 02:24
Localisation : Nonglard (Annecy)
Contact :

Re: [Sharp PC-1403 / PC-1403H] - Instructions PEEK et POKE

Message par destroyedlolo »

  • POKE permet de modifier le contenu d'une ou plusieurs adresse memoire. Le fait que tu tape dans une adresse video est un cas particulier qui te permet de gerer point par point les pixels de l'ecran
  • PEEK renvoi la valeur d'un octet memoire. En clair, si &3000 est un octet classique de la RAM,

    Code : Tout sélectionner

    POKE &3000, 15 : PRINT PEEK &3000
    t'affichera 15.
  • CALL quand a lui permet de lancer une routine en langage machine.
Tu aura plus d'information sur ma page sur les pockets sharp.
Elles concernent principalement les PC 1401 et 1350 mais, hormis les adresses, le reste est plus ou moins applicable au 1403.
Amiga, UNIX
Sharp, NetBSD http://destroyedlolo.info/
Apache, PHP 100 % dictionnary free
Vacances, Voyages 1 mispelling by word
Avatar du membre
zork750
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 489
Enregistré le : 29 avr. 2011 15:44
Localisation : Paris

Re: [Sharp PC-1403 / PC-1403H] - Instructions PEEK et POKE

Message par zork750 »

merci destroyedlolo,
je vais regarder dès ce soir sur ta page, cela m'intéresse également.

Merci wilou d'avoir lancé ce fil.
destroyedlolo
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1806
Enregistré le : 03 mai 2003 02:24
Localisation : Nonglard (Annecy)
Contact :

Re: [Sharp PC-1403 / PC-1403H] - Instructions PEEK et POKE

Message par destroyedlolo »

Ben si tu te lance dans l'assembleur, fait nous profiter de tes avances.

Sur mon site, tu trouvera aussi un assembleur et quelques exemples (a nouveau pour 1401 ou 1350).

J'avais joue quelques temps avec les 1360 et 1403 mais j'ai perdu^W ranger mes notes depuis bien longtemps :twisted:
Amiga, UNIX
Sharp, NetBSD http://destroyedlolo.info/
Apache, PHP 100 % dictionnary free
Vacances, Voyages 1 mispelling by word
Avatar du membre
wilou
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 52
Enregistré le : 20 juin 2012 18:26
Localisation : Lyon
Contact :

Re: [Sharp PC-1403 / PC-1403H] - Instructions PEEK et POKE

Message par wilou »

Salut,

Merci pour ces informations précieuses.

Il n'est vraiment pas facile de se lancer, puisque les informations sont très dispersées sur le net, ou ne sont plus accessibles, et/ou sont dans des langues différentes. :'(

Connaissez-vous un site qui recense les différentes fonctions "CALL" utilisables sur le PC-1403(H) ?

J'en ai noté quelques unes à propos des opérations sur les matrices. Celles-ci sont documentées, dans la mesure où l'on sait ce qu'elles font, mais certaines ne sont pas très claires... :P

@ treza : J'ai effectivement pu identifier le livre dont tu parles. Il date de la fin des années 80, il n'est pas sûr qu'il soit encore édité. S'il peut être trouvé en occasion à un prix raisonnable, je me laisserai naturellement tenter ! :D

Par ailleurs, je comprends mieux pourquoi je ne comprenais pas les infos du PDF concernant l'identification des matrices de caractères. Des infos notées à l'envers, c'est déstabilisant ! (comme si c'était pas déjà assez compliqué à l'endroit ! :D) Grâce aux pistes que tu donnes, j'ai compris à quoi correspondait les "&3000" et consorts. Cela correspond à la numérotation de chaque colonne de chaque matrice de caractères. Chaque matrice est séparée, mais la numérotation se suit. Je vais tenter de remettre ça dans l'ordre. :)

Tu notes qu' "il n'est pas possible d'écrire entre les caractères". Nous sommes d'accord, j'avais d'ailleurs bien compris, je ne me suis probablement pas correctement exprimé (puisque je n'avais pas bien compris cette numérotation). Ce que je voulais dire c'est :

Une instruction POKE que l'on va utiliser pour créer un caractère par exemple peut-elle s'appliquer à deux matrices ou plus ?

Exemple : Si je veux dessiner le caractère "A" dans la première matrice, est-ce que l'instruction que je vais employer sur une même ligne de programme peut contenir les données pour afficher également un "B" sur la deuxième matrice ? Ou faut-il nécessairement une instruction POKE dans une ligne de programme pour le caractère "A" et une deuxième instruction POKE dans une deuxième ligne de programme pour la lettre "B" ?

(Ouah, je suis fier de moi, j'ai réussi à expliquer clairement cette fois-ci ! 8))

@ Destroyedlolo : Merci pour ces informations. Je n'ai pas encore eu l'occasion de parcourir tout ton site, mais je pense y trouver des informations très utiles. J'avais bien compris que POKE permettait de modifier des adresses mémoire et PEEK de renvoyer la valeur, mais pour le moment, je ne vois pas encore trop dans quels cas de figure utiliser cette fonction hormis pour dessiner des choses à l'écran.

Si j'ai bien compris, en utilisant l'instruction "CALL 1208" permet de commuter en affichage "graphique" et donne la possibilité d'adresser chaque pixel grâce à POKE et PEEK.

Peut-être de la même manière est-il possible de faire appel à une routine en langage machine et utiliser les instructions POKE et PEEK pour "étoffer" les possibilités sonores de l'appareil ? Typiquement, définir la hauteur d'un son et sa durée (à défaut d'en modifier le timbre et l'intensité, puisqu'il s'agit d'un simple buzzer). Me trompé-je ?

Quelle serait alors l'instruction CALL à utiliser ? S'il faut en utiliser une.

@Zork750 : Heureux de constater que les informations que je vais glaner ne me seront pas seulement utiles à moi seul personnellement moi-même ( :D )

Bonne soirée,

W.
••• Inventeur du "CCMOS mystique" © ••• Amateur de BM et d'IBM •••
••• La petite famille SASFEPU s'agrandit : TI-57II v.3, Casio fx-7500G, Casio fx-8800G, Sharp PC-1403H, Casio FX-850P (+RP-33), Atari Porfolio, HP 200LX 2 Mo •••
destroyedlolo
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1806
Enregistré le : 03 mai 2003 02:24
Localisation : Nonglard (Annecy)
Contact :

Re: [Sharp PC-1403 / PC-1403H] - Instructions PEEK et POKE

Message par destroyedlolo »

wilou a écrit :@ Destroyedlolo : Merci pour ces informations. Je n'ai pas encore eu l'occasion de parcourir tout ton site, mais je pense y trouver des informations très utiles. J'avais bien compris que POKE permettait de modifier des adresses mémoire et PEEK de renvoyer la valeur, mais pour le moment, je ne vois pas encore trop dans quels cas de figure utiliser cette fonction hormis pour dessiner des choses à l'écran.
Ben, entre autre :
  • entrer des programmes en langage machine
  • mettre dans des variables des caracteres normalement non affichable (typiquement le curseur d'insertion)
  • modifier les pointeurs BASIC
Pis des trucs plus fun comme par exemple avoir des lignes de plus de 80 octets (qui deviendrons non modifiable), avoir un numero de ligne 0 (non modifiable non plus), ...
wilou a écrit :Peut-être de la même manière est-il possible de faire appel à une routine en langage machine et utiliser les instructions POKE et PEEK pour "étoffer" les possibilités sonores de l'appareil ? Typiquement, définir la hauteur d'un son et sa durée (à défaut d'en modifier le timbre et l'intensité, puisqu'il s'agit d'un simple buzzer). Me trompé-je ?
La ROM ne contient pas de routine permettant de sortir autre chose que le classique BIP.
Cependant, tu trouvera sur mon site un de mes utilitaire nome ULM3 : la fonction "MUSIC" permet de sortir n'importe quelle note (dans la limite du hard bien sur) ... mais il faut maitriser le langage machine.

Bye
Amiga, UNIX
Sharp, NetBSD http://destroyedlolo.info/
Apache, PHP 100 % dictionnary free
Vacances, Voyages 1 mispelling by word
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2143
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: [Sharp PC-1403 / PC-1403H] - Instructions PEEK et POKE

Message par cgh »

Tu peux aussi trouver des informations dans les revues Les Sharpentiers ou Nano-Ordinateurs.

Bonne lecture
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque
Avatar du membre
wilou
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 52
Enregistré le : 20 juin 2012 18:26
Localisation : Lyon
Contact :

Re: [Sharp PC-1403 / PC-1403H] - Instructions PEEK et POKE

Message par wilou »

Salut,

Merci pour les infos.

Les Sharpentiers et Nano-Ordinateurs sont très intéressants.

@destroyedlolo : Tu dis qu'il est possible de stocker des caractères non affichables dans une variable. Or Treza notait que "Comme il s'agit d'adresser directement la mémoire vidéo, il n'est pas possible de copier les figures dans des variables."

Qui a raison ? :D

S'il est possible de le faire, où puis-je trouver des explications ?

Merci ! :)

W.
••• Inventeur du "CCMOS mystique" © ••• Amateur de BM et d'IBM •••
••• La petite famille SASFEPU s'agrandit : TI-57II v.3, Casio fx-7500G, Casio fx-8800G, Sharp PC-1403H, Casio FX-850P (+RP-33), Atari Porfolio, HP 200LX 2 Mo •••
destroyedlolo
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1806
Enregistré le : 03 mai 2003 02:24
Localisation : Nonglard (Annecy)
Contact :

Re: [Sharp PC-1403 / PC-1403H] - Instructions PEEK et POKE

Message par destroyedlolo »

Salut
wilou a écrit :@destroyedlolo : Tu dis qu'il est possible de stocker des caractères non affichables dans une variable. Or Treza notait que "Comme il s'agit d'adresser directement la mémoire vidéo, il n'est pas possible de copier les figures dans des variables."

Qui a raison ? :D
Les 2 :D
  • J'ai raison quand je dis de stocker des caracteres non affichables. Ils sont limites aux curseurs plein et curseur vide (le fameux caractère d'insertion)
  • Treza a plus ou moins raison car il n'est pas possible de redéfinir directement les caractères, donc il n'est pas possible de les stocker dans des mémoires. Par contre, il est possible de copier la mémoire vidéo dans une autre zone mémoire (sauvegarde de l'ecran). L'astuce que j'avais utiliser sur 1350, c'etait de faire des PRINT CHR$() de code > 128, donc qui ne s'affichent pas, puis de lancer une routine en langage machine qui générait un graphisme pour chacun de ces codes. En clair, mais la meme chose que la routine de la ROM qui affiche des caracteres sauf que la mienne utilise mes propres graphismes. Ca marche bien sur un 1350 qui a un affichage permanent, beaucoup moins avec un PC-14xx ou la RAM video est utilisee comme pile de calcul BASIC.
Voila
Amiga, UNIX
Sharp, NetBSD http://destroyedlolo.info/
Apache, PHP 100 % dictionnary free
Vacances, Voyages 1 mispelling by word
Répondre

Retourner vers « Tous les Pockets »