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

[Tuto] Comment faire un dessin en UDG?
https://cpcrulez.fr/forum/viewtopic.php?f=4&t=5705
Page 1 sur 1

Auteur :  Xavier [ 26 Avr 2016, 04:35 ]
Sujet du message :  [Tuto] Comment faire un dessin en UDG?

Salut à tous...

Une petite piqûre de rappel pour vous réveiller avant la Reset#28 !

Donc, je vous propose un utilitaire tout bête en Basic Amstrad pour convertir du bitmap en tables de redéfinition graphique.

Le but est d'inclure une image en tant que texte :
Pièce jointe :
Spounz.jpg


Et de réorienter le vecteur Basic de la fonction SYMBOL, ou de la rappeler.
On obtient l'adresse avec : PEEK(&B736)+256*PEEK(&B737)

Donc, il est possible sauver ou rappeler cette table sans faire de SYMBOLs...
SAVE "UDG.BIN",B,(PEEK(&B736)+256*PEEK(&B737)),NbCARAC*8

Et un chargement avec LOAD "UDG.BIN",(PEEK(&B736)+256*PEEK(&B737))

Avec ce petit programme en Basic, il est maintenant possible de créer une table de caractères de 32 à 255, sur une image bitmap de LxH (longeur x hauteur)
Dans mon exemple, je doit convertir une image de 12 caractères par 12, soit 144 caractères sur les 223 disponibles.

Donc, on crée un fichier bitmap, on le converti en fichier BIN AMS avec l'outil de votre choix... en plaçant l'image en haut à gauche de l'écran.
On l'importe avec "ManageDsk"... ici, le fichier s'appelle "UDG.BIN", qui sera chargé en &C000 (Attention, le haut de l'écran peut changer si l'on utilise l'éditeur et en scrollant l'écran!)

Puis on lance le programme RUN"IMG2UDG" sur cette disquette:
Pièce jointe :
IMG2UDG.zip


Puis répondez aux questions:
Pièce jointe :
SpounzUDG.jpg

Le fichier "1.bin" est la table UDG à charger.

La lecture est simple! ... très simple... et ne nécessite pas de préserver la mémoire avec un MEMORY.

Code :
35040 INK 3,13:INK 2,26:SYMBOL AFTER 32:LOAD "1.bin",(PEEK(&B736)+256*PEEK(&B737))
35050 CU=32:PEN 3:PAPER 2:FOR Y=1 TO 12:FOR X=1 TO 12:LOCATE 15+X,6+Y:PRINT CHR$(CU):CU=CU+1:NEXT:NEXT:PEN 1:PAPER 0:SYMBOL AFTER 32:SYMBOL AFTER 230:GOSUB 30:GOTO 35170


Le SYMBOL AFTER 32 permet de retourner aux caractères standards.
Par contre, la table n'est pas mémorisée, et il faudra donc la recharger.

Pour un rappel multiple, il suffit de rappeler la table à un autre endroit de la mémoire, puis de poker l'adresse dans la variable système en &B736 et &B737.
Un simple POKE de l'adresse d'origine réinitialisera la table UDG, mais PAS de SYMBOL AFTER SANS avoir changer cette adresse. (un MEMORY est indispensable dans ce cas!)

Cette matrice de caractères est utilisable comme des caractères et ne possède "que" deux couleurs, paramétrable avec PEN et PAPER.

On peut aussi, la placer au pixel près avec la fonction [TAG:TAGOFF] utilisée ainsi:
Code :
TAG:FOR Y=100 TO 100+12*16 STEP 8:FOR X=100 TO  100+12*16 :MOVE X,Y:PRINT CHR$(CU):CU=CU+1:NEXT:NEXT:TAGOFF


On peut aussi l'utiliser pour redéfinir des polices de caractère, puis les éditer dans "UDGs Factory", mais il faudra couper le header AMS du fichier BIN, et ainsi exploiter les données en mode RAW (natif binaire).

Je voulais l'inclure dedans, mais j'ai trouvé plus rapide de le faire sur Amstrad!
:)

Bon... je retourne à mes corrections...

Amusez-vous bien.

Auteur :  Xavier [ 28 Avr 2016, 03:51 ]
Sujet du message :  Re: [Tuto] Comment faire un dessin en UDG?

Nota:

Pour accélérer l'affichage, et gérer les pen et papers indépendament...
Il est possible d'utiliser les Windows (1-6)!
WINDOW#3,x1,x2,y1,y2
Où x1=colonne gauche,x2=colonne droite,y1=line haute,y2=ligne basse.

Code :
' INIT DEBUT DE PROGRAMME
10 C$="":FOR I=32 TO 255:C$=C$+CHR$(I):NEXT:H=12:L=12
20 WINDOW#3,15,26,6,18:PEN#3,3:PAPER#3,2
' AFFICHAGE
30 SYMBOL AFTER 32:LOAD "1.bin",(PEEK(&B736)+256*PEEK(&B737)):LOCATE#3,1,1:PRINT#3,LEFT$(C$,H*L);:SYMBOL AFTER 32

Attention, la table est réinitialisée, donc soit mettre le "symbol" en GOSUB, soit sauver la table originale avec un :
SAVE "ORIGINAL.BIN",b,",(PEEK(&B736)+256*PEEK(&B737)),NBCHAR*8
puis un,
LOAD "ORIGINAL.BIN",(PEEK(&B736)+256*PEEK(&B737))
à chaque affichage...
Un zonage plein écran est possible, car un SYMBOL (AFTER) ne réinitialise pas les caractères déjà affichés.
Have fun.

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