From 02a8b245230cd1d4777ed24290fc3386016d6cf6 Mon Sep 17 00:00:00 2001 From: godzil Date: Thu, 21 Feb 2008 13:03:48 +0000 Subject: [PATCH] Some more --- src/NESCarts.c | 2 +- src/include/NESCarts.h | 2 +- src/include/mappers/manager.h | 2 +- src/include/memory/manager.h | 2 +- src/include/paddle.h | 2 +- src/include/plugins/manager.h | 2 +- src/include/ppu/ppu.debug.h | 2 +- src/include/ppu/ppu.h | 2 +- src/include/ppu/ppu.memory.h | 2 +- src/include/types.h | 2 +- src/main.c | 2 +- src/mappersmanager/mappers/aorom.h | 2 +- src/mappersmanager/mappers/cnrom.c | 2 +- src/mappersmanager/mappers/cnrom.h | 2 +- src/mappersmanager/mappers/genericmapper.c | 2 +- src/mappersmanager/mappers/iremh3001.h | 2 +- src/mappersmanager/mappers/mmc1.c | 2 +- src/mappersmanager/mappers/mmc1.h | 2 +- src/mappersmanager/mappers/mmc3.c | 2 +- src/mappersmanager/mappers/mmc3.h | 2 +- src/mappersmanager/mappers/norom.c | 2 +- src/mappersmanager/mappers/norom.h | 2 +- src/mappersmanager/mappers/unrom.c | 2 +- src/mappersmanager/mappers/unrom.h | 2 +- src/mappersmanager/unused/genericmapper.h | 2 +- src/mappersmanager/unused/mmc1.h | 46 ++-- src/mappersmanager/utils.c | 2 +- src/memorymanager/memory.c | 2 +- src/paddle.c | 2 +- src/pluginsmanager/manager.c | 2 +- src/ppu/oldppu.c | 34 +-- src/ppu/ppu.24.c | 237 ++++++++--------- src/ppu/ppu.c | 2 +- src/ppu/ppu.memory.c | 2 +- src/ppu/ppu.new.c | 110 ++++---- src/ppu/ppu.new2.c | 281 +++++++++++---------- src/ppu/ppu.old.c | 159 ++++++------ 37 files changed, 466 insertions(+), 463 deletions(-) diff --git a/src/NESCarts.c b/src/NESCarts.c index 6151647..79e540c 100755 --- a/src/NESCarts.c +++ b/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 $ diff --git a/src/include/NESCarts.h b/src/include/NESCarts.h index 4f8e345..d415a68 100755 --- a/src/include/NESCarts.h +++ b/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 $ diff --git a/src/include/mappers/manager.h b/src/include/mappers/manager.h index 1a517d5..44544fd 100755 --- a/src/include/mappers/manager.h +++ b/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$ diff --git a/src/include/memory/manager.h b/src/include/memory/manager.h index ad02902..24996f2 100755 --- a/src/include/memory/manager.h +++ b/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 $ diff --git a/src/include/paddle.h b/src/include/paddle.h index f736ee9..5ae281e 100755 --- a/src/include/paddle.h +++ b/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 $ diff --git a/src/include/plugins/manager.h b/src/include/plugins/manager.h index 2241eec..6b4b858 100644 --- a/src/include/plugins/manager.h +++ b/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$ diff --git a/src/include/ppu/ppu.debug.h b/src/include/ppu/ppu.debug.h index 3f27604..a597fe5 100644 --- a/src/include/ppu/ppu.debug.h +++ b/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 $ diff --git a/src/include/ppu/ppu.h b/src/include/ppu/ppu.h index c345d92..65701cb 100755 --- a/src/include/ppu/ppu.h +++ b/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 $ diff --git a/src/include/ppu/ppu.memory.h b/src/include/ppu/ppu.memory.h index 0999585..3c08eec 100644 --- a/src/include/ppu/ppu.memory.h +++ b/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 $ diff --git a/src/include/types.h b/src/include/types.h index a66e44e..edb8363 100755 --- a/src/include/types.h +++ b/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 $ diff --git a/src/main.c b/src/main.c index d811711..cd2a292 100755 --- a/src/main.c +++ b/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; diff --git a/src/mappersmanager/mappers/aorom.h b/src/mappersmanager/mappers/aorom.h index e8e7840..c134c6c 100755 --- a/src/mappersmanager/mappers/aorom.h +++ b/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 $ diff --git a/src/mappersmanager/mappers/cnrom.c b/src/mappersmanager/mappers/cnrom.c index cbc5a41..43cc8da 100755 --- a/src/mappersmanager/mappers/cnrom.c +++ b/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 $ diff --git a/src/mappersmanager/mappers/cnrom.h b/src/mappersmanager/mappers/cnrom.h index 660d8ba..fdc4b0a 100755 --- a/src/mappersmanager/mappers/cnrom.h +++ b/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 $ diff --git a/src/mappersmanager/mappers/genericmapper.c b/src/mappersmanager/mappers/genericmapper.c index b746580..59f44ab 100755 --- a/src/mappersmanager/mappers/genericmapper.c +++ b/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 $ diff --git a/src/mappersmanager/mappers/iremh3001.h b/src/mappersmanager/mappers/iremh3001.h index 99e1011..f10ed62 100755 --- a/src/mappersmanager/mappers/iremh3001.h +++ b/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 $ diff --git a/src/mappersmanager/mappers/mmc1.c b/src/mappersmanager/mappers/mmc1.c index 2605c0a..fe018e4 100755 --- a/src/mappersmanager/mappers/mmc1.c +++ b/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 $ diff --git a/src/mappersmanager/mappers/mmc1.h b/src/mappersmanager/mappers/mmc1.h index c8822c0..a279d93 100644 --- a/src/mappersmanager/mappers/mmc1.h +++ b/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 $ diff --git a/src/mappersmanager/mappers/mmc3.c b/src/mappersmanager/mappers/mmc3.c index d9ecc3f..ade835c 100755 --- a/src/mappersmanager/mappers/mmc3.c +++ b/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 $ diff --git a/src/mappersmanager/mappers/mmc3.h b/src/mappersmanager/mappers/mmc3.h index 36bd7ef..71495b9 100755 --- a/src/mappersmanager/mappers/mmc3.h +++ b/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 $ diff --git a/src/mappersmanager/mappers/norom.c b/src/mappersmanager/mappers/norom.c index e09bfff..1e2b379 100644 --- a/src/mappersmanager/mappers/norom.c +++ b/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 $ diff --git a/src/mappersmanager/mappers/norom.h b/src/mappersmanager/mappers/norom.h index 7053b3f..d1d0838 100644 --- a/src/mappersmanager/mappers/norom.h +++ b/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 $ diff --git a/src/mappersmanager/mappers/unrom.c b/src/mappersmanager/mappers/unrom.c index 7ebbb86..3495424 100755 --- a/src/mappersmanager/mappers/unrom.c +++ b/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 $ diff --git a/src/mappersmanager/mappers/unrom.h b/src/mappersmanager/mappers/unrom.h index f312052..1b25d52 100755 --- a/src/mappersmanager/mappers/unrom.h +++ b/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 $ diff --git a/src/mappersmanager/unused/genericmapper.h b/src/mappersmanager/unused/genericmapper.h index b746580..59f44ab 100755 --- a/src/mappersmanager/unused/genericmapper.h +++ b/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 $ diff --git a/src/mappersmanager/unused/mmc1.h b/src/mappersmanager/unused/mmc1.h index 250f3ff..3ac5e4d 100755 --- a/src/mappersmanager/unused/mmc1.h +++ b/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 ) diff --git a/src/mappersmanager/utils.c b/src/mappersmanager/utils.c index ef28bf6..2d25884 100755 --- a/src/mappersmanager/utils.c +++ b/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 $ diff --git a/src/memorymanager/memory.c b/src/memorymanager/memory.c index cc93381..7de92fd 100755 --- a/src/memorymanager/memory.c +++ b/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 $ diff --git a/src/paddle.c b/src/paddle.c index a4aa001..7e6a21e 100755 --- a/src/paddle.c +++ b/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 $ diff --git a/src/pluginsmanager/manager.c b/src/pluginsmanager/manager.c index 6f1a85b..05bbf3a 100644 --- a/src/pluginsmanager/manager.c +++ b/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$ diff --git a/src/ppu/oldppu.c b/src/ppu/oldppu.c index 482b3d6..2688b37 100755 --- a/src/ppu/oldppu.c +++ b/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 #include #include diff --git a/src/ppu/ppu.24.c b/src/ppu/ppu.24.c index beeddcb..647342a 100755 --- a/src/ppu/ppu.24.c +++ b/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 #include -#include +#include + #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); + } +} diff --git a/src/ppu/ppu.c b/src/ppu/ppu.c index c142721..8509d66 100755 --- a/src/ppu/ppu.c +++ b/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 $ diff --git a/src/ppu/ppu.memory.c b/src/ppu/ppu.memory.c index 3a80e52..b6431dc 100644 --- a/src/ppu/ppu.memory.c +++ b/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 $ diff --git a/src/ppu/ppu.new.c b/src/ppu/ppu.new.c index 8416e35..a87d3b0 100755 --- a/src/ppu/ppu.new.c +++ b/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 #include #include -#include -#include - +#include +#include + #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); + } +} diff --git a/src/ppu/ppu.new2.c b/src/ppu/ppu.new2.c index dcfc6f2..8acd928 100755 --- a/src/ppu/ppu.new2.c +++ b/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 #include -#include +#include + #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); + } +} diff --git a/src/ppu/ppu.old.c b/src/ppu/ppu.old.c index 2dc9bbf..56fcba2 100755 --- a/src/ppu/ppu.old.c +++ b/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 #include -#include +#include + #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); + } +}