Browse Source

Some more

godzil 16 years ago
parent
commit
02a8b24523

+ 1 - 1
src/NESCarts.c

@@ -3,7 +3,7 @@
  *  NESCart.c
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-05-02 18:37:41 +0200 (mer, 02 mai 2007) $
  *  $Author: mtrapier $

+ 1 - 1
src/include/NESCarts.h

@@ -3,7 +3,7 @@
  *  NESCart.h
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-04-16 01:55:35 +0200 (lun, 16 avr 2007) $
  *  $Author: godzil $

+ 1 - 1
src/include/mappers/manager.h

@@ -3,7 +3,7 @@
  *  mappers.h
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate$
  *  $Author$

+ 1 - 1
src/include/memory/manager.h

@@ -3,7 +3,7 @@
  *  memory.h - Taken from the Quick6502 project
  *
  *  Created by Manoël Trapier on 18/09/06.
- *  Copyright 2003-2007 986 Corp. All rights reserved.
+ *  Copyright 2003-2008 986 Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-04-05 16:30:20 +0200 (jeu, 05 avr 2007) $
  *  $Author: mtrapier $

+ 1 - 1
src/include/paddle.h

@@ -3,7 +3,7 @@
  *  paddle.h
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-04-16 01:55:35 +0200 (lun, 16 avr 2007) $
  *  $Author: godzil $

+ 1 - 1
src/include/plugins/manager.h

@@ -3,7 +3,7 @@
  *  plugins.h
  *
  *  Created by Manoel TRAPIER on 02/04/07.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate$
  *  $Author$

+ 1 - 1
src/include/ppu/ppu.debug.h

@@ -3,7 +3,7 @@
  *  ppu.debug.h
  *
  *  Created by Manoël Trapier on 12/04/07.
- *  Copyright 2003-2007 986 Corp. All rights reserved.
+ *  Copyright 2003-2008 986 Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-05-24 15:11:55 +0200 (jeu, 24 mai 2007) $
  *  $Author: mtrapier $

+ 1 - 1
src/include/ppu/ppu.h

@@ -5,7 +5,7 @@
  *  Define and emulate the PPU (Picture Processing Unit) of the real NES
  * 
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-04-26 18:47:34 +0200 (jeu, 26 avr 2007) $
  *  $Author: mtrapier $

+ 1 - 1
src/include/ppu/ppu.memory.h

@@ -3,7 +3,7 @@
  *  ppu.memory.h - Inspired from the memory manager of the Quick6502 Project.
  *
  *  Created by Manoël Trapier on 12/04/07.
- *  Copyright 2003-2007 986 Corp. All rights reserved.
+ *  Copyright 2003-2008 986 Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-05-24 15:11:55 +0200 (jeu, 24 mai 2007) $
  *  $Author: mtrapier $

+ 1 - 1
src/include/types.h

@@ -3,7 +3,7 @@
  *  types.h - Taken from the Quick6502 project
  *
  *  Created by Manoël Trapier on 18/09/06.
- *  Copyright 2003-2007 986 Corp. All rights reserved.
+ *  Copyright 2003-2008 986 Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-03-28 15:50:50 +0200 (mer, 28 mar 2007) $
  *  $Author: mtrapier $

+ 1 - 1
src/main.c

@@ -1025,7 +1025,7 @@ int main(int argc, char *argv[])
    
    Reset6502(&MainCPU);
    
-   MainCPU.Trace = 0;
+   MainCPU.Trace = 1;
    
    if (START_DEBUG)
       MainCPU.Trace = 1;

+ 1 - 1
src/mappersmanager/mappers/aorom.h

@@ -3,7 +3,7 @@
  *  aorom.h
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-04-26 18:47:34 +0200 (jeu, 26 avr 2007) $
  *  $Author: mtrapier $

+ 1 - 1
src/mappersmanager/mappers/cnrom.c

@@ -3,7 +3,7 @@
  *  cnrom.c
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-04-16 01:55:35 +0200 (lun, 16 avr 2007) $
  *  $Author: godzil $

+ 1 - 1
src/mappersmanager/mappers/cnrom.h

@@ -3,7 +3,7 @@
  *  cnrom.h
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-04-16 01:55:35 +0200 (lun, 16 avr 2007) $
  *  $Author: godzil $

+ 1 - 1
src/mappersmanager/mappers/genericmapper.c

@@ -3,7 +3,7 @@
  *  genericmapper.h
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-04-16 01:55:35 +0200 (lun, 16 avr 2007) $
  *  $Author: godzil $

+ 1 - 1
src/mappersmanager/mappers/iremh3001.h

@@ -3,7 +3,7 @@
  *  iremh3001.h
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-04-16 01:55:35 +0200 (lun, 16 avr 2007) $
  *  $Author: godzil $

+ 1 - 1
src/mappersmanager/mappers/mmc1.c

@@ -3,7 +3,7 @@
  *  mmc1.h
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-05-02 18:37:41 +0200 (mer, 02 mai 2007) $
  *  $Author: mtrapier $

+ 1 - 1
src/mappersmanager/mappers/mmc1.h

@@ -3,7 +3,7 @@
  *  mmc1.h
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-05-02 18:37:41 +0200 (mer, 02 mai 2007) $
  *  $Author: mtrapier $

+ 1 - 1
src/mappersmanager/mappers/mmc3.c

@@ -3,7 +3,7 @@
  *  mmc3.h
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-05-02 18:37:41 +0200 (mer, 02 mai 2007) $
  *  $Author: mtrapier $

+ 1 - 1
src/mappersmanager/mappers/mmc3.h

@@ -3,7 +3,7 @@
  *  mmc3.h
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-05-02 18:37:41 +0200 (mer, 02 mai 2007) $
  *  $Author: mtrapier $

+ 1 - 1
src/mappersmanager/mappers/norom.c

@@ -3,7 +3,7 @@
  *  norom.c
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-04-16 01:55:35 +0200 (lun, 16 avr 2007) $
  *  $Author: godzil $

+ 1 - 1
src/mappersmanager/mappers/norom.h

@@ -3,7 +3,7 @@
  *  norom.c
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-04-16 01:55:35 +0200 (lun, 16 avr 2007) $
  *  $Author: godzil $

+ 1 - 1
src/mappersmanager/mappers/unrom.c

@@ -3,7 +3,7 @@
  *  unrom.h
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-04-16 01:55:35 +0200 (lun, 16 avr 2007) $
  *  $Author: godzil $

+ 1 - 1
src/mappersmanager/mappers/unrom.h

@@ -3,7 +3,7 @@
  *  unrom.h
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-04-16 01:55:35 +0200 (lun, 16 avr 2007) $
  *  $Author: godzil $

+ 1 - 1
src/mappersmanager/unused/genericmapper.h

@@ -3,7 +3,7 @@
  *  genericmapper.h
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-04-16 01:55:35 +0200 (lun, 16 avr 2007) $
  *  $Author: godzil $

+ 23 - 23
src/mappersmanager/unused/mmc1.h

@@ -3,7 +3,7 @@
  *  mmc1.h
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-05-02 18:37:41 +0200 (mer, 02 mai 2007) $
  *  $Author: mtrapier $
@@ -139,24 +139,24 @@ void mmc1_ApplyReg0Mod()
        
     //printf("Change to reg0 done ! (0x%x)\n\tMiror flag : %d\n\tOneScreen Flag : %d\n\tPRG Size : %d\n\tPRG Area : %d\n\tVROM Switch size : %d\n", MMC1_reg0, MMC1_reg0 & MMC1_R0_MIRROR, MMC1_reg0 & MMC1_R0_ONESCREEN, MMC1_reg0 & MMC1_R0_PRGAREA, MMC1_reg0 & MMC1_R0_PRGSIZE, MMC1_reg0 & MMC1_R0_VROMSW);
         
-    switch (MMC1_reg0 & 0x03)
-    {
-    case 0:
-        ppu_setScreenMode(PPU_SCMODE_SINGLE);
-        ppu_setSingleScreen(PPU_SCREEN_000);
-        break;
-    case 1:
-        ppu_setScreenMode(PPU_SCMODE_SINGLE);
-        ppu_setSingleScreen(PPU_SCREEN_400);
-        break;
-    case 2:
-        ppu_setScreenMode(PPU_SCMODE_NORMAL);
-        ppu_setMirroring(PPU_MIRROR_VERTICAL);
-        break;
-    case 3:
-        ppu_setScreenMode(PPU_SCMODE_NORMAL);
-        ppu_setMirroring(PPU_MIRROR_HORIZTAL);
-        break;
+    switch (MMC1_reg0 & 0x03)
+    {
+    case 0:
+        ppu_setScreenMode(PPU_SCMODE_SINGLE);
+        ppu_setSingleScreen(PPU_SCREEN_000);
+        break;
+    case 1:
+        ppu_setScreenMode(PPU_SCMODE_SINGLE);
+        ppu_setSingleScreen(PPU_SCREEN_400);
+        break;
+    case 2:
+        ppu_setScreenMode(PPU_SCMODE_NORMAL);
+        ppu_setMirroring(PPU_MIRROR_VERTICAL);
+        break;
+    case 3:
+        ppu_setScreenMode(PPU_SCMODE_NORMAL);
+        ppu_setMirroring(PPU_MIRROR_HORIZTAL);
+        break;
     }
        
     if ( (OldSwitchArea != (MMC1_reg0 & MMC1_R0_PRGAREA)) && ((MMC1_reg0 & MMC1_R0_PRGSIZE) != 0 ) )
@@ -175,7 +175,7 @@ void mmc1_ApplyReg0Mod()
 
         } 
            
-        OldSwitchArea = (MMC1_reg0 & MMC1_R0_PRGAREA);
+        OldSwitchArea = (MMC1_reg0 & MMC1_R0_PRGAREA);
     }
        
 } 
@@ -234,10 +234,10 @@ void mmc1_MapperWriteReg1(register byte Addr, register byte Value)
                         
             VROMBankNb = (MMC1_reg1 /* & MMC1_R1_VROMB1 */ );
 
-            if (Cart->VROMSize == 0)
-            {
+            if (Cart->VROMSize == 0)
+            {
                 printf("Try to change VROM but with didn't have any VROM ! [%04X]\n", VROMBankNb);
-                return;
+                return;
             }
                 
             if ( (MMC1_reg0 & MMC1_R0_VROMSW) != 0 )

+ 1 - 1
src/mappersmanager/utils.c

@@ -3,7 +3,7 @@
  *  mappers.c
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-05-31 18:00:41 +0200 (jeu, 31 mai 2007) $
  *  $Author: mtrapier $

+ 1 - 1
src/memorymanager/memory.c

@@ -3,7 +3,7 @@
  *  memory.c - Taken from the Quick6502 project
  *
  *  Created by Manoël Trapier on 18/09/06.
- *  Copyright 2003-2007 986 Corp. All rights reserved.
+ *  Copyright 2003-2008 986 Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-05-02 18:37:41 +0200 (mer, 02 mai 2007) $
  *  $Author: mtrapier $

+ 1 - 1
src/paddle.c

@@ -3,7 +3,7 @@
  *  paddle.c
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-05-02 18:37:41 +0200 (mer, 02 mai 2007) $
  *  $Author: mtrapier $

+ 1 - 1
src/pluginsmanager/manager.c

@@ -3,7 +3,7 @@
  *  plugins.c
  *
  *  Created by Manoel TRAPIER on 02/04/07.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate$
  *  $Author$

+ 17 - 17
src/ppu/oldppu.c

@@ -1,20 +1,20 @@
-/*
- *  PPU emulation - The TI-NESulator Project
- *  oldppu.c
- *
- *  Old code for the PPU, still here for unknown purposes
- *  
- *  Define and emulate the PPU (Picture Processing Unit) of the real NES
- * 
- *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
- *
- *  $LastChangedDate: 2007-03-29 12:05:12 +0200 (jeu, 29 mar 2007) $
- *  $Author: mtrapier $
- *  $HeadURL: file:///media/HD6G/SVNROOT/trunk/TI-NESulator/src/oldppu.c $
- *  $Revision: 28 $
- *
- */
+/*
+ *  PPU emulation - The TI-NESulator Project
+ *  oldppu.c
+ *
+ *  Old code for the PPU, still here for unknown purposes
+ *  
+ *  Define and emulate the PPU (Picture Processing Unit) of the real NES
+ * 
+ *  Created by Manoel TRAPIER.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
+ *
+ *  $LastChangedDate: 2007-03-29 12:05:12 +0200 (jeu, 29 mar 2007) $
+ *  $Author: mtrapier $
+ *  $HeadURL: file:///media/HD6G/SVNROOT/trunk/TI-NESulator/src/oldppu.c $
+ *  $Revision: 28 $
+ *
+ */
 #include <allegro.h>
 #include <stdio.h>
 #include <stdlib.h>

+ 119 - 118
src/ppu/ppu.24.c

@@ -1,33 +1,34 @@
-/*
- *  PPU emulation - The TI-NESulator Project
- *  ppu.c
- *  
- *  Define and emulate the PPU (Picture Processing Unit) of the real NES
- * 
- *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
- *
- *  $LastChangedDate: 2007-04-06 17:17:01 +0200 (ven, 06 avr 2007) $
- *  $Author: mtrapier $
- *  $HeadURL: file:///media/HD6G/SVNROOT/trunk/TI-NESulator/src/ppu.c $
- *  $Revision: 32 $
- *
- */
+/*
+ *  PPU emulation - The TI-NESulator Project
+ *  ppu.c
+ *  
+ *  Define and emulate the PPU (Picture Processing Unit) of the real NES
+ * 
+ *  Created by Manoel TRAPIER.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
+ *
+ *  $LastChangedDate: 2007-04-06 17:17:01 +0200 (ven, 06 avr 2007) $
+ *  $Author: mtrapier $
+ *  $HeadURL: file:///media/HD6G/SVNROOT/trunk/TI-NESulator/src/ppu.c $
+ *  $Revision: 32 $
+ *
+ */
 
 #include <allegro.h>
 #include <stdio.h>
-#include <stdlib.h>

+#include <stdlib.h>
+
 #include "ppu.h"
-#include "memory.h"
+#include "memory.h"
 #include "M6502.h"
-
-#define __TINES_PLUGINS__
-#include "plugins.h"
+
+#define __TINES_PLUGINS__
+#include "plugins.h"
 
 #define GetTileColor(tile,x1,y1)    ( ( ppu.Memory[tile+y1] & (1<<(7-x1)) ) == 0 ? 0 : 1 ) | \
                                     ( ( ppu.Memory[tile+y1+8] & (1<<(7-x1)) ) == 0 ? 0 : 1<<1 )
-
-#define GetColor(col) (col)
+
+#define GetColor(col) (col)
 
 extern PPU ppu;
 extern BITMAP *Buffer;
@@ -37,22 +38,22 @@ unsigned long BgColor;
 volatile extern int frame;
 
 volatile extern unsigned long IPS, FPS;
-
-extern unsigned long ColorPalette[ 8 * 63 ];
-
-extern short IRQScanHit;
+
+extern unsigned long ColorPalette[ 8 * 63 ];
+
+extern short IRQScanHit;
 
 byte NOBLIT = 0;
 
 int InitPPU(PPU * ppu)
-{
+{
     int i;
     if ((ppu->Memory = (unsigned char *) malloc(0x4000)) == NULL)
         return -1;
 
     NOBLIT = 0;
-
-    
+
+    
 
     /* Initializing register.. */
     ppu->In_VBlank = 0;
@@ -83,28 +84,28 @@ int InitPPU(PPU * ppu)
     ppu->DisplayAttributeTable = ~0;
     ppu->DisplayPalette = ~0;
     ppu->DisplayVRAM = ~0;
-
-
-    /* Set PPU registers */
-    set_page_rd_hook(0x20, ReadPPUReg);    
-    set_page_wr_hook(0x20, WritePPUReg);
-    
-    set_page_readable(0x20, true);
-    set_page_writeable(0x20, true);
-    
-    
-    /* Set PPU Ghost Registers */
-    for(i = 0x21; i < 0x40; i++)
-        set_page_ghost(i, true, 0x20);
-
-    plugin_install_keypressHandler('i', DebugSprites);
-    plugin_install_keypressHandler('I', DebugSprites);
-    
-    plugin_install_keypressHandler('u', DebugColor);
-    plugin_install_keypressHandler('U', DebugColor);
-    
-    
-    
+
+
+    /* Set PPU registers */
+    set_page_rd_hook(0x20, ReadPPUReg);    
+    set_page_wr_hook(0x20, WritePPUReg);
+    
+    set_page_readable(0x20, true);
+    set_page_writeable(0x20, true);
+    
+    
+    /* Set PPU Ghost Registers */
+    for(i = 0x21; i < 0x40; i++)
+        set_page_ghost(i, true, 0x20);
+
+    plugin_install_keypressHandler('i', DebugSprites);
+    plugin_install_keypressHandler('I', DebugSprites);
+    
+    plugin_install_keypressHandler('u', DebugColor);
+    plugin_install_keypressHandler('U', DebugColor);
+    
+    
+    
 
     return 0;
 }
@@ -550,19 +551,19 @@ void DebugSprites()
   }
   NOBLIT = 0;
 }
-
-#define GetTilePos(addr,x,y) (addr+x+(y*32))
-
-void ppu_displayNameTables()
-{
+
+#define GetTilePos(addr,x,y) (addr+x+(y*32))
+
+void ppu_displayNameTables()
+{
 int x, y, x1, y1, i;
 
 unsigned long Reg2;
 unsigned short ab_x, ab_y;
 unsigned short Color;
 unsigned short AttrByte;
-unsigned short TileID;  
-
+unsigned short TileID;  
+
     if (ppu.DisplayAttributeTable)
     {
 /* NT 2000 */
@@ -795,8 +796,8 @@ unsigned short TileID;
                     }
             }
     }
-
-}
+
+}
 
 
 int
@@ -808,13 +809,13 @@ unsigned long Reg2;
 unsigned short ab_x, ab_y;
 unsigned long Color;
 unsigned short AttrByte;
-unsigned short TileID;
+unsigned short TileID;
 static short LAST_FPS = 0;
-unsigned char XScroll, YScroll;
+unsigned char XScroll, YScroll;
 
     ppu.StatusRegister.b |= PPU_FLAG_SR_VBLANK;
         
-    BgColor = ppu.Memory[0x3F00];//0xC0;  
+    BgColor = ppu.Memory[0x3F00];//0xC0;  
 
 //goto NoDraw;
 
@@ -836,7 +837,7 @@ unsigned char XScroll, YScroll;
 * A faires les choses qui faut faire durant un lancé de vblank,
 * comme dessiner par ex..
 */
-
+
 
     if (((ppu.ControlRegister2.b & PPU_CR2_BGVISIBILITY) != 0) || ppu.ForceBgVisibility)
     {
@@ -862,20 +863,20 @@ v:0000 0100 0001 1111=t:0000 0100 0001 1111
   1111 1198 7654 3210         
   5432 10
 */
-            //if (y == 142)
-            //    printf("______________142 Ptr:0x%04X ____ 0x%04X\n", ppu.TimedTmpPtr[y], ppu.VRAMAddrReg2.W);
+            //if (y == 142)
+            //    printf("______________142 Ptr:0x%04X ____ 0x%04X\n", ppu.TimedTmpPtr[y], ppu.VRAMAddrReg2.W);
                 
             ppu.VRAMAddrReg2.W = (ppu.VRAMAddrReg2.W & 0xFBE0)
                | ((ppu.TimedTmpPtr[y]) & 0x041F)
                | 0x2000;
-
-            //if (y == 142)
+
+            //if (y == 142)
             //    printf("______________142 Ptr:0x%04X ____ 0x%04X\n", ppu.TimedTmpPtr[y], ppu.VRAMAddrReg2.W);
             
             TileID = (PPU_Rd(ppu.VRAMAddrReg2.W) << 4)
                | ppu.Bg_Pattern_Table;
 
-            XScroll = ppu.TimedHScroll[y];
+            XScroll = ppu.TimedHScroll[y];
            
             for (x = 0; x < 256; x++)
             {
@@ -1072,31 +1073,31 @@ appeared as a negative scroll value.
     }
 
     for (i = 0; i < 240; i++)
-    {
-      _putpixel8(Buffer, 257 + 0, i, 0xFFFFFFFF);        
+    {
+      _putpixel8(Buffer, 257 + 0, i, 0xFFFFFFFF);        
       
-      _putpixel8(Buffer, 257 + 1, i, ppu.TimedTmpPtr[y]*4 | 0xFF000000);
-      _putpixel8(Buffer, 257 + 2, i, ppu.TimedTmpPtr[y]*4 | 0xFF000000);
-      _putpixel8(Buffer, 257 + 3, i, ppu.TimedTmpPtr[y]*4 | 0xFF000000);
+      _putpixel8(Buffer, 257 + 1, i, ppu.TimedTmpPtr[y]*4 | 0xFF000000);
+      _putpixel8(Buffer, 257 + 2, i, ppu.TimedTmpPtr[y]*4 | 0xFF000000);
+      _putpixel8(Buffer, 257 + 3, i, ppu.TimedTmpPtr[y]*4 | 0xFF000000);
       
-      _putpixel8(Buffer, 257 + 4, i, ppu.TmpVScroll*4 | 0xFF000000);
-      _putpixel8(Buffer, 257 + 5, i, ppu.TmpVScroll*4 | 0xFF000000);
-      _putpixel8(Buffer, 257 + 6, i, ppu.TmpVScroll*4 | 0xFF000000);
+      _putpixel8(Buffer, 257 + 4, i, ppu.TmpVScroll*4 | 0xFF000000);
+      _putpixel8(Buffer, 257 + 5, i, ppu.TmpVScroll*4 | 0xFF000000);
+      _putpixel8(Buffer, 257 + 6, i, ppu.TmpVScroll*4 | 0xFF000000);
       
-      _putpixel8(Buffer, 257 + 7, i, ppu.TimedHScroll[i]*4 | 0xFF000000);
-      _putpixel8(Buffer, 257 + 8, i, ppu.TimedHScroll[i]*4 | 0xFF000000);
-      _putpixel8(Buffer, 257 + 9, i, ppu.TimedHScroll[i]*4 | 0xFF000000);
-
-      _putpixel8(Buffer, 257 + 10, i, 0xFFFFFFFF);
+      _putpixel8(Buffer, 257 + 7, i, ppu.TimedHScroll[i]*4 | 0xFF000000);
+      _putpixel8(Buffer, 257 + 8, i, ppu.TimedHScroll[i]*4 | 0xFF000000);
+      _putpixel8(Buffer, 257 + 9, i, ppu.TimedHScroll[i]*4 | 0xFF000000);
+
+      _putpixel8(Buffer, 257 + 10, i, 0xFFFFFFFF);
       
-    }
-    
-
-    if (IRQScanHit != -1)
-    {
-        line(Buffer, 257+12, IRQScanHit, 257+22, IRQScanHit, 0xFF00FF);
-        line(Buffer, 257+12, IRQScanHit, 257+18, IRQScanHit-3, 0xFF00FF);
-        line(Buffer, 257+12, IRQScanHit, 257+18, IRQScanHit+3, 0xFF00FF);
+    }
+    
+
+    if (IRQScanHit != -1)
+    {
+        line(Buffer, 257+12, IRQScanHit, 257+22, IRQScanHit, 0xFF00FF);
+        line(Buffer, 257+12, IRQScanHit, 257+18, IRQScanHit-3, 0xFF00FF);
+        line(Buffer, 257+12, IRQScanHit, 257+18, IRQScanHit+3, 0xFF00FF);
     }
 
 NoDraw:
@@ -1123,7 +1124,7 @@ byte ReadPPUReg(byte RegID)
 {
 /* RegID is the nb of the reg 0-7 */
     unsigned char ret;
-    RegID &= 0x07;
+    RegID &= 0x07;
     
     switch (RegID)
     {
@@ -1170,12 +1171,12 @@ byte ReadPPUReg(byte RegID)
 void WritePPUReg(byte RegID, byte val)
 {
 /* RegID is the nb of the reg 0-7 */
-
-    RegID &= 0x07;
+
+    RegID &= 0x07;
 
     switch (RegID)
     {
-        default:/* For not writeable reg */
+        default:/* For not writeable reg */
         printf("WritePPU error\n");
         break;
     case 0:        /* Control Register 1 */
@@ -1224,30 +1225,30 @@ t:0000 1100 0000 0000 = d:0000 0011
 2005 first write:
 t:0000 0000 0001 1111=d:1111 1000
 x=d:00000111
-*/
+*/
             //printf("2005[1st][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             ppu.VRAMAddrMode = 1;
 
             ppu.TmpVRamPtr = ((ppu.TmpVRamPtr & 0xFFE0) | ((val & 0xF8) >> 3));
             ppu.HScroll = val & 0x7;
-
-
+
+
             //printf("2005[1st][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             //printf("%d -> 2005 w1: 0x%04X (val: 0x%02X)\n", ScanLine, ppu.TmpVRamPtr, val);
         }
         else
         {
 /*
-2005 second write:
-
-  1111 1100 0000 0000
-  5432 1098 7654 3210
-  
-  8421 8421 8421 8421
+2005 second write:
+
+  1111 1100 0000 0000
+  5432 1098 7654 3210
+  
+  8421 8421 8421 8421
   -------------------
 t:0000 0011 1110 0000=d:1111 1000
 t:0111 0000 0000 0000=d:0000 0111
-*/
+*/
             //printf("2005[2nd][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             ppu.VRAMAddrMode = 0;
             ppu.TmpVRamPtr = ((ppu.TmpVRamPtr & 0xFC1F) | ((val & 0xF8) << 2));
@@ -1256,8 +1257,8 @@ t:0111 0000 0000 0000=d:0000 0111
             ppu.TmpVScroll = (val & 0x7);
             //if (ppu.TmpVScroll != 0)
                 //printf("2002: TmpVScroll == %d \n", ppu.TmpVScroll);
-
-            //printf("2005[2nd][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
+
+            //printf("2005[2nd][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
                         
             //printf("%d -> 2005 w2: 0x%04X (val: 0x%02X)\n", ScanLine, ppu.TmpVRamPtr, val);
 
@@ -1265,7 +1266,7 @@ t:0111 0000 0000 0000=d:0000 0111
         break;
     case 6:        /* VRAM Address register 2 */
         if (ppu.VRAMAddrMode == 0)
-        {
+        {
             //printf("2006[1st][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             ppu.VRAMAddrMode = 1;
 /*
@@ -1274,12 +1275,12 @@ t:0011 1111 0000 0000 = d:0011 1111
 t:1100 0000 0000 0000=0
 */
             ppu.TmpVRamPtr = ((ppu.TmpVRamPtr & 0xC0FF) | ((val&0x3F) << 8)) & 0x3FFF;
-            //printf("2006[1st][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
+            //printf("2006[1st][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             
             //printf("%d -> 2006 w1: 0x%04X (val: 0x%02X)\n", ScanLine, ppu.TmpVRamPtr, val);
         }
         else
-        {
+        {
             //printf("2006[2nd][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             ppu.VRAMAddrMode = 0;
 /*
@@ -1300,12 +1301,12 @@ v=t
         break;
     }
 }
-
-void FillSprRamDMA(byte value)
-{
-    int i;
-    for (i = 0x00; i < 0x100; i++)
-    {
-        ppu.SPRRAM[i] = ReadMemory( value, i);
-    }
-}
+
+void FillSprRamDMA(byte value)
+{
+    int i;
+    for (i = 0x00; i < 0x100; i++)
+    {
+        ppu.SPRRAM[i] = ReadMemory( value, i);
+    }
+}

+ 1 - 1
src/ppu/ppu.c

@@ -5,7 +5,7 @@
  *  Define and emulate the PPU (Picture Processing Unit) of the real NES
  *
  *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-05-31 18:02:16 +0200 (jeu, 31 mai 2007) $
  *  $Author: mtrapier $

+ 1 - 1
src/ppu/ppu.memory.c

@@ -3,7 +3,7 @@
  *  ppu.memory.c - Inspired from the memory manager of the Quick6502 Project.
  *
  *  Created by Manoël Trapier on 12/04/07.
- *  Copyright 2003-2007 986 Corp. All rights reserved.
+ *  Copyright 2003-2008 986 Corp. All rights reserved.
  *
  *  $LastChangedDate: 2007-05-24 15:11:55 +0200 (jeu, 24 mai 2007) $
  *  $Author: mtrapier $

+ 55 - 55
src/ppu/ppu.new.c

@@ -1,25 +1,25 @@
-/*
- *  PPU emulation - The TI-NESulator Project
- *  ppu.c
- *  
- *  Define and emulate the PPU (Picture Processing Unit) of the real NES
- * 
- *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
- *
- *  $LastChangedDate: 2007-04-04 18:46:30 +0200 (mer, 04 avr 2007) $
- *  $Author: mtrapier $
- *  $HeadURL: file:///media/HD6G/SVNROOT/trunk/TI-NESulator/src/ppu.c $
- *  $Revision: 30 $
- *
- */
+/*
+ *  PPU emulation - The TI-NESulator Project
+ *  ppu.c
+ *  
+ *  Define and emulate the PPU (Picture Processing Unit) of the real NES
+ * 
+ *  Created by Manoel TRAPIER.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
+ *
+ *  $LastChangedDate: 2007-04-04 18:46:30 +0200 (mer, 04 avr 2007) $
+ *  $Author: mtrapier $
+ *  $HeadURL: file:///media/HD6G/SVNROOT/trunk/TI-NESulator/src/ppu.c $
+ *  $Revision: 30 $
+ *
+ */
 
 #include <allegro.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <sys/time.h>
-#include <time.h>
-
+#include <sys/time.h>
+#include <time.h>
+
 
 #include "ppu.h"
 #include "M6502.h"
@@ -44,8 +44,8 @@ int InitPPU(PPU * ppu)
         return -1;
 
     NOBLIT = 0;
-
-    
+
+    
 
     /* Initializing register.. */
     ppu->In_VBlank = 0;
@@ -533,16 +533,16 @@ unsigned short ab_x, ab_y;
 unsigned short Color;
 unsigned short AttrByte;
 unsigned short TileID;
-static short WaitTime = 7000;
+static short WaitTime = 7000;
 static short LAST_FPS = 0;
 unsigned char XScroll, YScroll;
-struct timeval timeStart, timeEnd;
+struct timeval timeStart, timeEnd;
 
     ppu.StatusRegister.b |= PPU_FLAG_SR_VBLANK;
         
     BgColor = ppu.Memory[0x3F00];//0xC0;
-    
-    gettimeofday(&timeStart, NULL);
+    
+    gettimeofday(&timeStart, NULL);
 
 //goto NoDraw;
 
@@ -833,15 +833,15 @@ v:0000 0100 0001 1111=t:0000 0100 0001 1111
             TileID = (PPU_Rd(ppu.VRAMAddrReg2.W) << 4)
                | ppu.Bg_Pattern_Table;
 
-            XScroll = ppu.TimedHScroll[y];
-            
-            /*YScroll += ppu.TimedVScroll[y];*/
-/*            printf("Y:%d -_- ", YScroll);
-            if (ppu.TimedVScroll[y] != 0)
-            {
-                YScroll = ppu.TimedVScroll[y];
-                printf("Y:%d", YScroll);                
-            }
+            XScroll = ppu.TimedHScroll[y];
+            
+            /*YScroll += ppu.TimedVScroll[y];*/
+/*            printf("Y:%d -_- ", YScroll);
+            if (ppu.TimedVScroll[y] != 0)
+            {
+                YScroll = ppu.TimedVScroll[y];
+                printf("Y:%d", YScroll);                
+            }
            printf("\n");*/
             for (x = 0; x < 256; x++)
             {
@@ -1059,17 +1059,17 @@ NoDraw:
     release_bitmap(Buffer);
 
     if (NOBLIT == 0)
-    {
+    {
       unsigned long TimeStart, TimeEnd;
       blit(Buffer, screen, 0, 0, 0, 0, 512 + 256, 480);
-      //stretch_blit(Buffer, screen, 0, 0, 256, 240, 0, 0, 512, 480);
-      gettimeofday(&timeEnd, NULL);
-      
-      TimeStart = 1000000 * timeStart.tv_sec + timeStart.tv_usec;
-      TimeEnd = 1000000 * timeEnd.tv_sec + timeEnd.tv_usec;
-      
-      //printf("Start: %d\nEnd: %d\nResult: %d\n",TimeStart, TimeEnd, 16666 - (TimeEnd - TimeStart));
-      WaitTime = 14000 - (TimeEnd - TimeStart);
+      //stretch_blit(Buffer, screen, 0, 0, 256, 240, 0, 0, 512, 480);
+      gettimeofday(&timeEnd, NULL);
+      
+      TimeStart = 1000000 * timeStart.tv_sec + timeStart.tv_usec;
+      TimeEnd = 1000000 * timeEnd.tv_sec + timeEnd.tv_usec;
+      
+      //printf("Start: %d\nEnd: %d\nResult: %d\n",TimeStart, TimeEnd, 16666 - (TimeEnd - TimeStart));
+      WaitTime = 14000 - (TimeEnd - TimeStart);
       if (!key[KEY_PGUP])
           usleep(WaitTime<0?0:WaitTime);
     }
@@ -1085,7 +1085,7 @@ byte ReadPPUReg(byte RegID)
 {
 /* RegID is the nb of the reg 0-7 */
     unsigned char ret;
-    RegID &= 0x07;
+    RegID &= 0x07;
     
     switch (RegID)
     {
@@ -1132,12 +1132,12 @@ byte ReadPPUReg(byte RegID)
 void WritePPUReg(byte RegID, byte val)
 {
 /* RegID is the nb of the reg 0-7 */
-
-    RegID &= 0x07;
+
+    RegID &= 0x07;
 
     switch (RegID)
     {
-        default:/* For not writeable reg */
+        default:/* For not writeable reg */
         printf("WritePPU error\n");
         break;
     case 0:        /* Control Register 1 */
@@ -1247,12 +1247,12 @@ v=t
         break;
     }
 }
-
-void FillSprRamDMA(byte value)
-{
-    int i;
-    for (i = 0x00; i < 0x100; i++)
-    {
-        ppu.SPRRAM[i] = ReadMemory( value, i);
-    }
-}
+
+void FillSprRamDMA(byte value)
+{
+    int i;
+    for (i = 0x00; i < 0x100; i++)
+    {
+        ppu.SPRRAM[i] = ReadMemory( value, i);
+    }
+}

+ 141 - 140
src/ppu/ppu.new2.c

@@ -1,33 +1,34 @@
-/*
- *  PPU emulation - The TI-NESulator Project
- *  ppu.c
- *  
- *  Define and emulate the PPU (Picture Processing Unit) of the real NES
- * 
- *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
- *
- *  $LastChangedDate: 2007-04-06 17:17:01 +0200 (ven, 06 avr 2007) $
- *  $Author: mtrapier $
- *  $HeadURL: file:///media/HD6G/SVNROOT/trunk/TI-NESulator/src/ppu.c $
- *  $Revision: 32 $
- *
- */
+/*
+ *  PPU emulation - The TI-NESulator Project
+ *  ppu.c
+ *  
+ *  Define and emulate the PPU (Picture Processing Unit) of the real NES
+ * 
+ *  Created by Manoel TRAPIER.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
+ *
+ *  $LastChangedDate: 2007-04-06 17:17:01 +0200 (ven, 06 avr 2007) $
+ *  $Author: mtrapier $
+ *  $HeadURL: file:///media/HD6G/SVNROOT/trunk/TI-NESulator/src/ppu.c $
+ *  $Revision: 32 $
+ *
+ */
 
 #include <allegro.h>
 #include <stdio.h>
-#include <stdlib.h>

+#include <stdlib.h>
+
 #include "ppu.h"
-#include "memory.h"
+#include "memory.h"
 #include "M6502.h"
-
-#define __TINES_PLUGINS__
-#include "plugins.h"
+
+#define __TINES_PLUGINS__
+#include "plugins.h"
 
 #define GetTileColor(tile,x1,y1)    ( ( ppu.Memory[tile+y1] & (1<<(7-x1)) ) == 0 ? 0 : 1 ) | \
                                     ( ( ppu.Memory[tile+y1+8] & (1<<(7-x1)) ) == 0 ? 0 : 1<<1 )
-
-#define GetColor(col) (col&0xFF)
+
+#define GetColor(col) (col&0xFF)
 
 extern PPU ppu;
 extern BITMAP *Buffer;
@@ -37,22 +38,22 @@ unsigned long BgColor;
 volatile extern int frame;
 
 volatile extern unsigned long IPS, FPS;
-
-extern unsigned long ColorPalette[ 8 * 63 ];
-
-extern short IRQScanHit;
+
+extern unsigned long ColorPalette[ 8 * 63 ];
+
+extern short IRQScanHit;
 
 byte NOBLIT = 0;
 
 int InitPPU(PPU * ppu)
-{
+{
     int i;
     if ((ppu->Memory = (unsigned char *) malloc(0x4000)) == NULL)
         return -1;
 
     NOBLIT = 0;
-
-    
+
+    
 
     /* Initializing register.. */
     ppu->In_VBlank = 0;
@@ -83,28 +84,28 @@ int InitPPU(PPU * ppu)
     ppu->DisplayAttributeTable = ~0;
     ppu->DisplayPalette = ~0;
     ppu->DisplayVRAM = ~0;
-
-
-    /* Set PPU registers */
-    set_page_rd_hook(0x20, ReadPPUReg);    
-    set_page_wr_hook(0x20, WritePPUReg);
-    
-    set_page_readable(0x20, true);
-    set_page_writeable(0x20, true);
-    
-    
-    /* Set PPU Ghost Registers */
-    for(i = 0x21; i < 0x40; i++)
-        set_page_ghost(i, true, 0x20);
-
-    plugin_install_keypressHandler('i', DebugSprites);
-    plugin_install_keypressHandler('I', DebugSprites);
-    
-    plugin_install_keypressHandler('u', DebugColor);
-    plugin_install_keypressHandler('U', DebugColor);
-    
-    
-    
+
+
+    /* Set PPU registers */
+    set_page_rd_hook(0x20, ReadPPUReg);    
+    set_page_wr_hook(0x20, WritePPUReg);
+    
+    set_page_readable(0x20, true);
+    set_page_writeable(0x20, true);
+    
+    
+    /* Set PPU Ghost Registers */
+    for(i = 0x21; i < 0x40; i++)
+        set_page_ghost(i, true, 0x20);
+
+    plugin_install_keypressHandler('i', DebugSprites);
+    plugin_install_keypressHandler('I', DebugSprites);
+    
+    plugin_install_keypressHandler('u', DebugColor);
+    plugin_install_keypressHandler('U', DebugColor);
+    
+    
+    
 
     return 0;
 }
@@ -269,7 +270,7 @@ void NewPPUDispSprite()
   unsigned long Color;
   PPUSprite sprite;
   unsigned short bg;
-  short SprtAddr;
+  short SprtAddr;
 
   for (i = 63; i >= 0; i--)
   {
@@ -550,19 +551,19 @@ void DebugSprites()
   }
   NOBLIT = 0;
 }
-
-#define GetTilePos(addr,x,y) (addr+x+(y*32))
-
-void ppu_displayNameTables()
-{
+
+#define GetTilePos(addr,x,y) (addr+x+(y*32))
+
+void ppu_displayNameTables()
+{
 int x, y, x1, y1, i;
 
 unsigned long Reg2;
 unsigned short ab_x, ab_y;
 unsigned short Color;
 unsigned short AttrByte;
-unsigned short TileID;  
-
+unsigned short TileID;  
+
     if (ppu.DisplayAttributeTable)
     {
 /* NT 2000 */
@@ -795,8 +796,8 @@ unsigned short TileID;
                     }
             }
     }
-
-}
+
+}
 
 
 int
@@ -808,22 +809,22 @@ unsigned long Reg2;
 unsigned short ab_x, ab_y;
 unsigned long Color;
 unsigned short AttrByte;
-unsigned short TileID;
+unsigned short TileID;
 static short LAST_FPS = 0;
-unsigned char XScroll, YScroll;
+unsigned char XScroll, YScroll;
 
     ppu.StatusRegister.b |= PPU_FLAG_SR_VBLANK;
         
-    BgColor = ppu.Memory[0x3F00];//0xC0;  
+    BgColor = ppu.Memory[0x3F00];//0xC0;  
 
 //goto NoDraw;
 
     acquire_bitmap(Buffer);
         
     clear_to_color(Buffer, GetColor(BgColor));
-
-
-    ppu_displayNameTables();
+
+
+    ppu_displayNameTables();
 
     if (ppu.ControlRegister2.s.Colour != 0)
         printf("ppu.ColorEmphasis : %d\n", ppu.ControlRegister2.s.Colour);
@@ -839,7 +840,7 @@ unsigned char XScroll, YScroll;
 * A faires les choses qui faut faire durant un lancé de vblank,
 * comme dessiner par ex..
 */
-
+
 
     if (((ppu.ControlRegister2.b & PPU_CR2_BGVISIBILITY) != 0) || ppu.ForceBgVisibility)
     {
@@ -862,28 +863,28 @@ scanline start (if background and sprites are enabled):
 v:0000 0100 0001 1111=t:0000 0100 0001 1111
   1111 1198 7654 3210         
   5432 10
-*/               
-            if ((y == IRQScanHit)||(y == IRQScanHit + 1))
-                printf("%s: IRQ Hit : bf Reg2: 0x%04X\n", __func__, ppu.VRAMAddrReg2.W);
-
-#define PPU_SSCAN_MASK 0x041F
+*/               
+            if ((y == IRQScanHit)||(y == IRQScanHit + 1))
+                printf("%s: IRQ Hit : bf Reg2: 0x%04X\n", __func__, ppu.VRAMAddrReg2.W);
+
+#define PPU_SSCAN_MASK 0x041F
 
             ppu.VRAMAddrReg2.W = (ppu.VRAMAddrReg2.W & (~PPU_SSCAN_MASK))
                                | (ppu.TimedTmpPtr[y] &   PPU_SSCAN_MASK )
                                | 0x2000;
-
-
+
+
             TileID = (PPU_Rd(ppu.VRAMAddrReg2.W) << 4)
                    | ppu.Bg_Pattern_Table;
 
-            XScroll = ppu.TimedHScroll[y];
-
-            if (y == IRQScanHit)
-              printf("%s: IRQ Hit    : Reg2: 0x%04X TmpPtr:0x%04X \n", __func__, ppu.VRAMAddrReg2.W, ppu.TimedTmpPtr[y]);
-
-            if (y == IRQScanHit + 1)
-              printf("%s: IRQ Hit + 1: Reg2: 0x%04X TmpPtr:0x%04X \n", __func__, ppu.VRAMAddrReg2.W, ppu.TimedTmpPtr[y]);
-
+            XScroll = ppu.TimedHScroll[y];
+
+            if (y == IRQScanHit)
+              printf("%s: IRQ Hit    : Reg2: 0x%04X TmpPtr:0x%04X \n", __func__, ppu.VRAMAddrReg2.W, ppu.TimedTmpPtr[y]);
+
+            if (y == IRQScanHit + 1)
+              printf("%s: IRQ Hit + 1: Reg2: 0x%04X TmpPtr:0x%04X \n", __func__, ppu.VRAMAddrReg2.W, ppu.TimedTmpPtr[y]);
+
            
             for (x = 0; x < 256; x++)
             {
@@ -953,7 +954,7 @@ Y = (ppu.VRAMAddrReg2.W & 0x3E0) >> 5
 /*                        if ((ppu.VRAMAddrReg2.W & 0x400))
                             ppu.VRAMAddrReg2.W &= ~0x400;
                         else                        
-                            ppu.VRAMAddrReg2.W |= 0x400;*/
+                            ppu.VRAMAddrReg2.W |= 0x400;*/
                         ppu.VRAMAddrReg2.W ^= 0x400;
                     }
                     else
@@ -973,12 +974,12 @@ from this.. if you manually set the value above 29 (from either 2005 or
 2006), the wrapping from 29 obviously won't happen, and attrib data will be
 used as name table data.  the "y scroll" still wraps to 0 from 31, but
 without switching bit 11.  this explains why writing 240+ to 'Y' in 2005
-appeared as a negative scroll value.
-
+appeared as a negative scroll value.
+
   8421 8421 8421 8421
 v:0000 0011 1110 0000
   1111 1198 7654 3210         
-  5432 10
+  5432 10
 
 */
             YScroll++;
@@ -993,13 +994,13 @@ v:0000 0011 1110 0000
 /*                    if ((ppu.VRAMAddrReg2.W & 0x800))
                         ppu.VRAMAddrReg2.W &= ~0x800;
                     else                    
-                        ppu.VRAMAddrReg2.W |= 0x800;*/
-                        
+                        ppu.VRAMAddrReg2.W |= 0x800;*/
+                        
                     ppu.VRAMAddrReg2.W ^= 0x800;
                 }
                 else
                 {    /* on incremente juste */
-                    ppu.VRAMAddrReg2.W = (ppu.VRAMAddrReg2.W & (~0x3F0)) 
+                    ppu.VRAMAddrReg2.W = (ppu.VRAMAddrReg2.W & (~0x3F0)) 
                                        | ((((ppu.VRAMAddrReg2.W & 0x3F0) >> 5) + 1) << 5);
                 }
             }
@@ -1089,31 +1090,31 @@ v:0000 0011 1110 0000
     }
 
     for (i = 0; i < 240; i++)
-    {
-      _putpixel(Buffer, 257 + 0, i, 48);        
+    {
+      _putpixel(Buffer, 257 + 0, i, 48);        
       
-      _putpixel(Buffer, 257 + 1, i, ((ppu.TimedTmpPtr[y]*4))&0xFF);
-      _putpixel(Buffer, 257 + 2, i, ((ppu.TimedTmpPtr[y]*4)>>8)&0xFF);
-      _putpixel(Buffer, 257 + 3, i, ((ppu.TimedTmpPtr[y]*4)>>16)&0xFF);      
+      _putpixel(Buffer, 257 + 1, i, ((ppu.TimedTmpPtr[y]*4))&0xFF);
+      _putpixel(Buffer, 257 + 2, i, ((ppu.TimedTmpPtr[y]*4)>>8)&0xFF);
+      _putpixel(Buffer, 257 + 3, i, ((ppu.TimedTmpPtr[y]*4)>>16)&0xFF);      
       
-      _putpixel(Buffer, 257 + 4, i, ((ppu.TmpVScroll*4))&0xFF);
-      _putpixel(Buffer, 257 + 5, i, ((ppu.TmpVScroll*4)>>8)&0xFF);
-      _putpixel(Buffer, 257 + 6, i, ((ppu.TmpVScroll*4)>>16)&0xFF);
+      _putpixel(Buffer, 257 + 4, i, ((ppu.TmpVScroll*4))&0xFF);
+      _putpixel(Buffer, 257 + 5, i, ((ppu.TmpVScroll*4)>>8)&0xFF);
+      _putpixel(Buffer, 257 + 6, i, ((ppu.TmpVScroll*4)>>16)&0xFF);
       
-      _putpixel(Buffer, 257 + 7, i, ((ppu.TimedHScroll[i]*4)) & 0xFF);
-      _putpixel(Buffer, 257 + 8, i, ((ppu.TimedHScroll[i]*4)>>8) & 0xFF);
-      _putpixel(Buffer, 257 + 9, i, ((ppu.TimedHScroll[i]*4)>>16)& 0xFF);
-
-      _putpixel(Buffer, 257 + 10, i, 48);
+      _putpixel(Buffer, 257 + 7, i, ((ppu.TimedHScroll[i]*4)) & 0xFF);
+      _putpixel(Buffer, 257 + 8, i, ((ppu.TimedHScroll[i]*4)>>8) & 0xFF);
+      _putpixel(Buffer, 257 + 9, i, ((ppu.TimedHScroll[i]*4)>>16)& 0xFF);
+
+      _putpixel(Buffer, 257 + 10, i, 48);
       
-    }
-    
-
-    if (IRQScanHit != -1)
-    {
-        line(Buffer, 257+12, IRQScanHit, 257+22, IRQScanHit, 10);
-        line(Buffer, 257+12, IRQScanHit, 257+18, IRQScanHit-3, 10);
-        line(Buffer, 257+12, IRQScanHit, 257+18, IRQScanHit+3, 10);
+    }
+    
+
+    if (IRQScanHit != -1)
+    {
+        line(Buffer, 257+12, IRQScanHit, 257+22, IRQScanHit, 10);
+        line(Buffer, 257+12, IRQScanHit, 257+18, IRQScanHit-3, 10);
+        line(Buffer, 257+12, IRQScanHit, 257+18, IRQScanHit+3, 10);
     }
 
 NoDraw:
@@ -1140,7 +1141,7 @@ byte ReadPPUReg(byte RegID)
 {
 /* RegID is the nb of the reg 0-7 */
     unsigned char ret;
-    RegID &= 0x07;
+    RegID &= 0x07;
     
     switch (RegID)
     {
@@ -1187,12 +1188,12 @@ byte ReadPPUReg(byte RegID)
 void WritePPUReg(byte RegID, byte val)
 {
 /* RegID is the nb of the reg 0-7 */
-
-    RegID &= 0x07;
+
+    RegID &= 0x07;
 
     switch (RegID)
     {
-        default:/* For not writeable reg */
+        default:/* For not writeable reg */
         printf("WritePPU error\n");
         break;
     case 0:        /* Control Register 1 */
@@ -1221,7 +1222,7 @@ t:0000 1100 0000 0000 = d:0000 0011
 */
         ppu.TmpVRamPtr = ( (ppu.TmpVRamPtr & 0xF3FF)
                        | ( (ppu.ControlRegister1.s.NameTblAddr & 0x03) << 10 )
-                         );              
+                         );              
         
         break;
     case 1:        /* Control Register 2 */
@@ -1241,30 +1242,30 @@ t:0000 1100 0000 0000 = d:0000 0011
 2005 first write:
 t:0000 0000 0001 1111=d:1111 1000
 x=d:00000111
-*/
+*/
             //printf("2005[1st][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             ppu.VRAMAddrMode = 1;
 
             ppu.TmpVRamPtr = ((ppu.TmpVRamPtr & 0xFFE0) | ((val & 0xF8) >> 3));
             ppu.HScroll = val & 0x7;
-
-
+
+
             //printf("2005[1st][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             //printf("%d -> 2005 w1: 0x%04X (val: 0x%02X)\n", ScanLine, ppu.TmpVRamPtr, val);
         }
         else
         {
 /*
-2005 second write:
-
-  1111 1100 0000 0000
-  5432 1098 7654 3210
-  
-  8421 8421 8421 8421
+2005 second write:
+
+  1111 1100 0000 0000
+  5432 1098 7654 3210
+  
+  8421 8421 8421 8421
   -------------------
 t:0000 0011 1110 0000=d:1111 1000
 t:0111 0000 0000 0000=d:0000 0111
-*/
+*/
             //printf("2005[2nd][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             ppu.VRAMAddrMode = 0;
             ppu.TmpVRamPtr = ((ppu.TmpVRamPtr & ~(0x03E0)) | ((val & 0xF8) << 2));
@@ -1273,8 +1274,8 @@ t:0111 0000 0000 0000=d:0000 0111
             ppu.TmpVScroll = (val & 0x7);
             //if (ppu.TmpVScroll != 0)
                 //printf("2002: TmpVScroll == %d \n", ppu.TmpVScroll);
-
-            //printf("2005[2nd][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
+
+            //printf("2005[2nd][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
                         
             //printf("%d -> 2005 w2: 0x%04X (val: 0x%02X)\n", ScanLine, ppu.TmpVRamPtr, val);
 
@@ -1282,7 +1283,7 @@ t:0111 0000 0000 0000=d:0000 0111
         break;
     case 6:        /* VRAM Address register 2 */
         if (ppu.VRAMAddrMode == 0)
-        {
+        {
             //printf("2006[1st][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             ppu.VRAMAddrMode = 1;
 /*
@@ -1291,12 +1292,12 @@ t:0011 1111 0000 0000 = d:0011 1111
 t:1100 0000 0000 0000=0
 */
             ppu.TmpVRamPtr = ((ppu.TmpVRamPtr & 0x00FF) | ((val&0x3F) << 8));
-            //printf("2006[1st][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
+            //printf("2006[1st][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             
             //printf("%d -> 2006 w1: 0x%04X (val: 0x%02X)\n", ScanLine, ppu.TmpVRamPtr, val);
         }
         else
-        {
+        {
             //printf("2006[2nd][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             ppu.VRAMAddrMode = 0;
 /*
@@ -1317,12 +1318,12 @@ v=t
         break;
     }
 }
-
-void FillSprRamDMA(byte value)
-{
-    int i;
-    for (i = 0x00; i < 0x100; i++)
-    {
-        ppu.SPRRAM[i] = ReadMemory( value, i);
-    }
-}
+
+void FillSprRamDMA(byte value)
+{
+    int i;
+    for (i = 0x00; i < 0x100; i++)
+    {
+        ppu.SPRRAM[i] = ReadMemory( value, i);
+    }
+}

+ 80 - 79
src/ppu/ppu.old.c

@@ -1,24 +1,25 @@
-/*
- *  PPU emulation - The TI-NESulator Project
- *  ppu.c
- *  
- *  Define and emulate the PPU (Picture Processing Unit) of the real NES
- * 
- *  Created by Manoel TRAPIER.
- *  Copyright (c) 2003-2007 986Corp. All rights reserved.
- *
- *  $LastChangedDate: 2007-04-06 17:17:01 +0200 (ven, 06 avr 2007) $
- *  $Author: mtrapier $
- *  $HeadURL: file:///media/HD6G/SVNROOT/trunk/TI-NESulator/src/ppu.c $
- *  $Revision: 32 $
- *
- */
+/*
+ *  PPU emulation - The TI-NESulator Project
+ *  ppu.c
+ *  
+ *  Define and emulate the PPU (Picture Processing Unit) of the real NES
+ * 
+ *  Created by Manoel TRAPIER.
+ *  Copyright (c) 2003-2008 986Corp. All rights reserved.
+ *
+ *  $LastChangedDate: 2007-04-06 17:17:01 +0200 (ven, 06 avr 2007) $
+ *  $Author: mtrapier $
+ *  $HeadURL: file:///media/HD6G/SVNROOT/trunk/TI-NESulator/src/ppu.c $
+ *  $Revision: 32 $
+ *
+ */
 
 #include <allegro.h>
 #include <stdio.h>
-#include <stdlib.h>

+#include <stdlib.h>
+
 #include "ppu.h"
-#include "memory.h"
+#include "memory.h"
 #include "M6502.h"
 
 #define GetTileColor(tile,x1,y1)    ( ( ppu.Memory[tile+y1] & (1<<(7-x1)) ) == 0 ? 0 : 1 ) | \
@@ -36,14 +37,14 @@ volatile extern unsigned long IPS, FPS;
 byte NOBLIT = 0;
 
 int InitPPU(PPU * ppu)
-{
+{
     int i;
     if ((ppu->Memory = (unsigned char *) malloc(0x4000)) == NULL)
         return -1;
 
     NOBLIT = 0;
-
-    
+
+    
 
     /* Initializing register.. */
     ppu->In_VBlank = 0;
@@ -74,19 +75,19 @@ int InitPPU(PPU * ppu)
     ppu->DisplayAttributeTable = ~0;
     ppu->DisplayPalette = ~0;
     ppu->DisplayVRAM = ~0;
-
-
-    /* Set PPU registers */
-    set_page_rd_hook(0x20, ReadPPUReg);    
-    set_page_wr_hook(0x20, WritePPUReg);
-    
-    set_page_readable(0x20, true);
-    set_page_writeable(0x20, true);
-    
-    
-    /* Set PPU Ghost Registers */
-    for(i = 0x21; i < 0x40; i++)
-        set_page_ghost(i, true, 0x20);
+
+
+    /* Set PPU registers */
+    set_page_rd_hook(0x20, ReadPPUReg);    
+    set_page_wr_hook(0x20, WritePPUReg);
+    
+    set_page_readable(0x20, true);
+    set_page_writeable(0x20, true);
+    
+    
+    /* Set PPU Ghost Registers */
+    for(i = 0x21; i < 0x40; i++)
+        set_page_ghost(i, true, 0x20);
 
     return 0;
 }
@@ -532,19 +533,19 @@ void DebugSprites()
   }
   NOBLIT = 0;
 }
-
-#define GetTilePos(addr,x,y) (addr+x+(y*32))
-
-void ppu_displayNameTables()
-{
+
+#define GetTilePos(addr,x,y) (addr+x+(y*32))
+
+void ppu_displayNameTables()
+{
 int x, y, x1, y1, i;
 
 unsigned long Reg2;
 unsigned short ab_x, ab_y;
 unsigned short Color;
 unsigned short AttrByte;
-unsigned short TileID;  
-
+unsigned short TileID;  
+
     if (ppu.DisplayAttributeTable)
     {
 /* NT 2000 */
@@ -777,8 +778,8 @@ unsigned short TileID;
                     }
             }
     }
-
-}
+
+}
 
 
 int
@@ -790,13 +791,13 @@ unsigned long Reg2;
 unsigned short ab_x, ab_y;
 unsigned short Color;
 unsigned short AttrByte;
-unsigned short TileID;
+unsigned short TileID;
 static short LAST_FPS = 0;
-unsigned char XScroll, YScroll;
+unsigned char XScroll, YScroll;
 
     ppu.StatusRegister.b |= PPU_FLAG_SR_VBLANK;
         
-    BgColor = ppu.Memory[0x3F00];//0xC0;  
+    BgColor = ppu.Memory[0x3F00];//0xC0;  
 
 //goto NoDraw;
 
@@ -818,7 +819,7 @@ unsigned char XScroll, YScroll;
 * A faires les choses qui faut faire durant un lancé de vblank,
 * comme dessiner par ex..
 */
-
+
 
     if (((ppu.ControlRegister2.b & PPU_CR2_BGVISIBILITY) != 0) || ppu.ForceBgVisibility)
     {
@@ -844,20 +845,20 @@ v:0000 0100 0001 1111=t:0000 0100 0001 1111
   1111 1198 7654 3210         
   5432 10
 */
-            //if (y == 142)
-            //    printf("______________142 Ptr:0x%04X ____ 0x%04X\n", ppu.TimedTmpPtr[y], ppu.VRAMAddrReg2.W);
+            //if (y == 142)
+            //    printf("______________142 Ptr:0x%04X ____ 0x%04X\n", ppu.TimedTmpPtr[y], ppu.VRAMAddrReg2.W);
                 
             ppu.VRAMAddrReg2.W = (ppu.VRAMAddrReg2.W & 0xFBE0)
                | ((ppu.TimedTmpPtr[y]) & 0x041F)
                | 0x2000;
-
-            //if (y == 142)
+
+            //if (y == 142)
             //    printf("______________142 Ptr:0x%04X ____ 0x%04X\n", ppu.TimedTmpPtr[y], ppu.VRAMAddrReg2.W);
             
             TileID = (PPU_Rd(ppu.VRAMAddrReg2.W) << 4)
                | ppu.Bg_Pattern_Table;
 
-            XScroll = ppu.TimedHScroll[y];
+            XScroll = ppu.TimedHScroll[y];
            
             for (x = 0; x < 256; x++)
             {
@@ -1091,7 +1092,7 @@ byte ReadPPUReg(byte RegID)
 {
 /* RegID is the nb of the reg 0-7 */
     unsigned char ret;
-    RegID &= 0x07;
+    RegID &= 0x07;
     
     switch (RegID)
     {
@@ -1138,12 +1139,12 @@ byte ReadPPUReg(byte RegID)
 void WritePPUReg(byte RegID, byte val)
 {
 /* RegID is the nb of the reg 0-7 */
-
-    RegID &= 0x07;
+
+    RegID &= 0x07;
 
     switch (RegID)
     {
-        default:/* For not writeable reg */
+        default:/* For not writeable reg */
         printf("WritePPU error\n");
         break;
     case 0:        /* Control Register 1 */
@@ -1192,30 +1193,30 @@ t:0000 1100 0000 0000 = d:0000 0011
 2005 first write:
 t:0000 0000 0001 1111=d:1111 1000
 x=d:00000111
-*/
+*/
             //printf("2005[1st][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             ppu.VRAMAddrMode = 1;
 
             ppu.TmpVRamPtr = ((ppu.TmpVRamPtr & 0xFFE0) | ((val & 0xF8) >> 3));
             ppu.HScroll = val & 0x7;
-
-
+
+
             //printf("2005[1st][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             //printf("%d -> 2005 w1: 0x%04X (val: 0x%02X)\n", ScanLine, ppu.TmpVRamPtr, val);
         }
         else
         {
 /*
-2005 second write:
-
-  1111 1100 0000 0000
-  5432 1098 7654 3210
-  
-  8421 8421 8421 8421
+2005 second write:
+
+  1111 1100 0000 0000
+  5432 1098 7654 3210
+  
+  8421 8421 8421 8421
   -------------------
 t:0000 0011 1110 0000=d:1111 1000
 t:0111 0000 0000 0000=d:0000 0111
-*/
+*/
             //printf("2005[2nd][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             ppu.VRAMAddrMode = 0;
             ppu.TmpVRamPtr = ((ppu.TmpVRamPtr & 0xFC1F) | ((val & 0xF8) << 2));
@@ -1224,8 +1225,8 @@ t:0111 0000 0000 0000=d:0000 0111
             ppu.TmpVScroll = (val & 0x7);
             //if (ppu.TmpVScroll != 0)
                 //printf("2002: TmpVScroll == %d \n", ppu.TmpVScroll);
-
-            //printf("2005[2nd][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
+
+            //printf("2005[2nd][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
                         
             //printf("%d -> 2005 w2: 0x%04X (val: 0x%02X)\n", ScanLine, ppu.TmpVRamPtr, val);
 
@@ -1233,7 +1234,7 @@ t:0111 0000 0000 0000=d:0000 0111
         break;
     case 6:        /* VRAM Address register 2 */
         if (ppu.VRAMAddrMode == 0)
-        {
+        {
             //printf("2006[1st][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             ppu.VRAMAddrMode = 1;
 /*
@@ -1242,12 +1243,12 @@ t:0011 1111 0000 0000 = d:0011 1111
 t:1100 0000 0000 0000=0
 */
             ppu.TmpVRamPtr = ((ppu.TmpVRamPtr & 0xC0FF) | ((val&0x3F) << 8)) & 0x3FFF;
-            //printf("2006[1st][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
+            //printf("2006[1st][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             
             //printf("%d -> 2006 w1: 0x%04X (val: 0x%02X)\n", ScanLine, ppu.TmpVRamPtr, val);
         }
         else
-        {
+        {
             //printf("2006[2nd][%d]: 0x%02X [0x%04X]\n", ScanLine, val, ppu.TmpVRamPtr);
             ppu.VRAMAddrMode = 0;
 /*
@@ -1268,12 +1269,12 @@ v=t
         break;
     }
 }
-
-void FillSprRamDMA(byte value)
-{
-    int i;
-    for (i = 0x00; i < 0x100; i++)
-    {
-        ppu.SPRRAM[i] = ReadMemory( value, i);
-    }
-}
+
+void FillSprRamDMA(byte value)
+{
+    int i;
+    for (i = 0x00; i < 0x100; i++)
+    {
+        ppu.SPRRAM[i] = ReadMemory( value, i);
+    }
+}