================================================================================ SPRITECREATOR -=VG5000=- ================================================================================ Sprite Creator est un programme d'aide à la création de caractères graphiques "Sprite" pour la machine VG5000 afin de préparer, par exemple, les graphiques nécessaires à vos jeux ou à vos utilitaires. Fini les calculs fastidieux en hexadécimal et la matrice dessinée sur un cahier à spirale! Cet utilitaire permet de créer les "Sprites" directement à l'écran, dans une grande matrice, grâce aux touches de direction et à la touche Espace. Le résultat est immédiatement visible avec l'affichage du caractère graphique nouvellement crée, seul, agencé en ligne, en colonne et en groupe. Il est également affiché dans les couleurs disponible sur le VG5000, sur fond blanc et sur fond noir. Touche ESC pour terminer l'exécution du programme. Le programme n'est pas excessivement rapide lorsqu'il est exécuté. Pour en améliorer les performances, il existe deux possibilités: - Sur l'émulateur VG5000, augmenter la vitesse d'horloge du processeur virtuel. - Ou, à la ligne 4010 du programme BASIC, changer la valeur de la variable F à 0 au lieu de 1. Dans ce dernier cas, l'affichage du caractère graphique créé ne se fait qu'en un seul exemplaire à l'écran. La petite astuce de ce programme consiste en l'écriture dynamique de la valeur de définition du caractère graphique, la chaine hexadécimale, directement en mémoire grâce à l'instruction POKE. En effet, à ma connaissance, il n'est pas possible d'utiliser une variable chaine dans les instructions SETET et SETEG, comme par exemple: SETET 127,A$ ou A$ contiendrai les 20 codes hexadécimaux. On écrit donc cette chaine de codes hexadécimaux dans la mémoire vive, à l'endroit ou est stockée l'instruction SETEG 127 de la ligne 1001. Il est possible de s'en rendre compte à l'interruption de l'exécution du programme, en listant la ligne 1001, la définition du programme à directement été modifiée dans le code. L'adresse de début du programme BASIC dans la mémoire du VG5000 est &"4A02" en hexadécimal, soit 18946 en décimal (variable SB définie en ligne 4027). L'adresse du début de la chaine de codes hexadécimaux de l'instruction SETEG en ligne 1001 commence 15 octets plus loin (variable S définie en ligne 4028). *** NOTICE IMPORTANTE *** Du fait de la particularité de ce programme qui écrit dynamiquement dans la mémoire et transforme le code BASIC, il est primordiale de ne pas modifier les lignes 1000 et 1001 et de ne pas intercaler de code avant ou entre ces lignes. Version originale écrite en 1986. Guillaume Ramey ================================================================================ 1000 GOTO 1100 1001 SETEG 127,"00000000000000000000" 1002 RETURN 1100 REM ========== 1101 REM PROGRAMME SPRITE CREATOR 1102 REM VG5000 1103 REM @1986 GUILLAUME RAMEY 1110 CLEAR 200 1111 GOSUB 4000:REM INITIALISATION 1112 GOSUB 4100:REM TITRES 1113 GOSUB 4200:REM TABLEAU 1114 GOSUB 2600:REM PRINT CURSOR 1115 GOSUB 3000:REM RECALC SPRITE 1116 GOSUB 3100:REM PRINT SPRITE 1200 REM ========== 1201 REM BOUCLE PRINCIPALE 1210 IF ACTION(IN)=1 THEN GOSUB 2000 1211 IF STICKX(IN)=1 THEN GOSUB 2100 1212 IF STICKX(IN)=255 THEN GOSUB 2200 1213 IF STICKY(IN)=1 THEN GOSUB 2300 1214 IF STICKY(IN)=255 THEN GOSUB 2400 1215 GOTO 1200 2000 REM ========== 2001 REM TOUCHE ESPACE 2010 CV=SPRITE(CX-SX,CY-SY) 2011 IF CV=0 THEN NV=1 2012 IF CV=1 THEN NV=0 2013 SP(CX-SX,CY-SY)=NV 2014 GOSUB 2600:REM PRINT CURSOR 2015 GOSUB 3000:REM RECALC SPRITE 2016 GOSUB 3100:REM PRINT SPRITE 2017 RETURN 2100 REM ========== 2101 REM DROITE 2110 IF CX>=SX+8 THEN RETURN 2111 DX=1:DY=0:GOSUB 2500 2112 RETURN 2200 REM ========== 2201 REM GAUCHE 2210 IF CX<=SX+1 THEN RETURN 2211 DX=-1:DY=0:GOSUB 2500 2212 RETURN 2300 REM ========== 2301 REM BAS 2310 IF CY>=SY+10 THEN RETURN 2311 DX=0:DY=1:GOSUB 2500 2312 RETURN 2400 REM ========== 2401 REM HAUT 2410 IF CY<=SY+1 THEN RETURN 2411 DX=0:DY=-1:GOSUB 2500 2412 RETURN 2500 REM ========== 2501 REM PRINT PIXEL 2510 CURSORX CX:CURSORY CY 2511 CV=SP(CX-SX,CY-SY) 2512 ET 0,0,0 2513 IF CV=0 THEN PRINT PV$ 2514 IF CV=1 THEN PRINT PP$ 2520 REM MOVE CURSOR 2521 CX=CX+DX 2522 CY=CY+DY 2600 REM ========== 2601 REM PRINT CURSOR 2610 CURSORX CX:CURSORY CY 2611 CV=SP(CX-SX,CY-SY) 2612 ET 1,0,0 2613 IF CV=0 THEN PRINT CV$ 2614 IF CV=1 THEN PRINT CP$ 2615 TX 0,0,0 2616 RETURN 3000 REM ========== 3001 REM RECALC SPRITE 3010 OP=0 3011 IF CX-SX<=4 THEN RS=0:CS=0 3012 IF CX-SX>=5 THEN RS=4:CS=1 3013 FOR I=0 TO 3 3014 CV=SP(SX+I+RS,CY-SY) 3015 PU=2^(3-I) 3016 OP=OP+PU*CV 3017 NEXT I 3018 P=((CY-SY)*2)-1+CS 3019 NS$="" 3020 L$=MID$(S$,1,P-1) 3021 R$=MID$(S$,P+1,20-P) 3022 NS$=L$+H$(OP)+R$ 3023 CURSORX SX+1:CURSORY SY+12 3024 PRINT "SETEG 127: "; 3025 PRINT NS$ 3026 S$=NS$ 3030 REM POKE SETEG 3031 A=SB+S-1+P 3032 V=ASC(H$(OP)) 3033 POKE A,V 3034 RETURN 3100 REM ========== 3101 REM PRINT SPRITE 3110 GOSUB 1001:REM SETEG DEF 3111 Z$=CHR$(127) 3112 EG 0,7,0 3113 CURSORX AX:CURSORY AY+1 3114 PRINT Z$ 3115 IF F=0 THEN RETURN 3116 CURSORX AX+2:CURSORY AY+1 3117 PRINT Z$;Z$;Z$;Z$;Z$;Z$;Z$ 3118 CURSORX AX+10:CURSORY AY 3119 PRINT Z$;" ";Z$;Z$;Z$ 3120 CURSORX AX+10:CURSORY AY+1 3121 PRINT Z$;" ";Z$;Z$;Z$ 3122 CURSORX AX+10:CURSORY AY+2 3123 PRINT Z$;" ";Z$;Z$;Z$ 3124 FOR I=0 TO 7 3125 CURSORX AX+I*2:CURSORY AY+4 3126 EG I,7,0 3127 PRINT Z$ 3128 CURSORX AX+I*2:CURSORY AY+6 3129 EG I,0,0 3130 PRINT Z$; 3131 EG I,7,0 3132 PRINT " " 3133 NEXT I 3134 TX 0,0,0 3135 RETURN 4000 REM ========== 4001 REM INITIALISATIONS 4010 F=1 4011 SX=1:SY=4 4012 AX=SX+14:AY=SY+2 4013 DIM SP(8,10) 4014 DATA 0,1,2,3,4,5,6,7 4015 DATA 8,9,A,B,C,D,E,F 4016 DIM H$(16) 4017 FOR I=0 TO 15 4018 READ H$(I) 4019 NEXT I 4020 IN=2 4021 SETET 100,"FF8181818181818181FF" 4022 SETET 101,"007E7E7E7E7E7E7E7E00" 4023 CP$=CHR$(101) 4024 CV$=CHR$(100) 4025 PP$=CHR$(101) 4026 PV$=CHR$(100) 4027 SB=&"4A02" 4028 S=15 4029 S$="" 4030 CX=SX+1:CY=SY+1 4031 FOR I=1 TO 20 4032 A=SB+S+I-1 4033 POKE A,ASC("0") 4034 V=PEEK(A) 4035 S$=S$+CHR$(V) 4036 V=PEEK(A) 4037 NEXT I 4038 RETURN 4100 REM ========== 4101 REM TITRES 4110 INIT 7,7 4111 FOR I=2 TO 32 4112 CURSORX I:CURSORY 1 4113 PRINT CHR$(96) 4114 CURSORX I:CURSORY 3 4115 PRINT CHR$(96) 4116 CURSORX I:CURSORY 18 4117 PRINT CHR$(96) 4118 NEXT I 4119 CURSORX 2:CURSORY 2 4120 PRINT "SPRITE CREATOR"; 4121 PRINT " -=VG5000=-" 4122 CURSORX 2:CURSORY 19 4123 PRINT "@1986-Guillaume Ramey" 4124 RETURN 4200 REM ========== 4201 REM DESSIN DU TABLEAU 4210 ET 0,0,0 4211 FOR X=1 TO 8 4212 FOR Y=1 TO 10 4213 CURSORX SX+X: CURSORY SY+Y 4214 PRINT PV$ 4215 NEXT Y 4216 NEXT X 4217 RETURN ================================================================================