Palette split
3 participants
GFA :: Programmation :: Graphismes
Page 1 sur 1
Palette split
Palette split est une routine permettant d'avoir 2 palettes de 16 couleurs (32 couleurs) sur un même écran.
La variable idx% indique à la routine la ligne où elle doit afficher la deuxième palette.
Les sources sont [Vous devez être inscrit et connecté pour voir ce lien].
- Code:
'
' PALETTE SPLIT for GFABASIC
' (c) 2007 by Simon Sunnyboy / Paradize <marndt@asmsoftware.de>
' http://paradize.atari.org/
'
' This is a simple routine to use a second palette on screen.
' The machine code takes a pointer to 2 successive palettes
' and the scanline number on which the split shall occur.
'
' You can move the point of split in this demo program with
' CURSOR UP and CURSOR DOWN.
'
' FOR ST-LOW! Use at your own risk
'
' The following INLINE contains the machine code.
INLINE palsplitrout%,332
'
DIM pal&(31) ! buffer for the two palettes
' draw pattern on screen
CLS
FOR i%=0 TO 15
DEFFILL i%,2,8
PBOX 1+i%*20,0,18+i%*20,199
NEXT i%
'
ARRAYFILL pal&(),0
' prepare sample palettes
FOR i%=0 TO 15
pal&(i%)=WORD(i%) ! first palette (= blue gradient)
pal&(i%+16)=WORD(i%*256) ! second palette (= red gradient)
NEXT i%
'
LPOKE palsplitrout%+8,VARPTR(pal&(0)) ! tell routine address of new palettes
idx%=100
LPOKE palsplitrout%+12,idx% ! set number of scanlines to use for palette 1
'
~XBIOS(38,L:palsplitrout%) ! activate palette split in SUPERVISOR
key%=0
DO
VSYNC
IF INP?(2)
key%=INP(2)
IF key%=200 AND idx%>0
DEC idx%
ENDIF
IF key%=208 AND idx%<199
INC idx%
ENDIF
LPOKE palsplitrout%+12,idx% ! change line of palette split
ENDIF
LOOP UNTIL key%=27
~XBIOS(38,L:palsplitrout%+4) ! deactivate palette split
EDIT
La variable idx% indique à la routine la ligne où elle doit afficher la deuxième palette.
Les sources sont [Vous devez être inscrit et connecté pour voir ce lien].
Re: Palette split
Bonjour Shadow, je pense que c'est la routine que tu a utilisé dans Mousedit.
Comment fonctionne la rupture de palette en Gfa avec cette routine ?
En Omikron , j'ai un flash a peut près toute les 20 secondes sur quatre lignes.
Comment fonctionne la rupture de palette en Gfa avec cette routine ?
En Omikron , j'ai un flash a peut près toute les 20 secondes sur quatre lignes.
rockyone- Messages : 68
Date d'inscription : 14/01/2018
Localisation : Hauterives
Re: Palette split
Bonjour Rokyone,
En GFA c'est stable le seule hic c'est au niveau de la ligne de jonction des 2 palettes, il vaut mieux prévoir 3 lignes en couleur 0 (zéro)
J'ai même envisagé de faire un slide show avec les 2 palettes de 16 couleurs en laissant quelques lignes entre les 2 images et en déplaçant l'adresse de l'écran physique pour passer d'une image à l'autre.
Je dois vous avouer que j'ai eu et j'ai encore quelques petits problèmes mémoire dû à des soucis de santé (pas sur les ATARI hein mais dans la tête) ce qui explique ma disparition des écrans radar.
Comme ça va un peu mieux, je m'y remet lentement, pour preuve ce forum.
En GFA c'est stable le seule hic c'est au niveau de la ligne de jonction des 2 palettes, il vaut mieux prévoir 3 lignes en couleur 0 (zéro)
J'ai même envisagé de faire un slide show avec les 2 palettes de 16 couleurs en laissant quelques lignes entre les 2 images et en déplaçant l'adresse de l'écran physique pour passer d'une image à l'autre.
Je dois vous avouer que j'ai eu et j'ai encore quelques petits problèmes mémoire dû à des soucis de santé (pas sur les ATARI hein mais dans la tête) ce qui explique ma disparition des écrans radar.
Comme ça va un peu mieux, je m'y remet lentement, pour preuve ce forum.
Re: Palette split
les problèmes de santé je connais, 12 ans de soins en protocole de recherche.
Je te souhaite un bon rétablissement..., Faut y croire, et garder le morale. La vie est une merveille que je remercie chaque matin.
J'ai craignais que ce problème soit d'Omikron ou de moi....
4 lignes pour stabiliser le changement de palette avec Omikron
Un jour.......faudra que je me fasse une routine qui fonctionne dans les 3 résolutions.- si j'ai le courage
Je te souhaite un bon rétablissement..., Faut y croire, et garder le morale. La vie est une merveille que je remercie chaque matin.
J'ai craignais que ce problème soit d'Omikron ou de moi....
4 lignes pour stabiliser le changement de palette avec Omikron
Un jour.......faudra que je me fasse une routine qui fonctionne dans les 3 résolutions.- si j'ai le courage
rockyone- Messages : 68
Date d'inscription : 14/01/2018
Localisation : Hauterives
Re: Palette split
Au fait, j'ai détourné ta routine d'inversion écran horizontal (Je me souvient plus pour qui tu l'avais fait. mais je me souviens bien qu'en basic c’était plus rapide en GFA)
Donc , je l’utilise toujours cette routine dans mon convertisseur d'image, mais je n'ai plus ton fichier original pour le mettre comme source. ( Je n'aime pas utiliser des routines sans en fournir la source.)
Donc , je l’utilise toujours cette routine dans mon convertisseur d'image, mais je n'ai plus ton fichier original pour le mettre comme source. ( Je n'aime pas utiliser des routines sans en fournir la source.)
rockyone- Messages : 68
Date d'inscription : 14/01/2018
Localisation : Hauterives
Re: Palette split
Je dois certainement avoir ça dans un coin si elle est bien de moi, il faut (juste) que je la retrouve.
Compliqué quand il manque des cases
Par contre, je ne sais plus pour qui ou pourquoi j'aurais fais ça.
Compliqué quand il manque des cases
Par contre, je ne sais plus pour qui ou pourquoi j'aurais fais ça.
Re: Palette split
Bonjour Shadow
.. Je commençais à croire Omikron unique résponsable de l'instabilité, mais j'avais quand même un gros doutte...
A tu testé avec STeem 3.2 ?
Parce que moi, je le vois le flash il déborde même légèrement sur les grilles de dessins.
Sympas tes modèles de souris !
Amicalement
Rockyone
Shadow272 a écrit:
En GFA c'est stable ....
J.
.. Je commençais à croire Omikron unique résponsable de l'instabilité, mais j'avais quand même un gros doutte...
A tu testé avec STeem 3.2 ?
Parce que moi, je le vois le flash il déborde même légèrement sur les grilles de dessins.
Sympas tes modèles de souris !
Amicalement
Rockyone
rockyone- Messages : 68
Date d'inscription : 14/01/2018
Localisation : Hauterives
Re: Palette split
J’en ai eu un…
Pourrais-tu me tester un programme, juste pour savoir si le flash est visible sur un STE ?
Mais il faut au moins 1Mo de Ram
Je crains aussi qu’il y ais d’autres différances entre Steem et un STE.
Pourrais-tu me tester un programme, juste pour savoir si le flash est visible sur un STE ?
Mais il faut au moins 1Mo de Ram
Je crains aussi qu’il y ais d’autres différances entre Steem et un STE.
rockyone- Messages : 68
Date d'inscription : 14/01/2018
Localisation : Hauterives
Re: Palette split
ça fonctionne assez bien sur le STE, il faut juste avoir la couleur de fond identique pour les 2 palettes et laisser 4 à 6 ligne (+2 et -2) au niveau du changement de palette sans quoi ça flashe aussi.
Re: Palette split
C’est bien ainsi que je l’utilise…
rockyone- Messages : 68
Date d'inscription : 14/01/2018
Localisation : Hauterives
Re: Palette split
J'ai retrouvé une autre routine, plus facile à mettre en oeuvre.
Je teste quelques jours et je reviens vers vous.
Je teste quelques jours et je reviens vers vous.
Re: Palette split
Bonjour Shadow
As tu trouvé le temps de tester cette routine ?
As tu trouvé le temps de tester cette routine ?
rockyone- Messages : 68
Date d'inscription : 14/01/2018
Localisation : Hauterives
Re: Palette split
rockyone a écrit:Au fait, j'ai détourné ta routine d'inversion écran horizontal (Je me souvient plus pour qui tu l'avais fait. mais je me souviens bien qu'en basic c’était plus rapide en GFA)
Donc , je l’utilise toujours cette routine dans mon convertisseur d'image, mais je n'ai plus ton fichier original pour le mettre comme source. ( Je n'aime pas utiliser des routines sans en fournir la source.)
C'est ça ?
- Code:
CLS
RESERVE 1000
'
INLINE pic%,32034
image%=pic%+34
table.conversion%=MALLOC(256)
'
'
pointeur.table%=table.conversion%
FOR octet&=0 TO 255
FOR bit&=0 TO 7
bit.source!=BTST(octet&,bit&)
IF bit.source!=0
octet.dest&=BCLR(octet.dest&,7-bit&)
ELSE
octet.dest&=BSET(octet.dest&,7-bit&)
ENDIF
NEXT bit&
BYTE{pointeur.table%}=octet.dest&
INC pointeur.table%
NEXT octet&
'
'
BMOVE image%,XBIOS(2),32000
~XBIOS(6,L:pic%+2)
' CLS
'
'
'
time%=TIMER
'
source%=image%
dest%=XBIOS(2)+153
ligne&=0
REPEAT
'
pointeur.octet&=0
REPEAT
' plan 1
BYTE{dest%}=BYTE{ADD(table.conversion%,BYTE{source%})}
BYTE{SUB(dest%,1)}=BYTE{ADD(table.conversion%,BYTE{ADD(source%,1)})}
' plan 2
BYTE{ADD(dest%,2)}=BYTE{ADD(table.conversion%,BYTE{ADD(source%,2)})}
BYTE{ADD(dest%,1)}=BYTE{ADD(table.conversion%,BYTE{ADD(source%,3)})}
' plan 3
BYTE{ADD(dest%,4)}=BYTE{ADD(table.conversion%,BYTE{ADD(source%,4)})}
BYTE{ADD(dest%,3)}=BYTE{ADD(table.conversion%,BYTE{ADD(source%,5)})}
' plan 4
BYTE{ADD(dest%,6)}=BYTE{ADD(table.conversion%,BYTE{ADD(source%,6)})}
BYTE{ADD(dest%,5)}=BYTE{ADD(table.conversion%,BYTE{ADD(source%,7)})}
INC pointeur.octet&
ADD source%,8
SUB dest%,8
UNTIL pointeur.octet&=20
INC ligne&
ADD dest%,320
UNTIL ligne&=200
time=TIMER-time%
~INP(2)
CLS
PRINT time/200
~INP(2)
EDIT
chais plus pour qui je l'avais fait , c'était pas pour un jeu ?
Bref ça tournait quand même pas vite vite même compilé
tomchi- Messages : 52
Date d'inscription : 15/09/2018
Age : 49
Re: Palette split
C’est certainement ce fichier… mais je n’ais jamais eu ton source en GFA, mais la routine assembleur que tu avais fait après.
C’était un peu moins rapide en Omikron. , mais je ne sais plus aussi pour qui c'était.
C’était un peu moins rapide en Omikron. , mais je ne sais plus aussi pour qui c'était.
rockyone- Messages : 68
Date d'inscription : 14/01/2018
Localisation : Hauterives
Re: Palette split
J’ai du modifier la routine Palsplit pour mon convertisseur d’image (MI-9) car elle me créait des flashes avec le menu on/off et certaine images.
Donc, elle est plus rapide, le binaire plus petit, et pour moi elle fonctionne bien avec 4 lignes de rupture.
Par contre les adresses d’appel ont changés, et le nombres de ligne doit se trouver entre les deux palettes.
Donc, elle est plus rapide, le binaire plus petit, et pour moi elle fonctionne bien avec 4 lignes de rupture.
Par contre les adresses d’appel ont changés, et le nombres de ligne doit se trouver entre les deux palettes.
- Code:
;modifié par rockyone 02.11.2018
;
;ON + 28
;DATA +110
; 16 Words first pallet
; 1 Byte always equal to zero !
; 1 Byte line of split
; 16 Words pallet second pallet
;Off +132
;-----------------------------
;
; PALETTE SPLIT
; allow GFABASIC to do a single palette split after a given amount
; of scanlines
;
; (c) 2007 by Simon Sunnyboy / Paradize
; http://paradize.atari.org/
;
; USE AT YOUR OWN RISK!
;
;
;...............................;+28 ...init raster interrupt system.......
init_rasters:
movem.l d0-d7/a0-a6,-(SP)
lea.l storage(PC),a3 ; store interrupt context
move.l $70.w,(a3)+ ; save old VBL
move.l $120.w,(a3)+ ; save old Timer B
move.b $fffffa1b.w,(a3)+ ; tbcr
move.b $fffffa21.w,(a3)+ ; tbdr
move.b $fffffa07.w,(a3)+ ; iera
move.b $fffffa09.w,(a3)+ ; ierb
move.b $fffffa13.w,(a3)+ ; imra
;.......................................set interrupts....................
move.w #$2700,SR ; stop interrupts
lea.l rastercontrol_vbl(PC),a1
move.l a1,$70.w ; set new VBL
lea.l raster_timerb(PC),a1
move.l a1,$120.w ; set new Timer B
; enable Timer B
ori.b #1,$fffffa07.w ; iera enable Timer B
ori.b #1,$fffffa13.w ; imra mask Timer B
clr.b $fffffa1b.w ; tbcr stop Timer B
move.w #$2300,SR ; reenable interrupts
movem.l (SP)+,D0-d7/a0-A6
rts
;.......................................interface basic ...................
;
raster_address: dc.l 0 ;+110 point to buffer pallets
; ; 16 words the first pallet
; ; 1 byte alway equal to zero !
; ; 1 byte lines of split
; ; 16 words the second pallet
raster2: dc.l 0
storage: dc.l 0,0
dc.b 0,0,0,0,0
even
;...............................;+132 ...........disable splitscreen......
stop_rasters:
move.l a3,-(SP)
move.w #$2700,SR ; stop irq system
lea.l storage(PC),A3
move.l (A3)+,$70.w ; vbl restore old VBL
move.l (A3)+,$120.w ; timerb save old Timer B
move.b (A3)+,$fffffa1b.w ; tbcr restore MFP context
move.b (A3)+,$fffffa21.w ; tbdr
move.b (A3)+,$fffffa07.w ; iera
move.b (A3)+,$fffffa09.w ; ierb
move.b (A3)+,$fffffa13.w ; imra
move.w #$2300,SR ; reenable irqs
movea.l (SP)+,a3
rts
;.......................................new VBL to control the rasters..
rastercontrol_vbl:
move.l a3,-(sp)
move.l a4,-(sp)
lea.l raster_address(PC),a3
movea.l (a3),a3 ; first pallet
lea.l $ffff8240.w,a4
move.l (a3)+,(a4)+
move.l (a3)+,(a4)+
move.l (a3)+,(a4)+
move.l (a3)+,(a4)+
move.l (a3)+,(a4)+
move.l (a3)+,(a4)+
move.l (a3)+,(a4)+
move.l (a3)+,(a4)+
lea.l $fffffa1b.w,a4
clr.b (a4)
move.w (a3)+,$20-$1b(a4) ; tbdr number of lines
move.b #8,(a4) ; tbcr event count mode
move.l a3,raster2 ; second pallet
move.l (sp)+,a4
move.l (sp)+,a3
move.l storage(PC),-(SP) ; push old VBL address onto stack
rts ; and jump to it
;........................................screensplit handling Timer B ISR
raster_timerb:
move.l a3,-(sp)
move.l a4,-(sp)
move.l raster2,a3 ; set new color from table
lea.l $ffff8240.w,a4
move.l (a3)+,(a4)+
move.l (a3)+,(a4)+
move.l (a3)+,(a4)+
move.l (a3)+,(a4)+
move.l (a3)+,(a4)+
move.l (a3)+,(a4)+
move.l (a3)+,(a4)+
move.l (a3)+,(a4)+
bclr.b #0,$fffffa0f.w ; isra aknowledge Timer B
move.l (sp)+,a4
move.l (sp)+,a3
rte
END
;------------------------------------------------------------------------
rockyone- Messages : 68
Date d'inscription : 14/01/2018
Localisation : Hauterives
GFA :: Programmation :: Graphismes
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|