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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.