Routine sauvegarde écran T07/70
Modérateurs : Papy.G, fneck, Carl
Routine sauvegarde écran T07/70
Bonjour,
Plutôt que de réinventer la roue, je cherche une routine (assembleur) utilisable en BASIC 128 sur TO7/70 pour sauvegarder sur disquette et restaurer la mémoire écran d'un TO7/70, sauvegarde optimisée/compressée pour prendre le moins de place et de temps possible. Il faut que l'on puisse spécifier le coin supérieur gauche et inférieur droit pour une sauvegarde partielle.
En BASIC 128 on peut faire un GET(X1,Y1)-(X2,Y2),M%(200) par exemple, puis sauvegarder le tableau M%, mais pas sur que ce soit efficace.
j'ai trouvé une routine dans TEO N°1, mais je ne pense pas qu'elle soit utilisable sous BASIC 128, vu que les adresses d'implantation ne sont surement pas les bonnes. Il n'y a pas le listing assembleur...
Si vous avez ça dans un coin... Merci d'avance !
Plutôt que de réinventer la roue, je cherche une routine (assembleur) utilisable en BASIC 128 sur TO7/70 pour sauvegarder sur disquette et restaurer la mémoire écran d'un TO7/70, sauvegarde optimisée/compressée pour prendre le moins de place et de temps possible. Il faut que l'on puisse spécifier le coin supérieur gauche et inférieur droit pour une sauvegarde partielle.
En BASIC 128 on peut faire un GET(X1,Y1)-(X2,Y2),M%(200) par exemple, puis sauvegarder le tableau M%, mais pas sur que ce soit efficace.
j'ai trouvé une routine dans TEO N°1, mais je ne pense pas qu'elle soit utilisable sous BASIC 128, vu que les adresses d'implantation ne sont surement pas les bonnes. Il n'y a pas le listing assembleur...
Si vous avez ça dans un coin... Merci d'avance !
-
- Messages : 7924
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Routine sauvegarde écran T07/70
Si tu as le basic128, l'idéal est d'utiliser PUT/GET et SAVEP, LOADP pour afficher/capturer et sauver/charger un fichier MAP. La compression n'est pas mauvaise dans le fond et c'est fourni en standard. Les performances ne sont pas trop mauvaises si la zone a manipuler n'est pas très grande. Il me semble qu'un italien dont j'ai oublié le pseudo (qu'il m'excuse) utilise ces commandes pour gérer le sprites d'un jeu très sympa qu'il avait fait en basic (un jeu avec un loup qui avance et sur lequel il faut tirer des flèches).
Je crois même qu'il s'amuse à faire des sprites encore plus animés avec ces commandes, et ca rends pas mal:
test de vitesse:
Je crois même qu'il s'amuse à faire des sprites encore plus animés avec ces commandes, et ca rends pas mal:
test de vitesse:
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: Routine sauvegarde écran T07/70
Tout simplement! J'aurais du lire la doc du BASIC 128 jusqu'au bout .
Ca marche, c'est pas ultra rapide, mais ça marche plutôt bien.
JV
Ca marche, c'est pas ultra rapide, mais ça marche plutôt bien.
JV
-
- Messages : 7924
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Routine sauvegarde écran T07/70
En rapide sur thomson il faut faire pleins de compromis pas toujours idéaux. Sinon il y a des trucs comme Cartoon-Maker pour gérer les sprites en basic, mais je n'ai jamais été convaincu du truc.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: Routine sauvegarde écran T07/70
Je n'ai pas besoin que ce soit très rapide après tout. je sauvegarde un écran pour le réafficher ultérieurement et tracer par dessus. c'est juste que l'on voit l'écran se redessiner de bas en haut au PUT. je ne sais pas si il existe un moyen de bloquer le refresh de l'écran pendant que le PUT se termine.
Après, je pensais à éventuellement afficher plusieurs écrans les un après les autres pour visualiser des changements; inutile d'avoir plusieurs FPS non plus, c'est pas un jeu. Je vais me satisfaire de cette solution GET/PUT pour l'instant.
Idéalement, il faudrait une routine pour sauvegarder l'écran dans une autre portion de la mémoire, faire le SAVEM, ou LOADM et recopie dans l'autre sens entre 2 VSYNC. J'imagine que c'est déjà des choses qui existent.
JV
Après, je pensais à éventuellement afficher plusieurs écrans les un après les autres pour visualiser des changements; inutile d'avoir plusieurs FPS non plus, c'est pas un jeu. Je vais me satisfaire de cette solution GET/PUT pour l'instant.
Idéalement, il faudrait une routine pour sauvegarder l'écran dans une autre portion de la mémoire, faire le SAVEM, ou LOADM et recopie dans l'autre sens entre 2 VSYNC. J'imagine que c'est déjà des choses qui existent.
JV
-
- Messages : 7924
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Routine sauvegarde écran T07/70
Ok ce que tu veux c'est sauvegarder le plus rapidement le contenu de la RAM vidéo dans l'une des banques de 16ko que le basic 128 te permet de réserver. Tu ne parles pas de la compression, il n'y en a plus besoin?
Par plus rapidement, c'est pour pouvoir faire la course avec le rayon cathodique pour que l'affichage progressif ne se voit pas je suppose. C'est extrêmement difficile sur Thomson dont le CPU n'est pas forcément un foudre de guerre. En utilisant PULS et PSHU pour faire les lecture/écriture le plus rapidement possible et en minimisant le nb de comparaisons, le code ci-dessous (dans la routine CPY) fait la copie de 21 octets en 80 cycles. Les 16000 octets de la ram vidéo à copier nécessitent 762 tours de boucle, soit au total d'environ 61ms. On en est rendu à plus de 3 VSYNC. L'affichage se verra forcément, et comme on peut pas travailler sur la mémoire forme et fond en même temps, il y aura plein d'artefacts moches sur au moins une ou deux images consécutives.
Quand je dis que c'est difficile, je crois que c'est impossible sur les machines de premières génération (et on ne perds pas de temps à compresser quoi que ce soit). Sur les machines de seconde générations le flip d'écran peut se faire matériellement, par contre ca condamne une bonne partie de l'usage du basic qui ne tournera plus qu'avec 16ko de libres au mieux.
Par plus rapidement, c'est pour pouvoir faire la course avec le rayon cathodique pour que l'affichage progressif ne se voit pas je suppose. C'est extrêmement difficile sur Thomson dont le CPU n'est pas forcément un foudre de guerre. En utilisant PULS et PSHU pour faire les lecture/écriture le plus rapidement possible et en minimisant le nb de comparaisons, le code ci-dessous (dans la routine CPY) fait la copie de 21 octets en 80 cycles. Les 16000 octets de la ram vidéo à copier nécessitent 762 tours de boucle, soit au total d'environ 61ms. On en est rendu à plus de 3 VSYNC. L'affichage se verra forcément, et comme on peut pas travailler sur la mémoire forme et fond en même temps, il y aura plein d'artefacts moches sur au moins une ou deux images consécutives.
Code : Tout sélectionner
2 9FCC ORG $9FCC
3 9FCC BACKUP
4 5+10 9FCC 34 7F PSHS D,X,Y,DP,U,CC ; sauvegarde de tous les registres utilisés
5 7 9FCE 10FF 9FDE STS bak ; sauvegarde registre pile
6 2 9FD2 1A 50 ORCC #$50 ; pas d'interruptions svp
7 4 9FD4 10CE E000 LDS #$E000 ; sauvegarde en descendant
8 7 9FD8 8D 08 BSR CPY
9 7 9FDA 8D 06 BSR CPY
10 4 9FDC 10CE 0000 LDS #0 ; recup registre pile
11 9FDE bak set *-2
12 5+12 9FE0 35 FF PULS D,X,Y,DP,U,CC,PC ; recup des registres utilisés et retour
13 9FE2 CPY
14 3 9FE2 CE 4000 LDU #$4000 ; debut ram vidéo
15 9FE5 loop
16 5+7 9FE5 37 3E PULU D,X,Y,DP ; copie de 3*7 = 21 octets
17 5+7 9FE7 34 3E PSHS D,X,Y,DP ; (1/2 ligne horiz)
18 5+7 9FE9 37 3E PULU D,X,Y,DP ; sans comparaisons pour
19 5+7 9FEB 34 3E PSHS D,X,Y,DP ; aller au plus vite.
20 5+7 9FED 37 3E PULU D,X,Y,DP ; On copie 1 octet de trop,
21 5+7 9FEF 34 3E PSHS D,X,Y,DP ; mais tant pis. C'est le
22 5 9FF1 1183 5F40 CMPU #$5F40 ; meilleurs compromis
23 3 9FF5 25 EE BCS loop
24 2 9FF7 86 01 LDA #1 ; bascule forme/fond
25 5 9FF9 B8 E7C3 EORA $E7C3
26 5 9FFC B7 E7C3 STA $E7C3
27 5 9FFF 39 RTS
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: Routine sauvegarde écran T07/70
Merci _SAM_ c'est très instructif et bien expliqué ! Au mieux donc 1/3 d'image par VSYNC. La compression c'est juste pour le disque, ça peut être fait à posteriori.
On a moyen de gérer le VSYNc (interruption, compteur) sur ces machines ?
JV
On a moyen de gérer le VSYNc (interruption, compteur) sur ces machines ?
JV
-
- Messages : 7924
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Routine sauvegarde écran T07/70
Il n'y a pas d'interruption lors du retour du faisceau d'electron. Par contre il y a un bit qui change de statut pendant cette phase de l'affichage à une adresse précise. Il faut alors caller une interruption timer juste après... Je crois cela très difficile à faire car personne ne l'a encore fait à ma connaissance. Les trucs de Préhisto qui se synchronisent sur l'affichage se font exclusivement en comptant les cycles (les interruptions timer sont très lentes).
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: Routine sauvegarde écran T07/70
Si l'on prêt à travailler en deux couleurs donc juste avec la mémoire forme, la routine de Sam est assez rapide pour faire des animations plein écran.
Asic512
Re: Routine sauvegarde écran T07/70
salut, j'ai fait la démo du jeu en BASIC du loup et les tests d'animation avec GET et PUT, ces instructions sont très pratiques et rapides, il est aussi possible d'obtenir la transparence des sprites grâce à CONSOLE et de conserver les graphismes de fond même si la vitesse en souffre.
Re: Routine sauvegarde écran T07/70
Elle est réussie cette adaptation du jeu d'arcade Pooyan.
Cependant, même le jeu original de 1982 pouvait gérer plus de sprites. Cà risque d'être difficile d'avoir la même vitesse avec tous les sprites de l'original; peut-être en assembleur sur TO8 ?
Cependant, même le jeu original de 1982 pouvait gérer plus de sprites. Cà risque d'être difficile d'avoir la même vitesse avec tous les sprites de l'original; peut-être en assembleur sur TO8 ?
Recherche: cartouches Mattel Intellivision Imagic (loose)
Star Jacker et Lode Runner sur Yeno/SEGA SC-3000
Star Jacker et Lode Runner sur Yeno/SEGA SC-3000