90

yamazaky :
eek C génial. Pour la modif du firmware, c une modif pour ke tu puisse voir tes erreurs ou c une modif pour pouvoir lancer els roms???


En fait ça sert à 3 choses :
- voir mes erreurs
- charger les roms > 4 Mo
- intercepter les fonctions SWI des programmes GBA

A moins que je trouve un moyen de faire autrement pour les SWI, le changement de firmware (de bios plus précisément) va être indispensable pour la plupart des jeux.

91

-

92

-

93

attends, mais on pourra charger les roms >4mo?? mais c ENORME!! bon courage vieux! c vraiment un truc de ouf!

94

cool. Mais sinon (puisqu'à apparament les 3/4 des possesseurs de gp vont changer de firmware), le nouveau ne posera pas de prob d'incompatibilité avec certains prog? J'avais crus voir ça. Sinon je m'y connait vraiment pas en bios (j'ai jamais flashé): la présentation est différente? Ya d'autres différences?
avatar
A fps shooter or a spy like Solid the killer?
Find the answer and you'll be a winner.

95

sltn franchement je sens que ca va déchirer, mais, j'ai une question, as-tu essayé de faire lancer une rom commerciale ?
si oui, qu'est ce que ca a donné ?
en tous je te souhaite de bonnes continuations pour ce travail de TITAN !!!!!!

(tous en coeur: HIP HIP HIP...HOURRA !!)

dehors

96

gplove
: cool. Mais sinon (puisqu'à apparament les 3/4 des possesseurs de gp vont changer de firmware), le nouveau ne posera pas de prob d'incompatibilité avec certains prog? J'avais crus voir ça. Sinon je m'y connait vraiment pas en bios (j'ai jamais flashé): la présentation est différente? Ya d'autres différences?


Non, aucune différence. Je ne modifie pas des fonctions qui existeraient déjà, j'en ajoute.

Plus précisement, au début du bios se trouvent des vecteurs d'interruption, ça permet de dire au processeur où aller si une exception (ou une interruption) se produit. Comme le bios d'origine n'utilise pas beaucoup la MMU, les vecteurs d'interruption de la MMU font resetter la console. Ce sont ces vecteurs que je redirige.

Je pense que la réponse courte te suffisais...

97

squaremania :
sltn franchement je sens que ca va déchirer, mais, j'ai une question, as-tu essayé de faire lancer une rom commerciale ?
si oui, qu'est ce que ca a donné ?
en tous je te souhaite de bonnes continuations pour ce travail de TITAN !!!!!!

(tous en coeur: HIP HIP HIP...HOURRA !!)

dehors


Non mais pour l'instant j'ai déjà du mal à trouver des démos qui marchent, alors j'ai pas vraiment essayé.
Et puis surtout une rom commerciale va surtout utiliser les modes vidéo 0,1 et 2, (ceux où ils y a plein de sprites dans tous les sens, et où je vais galérer à tout programmer, sniff) et je les ai pas encore fait.

98

[cite]enf65 :
gplove
: Je pense que la réponse courte te suffisais...

lol c'est sur.
avatar
A fps shooter or a spy like Solid the killer?
Find the answer and you'll be a winner.

99

oh mince alors, si tu reussis a crée ton emulateur GBA, franchement GG, trop fort quoi, je me vois deja entrain de jouer a final fantasy tactic advance lol
Beast Master Abused

100

hmmm

Pour SWI bon j'ai pas vue actuellement la construction de ton code mais un
BL NOM_DE_LA_FONCTION_C_QUI_CORRESPOND_AU BIOS

est tout a fait possible et après tu reviens à l'adresse de depart (prealablement stocker bien sur).

Une autre solution serait de mettre ton bios en memoire (1 chargement) et la rom derrière (2eme chargement)
Ensuite tu changes juste les adresses des SWI.

Enfin bon je te fais confiance tu a l'air d'avoir bien mieux reflechie a laquestion wink
Le site de reference : http://www.angelsoftware.org

101

ThunderZ :
Pour SWI bon j'ai pas vue actuellement la construction de ton code mais un
BL NOM_DE_LA_FONCTION_C_QUI_CORRESPOND_AU BIOS

est tout a fait possible et après tu reviens à l'adresse de depart (prealablement stocker bien sur).

Une autre solution serait de mettre ton bios en memoire (1 chargement) et la rom derrière (2eme chargement)
Ensuite tu changes juste les adresses des SWI.


C'est pas bête, je pense que je vais faire comme ça. Par contre je crois que les BL ne peuvent appeler que des fonctions pas trop éloignées, donc il faut que je vérifie que 0x0c0????? et 0x08?????? sont pas trop éloignés. Sinon je peux faire un mélange de tes deux solutions, comme ça je suis sûr que les fonctions ne seront pas loin du code.

102

Juste une question à propos de BL : si on fait un BL et qu'on est en THUMB, la procédure sera appelée en THUMB, non ? Faudrait que je programme chaque fonction du bios en ARM et en THUMB, alors.

103

Le THUMB et ARM sont surtout au niveau des modes du proc, mais n'oublie pas que les DEUX proc font du THUMB et du ARM pur.

Le ARM pur est plus sympas et pour etre franc je n'ai jamais employer le thumb sur GP32.

Pour les saut je te conseille le chapitre 3-5 et 3-7 de la doc reference sur le proc la doc S3C2400X de chez Samsung (je peux te l'envoyer si tu l'as pas mais ca m'etonnerais wink).

Dans le cas de la double ecriture des fonctions bios (c'est faisaible et plus long et surtout pas forcement utile a mon humble avis) je te conseille plutot l'instruction BX
qui te permettra de faire un saut avec condition (set du bon flag) pour avoir ton code soit en Thumb soit en ARM.

Voily voilou
Le site de reference : http://www.angelsoftware.org

104

2 cracks qui se rencontrent ^^

105

tu l'as dit bouffi.
avatar
A fps shooter or a spy like Solid the killer?
Find the answer and you'll be a winner.

106

oula ma fallu 10 min pour tout lire (enfin essayer de capter un truc confus ) alors en gros çà avance bien ton emu bravo boing sinon c terrible te explication jpe faire style ke jai compris maintenant
re bravo

107

ThunderZ :
Le ARM pur est plus sympas et pour etre franc je n'ai jamais employer le thumb sur GP32.


Tout à fait d'accord, mais sur GBA les instructions THUMB sont utilisées plus souvent que sur gp vu que les cartouches sont lues en 16 bits, et donc il faudrait à chaque fois deux lectures pour executer une instruction ARM.
En fait le problème qui se posait, c'était juste que si je remplace les SWI par des BL, il faut que je fasse gaffe car SWI change tout seul le mode du processeur en ARM, alors que BL ne le fait pas, et on risque de lancer une fonction écrite en ARM en mode THUMB.
C'est pour ça que je disait que je devrais écrire toutes les fonctions en ARM et en THUMB.
Maintenant il est vrai que rien ne m'empêche de juste écrire dans le corps de la fonction THUMB un BX vers la fonction ARM équivalente.

De toute façon pour l'instant avec la petite modif de bios que j'ai fait, je peux me passer de tout ça, mais j'y reviendrai plus tard.

J'aurais encore une autre question à poser à propos des timers :

Il faut que je provoque un timer à toute les lignes du LCD afin de mettre à jour les registres vidéo de la GBA, malheureusement GpTimerOptSet n'a pas l'air d'apprécier qu'on mette trop de "ticks per second", du coup je mets à jour VCOUNT que toutes les 32 lignes, ce qui peut parfois poser des problèmes.
Est-ce qu'il y aurait moyen de dépasser cette limite ? Est-ce qu'il y aurait déjà quelqu'un qui ait fait une fonction pour configurer les timers ?

Au pire j'ai une source qui configure les timers sans utiliser le SDK (http://www.deadcoderssociety.tk/ un programme qui émule du VSYNC). En lisant un peu la doc de samsung, je dois pouvoir configurer les timers "à la barbare" wink

108

Alors je te propose bien mieux que ca et surtout mega plus precis, tu attaques directement le LCD. wink

........................

/* LCD CONTROLLER */
#define rLCDCON1 (*(volatile unsigned *)0x14a00000)
#define rLCDCON2 (*(volatile unsigned *)0x14a00004)
#define rLCDCON3 (*(volatile unsigned *)0x14a00008)
#define rLCDCON4 (*(volatile unsigned *)0x14a0000c)
#define rLCDCON5 (*(volatile unsigned *)0x14a00010)
#define rLCDSADDR1 (*(volatile unsigned *)0x14a00014)
#define rLCDSADDR2 (*(volatile unsigned *)0x14a00018)
#define rLCDSADDR3 (*(volatile unsigned *)0x14a0001c)
#define rREDLUT (*(volatile unsigned *)0x14a00020)
#define rGREENLUT (*(volatile unsigned *)0x14a00024)
#define rBLUELUT (*(volatile unsigned *)0x14a00028)
#define rDP1_2 (*(volatile unsigned *)0x14a0002c)
#define rDP4_7 (*(volatile unsigned *)0x14a00030)
#define rDP3_5 (*(volatile unsigned *)0x14a00034)
#define rDP2_3 (*(volatile unsigned *)0x14a00038)
#define rDP5_7 (*(volatile unsigned *)0x14a0003c)
#define rDP3_4 (*(volatile unsigned *)0x14a00040)
#define rDP4_5 (*(volatile unsigned *)0x14a00044)
#define rDP6_7 (*(volatile unsigned *)0x14a00048)
#define rDITHMODE (*(volatile unsigned *)0x14a0004c)
#define rTPAL (*(volatile unsigned *)0x14a00050)
#define PALETTE (0x14a00400)//SJS

........................

typedef union
{
struct {
unsigned ENVID:1; // LCD video output and the logic 1=enable/0=disable.
unsigned BPPMODE:4; // 1011 = 8 bpp for TFT, 1100 = 16 bpp for TFT, 1110 = 16 bpp TFT skipmode
unsigned PNRMODE:2; // TFT: 3
unsigned MMODE:1; // This bit determines the toggle rate of the VM. 0 = Each Frame, 1 = The rate defined by the MVAL
unsigned CLKVAL:10; // TFT: VCLK = HCLK / [(CLKVAL+1) x 2] (CLKVAL >= 1)
unsigned LINECNT:10; // (read only) These bits provide the status of the line counter. Down count from LINEVAL to 0
} reg;
unsigned long all;
} LCDCON1;

typedef union {
struct {
unsigned VSPW:6; // TFT: Vertical sync pulse width determines the VSYNC pulse's high level width by counting the number of inactive lines.
unsigned VFPD:8; // TFT: Vertical front porch is the number of inactive lines at the end of a frame, before vertical synchronization period.
unsigned LINEVAL:10; // TFT/STN: These bits determine the vertical size of LCD panel.
unsigned VBPD:8; // TFT: Vertical back porch is the number of inactive lines at the start of a frame, after vertical synchronization period.
} reg;
unsigned long all;
} LCDCON2;

typedef union {
struct {
unsigned HFPD:8; // TFT: Horizontal front porch is the number of VCLK periods between the end of active data and the rising edge of HSYNC.
unsigned HOZVAL:11; // TFT/STN: These bits determine the horizontal size of LCD panel. 2n bytes.
unsigned HBPD:7; // TFT: Horizontal back porch is the number of VCLK periods between the falling edge of HSYNC and the start of active data.
} reg;
unsigned long all;
} LCDCON3;

typedef union {
struct {
unsigned HSPW:8; // TFT: Horizontal sync pulse width determines the HSYNC pulse's high level width by counting the number of the VCLK.
unsigned MVAL:8; // STN:
unsigned ADDVAL:8; // TFT: Palette Index offset value
unsigned PALADDEN:1; // TFT: Palette Index offset enable. 0 = Disable 1 = Enable
} reg;
unsigned long all;
} LCDCON4;

typedef union {
struct {
unsigned HWSWP:1; // STN/TFT: Half-Word swap control bit. 0 = Swap Disable 1 = Swap Enable
unsigned BSWP:1; // STN/TFT: Byte swap control bit. 0 = Swap Disable 1 = Swap Enable
unsigned ENLEND:1; // TFT: LEND output signal enable/disable. 0 = Disable LEND signal. 1 = Enable LEND signal
unsigned RESERVED1:1;
unsigned INVENDLINE:1; // TFT: This bit indicates the LEND signal polarity. 0 = normal 1 = inverted
unsigned RESERVED2:1;
unsigned INVVDEN:1; // TFT: This bit indicates the VDEN signal polarity. 0 = normal 1 = inverted
unsigned INVVD:1; // STN/TFT: This bit indicates the VD (video data) pulse polarity. 0 = Normal. 1 = VD is inverted.
unsigned INVVFRAME:1; // STN/TFT: This bit indicates the VFRAME/VSYNC pulse polarity. 0 = normal 1 = inverted
unsigned INVVLINE:1; // STN/TFT: This bit indicates the VLINE/HSYNC pulse polarity. 0 = normal 1 = inverted
unsigned INVVCLK:1; // STN/TFT: This bit controls the polarity of the VCLK active edge. 0 = The video data is fetched at VCLK falling edge. 1 = The video data is fetched at VCLK rising edge
unsigned RESERVED3:2;
unsigned SELFREF:1; // STN:
unsigned SLOWCLKSYNC:1; // STN:
unsigned RESERVED4:2; // must be 0
unsigned HSTATUS:2; // TFT: Horizontal Status (Read only) 00 = HSYNC 01 = BACK Porch. 10 = ACTIVE 11 = FRONT Porch
unsigned VSTATUS:2; // TFT: Vertical Status (Read only). 00 = VSYNC 01 = BACK Porch. 10 = ACTIVE 11 = FRONT Porch
} reg;
unsigned long all;
} LCDCON5;

typedef union {
struct {
unsigned LCDBASEU:21; // For single-scan LCD: These bits indicate A[21:1] of the start address of the LCD frame buffer.
unsigned LCDBANK:7; // A[28:22]
} reg;
unsigned long all;
} LCDSADDR1;

typedef union
{
struct
{
unsigned LCDBASEL:21; // For single scan LCD: These bits indicate A[21:1] of the end address of the LCD frame buffer. LCDBASEL = ((the fame end address) >>1) + 1 = LCDBASEU + (PAGEWIDTH+OFFSIZE)x(LINEVAL+1)
} reg;
unsigned long all;
} LCDSADDR2;

typedef union
{
struct
{
unsigned PAGEWIDTH:11; // Virtual screen page width(the number of half words) This value defines the width of the view port in the frame
unsigned OFFSIZE:11; // Virtual screen offset size(the number of half words) This value defines the difference between the address of the last half word displayed on the previous LCD line and the address of the first half word to be displayed in the new LCD line.
} reg;
unsigned long all;
} LCDSADDR3;
Le site de reference : http://www.angelsoftware.org

109

la je crois quon a changé de categorie....:'(
cest ptet plus precis mais bon....je comprends rien : cest grave?
En esperant que ca serve et que lemu marche le mieux possible...

see you :lol:

110

c'est pas grave... c le langage des dieux ^^

111

une langue morte pout la plupart d'entres nous, pauvres mortels. Je peux pas imaginer qu'un prog décide de ce qu'il doit faire en lisant des trucs pareils.
avatar
A fps shooter or a spy like Solid the killer?
Find the answer and you'll be a winner.

112

Pas arreter c'est pas si dur que ca.

la prog de gros truc en pur asm LA c'est imbitable. smile
Le site de reference : http://www.angelsoftware.org

113

so true...
ThunderZ, tu as un lien sur une doc du LCD ?

Thor

114

Merci ThunderZ,

Juste une question à propos du C en général : ça sert à quoi "volatile" et "static" ? Moi j'en mets jamais et ça a l'air de marcher.

Pour vous donner un tout petit avant goût, j'ai fait une toute première pre-pre-pre-alpha-release : vous la trouverez sur www.chez.com/shubaca
Notez bien le pre-pre-pre !

N'espérez pas trop faire marcher des autres demos que celles qui sont dans le zip

115

volatile : pour les variables pouvant etre modifiées dans les interruptions.
static : juste que la place memoire est toujours au meme endroit, pas dans la stack.

116

waou...ca rocks meme pour 0.000000000000001 pre pre pre pre alpha....smile
sincerement cest du beau boulot
je me suis mis en quete dauter petite demos qui marchent
par eg : lintro screen de "pong fighter v1.0" saffiche...mais cest tout...

see you :lol:

117

Exellent je vais tester ca pour te dire.

Pour la doc LCD ou autre demander moi wink

Enf65 si tu as besoins d'aide tu sais ou me trouver wink
Le site de reference : http://www.angelsoftware.org

118

aie, j'ai plus de piles, et mon chargeur de pile est chez un pote sad sad
Beast Master Abused

119

mais cette version pre pre alpha, elle marche donc evec le bios original?
avatar
A fps shooter or a spy like Solid the killer?
Find the answer and you'll be a winner.

120

quelqun aurait un lien pour des truc passant su l'emu et sinon ca donne koi en general !!
l'humour est une chose très subjective , la preuve je me trouve drole