[riscosfr] Re: Resources C++

  • From: Jean-Michel <jmc.bruck@xxxxxxxxx>
  • To: riscosfr@xxxxxxxxxxxxx
  • Date: Tue, 09 Jan 2018 18:34:14 +0100

In message <2a959901b4cf2b47f351b86062e58540@xxxxxxxxxxxxxxxxxxxxxxxxx 
t>
          Etienne SOBOLE <e.sobole@xxxxxxxxxxxxx> wrote:

VDU22 est legacy, ancien...

https://www.riscosopen.org/wiki/documentation/show/OS_ScreenMode

Ok Merci, ça devient plus clair.

OS_ScreenMode
- R0 = 0, 
- R1 = Mode Specifier

Où "mode Specifier" est un pointeur sur un bloc qui contient
[+0] Mode Selector Flags. Là on met 1
[+4] X resolution (pixels). Là on met 1920
[+8] Y resolution (pixels). Là on met 1080
[+12] Log2BPP value. Là on met 32 car on veut du 32 bits par pixel
C'est 5 Log(base2 de 32
Extrait stronghelp
     Pixel Depths
     #Parent Wimp_ModeSelect
     Value Depth
     #line
     0     1 bpp
     1     2 bpp
     2     4 bpp
     3     8 bpp
     4   16 bpp
     5   32 bpp
[+16] Frame rate. Là on met 50 (ou 60 ou -1 je sais pas trop)
Les écrans actuels sont plutôt à 60Hz
[+20] Mode Variable Numbers. Là on veut pas specifier quoi que ce soit
donc on
met -1

Donc Si c'est bien cà, en C ca donne

_kernel_swi_regs regs;
int swiMode[ ] = {1, 1920, 1080, 32, 50, -1};
static int swiMode[ ] = {1, 1920, 1080, 32, 50, -1}; //Pour le 
compilateur.

regs.r[0] = 0;
regs.r[1] = swiMode;
regs.r[1] = (int) swiMode; // pour le cast pointeur avec un registre

_kernel_swi(OS_ScreenMode, &regs, &regs)
Pas obligatoire, mais conseillé surtout pour la mise au point.
Risc OS retourne une erreur si il y a un problème.
Donc il vaut mieux déclarer:
_kernel_oserror *erreur;
modifier:
if ((erreur = _kernel_swi(OS_ScreenMode, &regs, &regs)) !NULL)
    printf("err num: %d, err message: %s", erreur->errnum, 
erreur->message);

Ca devrait marcher....
Mais on dirait bien que le ciel s‘éclaircit :)
Il ne reste qu'à tester :)
-
bon courage.

-- 
Jean-Michel

Other related posts: