Problem mit Pointern/Arrays

Gast #2003124
Lesenswert?

Ich versuche gerade einen C-6502 Emulator, der ursprünglich für DOS 
geschrieben war (in ANSI-C) mit gcc auf Linux zu compilieren, leider 
komme ich gerade nicht weiter...

Ich bekomme einen Segfault an folgender Stelle:
1
opcode = gameImage[PC++];

Die Variablen sind so angelegt:
1
WORD pc_reg = 0;
2
#define PC pc_reg
3
BYTE opcode;
WORD ist unsigned short, BYTE ist unsigned char.

Der Code sieht so aus:
1
void exec6502(int timerTicks)
2
{
3
   while (timerTicks > 0)  {
4
        printf("PC:%05d timerTicks:%d\n", PC, timerTicks);
5
        
6
      // fetch instruction
7
        opcode = gameImage[PC++];
8
      // execute instruction
9
        instruction[opcode]();
10

11
      // calculate clock cycles
12
        clockticks6502 += ticks[opcode];
13
        timerTicks -= clockticks6502;
14
        clockticks6502 = 0;
15
   }
16
}
Die exec6502() wird mit exec6502(1024); aufgerufen.

Ich hoffe ihr könnt mir dabei helfen, ich denke mal es fehlt nichts, 
kann aber noch sonst noch mehr Code Posten.
Gast #2003161
Lesenswert?

Achso, natürlich auch noch....

1
        for(i = 0; i < 1024; i++) {
2
                gameImage[i] = 0xEA;
3
        }
0xEA ist ein gültiger Opcode, steht für NOP. Wenn ich nun die 
Fehlerhafte Zeile
1
opcode = gameImage[PC++];
Durch opcode = 0xEA; ersetze, dann rattert er komplett durch.
Gast #2003172
Lesenswert?

>(malloc/calloc/...)
nichts...

Ich poste mal mehr Code, so hat das keinen Zweck:
1
#include <stdio.h>
2
#include "6502.h" 
3
WORD addrmask;  
4
BYTE *gameImage; 
5
extern void init6502();
6

7
int main() {    
8
        printf("linux 6502 emulator\n"); 
9
        printf("starting 6502 emulation...\n");
10
        init6502();  
11
        printf("loading opcode image\n");
12
        int i;     
13
        for(i = 0; i < 512; i++) {
14
                gameImage[i] = 0xEA;
15
        }   
16
        printf("size data image %d\n", sizeof(gameImage));      
17
        printf("exec.\n");
18
        exec6502(128);
19

20
        return(0);
21
}
Im Anhang die 6502.c, am unteren Ende ist die Funktion die spinnt.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren