Merge ..\zilmar into PropertySheetsTemp
This commit is contained in:
commit
e178ec96fc
|
@ -1,4 +1,4 @@
|
|||
// ============ RDB for PJ64 v2.2. GoodN64 v321 =====================================
|
||||
// ============ RDB for PJ64 v2.2. GoodN64 v321 =====================================
|
||||
// PJ64 v2.2 Official RDB
|
||||
// Not for use with PJ64 v1.6 or previous
|
||||
//---- START OF RDB FILE HEADER ---------------------------------------------------------
|
||||
|
@ -1386,14 +1386,16 @@ Status=Compatible
|
|||
[A5F667E1-DA1FBD1F-C:4A]
|
||||
Good Name=Derby Stallion 64 (J)
|
||||
Internal Name=DERBYSTALLION 64
|
||||
Save Type=FlashRam
|
||||
Status=Compatible
|
||||
AiCountPerBytes=200
|
||||
Sync Audio=0
|
||||
|
||||
[96BA4EFB-C9988E4E-C:0]
|
||||
Good Name=Derby Stallion 64 (J) (Beta)
|
||||
Internal Name=
|
||||
Status=Unsupported
|
||||
Save Type=FlashRam
|
||||
Status=Compatible
|
||||
CRC-Recalc=Yes
|
||||
|
||||
[630AA37D-896BD7DB-C:50]
|
||||
Good Name=Destruction Derby 64 (E) (M3)
|
||||
|
@ -1706,6 +1708,12 @@ Internal Name=DUKE NUKEM
|
|||
Status=Compatible
|
||||
Plugin Note=[video] depth problem; use Glide64
|
||||
|
||||
[FF14C1DA-167FDE92-C:45]
|
||||
Good Name=Duke Nukem 64 (Prototype)
|
||||
Internal Name=duke
|
||||
Status=Compatible
|
||||
Plugin Note=[video] depth problem; use Glide64
|
||||
|
||||
[1E12883D-D3B92718-C:46]
|
||||
Good Name=Duke Nukem 64 (F)
|
||||
Internal Name=DUKE NUKEM
|
||||
|
@ -1952,6 +1960,16 @@ RDRAM Size=8
|
|||
Culling=1
|
||||
AllowROMWrites=Yes
|
||||
|
||||
[C6E39C0A-D2726676-C:45]
|
||||
Good Name=F-ZERO X + Expansion Kit (U) [CART HACK]
|
||||
Status=Compatible
|
||||
Core Note=(see GameFAQ)
|
||||
Plugin Note=[video] (see GameFAQ)
|
||||
32bit=No
|
||||
RDRAM Size=8
|
||||
Culling=1
|
||||
AllowROMWrites=Yes
|
||||
|
||||
[3CECBCB8-6126BF07-C:50]
|
||||
Good Name=F1 Racing Championship (E) (M5)
|
||||
Internal Name=F1RacingChampionship
|
||||
|
@ -2112,21 +2130,22 @@ Culling=1
|
|||
|
||||
[F774EAEE-F0D8B13E-C:4A]
|
||||
Good Name=Fushigi no Dungeon - Fuurai no Shiren 2 - Oni Shuurai! Shiren Jou! (J)
|
||||
Internal Name=F3 ̳ײɼÚÝ2
|
||||
Status=Uncertain
|
||||
Core Note=?
|
||||
Plugin Note=[video] (see GameFAQ)
|
||||
32bit=No
|
||||
Clear Frame=2
|
||||
Internal Name=F3 フウライノシレン2
|
||||
Status=Issues (plugin)
|
||||
Plugin Note=[video] missing:graphics (see GameFAQ)
|
||||
Counter Factor=1
|
||||
Culling=1
|
||||
Self Texture=1
|
||||
32bit=No
|
||||
|
||||
//================ G ================
|
||||
[68FCF726-49658CBC-C:50]
|
||||
Good Name=G.A.S.P!! Fighters' NEXTream (E)
|
||||
Internal Name=G.A.S.P!!Fighters'NE
|
||||
Status=Compatible
|
||||
SMM-Cache=0
|
||||
SMM-FUNC=0
|
||||
SMM-PI DMA=0
|
||||
SMM-Protect=1
|
||||
SMM-TLB=0
|
||||
Culling=1
|
||||
RDRAM Size=8
|
||||
|
||||
|
@ -2134,6 +2153,11 @@ RDRAM Size=8
|
|||
Good Name=G.A.S.P!! Fighters' NEXTream (J)
|
||||
Internal Name=G.A.S.P!!Fighters'NE
|
||||
Status=Compatible
|
||||
SMM-Cache=0
|
||||
SMM-FUNC=0
|
||||
SMM-PI DMA=0
|
||||
SMM-Protect=1
|
||||
SMM-TLB=0
|
||||
RDRAM Size=8
|
||||
|
||||
[457B9CD9-09C55352-C:4A]
|
||||
|
@ -2406,8 +2430,8 @@ Counter Factor=1
|
|||
[3E70E866-4438BAE8-C:4A]
|
||||
Good Name=Heiwa Pachinko World 64 (J)
|
||||
Internal Name=HEIWA ÊßÁݺ Ü°ÙÄÞ64
|
||||
Status=Uncertain
|
||||
Plugin Note=[video] unsupported; use Glide64; errors:?
|
||||
Status=Issues (plugin)
|
||||
Plugin Note=[video] use Glide64; errors:various
|
||||
RDRAM Size=8
|
||||
|
||||
[AE90DBEB-79B89123-C:50]
|
||||
|
@ -2808,8 +2832,7 @@ Status=Compatible
|
|||
[C73AD016-48C5537D-C:4A]
|
||||
Good Name=Jangou Simulation Mahjong Dou 64 (J)
|
||||
Internal Name=Ï°¼Þ¬ÝÄÞ³64
|
||||
Status=Only intro/part OK
|
||||
Core Note=crashes
|
||||
Status=Compatible
|
||||
|
||||
[C99936D1-23D1D65D-C:4A]
|
||||
Good Name=Japan Pro Golf Tour 64 (J) [CART HACK]
|
||||
|
@ -3085,7 +3108,7 @@ Good Name=King Hill 64 - Extreme Snowboarding (J)
|
|||
Internal Name=KING HILL 64
|
||||
Status=Issues (core)
|
||||
Core Note=no sound
|
||||
Plugin Note=[video] errors:menu snowflakes
|
||||
Plugin Note=[video] errors:menu snowflakes; use Glide64
|
||||
RDRAM Size=8
|
||||
|
||||
[75BC6AD6-78552BC9-C:4A]
|
||||
|
@ -3447,6 +3470,7 @@ Self Texture=1
|
|||
Good Name=Mario Kart 64 (E) (V1.0)
|
||||
Internal Name=MARIOKART64
|
||||
Status=Compatible
|
||||
Cheat0=81001A38 2409,81001A3A 0002,81001A3C 2409,81001A3E 0002,81001C90 240A,81001C92 0002,81001C94 240A,81001C96 0002 //Multiplayer timing fix
|
||||
Plugin Note=[video] (see GameFAQ)
|
||||
Culling=1
|
||||
Primary Frame Buffer=1
|
||||
|
@ -3455,6 +3479,7 @@ Primary Frame Buffer=1
|
|||
Good Name=Mario Kart 64 (E) (V1.1)
|
||||
Internal Name=MARIOKART64
|
||||
Status=Compatible
|
||||
Cheat0=81001A38 2409,81001A3A 0002,81001A3C 2409,81001A3E 0002,81001C90 240A,81001C92 0002,81001C94 240A,81001C96 0002 //Multiplayer timing fix
|
||||
Plugin Note=[video] (see GameFAQ)
|
||||
Culling=1
|
||||
Primary Frame Buffer=1
|
||||
|
@ -3463,6 +3488,7 @@ Primary Frame Buffer=1
|
|||
Good Name=Mario Kart 64 (J) (V1.0)
|
||||
Internal Name=MARIOKART64
|
||||
Status=Compatible
|
||||
Cheat0=81001A38 2409,81001A3A 0002,81001A3C 2409,81001A3E 0002,81001C90 240A,81001C92 0002,81001C94 240A,81001C96 0002 //Multiplayer timing fix
|
||||
Plugin Note=[video] (see GameFAQ)
|
||||
Culling=1
|
||||
Primary Frame Buffer=1
|
||||
|
@ -3471,6 +3497,7 @@ Primary Frame Buffer=1
|
|||
Good Name=Mario Kart 64 (J) (V1.1)
|
||||
Internal Name=MARIOKART64
|
||||
Status=Compatible
|
||||
Cheat0=81001A38 2409,81001A3A 0002,81001A3C 2409,81001A3E 0002,81001C90 240A,81001C92 0002,81001C94 240A,81001C96 0002 //Multiplayer timing fix
|
||||
Plugin Note=[video] (see GameFAQ)
|
||||
Culling=1
|
||||
Primary Frame Buffer=1
|
||||
|
@ -3479,6 +3506,7 @@ Primary Frame Buffer=1
|
|||
Good Name=Mario Kart 64 (U)
|
||||
Internal Name=MARIOKART64
|
||||
Status=Compatible
|
||||
Cheat0=81001A38 2409,81001A3A 0002,81001A3C 2409,81001A3E 0002,81001C90 240A,81001C92 0002,81001C94 240A,81001C96 0002 //Multiplayer timing fix
|
||||
Plugin Note=[video] (see GameFAQ)
|
||||
Culling=1
|
||||
Primary Frame Buffer=1
|
||||
|
@ -3486,9 +3514,8 @@ Primary Frame Buffer=1
|
|||
[9A9890AC-F0C313DF-C:4A]
|
||||
Good Name=Mario no Photopi (J)
|
||||
Internal Name=ÏصÉÌ«ÄËß°
|
||||
Status=Needs video plugin
|
||||
Plugin Note=[video] HLE not supported; major errors
|
||||
HLE GFX=No
|
||||
Status=Needs RSP plugin
|
||||
Plugin Note=[rsp] needs semaphore lock
|
||||
|
||||
[9C663069-80F24A80-C:50]
|
||||
Good Name=Mario Party (E) (M3)
|
||||
|
@ -4223,7 +4250,8 @@ Culling=1
|
|||
[5B9B1618-1B43C649-C:4A]
|
||||
Good Name=Nushi Duri 64 - Shiokaze ni Notte (J)
|
||||
Internal Name=ǼÂÞØ64¼µ¶¾ÞÆɯÃ
|
||||
Status=Unsupported
|
||||
Status=Compatible
|
||||
Plugin Note=[video] missing:lots; use Glide64
|
||||
|
||||
//================ O ================
|
||||
[812289D0-C2E53296-C:50]
|
||||
|
@ -5071,8 +5099,7 @@ RDRAM Size=8
|
|||
[272B690F-AD0A7A77-C:4A]
|
||||
Good Name=Robot Ponkottsu 64 - 7tsu no Umi no Caramel (J)
|
||||
Internal Name=Robopon64
|
||||
Status=Uncertain
|
||||
Core Note=TLB used?
|
||||
Status=Compatible
|
||||
Clear Frame=1
|
||||
Save Type=16kbit Eeprom
|
||||
|
||||
|
@ -6769,7 +6796,7 @@ Good Name=Twisted Edge Extreme Snowboarding (E)
|
|||
Internal Name=TWISTED EDGE
|
||||
Status=Issues (core)
|
||||
Core Note=no sound
|
||||
Plugin Note=[video] errors:menu snowflakes;
|
||||
Plugin Note=[video] errors:menu snowflakes; use Glide64
|
||||
RDRAM Size=8
|
||||
|
||||
[BBC99D32-117DAA80-C:45]
|
||||
|
@ -6777,7 +6804,7 @@ Good Name=Twisted Edge Extreme Snowboarding (U)
|
|||
Internal Name=TWISTED EDGE
|
||||
Status=Issues (core)
|
||||
Core Note=no sound
|
||||
Plugin Note=[video] errors:menu snowflakes;
|
||||
Plugin Note=[video] errors:menu snowflakes; use Glide64
|
||||
Culling=1
|
||||
RDRAM Size=8
|
||||
|
||||
|
@ -8598,3 +8625,44 @@ Core Note=slow
|
|||
Good Name=Yoshi's Story BootEmu (PD)
|
||||
Internal Name=YOSHI BOOT EMU
|
||||
Status=Unsupported
|
||||
|
||||
[5A4C57FE-AA6807C4-C:41]
|
||||
Good Name=NUS-64 Aging Cassette
|
||||
Internal Name=AGING ROM
|
||||
Status=Needs RSP plugin
|
||||
|
||||
[BB0598C7-AE917C5D-C:0]
|
||||
Good Name=64GB Checker V1.05
|
||||
Internal Name=64GB Checker V1.05
|
||||
Status=Compatible
|
||||
|
||||
[816BE37F-9BCE6CAA-C:0]
|
||||
Good Name=Dolphin Controller Test
|
||||
Internal Name=Dolphin Controller Test
|
||||
Status=Compatible
|
||||
|
||||
[6F46DA42-D971A312-C:45]
|
||||
Good Name=Ronaldinho's Soccer 64
|
||||
Internal Name=RONALDINHO SOCCER
|
||||
Status=Compatible
|
||||
Plugin Note=[video] errors:shadows; use Glide64
|
||||
AiCountPerBytes=200
|
||||
Counter Factor=1
|
||||
Culling=1
|
||||
|
||||
[A01B8D3B-E0FAC46F-C:0]
|
||||
Good Name=Photo Viewer
|
||||
Internal Name=Photo Viewer
|
||||
Status=Compatible
|
||||
|
||||
[2F33EFCA-6CA95A9C-C:0]
|
||||
Good Name=funnelcube (PD)
|
||||
Internal Name=funnelcube
|
||||
Status=Compatible
|
||||
|
||||
[D55891EB-2BEFD9C8-C:0]
|
||||
Good Name=MGC 2011 Demo (PD)
|
||||
Internal Name=shut up and code
|
||||
CPU Type=Interpreter
|
||||
RDRAM Size=8
|
||||
Status=Unsupported
|
||||
|
|
|
@ -8,17 +8,17 @@
|
|||
#4 # "6 Mai 2015" // Date
|
||||
|
||||
//About DLL Dialog
|
||||
#5 # "Langue en cours"
|
||||
#5 # "Langue actuelle"
|
||||
#6 # "Auteur"
|
||||
#7 # "Version"
|
||||
#8 # "Date"
|
||||
#9 # "Visiter le Site Web"
|
||||
#10 # "Base de données des ROMs (.RDB)"
|
||||
#11 # "Fichier des Codes Cheats (.CHT)"
|
||||
#12 # "Info sur les ROM étendues (.RDX)"
|
||||
#9 # "Visiter le site web"
|
||||
#10 # "Base de données des ROM (.rdb)"
|
||||
#11 # "Fichier des cheats (.cht)"
|
||||
#12 # "Infos sur les ROM étendues (.rdx)"
|
||||
|
||||
//About INI title
|
||||
#20 # "A Propos Des Fichiers Config"
|
||||
#20 # "À propos des fichiers de configuration"
|
||||
|
||||
/*********************************************************************************
|
||||
* Menu *
|
||||
|
@ -26,55 +26,55 @@
|
|||
//File Menu
|
||||
#100# "&Fichier"
|
||||
#101# "&Ouvrir une ROM"
|
||||
#102# "&Info sur la ROM..."
|
||||
#103# "Démarrer l'Emulation"
|
||||
#104# "Arrêter l'Emulation"
|
||||
#105# "Choisir le Répertoire ROM..."
|
||||
#106# "Rafraîchir la Liste de ROM"
|
||||
#107# "ROM Récente"
|
||||
#108# "Répertoires ROM Récente"
|
||||
#102# "&Infos sur la ROM…"
|
||||
#103# "Démarrer l’émulation"
|
||||
#104# "Arrêter l’émulation"
|
||||
#105# "Choisir le répertoire des ROM…"
|
||||
#106# "Rafraîchir la liste des ROM"
|
||||
#107# "ROM récentes"
|
||||
#108# "Répertoires des ROM récentes"
|
||||
#109# "&Quitter"
|
||||
|
||||
//System Menu
|
||||
#120# "&Système"
|
||||
#121# "&Redémarrer"
|
||||
#122# "&Pause"
|
||||
#123# "&Capture d'Ecran"
|
||||
#123# "&Capture d’écran"
|
||||
#124# "Limiter les FPS"
|
||||
#125# "&Sauvegarder l'Etat"
|
||||
#126# "Sauvegarder Sous..."
|
||||
#127# "&Charger un Etat"
|
||||
#128# "Charger..."
|
||||
#129# "Sauvegarder l'&Etat en Cours"
|
||||
#130# "Cheats..."
|
||||
#131# "Bouton GameShark (Cheats)"
|
||||
#125# "&Sauvegarder l’état"
|
||||
#126# "Sauvegarder sous…"
|
||||
#127# "&Charger un état"
|
||||
#128# "Charger…"
|
||||
#129# "Sauvegarder l’&état actuel"
|
||||
#130# "Cheats…"
|
||||
#131# "Bouton GameShark (cheats)"
|
||||
#132# "R&eprendre"
|
||||
#133# "Redémarrage &Logiciel"
|
||||
#134# "Redémarrage &Matériel"
|
||||
#133# "Redémarrage &logiciel"
|
||||
#134# "Redémarrage &matériel"
|
||||
|
||||
//Options Menu
|
||||
#140# "&Options"
|
||||
#141# "&Plein écran"
|
||||
#142# "&Afficher la Fenêtre au Premier Plan"
|
||||
#143# "Configurer le Plugin Graphique..."
|
||||
#144# "Configurer le Plugin Audio..."
|
||||
#145# "Configurer le Plugin Contrôleur..."
|
||||
#146# "Configurer le Plugin RSP..."
|
||||
#147# "Afficher l'Utilisation du CPU"
|
||||
#148# "&Paramètres..."
|
||||
#142# "&Toujours visible"
|
||||
#143# "Configurer le plugin graphique…"
|
||||
#144# "Configurer le plugin audio…"
|
||||
#145# "Configurer le plugin contrôleur…"
|
||||
#146# "Configurer le plugin RSP…"
|
||||
#147# "Afficher l’utilisation du CPU"
|
||||
#148# "&Paramètres…"
|
||||
|
||||
//Debugger Menu
|
||||
#160# "&Débugeur"
|
||||
#160# "&Débogueur"
|
||||
|
||||
//Language Menu
|
||||
#175# "&Langage"
|
||||
|
||||
//Help MenuAide"
|
||||
//Help Menu
|
||||
#180# "&Aide"
|
||||
#181# "A Propos Des Fichiers Conf&ig"
|
||||
#182# "&A Propos De Project64"
|
||||
#183# "&Forum de Support"
|
||||
#184# "Site &Web"
|
||||
#181# "À propos des fichiers de conf&iguration"
|
||||
#182# "À &propos de Project64"
|
||||
#183# "&Forum de support"
|
||||
#184# "Site &web"
|
||||
|
||||
//Current Save Slot menu
|
||||
#190# "Défaut"
|
||||
|
@ -90,94 +90,94 @@
|
|||
#200# "Emplacement 10"
|
||||
|
||||
//Pop up Menu
|
||||
#210# "Lancer le Jeu"
|
||||
#211# "Information sur la ROM"
|
||||
#212# "Editer les Paramètres du Jeu"
|
||||
#213# "Editer les Cheats"
|
||||
#214# "Plugin Graphiques"
|
||||
#210# "Lancer le jeu"
|
||||
#211# "Informations sur la ROM"
|
||||
#212# "Éditer les paramètres du jeu"
|
||||
#213# "Éditer les cheats"
|
||||
#214# "Plugin graphique"
|
||||
|
||||
//Alternate Name to save Slot
|
||||
#220# "Sauvegarder l'Emplacement - Défaut"
|
||||
#221# "Sauvegarder l'Emplacement - 1"
|
||||
#222# "Sauvegarder l'Emplacement - 2"
|
||||
#223# "Sauvegarder l'Emplacement - 3"
|
||||
#224# "Sauvegarder l'Emplacement - 4"
|
||||
#225# "Sauvegarder l'Emplacement - 5"
|
||||
#226# "Sauvegarder l'Emplacement - 6"
|
||||
#227# "Sauvegarder l'Emplacement - 7"
|
||||
#228# "Sauvegarder l'Emplacement - 8"
|
||||
#229# "Sauvegarder l'Emplacement - 9"
|
||||
#230# "Sauvegarder l'Emplacement - 10"
|
||||
#220# "Emplacement de sauvegarde - Défaut"
|
||||
#221# "Emplacement de sauvegarde - 1"
|
||||
#222# "Emplacement de sauvegarde - 2"
|
||||
#223# "Emplacement de sauvegarde - 3"
|
||||
#224# "Emplacement de sauvegarde - 4"
|
||||
#225# "Emplacement de sauvegarde - 5"
|
||||
#226# "Emplacement de sauvegarde - 6"
|
||||
#227# "Emplacement de sauvegarde - 7"
|
||||
#228# "Emplacement de sauvegarde - 8"
|
||||
#229# "Emplacement de sauvegarde - 9"
|
||||
#230# "Emplacement de sauvegarde - 10"
|
||||
|
||||
// Menu Descriptions
|
||||
#250# "Ouvrir une Image ROM N64"
|
||||
#251# "Afficher les informations concernant l'image chargé"
|
||||
#252# "Lancer l'émulation d'une image ROM chargé"
|
||||
#253# "Arrêter l'émulation d'une image ROM chargé"
|
||||
#254# "Sélectionner le répertoire de la ROM"
|
||||
#255# "Rafraîchir la liste de ROMS en cours dans le navigateur de ROM"
|
||||
#256# "Quitter l'application"
|
||||
#257# "Redémarrer l'image de la ROM en cours (recharger tous les changements de paramètres)"
|
||||
#258# "Mettre en pause/reprendre l'émulation de la ROM lancé en cours"
|
||||
#259# "Générer une image bitmap de l'écran en cours"
|
||||
#250# "Ouvrir une image ROM N64"
|
||||
#251# "Afficher les informations concernant l’image chargée"
|
||||
#252# "Lancer l’émulation de l’image ROM chargée"
|
||||
#253# "Arrêter l’émulation de l’image ROM chargée"
|
||||
#254# "Sélectionner le répertoire des ROM"
|
||||
#255# "Rafraîchir la liste actuelle des ROM dans le navigateur de ROM"
|
||||
#256# "Quitter l’application"
|
||||
#257# "Redémarrer l’image ROM actuelle (recharger tous les changements de paramètres)"
|
||||
#258# "Mettre en pause/reprendre l’émulation de la ROM lancée"
|
||||
#259# "Générer une image bitmap de l’écran actuel"
|
||||
#260# "Limiter les FPS à la bonne vitesse de la N64"
|
||||
#261# "Sauvegarder l'état du système en cours"
|
||||
#262# "Sauvegarder l'état du système en cours dans l'emplacement du fichier sélectionné"
|
||||
#263# "Charger l'état du système sauvegardé"
|
||||
#264# "Choisir un fichier d'état système sauvegardé à charger"
|
||||
#265# "Activer/Désactiver les cheats GameShark"
|
||||
#266# "Le bouton GameShark est utilisé avec des cheats spécifique."
|
||||
#267# "Basculer l'émulation du mode fenêtré vers le mode plein écran."
|
||||
#261# "Sauvegarder l’état actuel du système"
|
||||
#262# "Sauvegarder l’état actuel du système à l’emplacement du fichier sélectionné"
|
||||
#263# "Charger l’état du système sauvegardé"
|
||||
#264# "Choisir un fichier d’état système sauvegardé à charger"
|
||||
#265# "Activer/désactiver les cheats GameShark"
|
||||
#266# "Le bouton GameShark est utilisé avec des cheats spécifiques."
|
||||
#267# "Basculer l’émulation du mode fenêtré vers le mode plein écran."
|
||||
#268# "Permet de mettre la fenêtre Project64 au premier plan"
|
||||
#269# "Configurer le plugin graphique"
|
||||
#270# "Configurer le plugin audio"
|
||||
#271# "Configurer le plugin contrôleur (ex : choisir les touches)"
|
||||
#272# "Configurer le plugin RSP"
|
||||
#273# "Afficher l'utilisation du CPU de l'émulateur répartie sur les différentes tâches"
|
||||
#273# "Afficher l’utilisation du CPU de l’émulateur répartie sur les différentes tâches"
|
||||
#274# "Voir/changer les paramètres pour cette application"
|
||||
#275# "Voir le manuel pour l'application"
|
||||
#276# "Voir la FAQ pour l'application"
|
||||
#278# "A Propos de l'application et des auteurs"
|
||||
#277# "A Propos des auteurs sur les fichiers de support"
|
||||
#279# "Ouvrir l'image ROM ouverte précédemment"
|
||||
#275# "Voir le manuel pour l’application"
|
||||
#276# "Voir la FAQ pour l’application"
|
||||
#278# "À propos de l’application et des auteurs"
|
||||
#277# "À propos des auteurs sur les fichiers de support"
|
||||
#279# "Ouvrir l’image ROM ouverte précédemment"
|
||||
#280# "Choisir ce répertoire comme votre répertoire de jeu"
|
||||
#281# "Changer l'application pour utiliser cette langue"
|
||||
#282# "Choisir l'emplacement de sauvegarde pour l'état sauvegardé"
|
||||
#281# "Changer l’application pour utiliser cette langue"
|
||||
#282# "Choisir l’emplacement de sauvegarde pour l’état sauvegardé"
|
||||
#283# "Jouer au jeu sélectionné"
|
||||
#284# "Information concernant le jeu sélectionné"
|
||||
#285# "Editer les paramètres pour le jeu sélectionné"
|
||||
#286# "Editer les cheats pour le jeu sélectionné"
|
||||
#284# "Informations concernant le jeu sélectionné"
|
||||
#285# "Éditer les paramètres pour le jeu sélectionné"
|
||||
#286# "Éditer les cheats pour le jeu sélectionné"
|
||||
|
||||
/*********************************************************************************
|
||||
* ROM Browser *
|
||||
*********************************************************************************/
|
||||
//ROM Browser Fields
|
||||
#300# "Nom du Fichier"
|
||||
#301# "Nom Interne"
|
||||
#302# "Nom Correcte (GOODN64)"
|
||||
#300# "Nom du fichier"
|
||||
#301# "Nom interne"
|
||||
#302# "Nom correct (GoodN64)"
|
||||
#303# "Statut"
|
||||
#304# "Taille de la ROM"
|
||||
#305# "Notes (noyau)"
|
||||
#306# "Notes (plugins par défaut)"
|
||||
#307# "Notes (utilisateur)"
|
||||
#308# "ID de la Cartouche"
|
||||
#308# "ID de la cartouche"
|
||||
#309# "Constructeur"
|
||||
#310# "Pays"
|
||||
#311# "Développeur"
|
||||
#312# "CRC1"
|
||||
#313# "CRC2"
|
||||
#314# "Puce CIC"
|
||||
#315# "Date de Sortie"
|
||||
#315# "Date de sortie"
|
||||
#316# "Genre"
|
||||
#317# "Joueurs"
|
||||
#318# "Forcer le Feedback"
|
||||
#319# "Format de Fichier"
|
||||
#318# "Forcer le feedback"
|
||||
#319# "Format de fichier"
|
||||
|
||||
//Select ROM
|
||||
#320# "Sélectionner le Répertoire ROM en cours"
|
||||
#320# "Sélectionner le répertoire de ROM actuel"
|
||||
|
||||
//Messages
|
||||
#340# "Mauvaise ROM ? Utilisez GoodN64 & vérifier la mise à jour de RDB"
|
||||
#340# "Mauvaise ROM ? Utilisez GoodN64 et vérifiez la mise à jour de RDB"
|
||||
|
||||
/*********************************************************************************
|
||||
* Options *
|
||||
|
@ -189,122 +189,122 @@
|
|||
#401# "Plugins"
|
||||
#402# "Répertoires"
|
||||
#403# "Options"
|
||||
#404# "Sélection de la ROM"
|
||||
#405# "Avancée"
|
||||
#406# "Paramètre Général"
|
||||
#407# "Intégration du Shell"
|
||||
#404# "Navigateur de ROM"
|
||||
#405# "Avancé"
|
||||
#406# "Paramètres généraux"
|
||||
#407# "Intégration au shell"
|
||||
#408# "Notes"
|
||||
#409# "Raccourcis Clavier"
|
||||
#409# "Raccourcis clavier"
|
||||
#410# "Statut"
|
||||
#411# "Recompileur"
|
||||
#411# "Recompilateur"
|
||||
|
||||
//Plugin Dialog
|
||||
#420# "A Propos De"
|
||||
#420# "À propos"
|
||||
#421# " Plugin RSP (Reality Signal Processor) : "
|
||||
#422# " Plugin Vidéo (graphique) : "
|
||||
#423# " Plugin Audio (son) : "
|
||||
#424# " Plugin Input (contrôleur) : "
|
||||
#422# " Plugin vidéo (graphique) : "
|
||||
#423# " Plugin audio (son) : "
|
||||
#424# " Plugin input (contrôleur) : "
|
||||
#425# "Graphismes HLE"
|
||||
#426# "Audio HLE"
|
||||
#427# "** Utiliser le Système de Plugin **"
|
||||
#427# "** Utiliser le plugin système **"
|
||||
|
||||
//Directory Dialog
|
||||
#440# " Répertoire Plugins : "
|
||||
#441# " Répertoire ROM : "
|
||||
#442# " Répertoire des Sauvegardes N64 natif : "
|
||||
#443# " Répertoire des Etats Sauvegardés : "
|
||||
#444# " Répertoire des Captures d'Ecrans : "
|
||||
#445# "Dernier Dossier d'où la ROM a été ouverte"
|
||||
#446# "Sélectionner le Répertoire Plugin"
|
||||
#447# "Sélectionner le Répertoire ROM"
|
||||
#448# "Sélectionner le Répertoire des Sauvegardes N64 natif"
|
||||
#449# "Sélectionner le Répertoire des Etats Sauvegardés"
|
||||
#450# "Sélectionner le Répertoire des Copies d'Ecrans"
|
||||
#451# " Répertoire du Pack de Texture : "
|
||||
#452# "Sélectionner le Répertoire du Pack de Texture"
|
||||
#440# " Répertoire des plugins : "
|
||||
#441# " Répertoire des ROM : "
|
||||
#442# " Répertoire des sauvegardes N64 natives : "
|
||||
#443# " Répertoire des sauvegardes d’état : "
|
||||
#444# " Répertoire des captures d’écran : "
|
||||
#445# "Dernier répertoire d’où la ROM a été ouverte"
|
||||
#446# "Sélectionner le répertoire des plugins"
|
||||
#447# "Sélectionner le répertoire des ROM"
|
||||
#448# "Sélectionner le répertoire des sauvegardes N64 natives"
|
||||
#449# "Sélectionner le répertoire des sauvegardes d’état"
|
||||
#450# "Sélectionner le répertoire des captures d’écran"
|
||||
#451# " Répertoire du pack de textures : "
|
||||
#452# "Sélectionner le répertoire du pack de texture"
|
||||
|
||||
//Options (general) Tab
|
||||
#460# "Emulation en pause quand la fenêtre n'est pas active"
|
||||
#461# "Entrer en mode Plein Ecran pendant le Chargement d'une ROM"
|
||||
#462# "Cacher les Paramètres Avancées"
|
||||
#463# "Retenir les Cheats Sélectionnés"
|
||||
#464# "Désactiver l'Ecran de Veille pendant le Lancement d'une ROM"
|
||||
#465# "Afficher la Vitesse"
|
||||
#466# "Vitesse Affiché"
|
||||
#460# "Émulation en pause quand la fenêtre est inactive"
|
||||
#461# "Passer en plein écran au chargement d’une ROM"
|
||||
#462# "Cacher les paramètres avancés"
|
||||
#463# "Retenir les cheats sélectionnés"
|
||||
#464# "Désactiver l’écran de veille quand une ROM est lancée"
|
||||
#465# "Afficher la vitesse"
|
||||
#466# "Vitesse affichée :"
|
||||
#467# "Vérifier si Project64 est déjà lancé"
|
||||
|
||||
//ROM Browser Tab
|
||||
#480# "Max de ROMS à retenir (0-10) :"
|
||||
#481# "ROMs"
|
||||
#480# "Max de ROM à retenir (0-10) :"
|
||||
#481# "ROM"
|
||||
#482# "Max de répertoires ROM à retenir (0-10) :"
|
||||
#483# "répertoires"
|
||||
#484# "Utiliser le Navigateur de ROM"
|
||||
#485# "Utiliser la Récursivité du Répertoire"
|
||||
#486# "Champs Disponible :"
|
||||
#487# "Champs dans l'ordre :"
|
||||
#484# "Utiliser le navigateur de ROM"
|
||||
#485# "Utiliser également les sous-répertoires"
|
||||
#486# "Champs disponibles :"
|
||||
#487# "Champs dans l’ordre :"
|
||||
#488# "Ajouter ->"
|
||||
#489# "<- Supprimer"
|
||||
#490# "Haut"
|
||||
#491# "Bas"
|
||||
#492# "Rafraîchir Automatique le Navigateur"
|
||||
#492# "Rafraîchir automatiquement le navigateur"
|
||||
|
||||
//Advanced Options
|
||||
#500# "La plupart de ces changements ne prendront pas effet jusqu'à ce qu'une nouvelle ROM soit ouverte ou que la ROM en cours soit redémarré."
|
||||
#501# "Noyau par Défaut"
|
||||
#502# "Style du Noyau du CPU :"
|
||||
#503# "Méthodes Self mod"
|
||||
#504# "Taille de la Mémoire par Défaut :"
|
||||
#505# "Lien Avancée du Bloc :"
|
||||
#506# "Démarrer l'émulation après le chargement des ROMS"
|
||||
#500# "La plupart de ces changements ne prendront pas effet avant qu’une nouvelle ROM soit ouverte ou que la ROM actuelle soit redémarrée."
|
||||
#501# "Noyau par défaut"
|
||||
#502# "Style de noyau CPU :"
|
||||
#503# "Méthodes Self Mod"
|
||||
#504# "Taille de la mémoire par défaut :"
|
||||
#505# "Liaison de blocs avancée"
|
||||
#506# "Démarrer l’émulation au chargement d’une ROM"
|
||||
#507# "Préférer les réglages du fichier RDB à ceux par défaut"
|
||||
#508# "Compresser Automatiquement les Etats Sauvegardés"
|
||||
#509# "Activer le Débugeur"
|
||||
#508# "Compresser automatiquement les sauvegardes d’état"
|
||||
#509# "Activer le débogueur"
|
||||
#510# "Cache"
|
||||
#511# "PI DMA"
|
||||
#512# "Lance le Changement"
|
||||
#513# "Mémoire Protégé"
|
||||
#514# "TLB Non Défini"
|
||||
#512# "Lancer si modifié"
|
||||
#513# "Protéger la mémoire"
|
||||
#514# "TLB unmapping"
|
||||
|
||||
//ROM Options
|
||||
#520# "Style de Noyau :"
|
||||
#521# "Taux Rafraîchissement VI :"
|
||||
#522# "Taille de la Mémoire :"
|
||||
#523# "Lien Avancée du Bloc"
|
||||
#524# "Type de Sauvegarde :"
|
||||
#525# "Compteur (Facteur) :"
|
||||
#526# "Augmentation Compilé du Tampon"
|
||||
#520# "Style de noyau CPU :"
|
||||
#521# "Taux de rafraîchissement VI :"
|
||||
#522# "Taille de la mémoire :"
|
||||
#523# "Liaison de blocs avancée"
|
||||
#524# "Type de sauvegarde :"
|
||||
#525# "Facteur compteur :"
|
||||
#526# "Plus grand tampon de compilation"
|
||||
#527# "Utiliser le TLB"
|
||||
#528# "Registre en Cache"
|
||||
#529# "Retarder l'Interruption SI"
|
||||
#530# "SP Rapide"
|
||||
#528# "Mettre en cache les registres"
|
||||
#529# "Retarder l’interruption SI"
|
||||
#530# "SP rapide"
|
||||
#531# "Défaut"
|
||||
#532# "Signal Audio RSP"
|
||||
#533# "Correction du Timing Audio"
|
||||
#534# "Méthode Fonction Recherche :"
|
||||
#535# "Méthode Personnalisé self mod"
|
||||
#536# "Synchronisation Audio"
|
||||
#537# "Compteur AI par byte"
|
||||
#538# "Moteur 32-bit"
|
||||
#539# "Retarder l'Interruption DP"
|
||||
#532# "Signal audio RSP"
|
||||
#533# "Correction du timing audio"
|
||||
#534# "Méthode de recherche de fonctions :"
|
||||
#535# "Méthode self mod personnalisée"
|
||||
#536# "Synchronisation audio"
|
||||
#537# "Compteur AI par octet"
|
||||
#538# "Moteur 32 bits"
|
||||
#539# "Retarder l’interruption DP"
|
||||
|
||||
//Core Styles
|
||||
#540# "Interpréteur"
|
||||
#541# "Recompileur"
|
||||
#542# "Synchroniser les Noyaux"
|
||||
#541# "Recompilateur"
|
||||
#542# "Synchroniser les noyaux"
|
||||
|
||||
//Self Mod Methods
|
||||
#560# "Aucun"
|
||||
#561# "Cache"
|
||||
#562# "Mémoire Protégé"
|
||||
#563# "Vérifier la Mémoire & le Cache"
|
||||
#564# "Changer la Mémoire & le Cache"
|
||||
#565# "Vérifier la Mémoire Avancée"
|
||||
#566# "Vider le Code du Cache"
|
||||
#562# "Protéger la mémoire"
|
||||
#563# "Vérifier la mémoire et le cache"
|
||||
#564# "Changer la mémoire et le cache"
|
||||
#565# "Vérifier la mémoire avancée"
|
||||
#566# "Vider le code du cache"
|
||||
|
||||
//Function Lookup method
|
||||
#570# "Table de Recherche Physique"
|
||||
#571# "Table de Recherche Virtuelle"
|
||||
#572# "Changer la Mémoire"
|
||||
#570# "Table de recherche physique"
|
||||
#571# "Table de recherche virtuelle"
|
||||
#572# "Changer la mémoire"
|
||||
|
||||
//RDRAM Size
|
||||
#580# "4 Mo"
|
||||
|
@ -316,59 +316,59 @@
|
|||
|
||||
//Save Type
|
||||
#620# "Par défaut"
|
||||
#621# "4-kbit EEPROM"
|
||||
#622# "16-kbit EEPROM"
|
||||
#623# "32-kbyte SRAM"
|
||||
#621# "4 kbit EEPROM"
|
||||
#622# "16 kbit EEPROM"
|
||||
#623# "32 ko SRAM"
|
||||
#624# "Flash RAM"
|
||||
|
||||
//Shell Integration Tab
|
||||
#640# "Associer Fichier d'Extension :"
|
||||
#640# "Associer l’extension de fichier :"
|
||||
|
||||
//ROM Notes
|
||||
#660# "Statut ROM :"
|
||||
#661# "Note Noyau :"
|
||||
#662# "Note Plugin :"
|
||||
#661# "Note noyau :"
|
||||
#662# "Note plugin :"
|
||||
|
||||
// Accelerator Selector
|
||||
#680# "Etat du CPU :"
|
||||
#681# "Menu Objet :"
|
||||
#682# "Touches en Cours :"
|
||||
#683# "Sélectionner Nouveau Raccourci :"
|
||||
#684# "Actuellement Assigné à :"
|
||||
#680# "État du CPU :"
|
||||
#681# "Menu objet :"
|
||||
#682# "Touches actuelles :"
|
||||
#683# "Sélectionner nouveau raccourci :"
|
||||
#684# "Actuellement assigné à :"
|
||||
#685# "Assigner"
|
||||
#686# "Supprimer"
|
||||
#687# "Tout Redémarrer"
|
||||
#688# "Le jeu ne se lance pas"
|
||||
#689# "Le jeu fonctionne"
|
||||
#690# "Le jeu fonctionne (Fenêtré)"
|
||||
#691# "Le jeu fonctionne (Plein Ecran)"
|
||||
#687# "Tout Réinitialiser"
|
||||
#688# "Aucun jeu lancé"
|
||||
#689# "Un jeu est lancé"
|
||||
#690# "Un jeu est lancé (fenêtré)"
|
||||
#691# "Un jeu est lancé (plein écran)"
|
||||
|
||||
// Frame Rate Option
|
||||
#700# "Interruptions Vertical par secondes"
|
||||
#701# "Afficher les listes par secondes"
|
||||
#702# "Pourcentage à Pleine Vitesse"
|
||||
#700# "Interruptions verticales par seconde"
|
||||
#701# "Listes d’affichage par seconde"
|
||||
#702# "Pourcentage de la vitesse normale"
|
||||
|
||||
// Increase speed
|
||||
#710# "Augmenter la Vitesse du Jeu"
|
||||
#711# "Diminuer la Vitesse du Jeu"
|
||||
#710# "Augmenter la vitesse du jeu"
|
||||
#711# "Diminuer la vitesse du jeu"
|
||||
|
||||
//Bottom page buttons
|
||||
#720# "Redémarrer la Page"
|
||||
#721# "Tout Redémarrer"
|
||||
#720# "Réinitialiser la page"
|
||||
#721# "Tout réinitialiser"
|
||||
#722# "Appliquer"
|
||||
|
||||
/*********************************************************************************
|
||||
* ROM Information *
|
||||
*********************************************************************************/
|
||||
//ROM Info Title
|
||||
#800# "Information ROM"
|
||||
#800# "Informations sur la ROM"
|
||||
|
||||
//ROM Info Text
|
||||
#801# "Nom de la ROM :"
|
||||
#802# "Nom du Fichier :"
|
||||
#803# "Localisation :"
|
||||
#802# "Nom du fichier :"
|
||||
#803# "Emplacement :"
|
||||
#804# "Taille de la ROM :"
|
||||
#805# "ID Cartouche :"
|
||||
#805# "ID cartouche :"
|
||||
#806# "Développeur :"
|
||||
#807# "Pays :"
|
||||
#808# "CRC1 :"
|
||||
|
@ -383,114 +383,114 @@
|
|||
#1000# "Cheats"
|
||||
#1001# "Cheats :"
|
||||
#1002# " Notes : "
|
||||
#1003# "Tout Marquer"
|
||||
#1004# "Rien Marquer"
|
||||
#1003# "Tout cocher"
|
||||
#1004# "Tout décocher"
|
||||
|
||||
//Add Cheat
|
||||
#1005# "Ajouter un Cheat"
|
||||
#1005# "Ajouter un cheat"
|
||||
#1006# "Nom :"
|
||||
#1007# "Code :"
|
||||
#1008# "Insérer"
|
||||
#1009# "Vider"
|
||||
#1010# " Notes Cheat : "
|
||||
#1011# "Ajout à la BDD"
|
||||
#1010# " Notes cheat : "
|
||||
#1011# "Ajouter à la BDD"
|
||||
|
||||
//Code extension
|
||||
#1012# "Code Extensions"
|
||||
#1013# "Veuillez choisir une valeur a utilisé pour :"
|
||||
#1012# "Extensions de code"
|
||||
#1013# "Veuillez choisir une valeur à utiliser pour :"
|
||||
#1014# "OK"
|
||||
#1015# "Annuler"
|
||||
|
||||
//Digital Value
|
||||
#1016# "Quantité de Chiffre"
|
||||
#1017# "Veuillez Choisir une Valeur pour :"
|
||||
#1016# "Nombre quantité"
|
||||
#1017# "Veuillez choisir une valeur pour :"
|
||||
#1018# "&Valeur"
|
||||
#1019# "depuis"
|
||||
#1020# "vers"
|
||||
#1021# "&Notes :"
|
||||
#1022# "Ajouter un Cheat"
|
||||
#1023# "Nouveau Cheat"
|
||||
#1022# "Ajouter un cheat"
|
||||
#1023# "nouveau cheat"
|
||||
#1024# "<adresse> <valeur>"
|
||||
#1025# "Options :"
|
||||
#1026# "<value> <label>"
|
||||
#1026# "<valeur> <label>"
|
||||
|
||||
//Edit Cheat
|
||||
#1027# "Editer un Cheat"
|
||||
#1028# "Mise à jour du Cheat"
|
||||
#1029# "Le Cheat a été changé.\n\nVoulez vous mettre à jour ?"
|
||||
#1027# "Éditer un cheat"
|
||||
#1028# "Mettre à jour un cheat"
|
||||
#1029# "Le cheat a été modifié.\n\nVoulez vous mettre à jour ?"
|
||||
#1030# "Cheat mise à jour"
|
||||
|
||||
//Cheat Popup Menu
|
||||
#1040# "Ajouter un Nouveau Cheat..."
|
||||
#1041# "Editer"
|
||||
#1040# "Ajouter un nouveau cheat…"
|
||||
#1041# "Éditer"
|
||||
#1042# "Effacer"
|
||||
|
||||
// short-cut editor
|
||||
#1100# "Raz les Raccourcis"
|
||||
#1101# "Etes vous sûr de vouloir redémarrer les raccourcis ?\n\nCette action ne peut pas être annulé."
|
||||
#1102# "Menu Fichier"
|
||||
#1103# "Menu Système"
|
||||
#1100# "Réinitialiser les raccourcis"
|
||||
#1101# "Êtes-vous sûr de vouloir réinitialiser les raccourcis?\n\nCette action ne peut pas être annulée."
|
||||
#1102# "Menu fichier"
|
||||
#1103# "Menu système"
|
||||
#1104# "Options"
|
||||
#1105# "Sauvegarder les Emplacements"
|
||||
#1105# "Emplacements de sauvegarde"
|
||||
|
||||
/*********************************************************************************
|
||||
* Messages *
|
||||
*********************************************************************************/
|
||||
#2000# "*** CPU EN PAUSE ***"
|
||||
#2001# "Reprise CPU"
|
||||
#2002# "Dans une boucle permanente, on ne peut pas quitter. \nL'émulation s'arrêtera. \n\nVérifier la ROM et les paramètres de la ROM."
|
||||
#2003# "L'allocation de mémoire a échoué"
|
||||
#2004# "Le plugin Vidéo sélectionné ou par défaut est manquant ou invalide. \n\nVous devez aller dans les Paramètres et sélectionner un plugin Vidéo (graphique).\nVérifier que vous ayez au moins un fichier plugin compatible dans votre dossier plugin."
|
||||
#2005# "Le plugin Audio sélectionné ou par défaut est manquant ou invalide. \n\nVous devez aller dans les Paramètres et sélectionner un plugin Audio (son).\nVérifier que vous ayez au moins un fichier plugin compatible dans votre dossier plugin."
|
||||
#2006# "Le plugin RSP sélectionné ou par défaut est manquant ou invalide. \n\nVous devez aller dans les Paramètres et sélectionner un plugin RSP (Reality Signal Processor).\nVérifier que vous ayez au moins un fichier plugin compatible dans votre dossier plugin."
|
||||
#2007# "Le plugin Entrée sélectionné ou par défaut est manquant ou invalide. \n\nVous devez aller dans les Paramètres et sélectionner un plugin Entrée (contrôleur).\nVérifier que vous ayez au moins un fichier plugin compatible dans votre dossier plugin."
|
||||
#2008# "Echec du chargement du plugin :"
|
||||
#2009# "Echec du chargement word.\n\nVérifier la ROM et les paramètres de la ROM."
|
||||
#2010# "Echec à l'ouverture du fichier de sauvegarde"
|
||||
#2011# "Echec à l'ouverture de l'EEPROM"
|
||||
#2012# "Echec à l'ouverture de la RAM flash"
|
||||
#2013# "Echec à l'ouverture du mempak"
|
||||
#2014# "La tentative d'ouverture du fichier zip a échouée. \n\nIl est possible que le fichier zip soit corrompue - essayez de décompresser la RAM manuellement."
|
||||
#2015# "La tentative d'ouverture du fichier a échouée."
|
||||
#2016# "L'erreur s'est produite pendant l'ouverture du fichier zip."
|
||||
#2017# "Le fichier chargé ne semble pas être une ROM N64 valide. \n\nVérifier vos ROMS avec GoodN64."
|
||||
#2001# "Reprise du CPU"
|
||||
#2002# "Dans une boucle permanente dont il est impossible de sortir.\nL’émulation va maintenant s’arrêter.\n\nVérifiez la ROM et les paramètres de la ROM."
|
||||
#2003# "L’allocation de mémoire a échoué"
|
||||
#2004# "Le plugin vidéo sélectionné ou par défaut est manquant ou invalide.\n\nVous devez aller dans les paramètres et sélectionner un plugin vidéo (graphique).\nVérifiez que vous avez au moins un fichier plugin compatible dans votre répertoire de plugins."
|
||||
#2005# "Le plugin audio sélectionné ou par défaut est manquant ou invalide.\n\nVous devez aller dans les paramètres et sélectionner un plugin audio (son).\nVérifiez que vous avez au moins un fichier plugin compatible dans votre répertoire de plugins."
|
||||
#2006# "Le plugin RSP sélectionné ou par défaut est manquant ou invalide.\n\nVous devez aller dans les paramètres et sélectionner un plugin RSP (Reality Signal Processor).\nVérifiez que vous avez au moins un fichier plugin compatible dans votre répertoire de plugins."
|
||||
#2007# "Le plugin input sélectionné ou par défaut est manquant ou invalide.\n\nVous devez aller dans les paramètres et sélectionner un plugin input (contrôleur).\nVérifiez que vous avez au moins un fichier plugin compatible dans votre répertoire de plugins."
|
||||
#2008# "Échec du chargement du plugin :"
|
||||
#2009# "Échec du chargement word.\n\nVérifier la ROM et les paramètres de la ROM."
|
||||
#2010# "Échec à l’ouverture du fichier de sauvegarde"
|
||||
#2011# "Échec à l’ouverture de l’EEPROM"
|
||||
#2012# "Échec à l’ouverture de la RAM flash"
|
||||
#2013# "Échec à l’ouverture du mempak"
|
||||
#2014# "La tentative d’ouverture du fichier zip a échoué.\n\nIl est possible que le fichier zip soit corrompu – essayez de décompresser la RAM manuellement."
|
||||
#2015# "La tentative d’ouverture du fichier a échoué."
|
||||
#2016# "Une erreur s’est produite pendant l’ouverture du fichier zip."
|
||||
#2017# "Le fichier chargé ne semble pas être une ROM N64 valide.\n\nVérifiez vos ROM avec GoodN64."
|
||||
#2018# "Pays inconnu"
|
||||
#2019# "Puce CIC inconnu"
|
||||
#2020# "Format de Fichier inconnu"
|
||||
#2021# "Action de la mémoire inconnu\n\nL'émulation est arrêté"
|
||||
#2022# "OpCode R4300i non pris en charge à"
|
||||
#2023# "Exécution d'un espace non définie.\n\nVérifier la ROM et les paramètres de ROM."
|
||||
#2024# "Cette sauvegarde d'état ne semble pas correspondre à la ROM qui est lancé. \n\nLes états sauvegardés & chargés doivent être à 100% identiques à la ROM. \nEn particulier la REGION et la VERSION doivent être identique. \nLe chargement de cet état peut probablement faire planter le jeu ou l'émulateur. \n\nSouhaitez-vous le charger quand même ?"
|
||||
#2020# "Format de fichier inconnu"
|
||||
#2021# "Action de la mémoire inconnue\n\nL’émulation s’est arrêtée."
|
||||
#2022# "Opcode R4300i non pris en charge à"
|
||||
#2023# "Exécution depuis un espace non mappé.\n\nVérifiez la ROM et les paramètres de ROM."
|
||||
#2024# "Cette sauvegarde d’état ne semble pas correspondre à la ROM qui est lancée.\n\nLes états sauvegardés et chargés doivent être à 100 % identiques à la ROM.\nEn particulier la REGION et la VERSION doivent être identiques.\nLe chargement de cette sauvegarde va probablement faire planter le jeu ou l’émulateur.\n\nSouhaitez-vous le charger quand même ?"
|
||||
#2025# "Erreur"
|
||||
#2026# "La séquence de Copyright n'a pas été trouvé dans LUT. Le jeu ne fonctionnera plus."
|
||||
#2027# "Echec de la protection de la copie"
|
||||
#2028# "Changer un plugin nécessite que Project64 redémarre la ROM lancée. \nSi vous ne voulez pas perdre votre progression, répondez Non et sauvegarder le premier état en cours. \n\nChanger les plugins et redémarrer maintenant ?"
|
||||
#2029# "Changer les Plugins"
|
||||
#2030# "Emulation terminée"
|
||||
#2031# "Emulation démarrée"
|
||||
#2032# "Impossible de charger un état"
|
||||
#2033# "Etat chargé"
|
||||
#2034# "Sauvegarder l'état en cours vers"
|
||||
#2035# "Emplacement d'état"
|
||||
#2026# "La séquence de copyright n’a pas été trouvé dans la LUT. Le jeu ne fonctionnera plus."
|
||||
#2027# "Échec de la protection de copie"
|
||||
#2028# "Changer un plugin nécessite que Project64 redémarre la ROM lancée.\nSi vous ne voulez pas perdre votre progression, répondez non et sauvegardez l’état actuel d’abord.\n\nChanger les plugins et redémarrer maintenant ?"
|
||||
#2029# "Changer les plugins"
|
||||
#2030# "Émulation terminée"
|
||||
#2031# "Émulation démarrée"
|
||||
#2032# "Impossible de charger l’état"
|
||||
#2033# "État chargé"
|
||||
#2034# "État sauvegardé vers"
|
||||
#2035# "Emplacement d’état"
|
||||
#2036# "Byte-swapping image"
|
||||
#2037# "Choisir une ROM N64"
|
||||
#2037# "Choisir une image N64"
|
||||
#2038# "Chargé"
|
||||
#2039# "Chargement d'une image"
|
||||
#2040# "Ne peut pas ouvrir une ROM car les plugins n'ont pas été initialisés."
|
||||
#2041# "Etes vous sûr de vouloir vraiment effacer ?"
|
||||
#2042# "Effacer un Cheat"
|
||||
#2039# "Chargement de l’image"
|
||||
#2040# "Impossible d’ouvrir une ROM car les plugins n’ont pas été initialisés."
|
||||
#2041# "Êtes-vous sûr de vouloir effacer ceci ?"
|
||||
#2042# "Effacer le cheat"
|
||||
#2043# "Le nom du cheat est déjà utilisé."
|
||||
#2044# "Vous avez atteint le nombre maximum de codes cheats pour ce jeu"
|
||||
#2045# "Initialisation du Plugin"
|
||||
#2046# "Vous n'avez pas sélectionné une touche virtuelle à assigner au menu objet."
|
||||
#2047# "Vous avez besoin de sélectionner un menu objet pour assigner cette touche."
|
||||
#2048# "Le raccourci a déjà été assigné vers un autre menu objet."
|
||||
#2049# "Aucun raccourci n'a été sélectionné pour être supprimé."
|
||||
#2050# "ROM chargé. Emulation en attente de lancement."
|
||||
#2045# "Initialisation du plugin"
|
||||
#2046# "Vous n’avez pas sélectionné de touche virtuelle à assigner à l’entrée de menu."
|
||||
#2047# "Vous avez besoin de sélectionner une entrée de menu à laquelle assigner cette touche."
|
||||
#2048# "Le raccourci a déjà été assigné à une autre entrée de menu."
|
||||
#2049# "Aucun raccourci n’a été sélectionné pour être supprimé."
|
||||
#2050# "ROM chargée. Émulation en attente de lancement."
|
||||
#2051# "Project64 beta est réservé aux membres seulement.\n\nSi vous avez un compte sur pj64-emu.com, vous ne devriez pas voir cette erreur !!\nVeuillez nous contacter sur le site."
|
||||
#2052# "Erreur du Programme"
|
||||
#2053# "Impossible de trouver le nom de fichier dans l'archive 7z"
|
||||
#2054# "Emulation des graphismes bas niveau (LLE)"
|
||||
#2055# "Les graphismes LLE ne sont pas à utiliser par tout le monde !!!\nIl est fortement conseillé d'utiliser seulement ceci à des fins de test et non pour jouer.\n\nChanger pour les graphismes en mode LLE ?"
|
||||
#2056# "Emulation Audio haut niveau (HLE)"
|
||||
#2057# "L'Audio HLE nécessite un plugin tiers !!!\nSi vous n'utilisez pas un plugin audio tiers qui supporte le HLE, vous n'entendrez aucun son.\n\nChanger pour l'Audio en mode HLE ?"
|
||||
#2052# "Erreur du programme"
|
||||
#2053# "Impossible de trouver le nom de fichier dans l’archive 7z"
|
||||
#2054# "Émulation des graphismes bas niveau (LLE)"
|
||||
#2055# "Les graphismes LLE ne sont pas à utiliser par tout le monde !!!\nIl est recommandé d’utiliser seulement ceci à des fins de test et non pour jouer.\n\nChanger pour les graphismes en mode LLE ?"
|
||||
#2056# "Émulation audio haut niveau (HLE)"
|
||||
#2057# "L’audio HLE nécessite un plugin tiers !!!\nSi vous n’utilisez pas un plugin audio tiers qui supporte le HLE, vous n’entendrez aucun son.\n\nChanger pour l’audio en mode HLE ?"
|
||||
|
|
|
@ -98,6 +98,7 @@ Stop_Compiling_Bad_Endian
|
|||
#endif
|
||||
|
||||
#if defined(MY_CPU_LE_UNALIGN) && defined(_WIN64) && (_MSC_VER >= 1300)
|
||||
#include <stdlib.h>
|
||||
|
||||
#pragma intrinsic(_byteswap_ulong)
|
||||
#pragma intrinsic(_byteswap_uint64)
|
||||
|
|
|
@ -62,6 +62,10 @@
|
|||
#define wxCOMPILER_PREFIX vc100
|
||||
#elif _MSC_VER == 1700
|
||||
#define wxCOMPILER_PREFIX vc110
|
||||
#elif _MSC_VER == 1800
|
||||
#define wxCOMPILER_PREFIX vc120
|
||||
#elif _MSC_VER == 1900
|
||||
#define wxCOMPILER_PREFIX vc140
|
||||
#else
|
||||
#error "Unknown MSVC compiler version, please report to wx-dev."
|
||||
#endif
|
||||
|
|
|
@ -437,7 +437,9 @@
|
|||
# elif __VISUALC__ < 1800
|
||||
# define __VISUALC11__
|
||||
# elif __VISUALC__ < 1900
|
||||
# define __VISUALC12__
|
||||
# define __VISUALC12__
|
||||
# elif __VISUALC__ < 2000
|
||||
# define __VISUALC14__
|
||||
# else
|
||||
# pragma message("Please update wx/platform.h to recognize this VC++ version")
|
||||
# endif
|
||||
|
@ -523,7 +525,7 @@
|
|||
# define wxVISUALC_VERSION(major) 0
|
||||
# define wxCHECK_VISUALC_VERSION(major) 0
|
||||
#else
|
||||
# define wxVISUALC_VERSION(major) ( (6 + major) * 100 )
|
||||
# define wxVISUALC_VERSION(major) ( (6 + (major >= 14 ? 1 : 0) + major) * 100 )
|
||||
# define wxCHECK_VISUALC_VERSION(major) ( __VISUALC__ >= wxVISUALC_VERSION(major) )
|
||||
#endif
|
||||
|
||||
|
|
|
@ -25,7 +25,6 @@ public:
|
|||
void LogF ( LPCTSTR Message, ... );
|
||||
void LogArgs ( LPCTSTR Message, va_list & args );
|
||||
bool Empty ( void );
|
||||
void Reset ( void );
|
||||
void Close ( void );
|
||||
|
||||
inline void SetMaxFileSize ( ULONG Size )
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
#ifdef _DEBUG
|
||||
|
||||
#if (defined(_MSC_VER) && (_MSC_VER < 1900))
|
||||
#define MEM_LEAK_TEST
|
||||
#endif
|
||||
|
||||
#ifdef MEM_LEAK_TEST
|
||||
|
||||
|
|
|
@ -1022,7 +1022,7 @@ void CPath::cleanPathString(stdstr& rDirectory) const
|
|||
pos = rDirectory.find( DIR_DOUBLEDELIM );
|
||||
while ( pos != std::string::npos )
|
||||
{
|
||||
rDirectory.replace( pos, 1, &DIRECTORY_DELIMITER );
|
||||
rDirectory.replace( pos, 2, &DIRECTORY_DELIMITER );
|
||||
pos = rDirectory.find( DIR_DOUBLEDELIM, pos + 1 );
|
||||
}
|
||||
if (AppendEnd)
|
||||
|
|
|
@ -15901,7 +15901,11 @@ void CombineBlender ()
|
|||
}
|
||||
A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE);
|
||||
break;
|
||||
|
||||
|
||||
case 0x5000: /* Vigilante 8 explosions */
|
||||
A_BLEND (GR_BLEND_ONE_MINUS_SRC_ALPHA, GR_BLEND_SRC_ALPHA);
|
||||
break;
|
||||
|
||||
default:
|
||||
A_BLEND (GR_BLEND_SRC_ALPHA, GR_BLEND_ONE_MINUS_SRC_ALPHA);
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#define VERSION_MAJOR 2
|
||||
#define VERSION_MINOR 0
|
||||
#define VERSION_REVISION 0
|
||||
#define VERSION_BUILD 5
|
||||
#define VERSION_BUILD 9999
|
||||
|
||||
#define VER_FILE_DESCRIPTION_STR "Glide 64 for Project64"
|
||||
#define VER_FILE_VERSION VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION, VERSION_BUILD
|
||||
|
|
|
@ -765,7 +765,7 @@ LRESULT CALLBACK LangSelectProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||
CLIP_DEFAULT_PRECIS,
|
||||
PROOF_QUALITY,
|
||||
DEFAULT_PITCH|FF_DONTCARE,
|
||||
_T("Arial")
|
||||
"Arial"
|
||||
);
|
||||
SendDlgItemMessage(hDlg,IDC_SELECT_LANG,WM_SETFONT,(WPARAM)hTextFont,TRUE);
|
||||
}
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#include <prsht.h>
|
||||
|
||||
void LoadLogSetting (HKEY hKey,char * String, BOOL * Value);
|
||||
void SaveLogOptions (void);
|
||||
|
||||
|
@ -63,7 +65,11 @@ void EnterLogOptions(HWND hwndOwner)
|
|||
psh.pfnCallback = NULL;
|
||||
|
||||
LoadLogOptions(&TempOptions,TRUE);
|
||||
PropertySheet(&psh);
|
||||
#if defined(WINDOWS_UI)
|
||||
PropertySheet(&psh);
|
||||
#else
|
||||
g_Notify -> BreakPoint(__FILEW__, __LINE__);
|
||||
#endif
|
||||
SaveLogOptions();
|
||||
LoadLogOptions(&LogOptions, FALSE);
|
||||
return;
|
||||
|
@ -896,8 +902,8 @@ void StartLog (void)
|
|||
}
|
||||
|
||||
CPath LogFile(CPath::MODULE_DIRECTORY);
|
||||
LogFile.AppendDirectory(_T("Logs"));
|
||||
LogFile.SetNameExtension(_T("cpudebug.log"));
|
||||
LogFile.AppendDirectory("Logs");
|
||||
LogFile.SetNameExtension("cpudebug.log");
|
||||
|
||||
hLogFile = CreateFile(LogFile,GENERIC_WRITE, FILE_SHARE_READ,NULL,CREATE_ALWAYS,
|
||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#include <commctrl.h>
|
||||
#include <windowsx.h>
|
||||
#include "Settings/SettingType/SettingsType-Cheats.h"
|
||||
|
||||
enum { WM_EDITCHEAT = WM_USER + 0x120 };
|
||||
|
@ -986,6 +988,7 @@ int CALLBACK CCheats::CheatListProc (HWND hDlg,DWORD uMsg,DWORD wParam, DWORD lP
|
|||
Style = GetWindowLong((HWND)_this->m_hCheatTree,GWL_STYLE);
|
||||
SetWindowLong((HWND)_this->m_hCheatTree,GWL_STYLE,TVS_CHECKBOXES |TVS_SHOWSELALWAYS| Style);
|
||||
|
||||
#if defined(WINDOWS_UI)
|
||||
//Creats an image list from the bitmap in the resource section
|
||||
HIMAGELIST hImageList;
|
||||
HBITMAP hBmp;
|
||||
|
@ -996,6 +999,9 @@ int CALLBACK CCheats::CheatListProc (HWND hDlg,DWORD uMsg,DWORD wParam, DWORD lP
|
|||
DeleteObject(hBmp);
|
||||
|
||||
TreeView_SetImageList((HWND)_this->m_hCheatTree,hImageList,TVSIL_STATE);
|
||||
#else
|
||||
g_Notify -> BreakPoint(__FILEW__, __LINE__);
|
||||
#endif
|
||||
|
||||
_this->m_hSelectedItem = NULL;
|
||||
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include "Debugger UI.h"
|
||||
|
||||
CDumpMemory::CDumpMemory(CDebugger * debugger) :
|
||||
|
@ -593,3 +595,4 @@ bool CDumpMemory::DumpMemory ( LPCSTR FileName,DumpFormat Format, DWORD StartPC,
|
|||
// }
|
||||
// return false;
|
||||
//}
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include "Debugger UI.h"
|
||||
|
||||
CDebugMemorySearch::CDebugMemorySearch(CDebugger * debugger) :
|
||||
|
@ -787,3 +789,4 @@ bool CDebugMemorySearch::SearchForValue (DWORD Value, MemorySize Size, DWORD &St
|
|||
}
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include "Debugger UI.h"
|
||||
|
||||
CDebugTlb::CDebugTlb(CDebugger * debugger) :
|
||||
|
@ -285,3 +287,4 @@ void CDebugTlb::RefreshTLBWindow (void)
|
|||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include "Debugger UI.h"
|
||||
|
||||
CDebugMemoryView::CDebugMemoryView(CDebugger * debugger) :
|
||||
|
@ -470,3 +472,4 @@ void CDebugMemoryView::RefreshMemory ( bool ResetCompare )
|
|||
Insert_MemoryLineDump ( count );
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include "Debugger UI.h"
|
||||
|
||||
CPj64Module _Module;
|
||||
|
@ -130,3 +132,4 @@ void CDebugger::Debug_ShowMemorySearch()
|
|||
m_MemorySearch->ShowWindow();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -2364,7 +2364,10 @@ __inline void Float_RoundToInteger32( int * Dest, float * Source )
|
|||
fistp dword ptr [edi]
|
||||
}
|
||||
#else
|
||||
g_Notify->BreakPoint(__FILEW__,__LINE__);
|
||||
__m128 xmm;
|
||||
|
||||
xmm = _mm_load_ss(Source);
|
||||
*(Dest) = _mm_cvt_ss2si(xmm);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -2379,7 +2382,10 @@ __inline void Float_RoundToInteger64( __int64 * Dest, float * Source )
|
|||
fistp qword ptr [edi]
|
||||
}
|
||||
#else
|
||||
g_Notify->BreakPoint(__FILEW__,__LINE__);
|
||||
__m128 xmm;
|
||||
|
||||
xmm = _mm_load_ss(Source);
|
||||
*(Dest) = _mm_cvtss_si64(xmm);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -2413,12 +2419,12 @@ void R4300iOp::COP1_S_DIV()
|
|||
|
||||
void R4300iOp::COP1_S_SQRT()
|
||||
{
|
||||
float * Dest = (float *)(_FPR_S[m_Opcode.fd]);
|
||||
float * Source = (float *)(_FPR_S[m_Opcode.fs]);
|
||||
|
||||
TEST_COP1_USABLE_EXCEPTION
|
||||
_controlfp(*_RoundingModel,_MCW_RC);
|
||||
|
||||
#ifdef _M_IX86
|
||||
float * Dest = (float *)_FPR_S[m_Opcode.fd];
|
||||
float * Source = (float *)_FPR_S[m_Opcode.fs];
|
||||
_asm
|
||||
{
|
||||
push esi
|
||||
|
@ -2430,7 +2436,11 @@ void R4300iOp::COP1_S_SQRT()
|
|||
pop esi
|
||||
}
|
||||
#else
|
||||
g_Notify->BreakPoint(__FILEW__,__LINE__);
|
||||
__m128 xmm;
|
||||
|
||||
xmm = _mm_load_ss(Source);
|
||||
xmm = _mm_sqrt_ss(xmm);
|
||||
*(Dest) = _mm_cvtss_f32(xmm);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -2586,7 +2596,10 @@ __inline void Double_RoundToInteger32( DWORD * Dest, double * Source )
|
|||
fistp dword ptr [edi]
|
||||
}
|
||||
#else
|
||||
g_Notify->BreakPoint(__FILEW__,__LINE__);
|
||||
__m128d xmm;
|
||||
|
||||
xmm = _mm_load_sd(Source);
|
||||
*(Dest) = _mm_cvtsd_si32(xmm);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ void CDMA::OnFirstDMA()
|
|||
switch (g_Rom->CicChipID())
|
||||
{
|
||||
case CIC_NUS_6101: *(DWORD *)&((g_MMU->Rdram())[0x318]) = g_MMU->RdramSize(); break;
|
||||
case CIC_NUS_8303: *(DWORD *)&((g_MMU->Rdram())[0x318]) = g_MMU->RdramSize(); break;
|
||||
case CIC_NUS_5167: *(DWORD *)&((g_MMU->Rdram())[0x318]) = g_MMU->RdramSize(); break;
|
||||
case CIC_UNKNOWN:
|
||||
case CIC_NUS_6102: *(DWORD *)&((g_MMU->Rdram())[0x318]) = g_MMU->RdramSize(); break;
|
||||
case CIC_NUS_6103: *(DWORD *)&((g_MMU->Rdram())[0x318]) = g_MMU->RdramSize(); break;
|
||||
|
@ -35,12 +35,18 @@ void CDMA::OnFirstDMA()
|
|||
void CDMA::PI_DMA_READ()
|
||||
{
|
||||
// PI_STATUS_REG |= PI_STATUS_DMA_BUSY;
|
||||
DWORD PI_RD_LEN_REG = ((g_Reg->PI_RD_LEN_REG) & 0x00FFFFFFul) + 1;
|
||||
|
||||
if ( g_Reg->PI_DRAM_ADDR_REG + g_Reg->PI_RD_LEN_REG + 1 > g_MMU->RdramSize())
|
||||
if ((PI_RD_LEN_REG & 1) != 0)
|
||||
{
|
||||
PI_RD_LEN_REG += 1;
|
||||
}
|
||||
|
||||
if ( g_Reg->PI_DRAM_ADDR_REG + PI_RD_LEN_REG > g_MMU->RdramSize())
|
||||
{
|
||||
if (bHaveDebugger())
|
||||
{
|
||||
g_Notify->DisplayError(L"PI_DMA_READ not in Memory: %08X", g_Reg->PI_DRAM_ADDR_REG + g_Reg->PI_RD_LEN_REG + 1);
|
||||
g_Notify->DisplayError(L"PI_DMA_READ not in Memory: %08X", g_Reg->PI_DRAM_ADDR_REG + PI_RD_LEN_REG);
|
||||
}
|
||||
g_Reg->PI_STATUS_REG &= ~PI_STATUS_DMA_BUSY;
|
||||
g_Reg->MI_INTR_REG |= MI_INTR_PI;
|
||||
|
@ -48,6 +54,7 @@ void CDMA::PI_DMA_READ()
|
|||
return;
|
||||
}
|
||||
|
||||
//Write ROM Area (for 64DD Convert)
|
||||
if (g_Reg->PI_CART_ADDR_REG >= 0x10000000 && g_Reg->PI_CART_ADDR_REG <= 0x1FBFFFFF && g_Settings->LoadBool(Game_AllowROMWrites))
|
||||
{
|
||||
DWORD i;
|
||||
|
@ -58,9 +65,9 @@ void CDMA::PI_DMA_READ()
|
|||
VirtualProtect(ROM, g_Rom->GetRomSize(), PAGE_READWRITE, &OldProtect);
|
||||
|
||||
g_Reg->PI_CART_ADDR_REG -= 0x10000000;
|
||||
if (g_Reg->PI_CART_ADDR_REG + g_Reg->PI_RD_LEN_REG < g_Rom->GetRomSize())
|
||||
if (g_Reg->PI_CART_ADDR_REG + PI_RD_LEN_REG < g_Rom->GetRomSize())
|
||||
{
|
||||
for (i = 0; i < g_Reg->PI_RD_LEN_REG; i++)
|
||||
for (i = 0; i < PI_RD_LEN_REG; i++)
|
||||
{
|
||||
*(ROM + ((g_Reg->PI_CART_ADDR_REG + i) ^ 3)) = *(RDRAM + ((g_Reg->PI_DRAM_ADDR_REG + i) ^ 3));
|
||||
}
|
||||
|
@ -87,6 +94,11 @@ void CDMA::PI_DMA_READ()
|
|||
}
|
||||
|
||||
VirtualProtect(ROM, g_Rom->GetRomSize(), PAGE_READONLY, &OldProtect);
|
||||
|
||||
g_Reg->PI_STATUS_REG &= ~PI_STATUS_DMA_BUSY;
|
||||
g_Reg->MI_INTR_REG |= MI_INTR_PI;
|
||||
g_Reg->CheckInterrupts();
|
||||
return;
|
||||
}
|
||||
|
||||
if ( g_Reg->PI_CART_ADDR_REG >= 0x08000000 && g_Reg->PI_CART_ADDR_REG <= 0x08010000)
|
||||
|
@ -100,7 +112,7 @@ void CDMA::PI_DMA_READ()
|
|||
m_Sram.DmaToSram(
|
||||
g_MMU->Rdram() + g_Reg->PI_DRAM_ADDR_REG,
|
||||
g_Reg->PI_CART_ADDR_REG - 0x08000000,
|
||||
g_Reg->PI_RD_LEN_REG + 1
|
||||
PI_RD_LEN_REG
|
||||
);
|
||||
g_Reg->PI_STATUS_REG &= ~PI_STATUS_DMA_BUSY;
|
||||
g_Reg->MI_INTR_REG |= MI_INTR_PI;
|
||||
|
@ -112,7 +124,7 @@ void CDMA::PI_DMA_READ()
|
|||
m_FlashRam.DmaToFlashram(
|
||||
g_MMU->Rdram()+g_Reg->PI_DRAM_ADDR_REG,
|
||||
g_Reg->PI_CART_ADDR_REG - 0x08000000,
|
||||
g_Reg->PI_RD_LEN_REG + 1
|
||||
PI_RD_LEN_REG
|
||||
);
|
||||
g_Reg->PI_STATUS_REG &= ~PI_STATUS_DMA_BUSY;
|
||||
g_Reg->MI_INTR_REG |= MI_INTR_PI;
|
||||
|
@ -130,7 +142,7 @@ void CDMA::PI_DMA_READ()
|
|||
}
|
||||
if (bHaveDebugger())
|
||||
{
|
||||
g_Notify->DisplayError(L"PI_DMA_READ where are you dmaing to ?");
|
||||
g_Notify->DisplayError(L"PI_DMA_READ where are you dmaing to ?: %08X", g_Reg->PI_CART_ADDR_REG);
|
||||
}
|
||||
g_Reg->PI_STATUS_REG &= ~PI_STATUS_DMA_BUSY;
|
||||
g_Reg->MI_INTR_REG |= MI_INTR_PI;
|
||||
|
|
|
@ -11,9 +11,9 @@
|
|||
#include "stdafx.h"
|
||||
|
||||
CFlashram::CFlashram(bool ReadOnly):
|
||||
m_FlashRamPointer(NULL),
|
||||
m_FlashFlag(FLASHRAM_MODE_NOPES),
|
||||
m_FlashStatus(0),
|
||||
m_FlashRamPointer(NULL),
|
||||
m_FlashRAM_Offset(0),
|
||||
m_ReadOnly(ReadOnly),
|
||||
m_hFile(NULL)
|
||||
|
@ -70,25 +70,14 @@ void CFlashram::DmaFromFlashram ( BYTE * dest, int StartOffset, int len)
|
|||
FlipBuffer[count] = 0xFF;
|
||||
}
|
||||
|
||||
#ifdef _M_IX86
|
||||
_asm
|
||||
for (count = 0; (int)count < len; count += 4)
|
||||
{
|
||||
mov edi, dest
|
||||
lea ecx, [FlipBuffer]
|
||||
mov edx, 0
|
||||
mov ebx, len
|
||||
register DWORD eax;
|
||||
|
||||
memcpyloop:
|
||||
mov eax, dword ptr [ecx + edx]
|
||||
;bswap eax
|
||||
mov dword ptr [edi + edx],eax
|
||||
add edx, 4
|
||||
cmp edx, ebx
|
||||
jb memcpyloop
|
||||
eax = *(unsigned __int32 *)&FlipBuffer[count];
|
||||
// eax = swap32by8(eax); // ; bswap eax
|
||||
*(unsigned __int32 *)(dest + count) = eax;
|
||||
}
|
||||
#else
|
||||
g_Notify->BreakPoint(__FILEW__,__LINE__);
|
||||
#endif
|
||||
break;
|
||||
case FLASHRAM_MODE_STATUS:
|
||||
if (StartOffset != 0 && len != 8)
|
||||
|
@ -198,28 +187,18 @@ void CFlashram::WriteToFlashCommand(DWORD FlashRAM_Command)
|
|||
}
|
||||
{
|
||||
BYTE FlipBuffer[128];
|
||||
memset(FlipBuffer,0,sizeof(FlipBuffer));
|
||||
|
||||
#ifdef _M_IX86
|
||||
DWORD dwWritten;
|
||||
register size_t edx;
|
||||
BYTE * FlashRamPointer = m_FlashRamPointer;
|
||||
_asm
|
||||
{
|
||||
lea edi, [FlipBuffer]
|
||||
mov ecx, FlashRamPointer
|
||||
mov edx, 0
|
||||
|
||||
memcpyloop:
|
||||
mov eax, dword ptr [ecx + edx]
|
||||
;bswap eax
|
||||
mov dword ptr [edi + edx],eax
|
||||
add edx, 4
|
||||
cmp edx, 128
|
||||
jb memcpyloop
|
||||
memset(FlipBuffer,0,sizeof(FlipBuffer));
|
||||
for (edx = 0; edx < 128; edx += 4)
|
||||
{
|
||||
register DWORD eax;
|
||||
|
||||
eax = *(unsigned __int32 *)&FlashRamPointer[edx];
|
||||
// eax = swap32by8(eax); // ; bswap eax
|
||||
*(unsigned __int32 *)(FlipBuffer + edx) = eax;
|
||||
}
|
||||
#else
|
||||
g_Notify->BreakPoint(__FILEW__,__LINE__);
|
||||
#endif
|
||||
|
||||
SetFilePointer(m_hFile,m_FlashRAM_Offset,NULL,FILE_BEGIN);
|
||||
WriteFile(m_hFile,FlipBuffer,128,&dwWritten,NULL);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
****************************************************************************/
|
||||
#pragma once
|
||||
|
||||
#include <objbase.h>
|
||||
|
||||
interface CMipsMemory_CallBack
|
||||
{
|
||||
//Protected memory has been written to, returns true if that memory has been unprotected
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
DWORD CMemoryLabel::AsciiToHex (char * HexValue)
|
||||
{
|
||||
DWORD Count, Finish, Value = 0;
|
||||
DWORD Count, Finish, Current, Value = 0;
|
||||
|
||||
Finish = strlen(HexValue);
|
||||
if (Finish > 8 )
|
||||
|
@ -23,33 +23,25 @@ DWORD CMemoryLabel::AsciiToHex (char * HexValue)
|
|||
for (Count = 0; Count < Finish; Count++)
|
||||
{
|
||||
Value = (Value << 4);
|
||||
switch ( HexValue[Count] )
|
||||
Current = HexValue[Count];
|
||||
if(Current >= '0' && Current <= '9')
|
||||
{
|
||||
case '0': break;
|
||||
case '1': Value += 1; break;
|
||||
case '2': Value += 2; break;
|
||||
case '3': Value += 3; break;
|
||||
case '4': Value += 4; break;
|
||||
case '5': Value += 5; break;
|
||||
case '6': Value += 6; break;
|
||||
case '7': Value += 7; break;
|
||||
case '8': Value += 8; break;
|
||||
case '9': Value += 9; break;
|
||||
case 'A': Value += 10; break;
|
||||
case 'a': Value += 10; break;
|
||||
case 'B': Value += 11; break;
|
||||
case 'b': Value += 11; break;
|
||||
case 'C': Value += 12; break;
|
||||
case 'c': Value += 12; break;
|
||||
case 'D': Value += 13; break;
|
||||
case 'd': Value += 13; break;
|
||||
case 'E': Value += 14; break;
|
||||
case 'e': Value += 14; break;
|
||||
case 'F': Value += 15; break;
|
||||
case 'f': Value += 15; break;
|
||||
default:
|
||||
Value = (Value >> 4);
|
||||
Count = Finish;
|
||||
Value += Current - '0';
|
||||
}
|
||||
else
|
||||
{
|
||||
if(Current > 'F')
|
||||
Current -= 32; //32 is the distance between A and a
|
||||
|
||||
if (Current >= 'A' && Current <= 'F')
|
||||
{
|
||||
Value += Current - 55; //55 is the code for 'A' less 10
|
||||
}
|
||||
else
|
||||
{
|
||||
Value = (Value >> 4);
|
||||
Count = Finish;
|
||||
}
|
||||
}
|
||||
}
|
||||
return Value;
|
||||
|
@ -80,9 +72,9 @@ stdstr CMemoryLabel::LabelName ( DWORD Address ) const
|
|||
//{
|
||||
// return (*theIterator).second;
|
||||
//}
|
||||
|
||||
|
||||
char strLabelName[100];
|
||||
sprintf(strLabelName,"0x%08X",Address);
|
||||
sprintf(strLabelName,"0x%08X",Address);
|
||||
return stdstr(strLabelName);
|
||||
}
|
||||
|
||||
|
@ -109,7 +101,7 @@ void CMemoryLabel::LoadLabelList ( char * file )
|
|||
}
|
||||
|
||||
SetFilePointer(hFile,0,NULL,FILE_BEGIN);
|
||||
|
||||
|
||||
DWORD FileSize = GetFileSize(hFile,NULL);
|
||||
void * FileContents = VirtualAlloc(NULL,FileSize,MEM_COMMIT,PAGE_READWRITE );
|
||||
|
||||
|
@ -128,7 +120,7 @@ void CMemoryLabel::LoadLabelList ( char * file )
|
|||
ProcessCODFile((BYTE *)FileContents, FileSize);
|
||||
}
|
||||
|
||||
VirtualFree(FileContents, 0, MEM_RELEASE);
|
||||
VirtualFree(FileContents, 0, MEM_RELEASE);
|
||||
CloseHandle(hFile);
|
||||
|
||||
m_NewLabels = 0;
|
||||
|
@ -152,7 +144,7 @@ void CMemoryLabel::SaveLabelList()
|
|||
HANDLE hFile = CreateFile(CurrentLabelFile.c_str(),GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,
|
||||
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
|
||||
SetFilePointer(hFile,0,NULL,FILE_BEGIN);
|
||||
|
||||
|
||||
for (StringMap::iterator Item = m_LabelList.begin(); Item != m_LabelList.end(); Item++)
|
||||
{
|
||||
char Text[300];
|
||||
|
@ -160,9 +152,9 @@ void CMemoryLabel::SaveLabelList()
|
|||
|
||||
sprintf(Text, "0x%08X,%s\r\n",(*Item).first,((*Item).second).c_str());
|
||||
|
||||
WriteFile( hFile,Text,strlen(Text),&dwWritten,NULL );
|
||||
WriteFile( hFile,Text,strlen(Text),&dwWritten,NULL );
|
||||
}
|
||||
|
||||
|
||||
CloseHandle(hFile);
|
||||
|
||||
}
|
||||
|
@ -186,7 +178,7 @@ void CMemoryLabel::ProcessCODFile(BYTE * File, DWORD FileLen)
|
|||
return;
|
||||
}
|
||||
CurrentPos += 1;
|
||||
|
||||
|
||||
if (strchr(CurrentPos,',') - CurrentPos != 8)
|
||||
{
|
||||
return;
|
||||
|
|
|
@ -16,14 +16,12 @@ BYTE * CMipsMemoryVM::m_Reserve1 = NULL;
|
|||
BYTE * CMipsMemoryVM::m_Reserve2 = NULL;
|
||||
|
||||
CMipsMemoryVM::CMipsMemoryVM( CMipsMemory_CallBack * CallBack, bool SavesReadOnly ) :
|
||||
|
||||
|
||||
CPifRam(SavesReadOnly),
|
||||
CFlashram(SavesReadOnly),
|
||||
CSram(SavesReadOnly),
|
||||
CDMA(*this,*this),
|
||||
m_CBClass(CallBack),
|
||||
m_TLB_ReadMap(NULL),
|
||||
m_TLB_WriteMap(NULL),
|
||||
m_RomMapped(false),
|
||||
m_Rom(NULL),
|
||||
m_RomSize(0),
|
||||
|
@ -32,7 +30,9 @@ CMipsMemoryVM::CMipsMemoryVM( CMipsMemory_CallBack * CallBack, bool SavesReadOnl
|
|||
m_HalfLine(0),
|
||||
m_HalfLineCheck(false),
|
||||
m_FieldSerration(0),
|
||||
m_TempValue(0)
|
||||
m_TempValue(0),
|
||||
m_TLB_ReadMap(NULL),
|
||||
m_TLB_WriteMap(NULL)
|
||||
{
|
||||
g_Settings->RegisterChangeCB(Game_RDRamSize,this,(CSettings::SettingChangedFunc)RdramChanged);
|
||||
m_RDRAM = NULL;
|
||||
|
@ -40,6 +40,23 @@ CMipsMemoryVM::CMipsMemoryVM( CMipsMemory_CallBack * CallBack, bool SavesReadOnl
|
|||
m_IMEM = NULL;
|
||||
}
|
||||
|
||||
unsigned long swap32by8(unsigned long word)
|
||||
{
|
||||
const unsigned long swapped =
|
||||
#if defined(_MSC_VER)
|
||||
_byteswap_ulong(word)
|
||||
#elif defined(__GNUC__)
|
||||
__builtin_bswap32(word)
|
||||
#else
|
||||
(word & 0x000000FFul) << 24
|
||||
| (word & 0x0000FF00ul) << 8
|
||||
| (word & 0x00FF0000ul) >> 8
|
||||
| (word & 0xFF000000ul) >> 24
|
||||
#endif
|
||||
;
|
||||
return (swapped & 0xFFFFFFFFul);
|
||||
}
|
||||
|
||||
CMipsMemoryVM::~CMipsMemoryVM()
|
||||
{
|
||||
g_Settings->UnregisterChangeCB(Game_RDRamSize,this,(CSettings::SettingChangedFunc)RdramChanged);
|
||||
|
@ -50,24 +67,26 @@ void CMipsMemoryVM::Reset( bool /*EraseMemory*/ )
|
|||
{
|
||||
if (m_TLB_ReadMap)
|
||||
{
|
||||
memset(m_TLB_ReadMap,0,(0xFFFFF * sizeof(DWORD)));
|
||||
memset(m_TLB_WriteMap,0,(0xFFFFF * sizeof(DWORD)));
|
||||
for (DWORD address = 0x80000000; address < 0xC0000000; address += 0x1000)
|
||||
size_t address;
|
||||
|
||||
memset(m_TLB_ReadMap , 0, 0xFFFFF * sizeof(size_t));
|
||||
memset(m_TLB_WriteMap, 0, 0xFFFFF * sizeof(size_t));
|
||||
for (address = 0x80000000; address < 0xC0000000; address += 0x1000)
|
||||
{
|
||||
m_TLB_ReadMap[address >> 12] = ((DWORD)m_RDRAM + (address & 0x1FFFFFFF)) - address;
|
||||
m_TLB_WriteMap[address >> 12] = ((DWORD)m_RDRAM + (address & 0x1FFFFFFF)) - address;
|
||||
m_TLB_ReadMap[address >> 12] = ((size_t)m_RDRAM + (address & 0x1FFFFFFF)) - address;
|
||||
m_TLB_WriteMap[address >> 12] = ((size_t)m_RDRAM + (address & 0x1FFFFFFF)) - address;
|
||||
}
|
||||
|
||||
if (g_Settings->LoadDword(Rdb_TLB_VAddrStart) != 0)
|
||||
{
|
||||
DWORD Start = g_Settings->LoadDword(Rdb_TLB_VAddrStart); //0x7F000000;
|
||||
DWORD Len = g_Settings->LoadDword(Rdb_TLB_VAddrLen); //0x01000000;
|
||||
DWORD PAddr = g_Settings->LoadDword(Rdb_TLB_PAddrStart); //0x10034b30;
|
||||
DWORD End = Start + Len;
|
||||
for (DWORD address = Start; address < End; address += 0x1000)
|
||||
size_t Start = g_Settings->LoadDword(Rdb_TLB_VAddrStart); //0x7F000000;
|
||||
size_t Len = g_Settings->LoadDword(Rdb_TLB_VAddrLen); //0x01000000;
|
||||
size_t PAddr = g_Settings->LoadDword(Rdb_TLB_PAddrStart); //0x10034b30;
|
||||
size_t End = Start + Len;
|
||||
for (address = Start; address < End; address += 0x1000)
|
||||
{
|
||||
m_TLB_ReadMap[address >> 12] = ((DWORD)m_RDRAM + (address - Start + PAddr)) - address;
|
||||
m_TLB_WriteMap[address >> 12] = ((DWORD)m_RDRAM + (address - Start + PAddr)) - address;
|
||||
m_TLB_ReadMap[address >> 12] = ((size_t)m_RDRAM + (address - Start + PAddr)) - address;
|
||||
m_TLB_WriteMap[address >> 12] = ((size_t)m_RDRAM + (address - Start + PAddr)) - address;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -164,18 +183,28 @@ bool CMipsMemoryVM::Initialize()
|
|||
}
|
||||
CPifRam::Reset();
|
||||
|
||||
m_TLB_ReadMap = (DWORD *)VirtualAlloc(NULL,0xFFFFF * sizeof(DWORD),MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);
|
||||
m_TLB_ReadMap = (size_t *)VirtualAlloc(
|
||||
NULL,
|
||||
0xFFFFF * sizeof(size_t),
|
||||
MEM_RESERVE | MEM_COMMIT,
|
||||
PAGE_READWRITE
|
||||
);
|
||||
if (m_TLB_ReadMap == NULL)
|
||||
{
|
||||
WriteTraceF(TraceError,__FUNCTION__ ": Failed to Allocate m_TLB_ReadMap (Size: 0x%X)",0xFFFFF * sizeof(DWORD));
|
||||
WriteTraceF(TraceError,__FUNCTION__": Failed to Allocate m_TLB_ReadMap (Size: 0x%X)",0xFFFFF * sizeof(size_t));
|
||||
FreeMemory();
|
||||
return false;
|
||||
}
|
||||
|
||||
m_TLB_WriteMap = (DWORD *)VirtualAlloc(NULL,0xFFFFF * sizeof(DWORD),MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);
|
||||
m_TLB_WriteMap = (size_t *)VirtualAlloc(
|
||||
NULL,
|
||||
0xFFFFF * sizeof(size_t),
|
||||
MEM_RESERVE | MEM_COMMIT,
|
||||
PAGE_READWRITE
|
||||
);
|
||||
if (m_TLB_WriteMap == NULL)
|
||||
{
|
||||
WriteTraceF(TraceError,__FUNCTION__ ": Failed to Allocate m_TLB_ReadMap (Size: 0x%X)",0xFFFFF * sizeof(DWORD));
|
||||
WriteTraceF(TraceError,__FUNCTION__": Failed to Allocate m_TLB_WriteMap (Size: 0x%X)",0xFFFFF * sizeof(size_t));
|
||||
FreeMemory();
|
||||
return false;
|
||||
}
|
||||
|
@ -2135,9 +2164,9 @@ int CMipsMemoryVM::MemoryFilter( DWORD dwExptCode, void * lpExceptionPointer )
|
|||
{
|
||||
if (g_Settings->LoadDword(Debugger_ShowUnhandledMemory))
|
||||
{
|
||||
g_Notify->DisplayError(L"Failed to load byte\n\nMIPS Address: %08X\nX86 Address: %02X",
|
||||
g_Notify->DisplayError(L"Failed to load byte\n\nMIPS Address: %08X\nX86 Address: %08X",
|
||||
(char *)exRec.ExceptionInformation[1] - (char *)m_RDRAM,
|
||||
*(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
}
|
||||
}
|
||||
lpEP->ContextRecord->Eip = (DWORD)ReadPos;
|
||||
|
@ -2147,9 +2176,9 @@ int CMipsMemoryVM::MemoryFilter( DWORD dwExptCode, void * lpExceptionPointer )
|
|||
{
|
||||
if (g_Settings->LoadDword(Debugger_ShowUnhandledMemory))
|
||||
{
|
||||
g_Notify->DisplayError(L"Failed to load half word\n\nMIPS Address: %08X\nX86 Address: %02X",
|
||||
g_Notify->DisplayError(L"Failed to load half word\n\nMIPS Address: %08X\nX86 Address: %08X",
|
||||
(char *)exRec.ExceptionInformation[1] - (char *)m_RDRAM,
|
||||
*(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
}
|
||||
}
|
||||
lpEP->ContextRecord->Eip = (DWORD)ReadPos;
|
||||
|
@ -2159,9 +2188,9 @@ int CMipsMemoryVM::MemoryFilter( DWORD dwExptCode, void * lpExceptionPointer )
|
|||
{
|
||||
if (g_Settings->LoadDword(Debugger_ShowUnhandledMemory))
|
||||
{
|
||||
g_Notify->DisplayError(L"Failed to load byte\n\nMIPS Address: %08X\nX86 Address: %02X",
|
||||
g_Notify->DisplayError(L"Failed to load byte\n\nMIPS Address: %08X\nX86 Address: %08X",
|
||||
(char *)exRec.ExceptionInformation[1] - (char *)m_RDRAM,
|
||||
*(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
}
|
||||
}
|
||||
lpEP->ContextRecord->Eip = (DWORD)ReadPos;
|
||||
|
@ -2171,9 +2200,9 @@ int CMipsMemoryVM::MemoryFilter( DWORD dwExptCode, void * lpExceptionPointer )
|
|||
{
|
||||
if (g_Settings->LoadDword(Debugger_ShowUnhandledMemory))
|
||||
{
|
||||
g_Notify->DisplayError(L"Failed to load half word\n\nMIPS Address: %08X\nX86 Address: %02X",
|
||||
g_Notify->DisplayError(L"Failed to load half word\n\nMIPS Address: %08X\nX86 Address: %08X",
|
||||
(char *)exRec.ExceptionInformation[1] - (char *)m_RDRAM,
|
||||
*(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
}
|
||||
}
|
||||
lpEP->ContextRecord->Eip = (DWORD)ReadPos;
|
||||
|
@ -2194,9 +2223,9 @@ int CMipsMemoryVM::MemoryFilter( DWORD dwExptCode, void * lpExceptionPointer )
|
|||
{
|
||||
if (g_Settings->LoadDword(Debugger_ShowUnhandledMemory))
|
||||
{
|
||||
g_Notify->DisplayError(L"Failed to half word\n\nMIPS Address: %08X\nX86 Address: %02X",
|
||||
g_Notify->DisplayError(L"Failed to half word\n\nMIPS Address: %08X\nX86 Address: %08X",
|
||||
(char *)exRec.ExceptionInformation[1] - (char *)m_RDRAM,
|
||||
*(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
}
|
||||
}
|
||||
lpEP->ContextRecord->Eip = (DWORD)ReadPos;
|
||||
|
@ -2206,8 +2235,8 @@ int CMipsMemoryVM::MemoryFilter( DWORD dwExptCode, void * lpExceptionPointer )
|
|||
{
|
||||
if (g_Settings->LoadDword(Debugger_ShowUnhandledMemory))
|
||||
{
|
||||
g_Notify->DisplayError(L"Failed to store half word\n\nMIPS Address: %08X\nX86 Address: %02X",MemAddress,
|
||||
*(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
g_Notify->DisplayError(L"Failed to store half word\n\nMIPS Address: %08X\nX86 Address: %08X",MemAddress,
|
||||
(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
}
|
||||
}
|
||||
lpEP->ContextRecord->Eip = (DWORD)ReadPos;
|
||||
|
@ -2224,8 +2253,8 @@ int CMipsMemoryVM::MemoryFilter( DWORD dwExptCode, void * lpExceptionPointer )
|
|||
if (!SH_NonMemory(MemAddress,*(WORD *)ReadPos)) {
|
||||
if (g_Settings->LoadDword(Debugger_ShowUnhandledMemory))
|
||||
{
|
||||
g_Notify->DisplayError(L"Failed to store half word\n\nMIPS Address: %08X\nX86 Address: %02X",MemAddress,
|
||||
*(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
g_Notify->DisplayError(L"Failed to store half word\n\nMIPS Address: %08X\nX86 Address: %08X",MemAddress,
|
||||
(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
}
|
||||
}
|
||||
lpEP->ContextRecord->Eip = (DWORD)(ReadPos + 2);
|
||||
|
@ -2243,9 +2272,9 @@ int CMipsMemoryVM::MemoryFilter( DWORD dwExptCode, void * lpExceptionPointer )
|
|||
{
|
||||
if (g_Settings->LoadDword(Debugger_ShowUnhandledMemory))
|
||||
{
|
||||
g_Notify->DisplayError(L"Failed to store byte\n\nMIPS Address: %08X\nX86 Address: %02X",
|
||||
g_Notify->DisplayError(L"Failed to store byte\n\nMIPS Address: %08X\nX86 Address: %08X",
|
||||
(char *)exRec.ExceptionInformation[1] - (char *)m_RDRAM,
|
||||
*(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
}
|
||||
}
|
||||
lpEP->ContextRecord->Eip = (DWORD)ReadPos;
|
||||
|
@ -2255,9 +2284,9 @@ int CMipsMemoryVM::MemoryFilter( DWORD dwExptCode, void * lpExceptionPointer )
|
|||
{
|
||||
if (g_Settings->LoadDword(Debugger_ShowUnhandledMemory))
|
||||
{
|
||||
g_Notify->DisplayError(L"Failed to load byte\n\nMIPS Address: %08X\nX86 Address: %02X",
|
||||
g_Notify->DisplayError(L"Failed to load byte\n\nMIPS Address: %08X\nX86 Address: %08X",
|
||||
(char *)exRec.ExceptionInformation[1] - (char *)m_RDRAM,
|
||||
*(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
}
|
||||
}
|
||||
lpEP->ContextRecord->Eip = (DWORD)ReadPos;
|
||||
|
@ -2267,9 +2296,9 @@ int CMipsMemoryVM::MemoryFilter( DWORD dwExptCode, void * lpExceptionPointer )
|
|||
{
|
||||
if (g_Settings->LoadDword(Debugger_ShowUnhandledMemory))
|
||||
{
|
||||
g_Notify->DisplayError(L"Failed to load word\n\nMIPS Address: %08X\nX86 Address: %02X",
|
||||
g_Notify->DisplayError(L"Failed to load word\n\nMIPS Address: %08X\nX86 Address: %08X",
|
||||
(char *)exRec.ExceptionInformation[1] - (char *)m_RDRAM,
|
||||
*(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
}
|
||||
}
|
||||
lpEP->ContextRecord->Eip = (DWORD)ReadPos;
|
||||
|
@ -2279,8 +2308,8 @@ int CMipsMemoryVM::MemoryFilter( DWORD dwExptCode, void * lpExceptionPointer )
|
|||
{
|
||||
if (g_Settings->LoadDword(Debugger_ShowUnhandledMemory))
|
||||
{
|
||||
g_Notify->DisplayError(L"Failed to store word\n\nMIPS Address: %08X\nX86 Address: %02X",MemAddress,
|
||||
*(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
g_Notify->DisplayError(L"Failed to store word\n\nMIPS Address: %08X\nX86 Address: %08X",MemAddress,
|
||||
(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
}
|
||||
}
|
||||
lpEP->ContextRecord->Eip = (DWORD)ReadPos;
|
||||
|
@ -2298,8 +2327,8 @@ int CMipsMemoryVM::MemoryFilter( DWORD dwExptCode, void * lpExceptionPointer )
|
|||
{
|
||||
if (g_Settings->LoadDword(Debugger_ShowUnhandledMemory))
|
||||
{
|
||||
g_Notify->DisplayError(L"Failed to store byte\n\nMIPS Address: %08X\nX86 Address: %02X",MemAddress,
|
||||
*(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
g_Notify->DisplayError(L"Failed to store byte\n\nMIPS Address: %08X\nX86 Address: %08X",MemAddress,
|
||||
(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
}
|
||||
}
|
||||
lpEP->ContextRecord->Eip = (DWORD)(ReadPos + 1);
|
||||
|
@ -2317,8 +2346,8 @@ int CMipsMemoryVM::MemoryFilter( DWORD dwExptCode, void * lpExceptionPointer )
|
|||
{
|
||||
if (g_Settings->LoadDword(Debugger_ShowUnhandledMemory))
|
||||
{
|
||||
g_Notify->DisplayError(L"Failed to store word\n\nMIPS Address: %08X\nX86 Address: %02X",MemAddress,
|
||||
*(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
g_Notify->DisplayError(L"Failed to store word\n\nMIPS Address: %08X\nX86 Address: %08X",MemAddress,
|
||||
(unsigned char *)lpEP->ContextRecord->Eip);
|
||||
}
|
||||
}
|
||||
lpEP->ContextRecord->Eip = (DWORD)(ReadPos + 4);
|
||||
|
@ -2641,32 +2670,16 @@ bool CMipsMemoryVM::LW_NonMemory(DWORD PAddr, DWORD* Value)
|
|||
case 0x1FC00000:
|
||||
if (PAddr < 0x1FC007C0)
|
||||
{
|
||||
/* DWORD ToSwap = *(DWORD *)(&PifRom[PAddr - 0x1FC00000]);
|
||||
_asm
|
||||
{
|
||||
mov eax,ToSwap
|
||||
bswap eax
|
||||
mov ToSwap,eax
|
||||
}
|
||||
* Value = ToSwap;*/
|
||||
/* *Value = *(DWORD *)(&PifRom[PAddr - 0x1FC00000]);
|
||||
*Value = swap32by8(*Value); */
|
||||
g_Notify->BreakPoint(__FILEW__,__LINE__);
|
||||
return true;
|
||||
}
|
||||
else if (PAddr < 0x1FC00800)
|
||||
{
|
||||
#ifdef _M_IX86
|
||||
BYTE * PIF_Ram = g_MMU->PifRam();
|
||||
DWORD ToSwap = *(DWORD *)(&PIF_Ram[PAddr - 0x1FC007C0]);
|
||||
_asm
|
||||
{
|
||||
mov eax,ToSwap
|
||||
bswap eax
|
||||
mov ToSwap,eax
|
||||
}
|
||||
*Value = ToSwap;
|
||||
#else
|
||||
g_Notify->BreakPoint(__FILEW__,__LINE__);
|
||||
#endif
|
||||
*Value = *(DWORD *)(&PIF_Ram[PAddr - 0x1FC007C0]);
|
||||
*Value = swap32by8(*Value);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
|
@ -3363,16 +3376,7 @@ bool CMipsMemoryVM::SW_NonMemory(DWORD PAddr, DWORD Value)
|
|||
}
|
||||
else if (PAddr < 0x1FC00800)
|
||||
{
|
||||
#ifdef _M_IX86
|
||||
_asm
|
||||
{
|
||||
mov eax,Value
|
||||
bswap eax
|
||||
mov Value,eax
|
||||
}
|
||||
#else
|
||||
g_Notify->BreakPoint(__FILEW__,__LINE__);
|
||||
#endif
|
||||
Value = swap32by8(Value);
|
||||
*(DWORD *)(&m_PifRam[PAddr - 0x1FC007C0]) = Value;
|
||||
if (PAddr == 0x1FC007FC)
|
||||
{
|
||||
|
@ -3411,9 +3415,10 @@ void CMipsMemoryVM::UpdateHalfLine()
|
|||
g_SystemTimer->UpdateTimers();
|
||||
NextViTimer = g_SystemTimer->GetTimer(CSystemTimer::ViTimer);
|
||||
}
|
||||
m_HalfLine = (DWORD)(NextViTimer / g_System->ViRefreshRate());
|
||||
m_HalfLine = (DWORD)(*g_NextTimer / g_System->ViRefreshRate());
|
||||
m_HalfLine &= ~1;
|
||||
m_HalfLine |= m_FieldSerration;
|
||||
g_Reg->VI_V_CURRENT_LINE_REG = m_HalfLine;
|
||||
m_HalfLineCheck = NextViTimer;
|
||||
}
|
||||
|
||||
|
@ -5349,22 +5354,28 @@ LPCTSTR CMipsMemoryVM::LabelName ( DWORD Address ) const
|
|||
|
||||
void CMipsMemoryVM::TLB_Mapped( DWORD VAddr, DWORD Len, DWORD PAddr, bool bReadOnly )
|
||||
{
|
||||
for (DWORD count = VAddr, VEnd = VAddr + Len; count < VEnd; count += 0x1000)
|
||||
size_t count, VEnd;
|
||||
|
||||
VEnd = VAddr + Len;
|
||||
for (count = VAddr; count < VEnd; count += 0x1000)
|
||||
{
|
||||
DWORD Index = count >> 12;
|
||||
m_TLB_ReadMap[Index] = ((DWORD)m_RDRAM + (count - VAddr + PAddr)) - count;
|
||||
size_t Index = count >> 12;
|
||||
m_TLB_ReadMap[Index] = ((size_t)m_RDRAM + (count - VAddr + PAddr)) - count;
|
||||
if (!bReadOnly)
|
||||
{
|
||||
m_TLB_WriteMap[Index] = ((DWORD)m_RDRAM + (count - VAddr + PAddr)) - count;
|
||||
m_TLB_WriteMap[Index] = ((size_t)m_RDRAM + (count - VAddr + PAddr)) - count;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CMipsMemoryVM::TLB_Unmaped( DWORD Vaddr, DWORD Len )
|
||||
{
|
||||
for (DWORD count = Vaddr, End = Vaddr + Len; count < End; count += 0x1000)
|
||||
size_t count, End;
|
||||
|
||||
End = Vaddr + Len;
|
||||
for (count = Vaddr; count < End; count += 0x1000)
|
||||
{
|
||||
DWORD Index = count >> 12;
|
||||
size_t Index = count >> 12;
|
||||
m_TLB_ReadMap[Index] = NULL;
|
||||
m_TLB_WriteMap[Index] = NULL;
|
||||
}
|
||||
|
@ -5372,25 +5383,38 @@ void CMipsMemoryVM::TLB_Unmaped( DWORD Vaddr, DWORD Len )
|
|||
|
||||
void CMipsMemoryVM::RdramChanged ( CMipsMemoryVM * _this )
|
||||
{
|
||||
if (_this->m_AllocatedRdramSize == g_Settings->LoadDword(Game_RDRamSize))
|
||||
const size_t new_size = g_Settings -> LoadDword(Game_RDRamSize);
|
||||
const size_t old_size = _this -> m_AllocatedRdramSize;
|
||||
|
||||
if (old_size == new_size)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (_this->m_AllocatedRdramSize == 0x400000)
|
||||
{
|
||||
if (VirtualAlloc(_this->m_RDRAM + 0x400000, 0x400000, MEM_COMMIT, PAGE_READWRITE)==NULL)
|
||||
{
|
||||
WriteTrace(TraceError,__FUNCTION__ ": failed to allocate extended memory");
|
||||
g_Notify->FatalError(GS(MSG_MEM_ALLOC_ERROR));
|
||||
}
|
||||
_this->m_AllocatedRdramSize = 0x800000;
|
||||
if (old_size > new_size)
|
||||
{
|
||||
VirtualFree(
|
||||
_this->m_RDRAM + new_size,
|
||||
old_size - new_size,
|
||||
MEM_DECOMMIT
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
VirtualFree(_this->m_RDRAM + 0x400000, 0x400000,MEM_DECOMMIT);
|
||||
_this->m_AllocatedRdramSize = 0x400000;
|
||||
}
|
||||
void * result;
|
||||
|
||||
result = VirtualAlloc(
|
||||
_this->m_RDRAM + old_size,
|
||||
new_size - old_size,
|
||||
MEM_COMMIT,
|
||||
PAGE_READWRITE
|
||||
);
|
||||
if (result == NULL)
|
||||
{
|
||||
WriteTrace(TraceError, __FUNCTION__": failed to allocate extended memory");
|
||||
g_Notify -> FatalError(GS(MSG_MEM_ALLOC_ERROR));
|
||||
}
|
||||
}
|
||||
_this->m_AllocatedRdramSize = new_size;
|
||||
}
|
||||
|
||||
void CMipsMemoryVM::ChangeSpStatus()
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
****************************************************************************/
|
||||
#pragma once
|
||||
|
||||
extern unsigned long swap32by8(unsigned long word);
|
||||
|
||||
class CMipsMemoryVM :
|
||||
public CMipsMemory,
|
||||
public CTransVaddr,
|
||||
|
@ -65,7 +67,6 @@ public:
|
|||
|
||||
//Compilation Functions
|
||||
void ResetMemoryStack();
|
||||
void ResetTLB();
|
||||
|
||||
void Compile_LB();
|
||||
void Compile_LBU();
|
||||
|
@ -166,6 +167,6 @@ private:
|
|||
mutable char m_strLabelName[100];
|
||||
|
||||
//BIG look up table to quickly translate the tlb to real mem address
|
||||
DWORD * m_TLB_ReadMap;
|
||||
DWORD * m_TLB_WriteMap;
|
||||
size_t * m_TLB_ReadMap;
|
||||
size_t * m_TLB_WriteMap;
|
||||
};
|
||||
|
|
|
@ -173,13 +173,13 @@ void CPifRam::PifRamWrite()
|
|||
{
|
||||
ResponseValue = (ResponseValue << 8) | ((Response[(z - 1)*2] << 4) + Response[(z - 1)*2+1]);
|
||||
}
|
||||
*(QWORD *)&m_PifRam[48] = ResponseValue;
|
||||
std::memcpy(&m_PifRam[48], &ResponseValue, sizeof(QWORD));
|
||||
ResponseValue = 0;
|
||||
for (int z = 7; z > 0; z--)
|
||||
{
|
||||
ResponseValue = (ResponseValue << 8) | ((Response[((z + 8) - 1)*2] << 4) + Response[((z + 8) - 1)*2+1]);
|
||||
}
|
||||
*(QWORD *)&m_PifRam[56] = ResponseValue;
|
||||
std::memcpy(&m_PifRam[56], &ResponseValue, sizeof(QWORD));
|
||||
}
|
||||
break;
|
||||
case 0x08:
|
||||
|
@ -302,34 +302,15 @@ void CPifRam::SI_DMA_READ()
|
|||
}
|
||||
else
|
||||
{
|
||||
#ifdef _M_IX86
|
||||
_asm
|
||||
for (size_t i = 0; i < 64; i += 4)
|
||||
{
|
||||
mov edi, dword ptr [SI_DRAM_ADDR_REG]
|
||||
mov edi, dword ptr [edi]
|
||||
add edi, RDRAM
|
||||
mov ecx, PifRamPos
|
||||
mov edx, 0
|
||||
memcpyloop:
|
||||
mov eax, dword ptr [ecx + edx]
|
||||
bswap eax
|
||||
mov dword ptr [edi + edx],eax
|
||||
mov eax, dword ptr [ecx + edx + 4]
|
||||
bswap eax
|
||||
mov dword ptr [edi + edx + 4],eax
|
||||
mov eax, dword ptr [ecx + edx + 8]
|
||||
bswap eax
|
||||
mov dword ptr [edi + edx + 8],eax
|
||||
mov eax, dword ptr [ecx + edx + 12]
|
||||
bswap eax
|
||||
mov dword ptr [edi + edx + 12],eax
|
||||
add edx, 16
|
||||
cmp edx, 64
|
||||
jb memcpyloop
|
||||
unsigned __int32 pif_ram_dword;
|
||||
std::memcpy(&pif_ram_dword, &PifRamPos[i], sizeof(unsigned __int32));
|
||||
|
||||
pif_ram_dword = swap32by8(pif_ram_dword);
|
||||
|
||||
std::memcpy(&RDRAM[SI_DRAM_ADDR_REG + i], &pif_ram_dword, sizeof(unsigned __int32));
|
||||
}
|
||||
#else
|
||||
g_Notify->BreakPoint(__FILEW__,__LINE__);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (LogOptions.LogPRDMAMemStores)
|
||||
|
@ -399,10 +380,9 @@ void CPifRam::SI_DMA_WRITE()
|
|||
|
||||
if ((int)SI_DRAM_ADDR_REG < 0)
|
||||
{
|
||||
int count, RdramPos;
|
||||
int RdramPos = (int)SI_DRAM_ADDR_REG;
|
||||
|
||||
RdramPos = (int)SI_DRAM_ADDR_REG;
|
||||
for (count = 0; count < 0x40; count++, RdramPos++)
|
||||
for (int count = 0; count < 0x40; count++, RdramPos++)
|
||||
{
|
||||
if (RdramPos < 0)
|
||||
{
|
||||
|
@ -413,34 +393,15 @@ void CPifRam::SI_DMA_WRITE()
|
|||
}
|
||||
else
|
||||
{
|
||||
#ifdef _M_IX86
|
||||
_asm
|
||||
for (size_t i = 0; i < 64; i += 4)
|
||||
{
|
||||
mov ecx, dword ptr [SI_DRAM_ADDR_REG]
|
||||
mov ecx, dword ptr [ecx]
|
||||
add ecx, RDRAM
|
||||
mov edi, PifRamPos
|
||||
mov edx, 0
|
||||
memcpyloop:
|
||||
mov eax, dword ptr [ecx + edx]
|
||||
bswap eax
|
||||
mov dword ptr [edi + edx],eax
|
||||
mov eax, dword ptr [ecx + edx + 4]
|
||||
bswap eax
|
||||
mov dword ptr [edi + edx + 4],eax
|
||||
mov eax, dword ptr [ecx + edx + 8]
|
||||
bswap eax
|
||||
mov dword ptr [edi + edx + 8],eax
|
||||
mov eax, dword ptr [ecx + edx + 12]
|
||||
bswap eax
|
||||
mov dword ptr [edi + edx + 12],eax
|
||||
add edx, 16
|
||||
cmp edx, 64
|
||||
jb memcpyloop
|
||||
unsigned __int32 rdram_dword;
|
||||
std::memcpy(&rdram_dword, &RDRAM[SI_DRAM_ADDR_REG + i], sizeof(unsigned __int32));
|
||||
|
||||
rdram_dword = swap32by8(rdram_dword);
|
||||
|
||||
std::memcpy(&PifRamPos[i], &rdram_dword, sizeof(unsigned __int32));
|
||||
}
|
||||
#else
|
||||
g_Notify->BreakPoint(__FILEW__,__LINE__);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (LogOptions.LogPRDMAMemLoads)
|
||||
|
@ -656,7 +617,9 @@ void CPifRam::ReadControllerCommand (int Control, BYTE * Command) {
|
|||
if (Command[0] != 1) { g_Notify->DisplayError(L"What am I meant to do with this Controller Command"); }
|
||||
if (Command[1] != 4) { g_Notify->DisplayError(L"What am I meant to do with this Controller Command"); }
|
||||
}
|
||||
*(DWORD *)&Command[3] = g_BaseSystem->GetButtons(Control);
|
||||
|
||||
const DWORD buttons = g_BaseSystem->GetButtons(Control);
|
||||
std::memcpy(&Command[3], &buttons, sizeof(DWORD));
|
||||
}
|
||||
break;
|
||||
case 0x02: //read from controller pack
|
||||
|
|
|
@ -11,8 +11,8 @@
|
|||
#include "stdafx.h"
|
||||
|
||||
CSram::CSram ( bool ReadOnly ) :
|
||||
m_hFile(NULL),
|
||||
m_ReadOnly(ReadOnly)
|
||||
m_ReadOnly(ReadOnly),
|
||||
m_hFile(NULL)
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -53,6 +53,8 @@ bool CSram::LoadSram()
|
|||
void CSram::DmaFromSram(BYTE * dest, int StartOffset, int len)
|
||||
{
|
||||
DWORD dwRead;
|
||||
DWORD i;
|
||||
BYTE tmp[4];
|
||||
|
||||
if (m_hFile == NULL)
|
||||
{
|
||||
|
@ -61,13 +63,76 @@ void CSram::DmaFromSram(BYTE * dest, int StartOffset, int len)
|
|||
return;
|
||||
}
|
||||
}
|
||||
SetFilePointer(m_hFile,StartOffset,NULL,FILE_BEGIN);
|
||||
ReadFile(m_hFile,dest,len,&dwRead,NULL);
|
||||
DWORD Offset = StartOffset & 3;
|
||||
|
||||
if (Offset == 0)
|
||||
{
|
||||
SetFilePointer(m_hFile, StartOffset, NULL, FILE_BEGIN);
|
||||
ReadFile(m_hFile, dest, len, &dwRead, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetFilePointer(m_hFile, StartOffset - Offset, NULL, FILE_BEGIN);
|
||||
|
||||
ReadFile(m_hFile, tmp, 4, &dwRead, NULL);
|
||||
for (i = 0; i < (4 - Offset); i++)
|
||||
{
|
||||
dest[i + Offset] = tmp[i];
|
||||
}
|
||||
for (i = 4 - Offset; i < len - Offset; i += 4)
|
||||
{
|
||||
ReadFile(m_hFile, tmp, 4, &dwRead, NULL);
|
||||
switch (Offset)
|
||||
{
|
||||
case 1:
|
||||
dest[i + 2] = tmp[0];
|
||||
dest[i + 3] = tmp[1];
|
||||
dest[i + 4] = tmp[2];
|
||||
dest[i - 3] = tmp[3];
|
||||
break;
|
||||
case 2:
|
||||
dest[i + 4] = tmp[0];
|
||||
dest[i + 5] = tmp[1];
|
||||
dest[i - 2] = tmp[2];
|
||||
dest[i - 1] = tmp[3];
|
||||
break;
|
||||
case 3:
|
||||
dest[i + 6] = tmp[0];
|
||||
dest[i - 1] = tmp[1];
|
||||
dest[i] = tmp[2];
|
||||
dest[i + 1] = tmp[3];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
ReadFile(m_hFile, tmp, 4, &dwRead, NULL);
|
||||
switch (Offset)
|
||||
{
|
||||
case 1:
|
||||
dest[i - 3] = tmp[3];
|
||||
break;
|
||||
case 2:
|
||||
dest[i - 2] = tmp[2];
|
||||
dest[i - 1] = tmp[3];
|
||||
break;
|
||||
case 3:
|
||||
dest[i - 1] = tmp[1];
|
||||
dest[i] = tmp[2];
|
||||
dest[i + 1] = tmp[3];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CSram::DmaToSram(BYTE * Source, int StartOffset, int len)
|
||||
{
|
||||
DWORD dwWritten;
|
||||
DWORD i;
|
||||
BYTE tmp[4];
|
||||
|
||||
if (m_ReadOnly)
|
||||
{
|
||||
return;
|
||||
|
@ -80,8 +145,68 @@ void CSram::DmaToSram(BYTE * Source, int StartOffset, int len)
|
|||
return;
|
||||
}
|
||||
}
|
||||
DWORD dwWritten;
|
||||
SetFilePointer(m_hFile,StartOffset,NULL,FILE_BEGIN);
|
||||
WriteFile(m_hFile,Source,len,&dwWritten,NULL);
|
||||
DWORD Offset = StartOffset & 3;
|
||||
if (Offset == 0)
|
||||
{
|
||||
SetFilePointer(m_hFile, StartOffset, NULL, FILE_BEGIN);
|
||||
WriteFile(m_hFile, Source, len, &dwWritten, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < (4 - Offset); i++)
|
||||
{
|
||||
tmp[i] = Source[i + Offset];
|
||||
}
|
||||
SetFilePointer(m_hFile, StartOffset - Offset, NULL, FILE_BEGIN);
|
||||
WriteFile(m_hFile, tmp, (4 - Offset), &dwWritten, NULL);
|
||||
|
||||
SetFilePointer(m_hFile, Offset, NULL, FILE_CURRENT);
|
||||
for (i = 4 - Offset; i < len - Offset; i += 4)
|
||||
{
|
||||
switch (Offset)
|
||||
{
|
||||
case 1:
|
||||
tmp[0] = Source[i + 2];
|
||||
tmp[1] = Source[i + 3];
|
||||
tmp[2] = Source[i + 4];
|
||||
tmp[3] = Source[i - 3];
|
||||
break;
|
||||
case 2:
|
||||
tmp[0] = Source[i + 4];
|
||||
tmp[1] = Source[i + 5];
|
||||
tmp[2] = Source[i - 2];
|
||||
tmp[3] = Source[i - 1];
|
||||
break;
|
||||
case 3:
|
||||
tmp[0] = Source[i + 6];
|
||||
tmp[1] = Source[i - 1];
|
||||
tmp[2] = Source[i];
|
||||
tmp[3] = Source[i + 1];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
WriteFile(m_hFile, tmp, 4, &dwWritten, NULL);
|
||||
}
|
||||
switch (Offset)
|
||||
{
|
||||
case 1:
|
||||
tmp[0] = Source[i - 3];
|
||||
break;
|
||||
case 2:
|
||||
tmp[0] = Source[i - 2];
|
||||
tmp[0] = Source[i - 1];
|
||||
break;
|
||||
case 3:
|
||||
tmp[0] = Source[i - 1];
|
||||
tmp[0] = Source[i];
|
||||
tmp[0] = Source[i + 1];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
SetFilePointer(m_hFile, 4 - Offset, NULL, FILE_CURRENT);
|
||||
WriteFile(m_hFile, tmp, Offset, &dwWritten, NULL);
|
||||
}
|
||||
FlushFileBuffers(m_hFile);
|
||||
}
|
||||
|
|
|
@ -11,9 +11,9 @@
|
|||
#include "stdafx.h"
|
||||
|
||||
CSystemEvents::CSystemEvents(CN64System * System, CPlugins * Plugins) :
|
||||
m_bDoSomething(false),
|
||||
m_System(System),
|
||||
m_Plugins(Plugins)
|
||||
m_Plugins(Plugins),
|
||||
m_bDoSomething(false)
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
@ -13,36 +13,37 @@
|
|||
#pragma warning(disable:4355) // Disable 'this' : used in base member initializer list
|
||||
|
||||
#include <windows.h>
|
||||
#include <commdlg.h>
|
||||
|
||||
CN64System::CN64System ( CPlugins * Plugins, bool SavesReadOnly ) :
|
||||
CSystemEvents(this, Plugins),
|
||||
m_Cheats(NULL),
|
||||
m_EndEmulation(false),
|
||||
m_SaveUsing((SAVE_CHIP_TYPE)g_Settings->LoadDword(Game_SaveChip)),
|
||||
m_Plugins(Plugins),
|
||||
m_SyncCPU(NULL),
|
||||
m_SyncPlugins(NULL),
|
||||
m_SyncWindow(NULL),
|
||||
m_Reg(this,this),
|
||||
m_MMU_VM(this,SavesReadOnly),
|
||||
m_TLB(this),
|
||||
m_Reg(this,this),
|
||||
m_FPS(g_Notify),
|
||||
m_Plugins(Plugins),
|
||||
m_Cheats(NULL),
|
||||
m_SyncCPU(NULL),
|
||||
m_Recomp(NULL),
|
||||
m_InReset(false),
|
||||
m_EndEmulation(false),
|
||||
m_bCleanFrameBox(true),
|
||||
m_bInitialized(false),
|
||||
m_NextTimer(0),
|
||||
m_SystemTimer(m_NextTimer),
|
||||
m_bCleanFrameBox(true),
|
||||
m_bInitialized(false),
|
||||
m_RspBroke(true),
|
||||
m_DMAUsed(false),
|
||||
m_CPU_Handle(NULL),
|
||||
m_CPU_ThreadID(0),
|
||||
m_TestTimer(false),
|
||||
m_NextInstruction(0),
|
||||
m_JumpToLocation(0),
|
||||
m_TLBLoadAddress(0),
|
||||
m_TLBStoreAddress(0),
|
||||
m_SaveUsing((SAVE_CHIP_TYPE)g_Settings->LoadDword(Game_SaveChip)),
|
||||
m_RspBroke(true),
|
||||
m_SyncCount(0)
|
||||
m_SyncCount(0),
|
||||
m_CPU_Handle(NULL),
|
||||
m_CPU_ThreadID(0)
|
||||
{
|
||||
DWORD gameHertz = g_Settings->LoadDword(Game_ScreenHertz);
|
||||
if (gameHertz == 0)
|
||||
|
@ -207,6 +208,9 @@ bool CN64System::RunFileImage ( const char * FileLoc )
|
|||
g_Notify->AddRecentRom(FileLoc);
|
||||
g_Notify->SetWindowCaption(g_Settings->LoadString(Game_GoodName).ToUTF16().c_str());
|
||||
|
||||
g_Settings->SaveBool(GameRunning_LoadingInProgress, false);
|
||||
g_Notify->RefreshMenu();
|
||||
|
||||
if (g_Settings->LoadDword(Setting_AutoStart) != 0)
|
||||
{
|
||||
g_BaseSystem = new CN64System(g_Plugins,false);
|
||||
|
@ -215,8 +219,6 @@ bool CN64System::RunFileImage ( const char * FileLoc )
|
|||
g_BaseSystem->StartEmulation(true);
|
||||
}
|
||||
}
|
||||
g_Settings->SaveBool(GameRunning_LoadingInProgress,false);
|
||||
g_Notify->RefreshMenu();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -307,11 +309,15 @@ void CN64System::StartEmulation2 ( bool NewThread )
|
|||
{
|
||||
g_Notify->DisplayMessage(5,L"Copy Plugins");
|
||||
g_Plugins->CopyPlugins(g_Settings->LoadString(Directory_PluginSync));
|
||||
#if defined(WINDOWS_UI)
|
||||
m_SyncWindow = new CMainGui(false);
|
||||
m_SyncPlugins = new CPlugins( g_Settings->LoadString(Directory_PluginSync) );
|
||||
m_SyncPlugins->SetRenderWindows(m_SyncWindow,m_SyncWindow);
|
||||
|
||||
m_SyncCPU = new CN64System(m_SyncPlugins, true);
|
||||
#else
|
||||
g_Notify -> BreakPoint(__FILEW__, __LINE__);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (CpuType == CPU_Recompiler || CpuType == CPU_SyncCores)
|
||||
|
@ -562,7 +568,11 @@ void CN64System::Reset (bool bInitReg, bool ClearMenory)
|
|||
RefreshGameSettings();
|
||||
m_Audio.Reset();
|
||||
m_MMU_VM.Reset(ClearMenory);
|
||||
#if defined(WINDOWS_UI)
|
||||
Debug_Reset();
|
||||
#else
|
||||
g_Notify -> BreakPoint(__FILEW__, __LINE__);
|
||||
#endif
|
||||
Mempak::Close();
|
||||
|
||||
m_CyclesToSkip = 0;
|
||||
|
@ -810,8 +820,8 @@ void CN64System::InitRegisters( bool bPostPif, CMipsMemory & MMU )
|
|||
case CIC_NUS_6101:
|
||||
m_Reg.m_GPR[22].DW=0x000000000000003F;
|
||||
break;
|
||||
case CIC_NUS_DDIPL: //64DD IPL
|
||||
case CIC_NUS_8303: //64DD CIC
|
||||
case CIC_NUS_8303: //64DD IPL CIC
|
||||
case CIC_NUS_5167: //64DD CONVERSION CIC
|
||||
m_Reg.m_GPR[22].DW=0x00000000000000DD;
|
||||
break;
|
||||
case CIC_UNKNOWN:
|
||||
|
@ -902,8 +912,11 @@ void CN64System::ExecuteCPU()
|
|||
|
||||
switch ((CPU_TYPE)g_Settings->LoadDword(Game_CpuType))
|
||||
{
|
||||
// Currently the compiler is 32-bit only. We might have to ignore that RDB setting for now.
|
||||
#ifndef _WIN64
|
||||
case CPU_Recompiler: ExecuteRecompiler(); break;
|
||||
case CPU_SyncCores: ExecuteSyncCPU(); break;
|
||||
#endif
|
||||
default: ExecuteInterpret(); break;
|
||||
}
|
||||
g_Settings->SaveBool(GameRunning_CPU_Running,(DWORD)false);
|
||||
|
@ -1377,7 +1390,6 @@ void CN64System::DumpSyncErrors (CN64System * SecondCPU)
|
|||
|
||||
g_Notify->DisplayError(L"Sync Error");
|
||||
g_Notify->BreakPoint(__FILEW__,__LINE__);
|
||||
// AddEvent(CloseCPU);
|
||||
}
|
||||
|
||||
bool CN64System::SaveState()
|
||||
|
@ -1575,9 +1587,12 @@ bool CN64System::LoadState()
|
|||
|
||||
bool CN64System::LoadState(LPCSTR FileName)
|
||||
{
|
||||
DWORD dwRead, Value,SaveRDRAMSize, NextVITimer = 0;
|
||||
DWORD dwRead, Value,SaveRDRAMSize, NextVITimer = 0, old_status, old_width, old_dacrate;
|
||||
bool LoadedZipFile = false, AudioResetOnLoad;
|
||||
|
||||
old_status = g_Reg->VI_STATUS_REG;
|
||||
old_width = g_Reg->VI_WIDTH_REG;
|
||||
old_dacrate = g_Reg->AI_DACRATE_REG;
|
||||
|
||||
WriteTraceF((TraceType)(TraceDebug | TraceRecompiler),__FUNCTION__ "(%s): Start",FileName);
|
||||
|
||||
char drive[_MAX_DRIVE] ,dir[_MAX_DIR], fname[_MAX_FNAME],ext[_MAX_EXT];
|
||||
|
@ -1752,6 +1767,21 @@ bool CN64System::LoadState(LPCSTR FileName)
|
|||
m_Audio.SetFrequency(m_Reg.AI_DACRATE_REG, g_System->SystemType());
|
||||
}
|
||||
|
||||
if (old_status != g_Reg->VI_STATUS_REG)
|
||||
{
|
||||
g_Plugins->Gfx()->ViStatusChanged();
|
||||
}
|
||||
|
||||
if (old_width != g_Reg->VI_WIDTH_REG)
|
||||
{
|
||||
g_Plugins->Gfx()->ViWidthChanged();
|
||||
}
|
||||
|
||||
if (old_dacrate != g_Reg->AI_DACRATE_REG)
|
||||
{
|
||||
g_Plugins->Audio()->DacrateChanged(g_System->SystemType());
|
||||
}
|
||||
|
||||
//Fix Random Register
|
||||
while ((int)m_Reg.RANDOM_REGISTER < (int)m_Reg.WIRED_REGISTER)
|
||||
{
|
||||
|
@ -2047,5 +2077,9 @@ void CN64System::TLB_Unmaped ( DWORD VAddr, DWORD Len )
|
|||
|
||||
void CN64System::TLB_Changed()
|
||||
{
|
||||
#if defined(WINDOWS_UI)
|
||||
Debug_RefreshTLBWindow();
|
||||
#else
|
||||
g_Notify -> BreakPoint(__FILEW__, __LINE__);
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -25,8 +25,12 @@ class CN64System :
|
|||
private CSystemEvents,
|
||||
protected CN64SystemSettings,
|
||||
public CGameSettings,
|
||||
#if defined(WINDOWS_UI)
|
||||
protected CDebugSettings,
|
||||
public CDebugger
|
||||
#else
|
||||
protected CDebugSettings
|
||||
#endif
|
||||
{
|
||||
public:
|
||||
CN64System ( CPlugins * Plugins, bool SavesReadOnly );
|
||||
|
@ -96,7 +100,6 @@ private:
|
|||
|
||||
void ExecuteCPU ();
|
||||
void RefreshScreen ();
|
||||
bool InternalEvent ();
|
||||
void DumpSyncErrors ( CN64System * SecondCPU );
|
||||
void StartEmulation2 ( bool NewThread );
|
||||
bool SetActiveSystem ( bool bActive = true );
|
||||
|
@ -107,12 +110,6 @@ private:
|
|||
void ExecuteInterpret();
|
||||
void ExecuteSyncCPU();
|
||||
|
||||
void AddEvent(SystemEvent Event);
|
||||
|
||||
//Notification of changing conditions
|
||||
void FunctionStarted(DWORD NewFuncAddress, DWORD OldFuncAddress, DWORD ReturnAddress);
|
||||
void FunctionEnded(DWORD ReturnAddress, DWORD StackPos);
|
||||
|
||||
//Mark information saying that the CPU has stopped
|
||||
void CpuStopped();
|
||||
|
||||
|
|
|
@ -246,8 +246,8 @@ void CN64Rom::CalculateCicChip()
|
|||
case 0x000000D6497E414B: m_CicChip = CIC_NUS_6103; break;
|
||||
case 0x0000011A49F60E96: m_CicChip = CIC_NUS_6105; break;
|
||||
case 0x000000D6D5BE5580: m_CicChip = CIC_NUS_6106; break;
|
||||
case 0x000001053BC19870: m_CicChip = CIC_NUS_8303; break; //64DD CONVERSION CIC
|
||||
case 0x000000D2E53EF008: m_CicChip = CIC_NUS_DDIPL; break; //64DD IPL
|
||||
case 0x000001053BC19870: m_CicChip = CIC_NUS_5167; break; //64DD CONVERSION CIC
|
||||
case 0x000000D2E53EF008: m_CicChip = CIC_NUS_8303; break; //64DD IPL
|
||||
default:
|
||||
if (bHaveDebugger())
|
||||
g_Notify->DisplayError(L"Unknown CIC checksum:\n%I64X.", CRC);
|
||||
|
|
|
@ -51,8 +51,8 @@ enum SYSTEM_TYPE {
|
|||
|
||||
enum CICChip {
|
||||
CIC_UNKNOWN = -1, CIC_NUS_6101 = 1, CIC_NUS_6102 = 2, CIC_NUS_6103 = 3,
|
||||
CIC_NUS_6104 = 4, CIC_NUS_6105 = 5, CIC_NUS_6106 = 6, CIC_NUS_8303 = 7,
|
||||
CIC_NUS_DDIPL = 8
|
||||
CIC_NUS_6104 = 4, CIC_NUS_6105 = 5, CIC_NUS_6106 = 6, CIC_NUS_5167 = 7,
|
||||
CIC_NUS_8303 = 8
|
||||
};
|
||||
|
||||
enum Country {
|
||||
|
|
|
@ -17,8 +17,8 @@ CCodeBlock::CCodeBlock(DWORD VAddrEnter, BYTE * RecompPos) :
|
|||
m_VAddrFirst(VAddrEnter),
|
||||
m_VAddrLast(VAddrEnter),
|
||||
m_CompiledLocation(RecompPos),
|
||||
m_Test(1),
|
||||
m_EnterSection(NULL)
|
||||
m_EnterSection(NULL),
|
||||
m_Test(1)
|
||||
{
|
||||
CCodeSection * baseSection = new CCodeSection(this, VAddrEnter, 0, false);
|
||||
if (baseSection == NULL)
|
||||
|
|
|
@ -52,7 +52,6 @@ private:
|
|||
void DetermineLoops ();
|
||||
void LogSectionInfo ();
|
||||
bool SetSection ( CCodeSection * & Section, CCodeSection * CurrentSection, DWORD TargetPC, bool LinkAllowed, DWORD CurrentPC );
|
||||
bool SetJumpInfo ( CCodeSection * & Section, DWORD TargetPC, DWORD CurrentPC );
|
||||
bool AnalyzeInstruction ( DWORD PC, DWORD & TargetPC, DWORD & ContinuePC, bool & LikelyBranch, bool & IncludeDelaySlot,
|
||||
bool & EndBlock, bool & PermLoop );
|
||||
|
||||
|
|
|
@ -88,17 +88,17 @@ static bool DelaySlotEffectsJump(DWORD JumpPC) {
|
|||
|
||||
CCodeSection::CCodeSection( CCodeBlock * CodeBlock, DWORD EnterPC, DWORD ID, bool LinkAllowed) :
|
||||
m_BlockInfo(CodeBlock),
|
||||
m_SectionID(ID),
|
||||
m_EnterPC(EnterPC),
|
||||
m_EndPC((DWORD)-1),
|
||||
m_SectionID(ID),
|
||||
m_ContinueSection(NULL),
|
||||
m_JumpSection(NULL),
|
||||
m_EndSection(false),
|
||||
m_LinkAllowed(LinkAllowed),
|
||||
m_CompiledLocation(NULL),
|
||||
m_Test(0),
|
||||
m_Test2(0),
|
||||
m_CompiledLocation(NULL),
|
||||
m_InLoop(false),
|
||||
m_EndSection(false),
|
||||
m_DelaySlot(false)
|
||||
{
|
||||
CPU_Message(__FUNCTION__ ": ID %d EnterPC 0x%08X",ID,EnterPC);
|
||||
|
|
|
@ -25,7 +25,6 @@ public:
|
|||
void SetJumpAddress ( DWORD JumpPC, DWORD TargetPC, bool PermLoop );
|
||||
void SetContinueAddress ( DWORD JumpPC, DWORD TargetPC );
|
||||
void CompileCop1Test ();
|
||||
bool CreateSectionLinkage ();
|
||||
bool GenerateX86Code ( DWORD Test );
|
||||
void GenerateSectionLinkage ();
|
||||
void CompileExit ( DWORD JumpPC, DWORD TargetPC, CRegInfo &ExitRegSet, CExitInfo::EXIT_REASON reason, bool CompileNow, void (*x86Jmp)(const char * Label, DWORD Value));
|
||||
|
|
|
@ -14,8 +14,8 @@ CCompiledFunc::CCompiledFunc( const CCodeBlock & CodeBlock ) :
|
|||
m_EnterPC(CodeBlock.VAddrEnter()),
|
||||
m_MinPC(CodeBlock.VAddrFirst()),
|
||||
m_MaxPC(CodeBlock.VAddrLast()),
|
||||
m_Function((Func)CodeBlock.CompiledLocation()),
|
||||
m_Hash(CodeBlock.Hash()),
|
||||
m_Function((Func)CodeBlock.CompiledLocation()),
|
||||
m_Next(NULL)
|
||||
{
|
||||
m_MemContents[0] = CodeBlock.MemContents(0);
|
||||
|
|
|
@ -13,8 +13,8 @@
|
|||
CRecompiler::CRecompiler(CRegisters & Registers, CProfiling & Profile, bool & EndEmulation ) :
|
||||
m_Registers(Registers),
|
||||
m_Profile(Profile),
|
||||
PROGRAM_COUNTER(Registers.m_PROGRAM_COUNTER),
|
||||
m_EndEmulation(EndEmulation)
|
||||
m_EndEmulation(EndEmulation),
|
||||
PROGRAM_COUNTER(Registers.m_PROGRAM_COUNTER)
|
||||
{
|
||||
if (g_MMU != NULL)
|
||||
{
|
||||
|
|
|
@ -39,8 +39,6 @@ public:
|
|||
void Reset();
|
||||
void ResetRecompCode(bool bAllocate);
|
||||
|
||||
bool GenerateX86Code (CCodeBlock & BlockInfo, CCodeSection * Section, DWORD Test );
|
||||
|
||||
//Self modifying code methods
|
||||
void ClearRecompCode_Virt ( DWORD VirtualAddress, int length, REMOVE_REASON Reason );
|
||||
void ClearRecompCode_Phys ( DWORD PhysicalAddress, int length, REMOVE_REASON Reason );
|
||||
|
@ -55,11 +53,6 @@ private:
|
|||
CRecompiler& operator=(const CRecompiler&); // Disable assignment
|
||||
|
||||
CCompiledFunc * CompilerCode();
|
||||
bool Compiler4300iBlock ( CCompiledFunc * info );
|
||||
|
||||
// Compiling code
|
||||
bool CreateSectionLinkage ( CCodeSection * Section );
|
||||
bool DisplaySectionInformation (CCodeSection * Section, DWORD ID, DWORD Test);
|
||||
|
||||
// Main loops for the different look up methods
|
||||
void RecompilerMain_VirtualTable();
|
||||
|
@ -70,8 +63,6 @@ private:
|
|||
void RecompilerMain_Lookup_validate();
|
||||
void RecompilerMain_Lookup_validate_TLB();
|
||||
|
||||
void RemoveFunction (CCompiledFunc * FunInfo, bool DelaySlot, REMOVE_REASON Reason );
|
||||
|
||||
CCompiledFuncList m_Functions;
|
||||
CRegisters & m_Registers;
|
||||
CProfiling & m_Profile;
|
||||
|
|
|
@ -3933,9 +3933,9 @@ void CRecompilerOps::SPECIAL_DSRL32() {
|
|||
if (IsConst(m_Opcode.rt)) {
|
||||
if (m_Opcode.rt != m_Opcode.rd)
|
||||
UnMap_GPR(m_Opcode.rd, false);
|
||||
|
||||
m_RegWorkingSet.SetMipsRegState(m_Opcode.rd,CRegInfo::STATE_CONST_32_ZERO);
|
||||
m_RegWorkingSet.SetMipsRegLo(m_Opcode.rd, (DWORD)(GetMipsReg(m_Opcode.rt) >> (m_Opcode.sa + 32)));
|
||||
|
||||
m_RegWorkingSet.SetMipsRegState(m_Opcode.rd, CRegInfo::STATE_CONST_64);
|
||||
m_RegWorkingSet.SetMipsReg(m_Opcode.rd, (DWORD)(GetMipsRegHi(m_Opcode.rt) >> m_Opcode.sa));
|
||||
} else if (IsMapped(m_Opcode.rt)) {
|
||||
ProtectGPR(m_Opcode.rt);
|
||||
if (Is64Bit(m_Opcode.rt)) {
|
||||
|
|
|
@ -203,7 +203,6 @@ protected:
|
|||
static void ExitCodeBlock();
|
||||
static void CompileReadTLBMiss(DWORD VirtualAddress, x86Reg LookUpReg);
|
||||
static void CompileReadTLBMiss(x86Reg AddressReg, x86Reg LookUpReg);
|
||||
static void CompileWriteTLBMiss(DWORD VirtualAddress, x86Reg LookUpReg);
|
||||
static void CompileWriteTLBMiss(x86Reg AddressReg, x86Reg LookUpReg);
|
||||
static void UpdateSyncCPU(CRegInfo & RegSet, DWORD Cycles);
|
||||
static void UpdateCounters(CRegInfo & RegSet, bool CheckTimer, bool ClearValues = false);
|
||||
|
|
|
@ -31,7 +31,7 @@ void Start_x86_Log (void) {
|
|||
|
||||
CPath LogFileName(CPath::MODULE_DIRECTORY);
|
||||
LogFileName.AppendDirectory("Logs");
|
||||
LogFileName.SetNameExtension(_T("CPUoutput.log"));
|
||||
LogFileName.SetNameExtension("CPUoutput.log");
|
||||
|
||||
if (hCPULogFile) { Stop_x86_Log(); }
|
||||
hCPULogFile = CreateFile(LogFileName,GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,
|
||||
|
|
|
@ -126,12 +126,12 @@ DWORD CALLBACK RomInfoProc (HWND hDlg, DWORD uMsg, DWORD wParam, DWORD lParam) {
|
|||
if (_this->m_pRomInfo->CicChipID() == CIC_UNKNOWN) {
|
||||
sprintf(&String[1],"Unknown");
|
||||
}
|
||||
else if (_this->m_pRomInfo->CicChipID() == CIC_NUS_DDIPL) {
|
||||
sprintf(&String[1], "64DD IPL");
|
||||
}
|
||||
else if (_this->m_pRomInfo->CicChipID() == CIC_NUS_8303) {
|
||||
sprintf(&String[1], "CIC-NUS-8303");
|
||||
}
|
||||
else if (_this->m_pRomInfo->CicChipID() == CIC_NUS_5167) {
|
||||
sprintf(&String[1], "CIC-NUS-5167");
|
||||
}
|
||||
else {
|
||||
sprintf(&String[1],"CIC-NUS-610%d",_this->m_pRomInfo->CicChipID());
|
||||
}
|
||||
|
|
|
@ -11,12 +11,12 @@
|
|||
#include "stdafx.h"
|
||||
|
||||
CAudioPlugin::CAudioPlugin() :
|
||||
m_hAudioThread(NULL),
|
||||
AiDacrateChanged(NULL),
|
||||
AiLenChanged(NULL),
|
||||
AiReadLength(NULL),
|
||||
ProcessAList(NULL),
|
||||
AiUpdate(NULL)
|
||||
m_hAudioThread(NULL),
|
||||
AiUpdate(NULL),
|
||||
AiDacrateChanged(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -135,8 +135,13 @@ bool CAudioPlugin::Initiate(CN64System * System, CMainGui * RenderWindow)
|
|||
|
||||
if (System != NULL)
|
||||
{
|
||||
if (AiUpdate && !m_hAudioThread)
|
||||
if (AiUpdate)
|
||||
{
|
||||
if (m_hAudioThread)
|
||||
{
|
||||
WriteTraceF(TraceAudio, __FUNCTION__ ": Terminate Audio Thread");
|
||||
TerminateThread(m_hAudioThread, 0);
|
||||
}
|
||||
m_hAudioThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)AudioThread, (LPVOID)this, 0, &ThreadID);
|
||||
}
|
||||
|
||||
|
|
|
@ -11,13 +11,13 @@
|
|||
#include "stdafx.h"
|
||||
|
||||
CControl_Plugin::CControl_Plugin(void) :
|
||||
m_AllocatedControllers(false),
|
||||
WM_KeyDown(NULL),
|
||||
WM_KeyUp(NULL),
|
||||
RumbleCommand(NULL),
|
||||
GetKeys(NULL),
|
||||
ReadController(NULL),
|
||||
ControllerCommand(NULL)
|
||||
ControllerCommand(NULL),
|
||||
m_AllocatedControllers(false)
|
||||
{
|
||||
memset(&m_PluginControllers, 0, sizeof(m_PluginControllers));
|
||||
memset(&m_Controllers, 0, sizeof(m_Controllers));
|
||||
|
|
|
@ -11,18 +11,18 @@
|
|||
#include "stdafx.h"
|
||||
|
||||
CPlugin::CPlugin() :
|
||||
m_hDll(NULL),
|
||||
m_Initialized(false),
|
||||
m_RomOpen(false),
|
||||
RomOpen(NULL),
|
||||
RomClosed(NULL),
|
||||
CloseDLL(NULL),
|
||||
PluginOpened(NULL),
|
||||
DllAbout(NULL),
|
||||
DllConfig(NULL),
|
||||
CloseDLL(NULL),
|
||||
RomOpen(NULL),
|
||||
RomClosed(NULL),
|
||||
PluginOpened(NULL),
|
||||
SetSettingInfo(NULL),
|
||||
SetSettingInfo2(NULL),
|
||||
SetSettingInfo3(NULL)
|
||||
SetSettingInfo3(NULL),
|
||||
m_hDll(NULL),
|
||||
m_Initialized(false),
|
||||
m_RomOpen(false)
|
||||
{
|
||||
memset(&m_PluginInfo, 0, sizeof(m_PluginInfo));
|
||||
}
|
||||
|
|
|
@ -11,9 +11,9 @@
|
|||
#include "stdafx.h"
|
||||
|
||||
CPlugins::CPlugins (const stdstr & PluginDir):
|
||||
m_PluginDir(PluginDir),
|
||||
m_Gfx(NULL), m_Audio(NULL), m_RSP(NULL), m_Control(NULL),
|
||||
m_RenderWindow(NULL), m_DummyWindow(NULL)
|
||||
m_RenderWindow(NULL), m_DummyWindow(NULL),
|
||||
m_PluginDir(PluginDir), m_Gfx(NULL), m_Audio(NULL),
|
||||
m_RSP(NULL), m_Control(NULL)
|
||||
{
|
||||
CreatePlugins();
|
||||
g_Settings->RegisterChangeCB(Plugin_RSP_Current,this,(CSettings::SettingChangedFunc)PluginChanged);
|
||||
|
@ -261,7 +261,12 @@ bool CPlugins::Initiate ( CN64System * System )
|
|||
|
||||
bool CPlugins::ResetInUiThread ( CN64System * System )
|
||||
{
|
||||
#if defined(WINDOWS_UI)
|
||||
return m_RenderWindow->ResetPlugins(this, System);
|
||||
#else
|
||||
g_Notify -> BreakPoint(__FILEW__, __LINE__);
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool CPlugins::Reset ( CN64System * System )
|
||||
|
|
|
@ -15,9 +15,9 @@ void DummyFunc1(BOOL /*a*/) {}
|
|||
CRSP_Plugin::CRSP_Plugin(void) :
|
||||
DoRspCycles(NULL),
|
||||
EnableDebugging(NULL),
|
||||
m_CycleCount(0),
|
||||
GetDebugInfo(NULL),
|
||||
InitiateDebugger(NULL),
|
||||
m_CycleCount(0)
|
||||
InitiateDebugger(NULL)
|
||||
{
|
||||
memset(&m_RSPDebug, 0, sizeof(m_RSPDebug));
|
||||
}
|
||||
|
|
|
@ -66,7 +66,6 @@ private:
|
|||
virtual int GetSettingStartRange() const { return FirstRSPSettings; }
|
||||
|
||||
bool LoadFunctions ( void );
|
||||
bool Initiate_1_0 ( CPlugins * Plugins, CN64System * System );
|
||||
void UnloadPluginDetails ( void );
|
||||
|
||||
RSPDEBUG_INFO m_RSPDebug;
|
||||
|
|
|
@ -15,41 +15,41 @@ bool CSettingTypeApplication::m_UseRegistry = false;
|
|||
CIniFile * CSettingTypeApplication::m_SettingsIniFile = NULL;
|
||||
|
||||
CSettingTypeApplication::CSettingTypeApplication(LPCSTR Section, LPCSTR Name, DWORD DefaultValue ) :
|
||||
m_Section(FixSectionName(Section)),
|
||||
m_KeyName(Name),
|
||||
m_DefaultStr(""),
|
||||
m_DefaultValue(DefaultValue),
|
||||
m_DefaultSetting(Default_Constant),
|
||||
m_Section(FixSectionName(Section)),
|
||||
m_KeyName(Name),
|
||||
m_KeyNameIdex(m_KeyName)
|
||||
{
|
||||
}
|
||||
|
||||
CSettingTypeApplication::CSettingTypeApplication(LPCSTR Section, LPCSTR Name, bool DefaultValue ) :
|
||||
m_Section(FixSectionName(Section)),
|
||||
m_KeyName(Name),
|
||||
m_DefaultStr(""),
|
||||
m_DefaultValue(DefaultValue),
|
||||
m_DefaultSetting(Default_Constant),
|
||||
m_Section(FixSectionName(Section)),
|
||||
m_KeyName(Name),
|
||||
m_KeyNameIdex(m_KeyName)
|
||||
{
|
||||
}
|
||||
|
||||
CSettingTypeApplication::CSettingTypeApplication(LPCSTR Section, LPCSTR Name, LPCSTR DefaultValue ) :
|
||||
m_Section(FixSectionName(Section)),
|
||||
m_KeyName(Name),
|
||||
m_DefaultStr(DefaultValue),
|
||||
m_DefaultValue(0),
|
||||
m_DefaultSetting(Default_Constant),
|
||||
m_Section(FixSectionName(Section)),
|
||||
m_KeyName(Name),
|
||||
m_KeyNameIdex(m_KeyName)
|
||||
{
|
||||
}
|
||||
|
||||
CSettingTypeApplication::CSettingTypeApplication(LPCSTR Section, LPCSTR Name, SettingID DefaultSetting ) :
|
||||
m_Section(FixSectionName(Section)),
|
||||
m_KeyName(Name),
|
||||
m_DefaultStr(""),
|
||||
m_DefaultValue(0),
|
||||
m_DefaultSetting(DefaultSetting),
|
||||
m_Section(FixSectionName(Section)),
|
||||
m_KeyName(Name),
|
||||
m_KeyNameIdex(m_KeyName)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -44,14 +44,21 @@ struct WINDOWS_PAINTSTRUCT {
|
|||
|
||||
class CN64System;
|
||||
|
||||
#define WINDOWS_UI
|
||||
// Remove this to test compilation outside of the Windows ATL environment.
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include <WTL App.h>
|
||||
#endif
|
||||
#include <User Interface/MenuShortCuts.h>
|
||||
|
||||
#include ".\\User Interface\\Rom Browser.h"
|
||||
#include ".\\User Interface\\Gui Class.h"
|
||||
#include ".\\User Interface\\Menu Class.h"
|
||||
#include ".\\User Interface\\Menu Class.h"
|
||||
#include ".\\User Interface\\Main Menu Class.h"
|
||||
#include ".\\User Interface\\Notification Class.h"
|
||||
#include ".\\User Interface\\Frame Per Second Class.h"
|
||||
#include ".\\User Interface\\resource.h"
|
||||
#ifdef WINDOWS_UI
|
||||
#include ".\\User Interface\\Settings Config.h"
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,9 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include <commctrl.h>
|
||||
#include "Settings/SettingType/SettingsType-Application.h"
|
||||
|
||||
extern "C"
|
||||
|
@ -1057,7 +1060,7 @@ DWORD CALLBACK AboutBoxProc (HWND hWnd, DWORD uMsg, DWORD wParam, DWORD lParam)
|
|||
CLIP_DEFAULT_PRECIS,
|
||||
PROOF_QUALITY,
|
||||
DEFAULT_PITCH|FF_DONTCARE,
|
||||
_T("Arial")
|
||||
"Arial"
|
||||
);
|
||||
|
||||
hAuthorFont = ::CreateFont
|
||||
|
@ -1075,7 +1078,7 @@ DWORD CALLBACK AboutBoxProc (HWND hWnd, DWORD uMsg, DWORD wParam, DWORD lParam)
|
|||
CLIP_DEFAULT_PRECIS,
|
||||
PROOF_QUALITY,
|
||||
DEFAULT_PITCH|FF_DONTCARE,
|
||||
_T("Arial")
|
||||
"Arial"
|
||||
);
|
||||
|
||||
hPageHeadingFont = ::CreateFont
|
||||
|
@ -1093,7 +1096,7 @@ DWORD CALLBACK AboutBoxProc (HWND hWnd, DWORD uMsg, DWORD wParam, DWORD lParam)
|
|||
CLIP_DEFAULT_PRECIS,
|
||||
PROOF_QUALITY,
|
||||
DEFAULT_PITCH|FF_DONTCARE,
|
||||
_T("Arial Bold")
|
||||
"Arial Bold"
|
||||
);
|
||||
|
||||
SendDlgItemMessage(hWnd,IDC_VERSION,WM_SETFONT,(WPARAM)hTextFont,TRUE);
|
||||
|
@ -1251,3 +1254,4 @@ BOOL set_about_field(
|
|||
temp_string
|
||||
);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include <windows.h>
|
||||
#include <commdlg.h>
|
||||
|
||||
CMainMenu::CMainMenu ( CMainGui * hMainWindow ):
|
||||
CBaseMenu(),
|
||||
m_ResetAccelerators(true)
|
||||
|
@ -1237,3 +1241,4 @@ void CMainMenu::ResetMenu(void)
|
|||
|
||||
WriteTrace(TraceDebug,__FUNCTION__ ": Done");
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -7,10 +7,10 @@ CNotification & Notify ( void )
|
|||
return g_Notify;
|
||||
}
|
||||
|
||||
CNotification::CNotification ( ) :
|
||||
m_NextMsg(0),
|
||||
CNotification::CNotification() :
|
||||
m_hWnd(NULL),
|
||||
m_gfxPlugin(NULL),
|
||||
m_hWnd(NULL)
|
||||
m_NextMsg(0)
|
||||
{
|
||||
_tzset();
|
||||
}
|
||||
|
@ -118,7 +118,11 @@ void CNotification::DisplayMessage ( int DisplayTime, const wchar_t * Message,
|
|||
}
|
||||
else
|
||||
{
|
||||
#if defined(WINDOWS_UI)
|
||||
m_hWnd->SetStatusText(0, Msg);
|
||||
#else
|
||||
g_Notify -> BreakPoint(__FILEW__, __LINE__);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -136,8 +140,12 @@ void CNotification::DisplayMessage2 ( const wchar_t * Message, va_list ap ) con
|
|||
wchar_t Msg[1000];
|
||||
_vsnwprintf( Msg,sizeof(Msg) - 1 ,Message, ap );
|
||||
va_end( ap );
|
||||
|
||||
|
||||
#if defined(WINDOWS_UI)
|
||||
m_hWnd->SetStatusText(1,Msg);
|
||||
#else
|
||||
g_Notify -> BreakPoint(__FILEW__, __LINE__);
|
||||
#endif
|
||||
}
|
||||
|
||||
void CNotification::SetGfxPlugin( CGfxPlugin * Plugin )
|
||||
|
@ -148,11 +156,15 @@ void CNotification::SetGfxPlugin( CGfxPlugin * Plugin )
|
|||
void CNotification::SetWindowCaption (const wchar_t * Caption)
|
||||
{
|
||||
static const size_t TITLE_SIZE = 256;
|
||||
|
||||
wchar_t WinTitle[TITLE_SIZE];
|
||||
|
||||
_snwprintf(WinTitle, TITLE_SIZE, L"%s - %s", Caption, g_Settings->LoadString(Setting_ApplicationName).ToUTF16().c_str());
|
||||
WinTitle[TITLE_SIZE - 1] = 0;
|
||||
#if defined(WINDOWS_UI)
|
||||
m_hWnd->Caption(WinTitle);
|
||||
#else
|
||||
g_Notify -> BreakPoint(__FILEW__, __LINE__);
|
||||
#endif
|
||||
}
|
||||
|
||||
void CNotification::FatalError ( const wchar_t * Message, ... ) const
|
||||
|
@ -257,7 +269,12 @@ void CNotification::AddRecentRom ( const char * ImagePath )
|
|||
void CNotification::RefreshMenu ( void )
|
||||
{
|
||||
if (m_hWnd == NULL) { return; }
|
||||
|
||||
#if defined(WINDOWS_UI)
|
||||
m_hWnd->RefreshMenu();
|
||||
#else
|
||||
g_Notify -> BreakPoint(__FILEW__, __LINE__);
|
||||
#endif
|
||||
}
|
||||
|
||||
void CNotification::HideRomBrowser ( void )
|
||||
|
@ -280,13 +297,23 @@ void CNotification::ShowRomBrowser ( void )
|
|||
void CNotification::BringToTop ( void )
|
||||
{
|
||||
if (m_hWnd == NULL) { return; }
|
||||
|
||||
#if defined(WINDOWS_UI)
|
||||
m_hWnd->BringToTop();
|
||||
#else
|
||||
g_Notify -> BreakPoint(__FILEW__, __LINE__);
|
||||
#endif
|
||||
}
|
||||
|
||||
void CNotification::MakeWindowOnTop ( bool OnTop )
|
||||
{
|
||||
if (m_hWnd == NULL) { return; }
|
||||
|
||||
#if defined(WINDOWS_UI)
|
||||
m_hWnd->MakeWindowOnTop(OnTop);
|
||||
#else
|
||||
g_Notify -> BreakPoint(__FILEW__, __LINE__);
|
||||
#endif
|
||||
}
|
||||
|
||||
void CNotification::ChangeFullScreen ( void ) const
|
||||
|
@ -298,7 +325,13 @@ void CNotification::ChangeFullScreen ( void ) const
|
|||
bool CNotification::ProcessGuiMessages ( void ) const
|
||||
{
|
||||
if (m_hWnd == NULL) { return false; }
|
||||
|
||||
#if defined(WINDOWS_UI)
|
||||
return m_hWnd->ProcessGuiMessages();
|
||||
#else
|
||||
g_Notify -> BreakPoint(__FILEW__, __LINE__);
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
void CNotification::BreakPoint ( const wchar_t * FileName, const int LineNumber )
|
||||
|
|
|
@ -1,16 +1,19 @@
|
|||
#include "stdafx.h"
|
||||
|
||||
#include <commctrl.h>
|
||||
#include <shlobj.h>
|
||||
|
||||
CRomBrowser::CRomBrowser (HWND & MainWindow, HWND & StatusWindow ) :
|
||||
m_MainWindow(MainWindow),
|
||||
m_StatusWindow(StatusWindow),
|
||||
m_ShowingRomBrowser(false),
|
||||
m_RefreshThread(NULL),
|
||||
m_RomIniFile(NULL),
|
||||
m_NotesIniFile(NULL),
|
||||
m_ExtIniFile(NULL),
|
||||
m_ZipIniFile(NULL),
|
||||
m_WatchThreadID(0),
|
||||
m_ShowingRomBrowser(false),
|
||||
m_AllowSelectionLastRom(true)
|
||||
m_AllowSelectionLastRom(true),
|
||||
m_WatchThreadID(0)
|
||||
{
|
||||
if (g_Settings)
|
||||
{
|
||||
|
|
|
@ -208,7 +208,6 @@ public:
|
|||
void ShowRomList ( void );
|
||||
bool ShowingRomBrowser ( void ) { return m_ShowingRomBrowser; }
|
||||
LPCSTR CurrentedSelectedRom ( void ) { return m_SelectedRom.c_str(); }
|
||||
void Store7ZipInfo ( C7zip & ZipFile, int FileNo );
|
||||
|
||||
static void GetFieldInfo ( ROMBROWSER_FIELDS_LIST & Fields, bool UseDefault = false );
|
||||
};
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include "Settings Config.h"
|
||||
#include "Settings/Settings Page.h"
|
||||
#include "Settings/SettingType/SettingsType-Application.h"
|
||||
|
@ -339,4 +341,4 @@ void CSettingConfig::BoldChangedPages ( HTREEITEM hItem )
|
|||
::EnableWindow(GetDlgItem(IDC_RESET_ALL), true);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <commctrl.h>
|
||||
|
||||
class CConfigSettingSection;
|
||||
class CSettingsPage;
|
||||
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include "Settings Page.h"
|
||||
|
||||
CAdvancedOptionsPage::CAdvancedOptionsPage (HWND hParent, const RECT & rcDispay )
|
||||
|
@ -70,3 +72,4 @@ void CAdvancedOptionsPage::ResetPage()
|
|||
{
|
||||
CSettingsPageImpl<CAdvancedOptionsPage>::ResetPage();
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include "Settings Page.h"
|
||||
|
||||
COptionsDirectoriesPage::COptionsDirectoriesPage (HWND hParent, const RECT & rcDispay ) :
|
||||
|
@ -351,3 +353,4 @@ void COptionsDirectoriesPage::ResetPage()
|
|||
|
||||
SendMessage(GetParent(),PSM_CHANGED,(WPARAM)m_hWnd,0);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include "Settings Page.h"
|
||||
#include "Settings Page - Game - General.h"
|
||||
|
||||
|
@ -113,3 +115,4 @@ void CGameGeneralPage::ResetPage()
|
|||
{
|
||||
CSettingsPageImpl<CGameGeneralPage>::ResetPage();
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include "Settings Page.h"
|
||||
#include "Settings Page - Game - Plugin.h"
|
||||
|
||||
|
@ -345,3 +347,4 @@ void CGamePluginPage::HleAudioChanged ( UINT /*Code*/, int id, HWND /*ctl*/ )
|
|||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include "Settings Page.h"
|
||||
#include "Settings Page - Game - Recompiler.h"
|
||||
|
||||
|
@ -94,3 +96,4 @@ void CGameRecompilePage::ResetPage()
|
|||
{
|
||||
CSettingsPageImpl<CGameRecompilePage>::ResetPage();
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include "Settings Page.h"
|
||||
#include "Settings Page - Game - Status.h"
|
||||
|
||||
|
@ -70,3 +72,4 @@ void CGameStatusPage::ResetPage()
|
|||
{
|
||||
CSettingsPageImpl<CGameStatusPage>::ResetPage();
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include "Settings Page.h"
|
||||
|
||||
COptionsGameBrowserPage::COptionsGameBrowserPage (HWND hParent, const RECT & rcDispay ) :
|
||||
|
@ -253,3 +255,4 @@ void COptionsGameBrowserPage::ResetPage()
|
|||
}
|
||||
CSettingsPageImpl<COptionsGameBrowserPage>::ResetPage();
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include "Settings Page.h"
|
||||
|
||||
COptionsShortCutsPage::COptionsShortCutsPage (HWND hParent, const RECT & rcDispay ) :
|
||||
|
@ -378,3 +380,4 @@ void COptionsShortCutsPage::ResetPage()
|
|||
m_CurrentKeys.ResetContent();
|
||||
CSettingsPageImpl<COptionsShortCutsPage>::ResetPage();
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include "Settings Page.h"
|
||||
|
||||
CGeneralOptionsPage::CGeneralOptionsPage(CSettingConfig * SettingsConfig, HWND hParent, const RECT & rcDispay ) :
|
||||
|
@ -75,3 +77,4 @@ void CGeneralOptionsPage::OnBasicMode ( UINT Code, int id, HWND ctl )
|
|||
CheckBoxChanged(Code,id,ctl);
|
||||
m_SettingsConfig->UpdateAdvanced((int)::SendMessage(ctl, BM_GETCHECK, 0, 0) == 0);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include "Settings Page.h"
|
||||
|
||||
COptionPluginPage::COptionPluginPage (HWND hParent, const RECT & rcDispay )
|
||||
|
@ -331,3 +333,4 @@ void COptionPluginPage::HleAudioChanged ( UINT /*Code*/, int id, HWND /*ctl*/ )
|
|||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
* *
|
||||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
#include "Settings Page.h"
|
||||
|
||||
CConfigSettingSection::CConfigSettingSection( LPCWSTR PageTitle ) :
|
||||
|
@ -39,3 +41,4 @@ CSettingsPage * CConfigSettingSection::GetPage ( int PageNo )
|
|||
}
|
||||
return m_Pages[PageNo];
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
****************************************************************************/
|
||||
#pragma once
|
||||
|
||||
#include <prsht.h>
|
||||
|
||||
class CSettingsPage
|
||||
{
|
||||
public:
|
||||
|
|
|
@ -19,14 +19,14 @@ class CModifiedComboBoxT :
|
|||
public:
|
||||
// Constructors
|
||||
CModifiedComboBoxT(TParam defaultValue, HWND hWnd = NULL, bool AllwaysSelected = true) :
|
||||
CComboBox(hWnd),
|
||||
m_defaultValue(defaultValue),
|
||||
m_AllwaysSelected(AllwaysSelected),
|
||||
CComboBox(hWnd),
|
||||
m_Changed(false),
|
||||
m_Reset(false),
|
||||
m_defaultValue(defaultValue),
|
||||
m_BoldFont(NULL),
|
||||
m_OriginalFont(NULL),
|
||||
m_TextField(NULL)
|
||||
m_TextField(NULL),
|
||||
m_AllwaysSelected(AllwaysSelected)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
CModifiedEditBox::CModifiedEditBox(bool bString /* = true */, HWND hWnd /* = NULL */) :
|
||||
CEdit(hWnd),
|
||||
m_Changed(false),
|
||||
|
@ -103,3 +104,4 @@ void CModifiedEditBox::SetTextField (HWND hWnd)
|
|||
::SendMessage(m_TextField,WM_SETFONT,(WPARAM)m_BoldFont,0);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
****************************************************************************/
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef WINDOWS_UI
|
||||
BOOL CPartialGroupBox::Attach(HWND hWnd)
|
||||
{
|
||||
ATLASSUME(m_hWnd == NULL);
|
||||
|
@ -118,5 +119,5 @@ void CPartialGroupBox::OnPaint(HDC /*hDC*/)
|
|||
|
||||
dc.DrawTextW(grptext,-1,fontrect,DT_SINGLELINE|DT_LEFT);
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#define VERSION_MAJOR 2
|
||||
#define VERSION_MINOR 2
|
||||
#define VERSION_REVISION 0
|
||||
#define VERSION_BUILD 3
|
||||
#define VERSION_BUILD 9999
|
||||
|
||||
#define VER_FILE_DESCRIPTION_STR "Project 64"
|
||||
#define VER_FILE_VERSION VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION, VERSION_BUILD
|
||||
|
|
|
@ -22,7 +22,7 @@ void InitializeLog ( void)
|
|||
{
|
||||
LogFilePath.CreateDirectory();
|
||||
}
|
||||
LogFilePath.SetNameExtension(_T("Project64.log"));
|
||||
LogFilePath.SetNameExtension("Project64.log");
|
||||
|
||||
LogFile = new CTraceFileLog(LogFilePath, g_Settings->LoadDword(Debugger_AppLogFlush) != 0, Log_New,500);
|
||||
#ifdef VALIDATE_DEBUG
|
||||
|
@ -97,7 +97,7 @@ void InitializeLog ( void)
|
|||
void FixDirectories ( void )
|
||||
{
|
||||
CPath Directory(CPath::MODULE_DIRECTORY);
|
||||
Directory.AppendDirectory(_T("Config"));
|
||||
Directory.AppendDirectory("Config");
|
||||
if (!Directory.DirectoryExists()) Directory.CreateDirectory();
|
||||
|
||||
Directory.UpDirectory();
|
||||
|
@ -178,7 +178,23 @@ const char * AppName ( void )
|
|||
return Name.c_str();
|
||||
}
|
||||
|
||||
int WINAPI WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR /*lpszArgs*/, int /*nWinMode*/)
|
||||
#ifndef WINDOWS_UI
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
while (argc > 0)
|
||||
{
|
||||
puts(argv[--argc]);
|
||||
}
|
||||
putchar('\n');
|
||||
|
||||
fprintf(
|
||||
stderr,
|
||||
"Cross-platform (graphical/terminal?) UI not yet implemented.\n"
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
int WINAPI WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR /*lpszArgs*/, int /*nWinMode*/)
|
||||
{
|
||||
FixDirectories();
|
||||
|
||||
|
@ -280,3 +296,4 @@ int WINAPI WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR /
|
|||
CloseTrace();
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -923,7 +923,7 @@ void RSP_Vector_VABS (void) {
|
|||
if (RSP_Vect[RSPOpC.rd].HW[el] > 0) {
|
||||
result.HW[el] = RSP_Vect[RSPOpC.rt].UHW[del];
|
||||
} else if (RSP_Vect[RSPOpC.rd].HW[el] < 0) {
|
||||
if (RSP_Vect[RSPOpC.rt].UHW[EleSpec[RSPOpC.rs].B[el]] == 0x8000) {
|
||||
if (RSP_Vect[RSPOpC.rt].UHW[del] == 0x8000) {
|
||||
result.HW[el] = 0x7FFF;
|
||||
} else {
|
||||
result.HW[el] = RSP_Vect[RSPOpC.rt].HW[del] * -1;
|
||||
|
|
|
@ -26,6 +26,8 @@
|
|||
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "opcode.h"
|
||||
#include "RSP.h"
|
||||
#include "CPU.h"
|
||||
|
@ -194,9 +196,23 @@ void DumpRSPCode (void)
|
|||
SetFilePointer(hLogFile,0,NULL,FILE_BEGIN);
|
||||
|
||||
for (location = 0; location < 0x1000; location += 4) {
|
||||
unsigned int characters_to_write;
|
||||
int characters_converted;
|
||||
|
||||
RSP_LW_IMEM(location, &OpCode);
|
||||
sprintf(string," 0x%03X\t%s\r\n",location, RSPOpcodeName ( OpCode, location ));
|
||||
WriteFile( hLogFile,string,strlen(string),&dwWritten,NULL );
|
||||
characters_converted = sprintf(
|
||||
&string[0],
|
||||
" 0x%03X\t%s\r\n",
|
||||
location,
|
||||
RSPOpcodeName(OpCode, location)
|
||||
);
|
||||
|
||||
if (characters_converted < 0) {
|
||||
DisplayError("Failed to sprintf IMEM from 0x%03X.", location);
|
||||
break;
|
||||
}
|
||||
characters_to_write = (unsigned)characters_converted;
|
||||
WriteFile(hLogFile, string, characters_to_write, &dwWritten, NULL);
|
||||
}
|
||||
CloseHandle(hLogFile);
|
||||
}
|
||||
|
@ -235,9 +251,23 @@ void DumpRSPData (void)
|
|||
|
||||
for (location = 0; location < 0x1000; location += 4)
|
||||
{
|
||||
unsigned int characters_to_write;
|
||||
int characters_converted;
|
||||
|
||||
RSP_LW_DMEM(location, &value);
|
||||
sprintf(string," 0x%03X\t0x%08X\r\n", location, value);
|
||||
WriteFile( hLogFile,string,strlen(string),&dwWritten,NULL );
|
||||
characters_converted = sprintf(
|
||||
&string[0],
|
||||
" 0x%03X\t0x%08X\r\n",
|
||||
location,
|
||||
value
|
||||
);
|
||||
|
||||
if (characters_converted < 0) {
|
||||
DisplayError("Failed to sprintf DMEM from 0x%03X.", location);
|
||||
break;
|
||||
}
|
||||
characters_to_write = (unsigned)characters_converted;
|
||||
WriteFile(hLogFile, string, characters_to_write, &dwWritten, NULL);
|
||||
}
|
||||
CloseHandle(hLogFile);
|
||||
}
|
||||
|
@ -245,6 +275,7 @@ void DumpRSPData (void)
|
|||
void DrawRSPCommand ( LPARAM lParam )
|
||||
{
|
||||
char Command[150], Offset[30], Instruction[30], Arguments[40];
|
||||
int printed_offset, printed_instruction, printed_arguments;
|
||||
LPDRAWITEMSTRUCT ditem;
|
||||
COLORREF oldColor = {0};
|
||||
int ResetColor;
|
||||
|
@ -258,26 +289,31 @@ void DrawRSPCommand ( LPARAM lParam )
|
|||
if (strchr(Command,'\t'))
|
||||
{
|
||||
p1 = strchr(Command,'\t');
|
||||
sprintf(Offset,"%.*s",p1 - Command, Command);
|
||||
printed_offset = sprintf(Offset, "%.*s", p1 - Command, Command);
|
||||
p1++;
|
||||
if (strchr(p1,'\t'))
|
||||
{
|
||||
p2 = strchr(p1,'\t');
|
||||
sprintf(Instruction,"%.*s",p2 - p1, p1);
|
||||
sprintf(Arguments,"%s",p2 + 1);
|
||||
printed_instruction = sprintf(Instruction, "%.*s", p2 - p1, p1);
|
||||
printed_arguments = sprintf(Arguments, "%s", p2 + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(Instruction,"%s",p1);
|
||||
sprintf(Arguments,"\0");
|
||||
printed_instruction = sprintf(Instruction, "%s", p1);
|
||||
printed_arguments = sprintf(Arguments, "\0");
|
||||
}
|
||||
sprintf(Command,"\0");
|
||||
Command[0] = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(Offset,"\0");
|
||||
sprintf(Instruction,"\0");
|
||||
sprintf(Arguments,"\0");
|
||||
printed_offset = sprintf(Offset, "\0");
|
||||
printed_instruction = sprintf(Instruction, "\0");
|
||||
printed_arguments = sprintf(Arguments, "\0");
|
||||
}
|
||||
|
||||
if (printed_offset < 0 || printed_instruction < 0 || printed_arguments < 0)
|
||||
{
|
||||
DisplayError("Failed to sprintf from item %u.", ditem -> itemID);
|
||||
}
|
||||
|
||||
if (*PrgCount == RSPCommandLine[ditem->itemID].Location)
|
||||
|
@ -308,23 +344,43 @@ void DrawRSPCommand ( LPARAM lParam )
|
|||
FillRect( ditem->hDC, &ditem->rcItem,hBrush);
|
||||
SetBkMode( ditem->hDC, TRANSPARENT );
|
||||
|
||||
if (strlen (Command) == 0 )
|
||||
if (Command[0] == '\0')
|
||||
{
|
||||
SetRect(&TextRect,ditem->rcItem.left,ditem->rcItem.top, ditem->rcItem.left + 83,
|
||||
ditem->rcItem.bottom);
|
||||
DrawText(ditem->hDC,Offset,strlen(Offset), &TextRect,DT_SINGLELINE | DT_VCENTER);
|
||||
DrawText(
|
||||
ditem->hDC,
|
||||
&Offset[0], printed_offset,
|
||||
&TextRect,
|
||||
DT_SINGLELINE | DT_VCENTER
|
||||
);
|
||||
|
||||
SetRect(&TextRect,ditem->rcItem.left + 83,ditem->rcItem.top, ditem->rcItem.left + 165,
|
||||
ditem->rcItem.bottom);
|
||||
DrawText(ditem->hDC,Instruction,strlen(Instruction), &TextRect,DT_SINGLELINE | DT_VCENTER);
|
||||
DrawText(
|
||||
ditem->hDC,
|
||||
&Instruction[0], printed_instruction,
|
||||
&TextRect,
|
||||
DT_SINGLELINE | DT_VCENTER
|
||||
);
|
||||
|
||||
SetRect(&TextRect,ditem->rcItem.left + 165,ditem->rcItem.top, ditem->rcItem.right,
|
||||
ditem->rcItem.bottom);
|
||||
DrawText(ditem->hDC,Arguments,strlen(Arguments), &TextRect,DT_SINGLELINE | DT_VCENTER);
|
||||
DrawText(
|
||||
ditem->hDC,
|
||||
&Arguments[0], printed_arguments,
|
||||
&TextRect,
|
||||
DT_SINGLELINE | DT_VCENTER
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawText(ditem->hDC,Command,strlen(Command), &ditem->rcItem,DT_SINGLELINE | DT_VCENTER);
|
||||
DrawText(
|
||||
ditem->hDC,
|
||||
&Command[0], (signed int)strlen(Command),
|
||||
&ditem->rcItem,
|
||||
DT_SINGLELINE | DT_VCENTER
|
||||
);
|
||||
}
|
||||
|
||||
if (ResetColor == TRUE) {
|
||||
|
@ -468,8 +524,10 @@ LRESULT CALLBACK RSP_Commands_Proc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM
|
|||
case IDC_LIST:
|
||||
if (HIWORD(wParam) == LBN_DBLCLK )
|
||||
{
|
||||
DWORD Location, Selected;
|
||||
Selected = SendMessage(hList,LB_GETCURSEL,(WPARAM)0, (LPARAM)0);
|
||||
LRESULT Selected;
|
||||
DWORD Location;
|
||||
|
||||
Selected = SendMessage(hList, LB_GETCURSEL, 0, 0);
|
||||
Location = RSPCommandLine[Selected].Location;
|
||||
if (Location != (DWORD)-1)
|
||||
{
|
||||
|
@ -1090,11 +1148,12 @@ char * RSPLc2Name ( DWORD OpCode, DWORD PC )
|
|||
{
|
||||
sprintf(
|
||||
CommandName,
|
||||
"%s\t$v%d[%d], 0x%04X(%s)",
|
||||
"%s\t$v%d[%d], %c0x%03X(%s)",
|
||||
mnemonics_lwc2[command.rd],
|
||||
command.rt,
|
||||
command.del,
|
||||
command.voffset,
|
||||
(command.voffset < 0) ? '-' : '+',
|
||||
abs(command.voffset),
|
||||
GPR_Name(command.base)
|
||||
);
|
||||
}
|
||||
|
@ -1123,11 +1182,12 @@ char * RSPSc2Name ( DWORD OpCode, DWORD PC )
|
|||
{
|
||||
sprintf(
|
||||
CommandName,
|
||||
"%s\t$v%d[%d], 0x%04X(%s)",
|
||||
"%s\t$v%d[%d], %c0x%03X(%s)",
|
||||
mnemonics_swc2[command.rd],
|
||||
command.rt,
|
||||
command.del,
|
||||
command.voffset,
|
||||
(command.voffset < 0) ? '-' : '+',
|
||||
abs(command.voffset),
|
||||
GPR_Name(command.base)
|
||||
);
|
||||
}
|
||||
|
@ -1224,10 +1284,11 @@ char * RSPOpcodeName ( DWORD OpCode, DWORD PC )
|
|||
case RSP_SB:
|
||||
case RSP_SH:
|
||||
case RSP_SW:
|
||||
sprintf(CommandName, "%s\t%s, 0x%04X(%s)",
|
||||
sprintf(CommandName, "%s\t%s, %c0x%04X(%s)",
|
||||
mnemonics_primary[command.op],
|
||||
GPR_Name(command.rt),
|
||||
command.offset,
|
||||
((int16_t)command.offset < 0) ? '-' : '+',
|
||||
abs((int16_t)command.offset),
|
||||
GPR_Name(command.base)
|
||||
);
|
||||
break;
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
|
||||
#pragma warning(disable : 4152) // nonstandard extension, function/data pointer conversion in expression
|
||||
|
||||
extern BOOL AudioHle, GraphicsHle;
|
||||
UWORD32 Recp, RecpResult, SQroot, SQrootResult;
|
||||
DWORD ESP_RegSave = 0, EBP_RegSave = 0;
|
||||
DWORD BranchCompare = 0;
|
||||
|
@ -133,13 +134,17 @@ void Cheat_r4300iOpcodeNoMessage(p_func FunctAddress, char * FunctName) {
|
|||
|
||||
void x86_SetBranch8b(void * JumpByte, void * Destination) {
|
||||
/* calculate 32-bit relative offset */
|
||||
signed int n = (BYTE*)Destination - ((BYTE*)JumpByte + 1);
|
||||
size_t n = (BYTE*)Destination - ((BYTE*)JumpByte + 1);
|
||||
SSIZE_T signed_n = (SSIZE_T)n;
|
||||
|
||||
/* check limits, no pun intended */
|
||||
if (n > 0x80 || n < -0x7F) {
|
||||
CompilerWarning("FATAL: Jump out of 8b range %i (PC = %04X)", n, CompilePC);
|
||||
} else
|
||||
*(BYTE*)(JumpByte) = (BYTE)n;
|
||||
if (signed_n > +128 || signed_n < -127) {
|
||||
CompilerWarning(
|
||||
"FATAL: Jump out of 8b range %i (PC = %04X)", n, CompilePC
|
||||
);
|
||||
} else {
|
||||
*(uint8_t *)(JumpByte) = (uint8_t)(n & 0xFF);
|
||||
}
|
||||
}
|
||||
|
||||
void x86_SetBranch32b(void * JumpByte, void * Destination) {
|
||||
|
@ -444,7 +449,9 @@ void Compile_ADDI ( void ) {
|
|||
if (RSPOpC.rt == 0) return;
|
||||
|
||||
if (RSPOpC.rt == RSPOpC.rs) {
|
||||
AddConstToVariable(Immediate, &RSP_GPR[RSPOpC.rt].UW, GPR_Name(RSPOpC.rt));
|
||||
if(Immediate != 0) {
|
||||
AddConstToVariable(Immediate, &RSP_GPR[RSPOpC.rt].UW, GPR_Name(RSPOpC.rt));
|
||||
}
|
||||
} else if (RSPOpC.rs == 0) {
|
||||
MoveConstToVariable(Immediate, &RSP_GPR[RSPOpC.rt].UW, GPR_Name(RSPOpC.rt));
|
||||
} else if ((IsRegConst(RSPOpC.rs) & 1) != 0) {
|
||||
|
@ -470,24 +477,52 @@ void Compile_ADDIU ( void ) {
|
|||
if (RSPOpC.rt == 0) return;
|
||||
|
||||
if (RSPOpC.rt == RSPOpC.rs) {
|
||||
AddConstToVariable(Immediate, &RSP_GPR[RSPOpC.rt].UW, GPR_Name(RSPOpC.rt));
|
||||
if(Immediate != 0) {
|
||||
AddConstToVariable(Immediate, &RSP_GPR[RSPOpC.rt].UW, GPR_Name(RSPOpC.rt));
|
||||
}
|
||||
} else if (RSPOpC.rs == 0) {
|
||||
MoveConstToVariable(Immediate, &RSP_GPR[RSPOpC.rt].UW, GPR_Name(RSPOpC.rt));
|
||||
} else {
|
||||
MoveVariableToX86reg(&RSP_GPR[RSPOpC.rs].UW, GPR_Name(RSPOpC.rs), x86_EAX);
|
||||
AddConstToX86Reg(x86_EAX, Immediate);
|
||||
if(Immediate != 0) {
|
||||
AddConstToX86Reg(x86_EAX, Immediate);
|
||||
}
|
||||
MoveX86regToVariable(x86_EAX, &RSP_GPR[RSPOpC.rt].UW, GPR_Name(RSPOpC.rt));
|
||||
}
|
||||
}
|
||||
|
||||
void Compile_SLTI ( void ) {
|
||||
#ifndef Compile_Immediates
|
||||
Cheat_r4300iOpcode(RSP_Opcode_SLTI,"RSP_Opcode_SLTI");
|
||||
#endif
|
||||
int Immediate;
|
||||
|
||||
CPU_Message(" %X %s", CompilePC, RSPOpcodeName(RSPOpC.Hex, CompilePC));
|
||||
|
||||
if (RSPOpC.rt == 0) return;
|
||||
|
||||
Immediate = (short)RSPOpC.immediate;
|
||||
XorX86RegToX86Reg(x86_ECX, x86_ECX);
|
||||
CompConstToVariable(Immediate, &RSP_GPR[RSPOpC.rs].UW, GPR_Name(RSPOpC.rs));
|
||||
Setl(x86_ECX);
|
||||
MoveX86regToVariable(x86_ECX, &RSP_GPR[RSPOpC.rt].UW, GPR_Name(RSPOpC.rt));
|
||||
}
|
||||
|
||||
void Compile_SLTIU ( void ) {
|
||||
#ifndef Compile_Immediates
|
||||
Cheat_r4300iOpcode(RSP_Opcode_SLTIU,"RSP_Opcode_SLTIU");
|
||||
#endif
|
||||
int Immediate;
|
||||
|
||||
CPU_Message(" %X %s", CompilePC, RSPOpcodeName(RSPOpC.Hex, CompilePC));
|
||||
|
||||
if (RSPOpC.rt == 0) return;
|
||||
|
||||
Immediate = (short)RSPOpC.immediate;
|
||||
XorX86RegToX86Reg(x86_ECX, x86_ECX);
|
||||
CompConstToVariable(Immediate, &RSP_GPR[RSPOpC.rs].UW, GPR_Name(RSPOpC.rs));
|
||||
Setb(x86_ECX);
|
||||
MoveX86regToVariable(x86_ECX, &RSP_GPR[RSPOpC.rt].UW, GPR_Name(RSPOpC.rt));
|
||||
}
|
||||
|
||||
void Compile_ANDI ( void ) {
|
||||
|
@ -590,6 +625,17 @@ void Compile_LB ( void ) {
|
|||
|
||||
CPU_Message(" %X %s",CompilePC,RSPOpcodeName(RSPOpC.Hex,CompilePC));
|
||||
|
||||
if (IsRegConst(RSPOpC.base) == TRUE) {
|
||||
char Address[32];
|
||||
DWORD Addr = (MipsRegConst(RSPOpC.base) + Offset) ^ 3;
|
||||
Addr &= 0xfff;
|
||||
|
||||
sprintf(Address, "Dmem + %Xh", Addr);
|
||||
MoveSxVariableToX86regByte(RSPInfo.DMEM + Addr, Address, x86_EAX);
|
||||
MoveX86regToVariable(x86_EAX, &RSP_GPR[RSPOpC.rt].UW, GPR_Name(RSPOpC.rt));
|
||||
return;
|
||||
}
|
||||
|
||||
MoveVariableToX86reg(&RSP_GPR[RSPOpC.base].UW, GPR_Name(RSPOpC.base), x86_EBX);
|
||||
if (Offset != 0) AddConstToX86Reg(x86_EBX, Offset);
|
||||
XorConstToX86Reg(x86_EBX, 3);
|
||||
|
@ -614,8 +660,15 @@ void Compile_LH ( void ) {
|
|||
Addr &= 0xfff;
|
||||
|
||||
if ((Addr & 1) != 0) {
|
||||
CompilerWarning("Unaligned LH at constant address PC = %04X", CompilePC);
|
||||
Cheat_r4300iOpcodeNoMessage(RSP_Opcode_LH,"RSP_Opcode_LH");
|
||||
if ((Addr & 2) == 0) {
|
||||
CompilerWarning("Unaligned LH at constant address PC = %04X", CompilePC);
|
||||
Cheat_r4300iOpcodeNoMessage(RSP_Opcode_LH,"RSP_Opcode_LH");
|
||||
} else {
|
||||
char Address[32];
|
||||
sprintf(Address, "Dmem + %Xh", Addr);
|
||||
MoveSxVariableToX86regHalf(RSPInfo.DMEM + (Addr ^ 2), Address, x86_EAX);
|
||||
MoveX86regToVariable(x86_EAX, &RSP_GPR[RSPOpC.rt].UW, GPR_Name(RSPOpC.rt));
|
||||
}
|
||||
} else {
|
||||
char Address[32];
|
||||
sprintf(Address, "Dmem + %Xh", Addr);
|
||||
|
@ -667,9 +720,18 @@ void Compile_LW ( void ) {
|
|||
if (IsRegConst(RSPOpC.base) == TRUE) {
|
||||
DWORD Addr = (MipsRegConst(RSPOpC.base) + Offset) & 0xfff;
|
||||
|
||||
if ((Addr & 3) != 0) {
|
||||
if ((Addr & 1) != 0) {
|
||||
CompilerWarning("Unaligned LW at constant address PC = %04X", CompilePC);
|
||||
Cheat_r4300iOpcodeNoMessage(RSP_Opcode_LW,"RSP_Opcode_LW");
|
||||
} else if ((Addr & 2) != 0) {
|
||||
char Address[32];
|
||||
sprintf(Address, "Dmem + %Xh", Addr - 2);
|
||||
MoveVariableToX86regHalf(RSPInfo.DMEM + Addr - 2, Address, x86_EAX);
|
||||
sprintf(Address, "Dmem + %Xh", Addr);
|
||||
MoveVariableToX86regHalf(RSPInfo.DMEM + Addr + 4, Address, x86_ECX);
|
||||
|
||||
MoveX86regHalfToVariable(x86_EAX, &RSP_GPR[RSPOpC.rt].UHW[1], GPR_Name(RSPOpC.rt));
|
||||
MoveX86regHalfToVariable(x86_ECX, &RSP_GPR[RSPOpC.rt].UHW[0], GPR_Name(RSPOpC.rt));
|
||||
} else {
|
||||
char Address[32];
|
||||
sprintf(Address, "Dmem + %Xh", Addr);
|
||||
|
@ -730,6 +792,17 @@ void Compile_LBU ( void ) {
|
|||
|
||||
CPU_Message(" %X %s",CompilePC,RSPOpcodeName(RSPOpC.Hex,CompilePC));
|
||||
|
||||
if (IsRegConst(RSPOpC.base) == TRUE) {
|
||||
char Address[32];
|
||||
DWORD Addr = (MipsRegConst(RSPOpC.base) + Offset) ^ 3;
|
||||
Addr &= 0xfff;
|
||||
|
||||
sprintf(Address, "Dmem + %Xh", Addr);
|
||||
MoveZxVariableToX86regByte(RSPInfo.DMEM + Addr, Address, x86_EAX);
|
||||
MoveX86regToVariable(x86_EAX, &RSP_GPR[RSPOpC.rt].UW, GPR_Name(RSPOpC.rt));
|
||||
return;
|
||||
}
|
||||
|
||||
MoveVariableToX86reg(&RSP_GPR[RSPOpC.base].UW, GPR_Name(RSPOpC.base), x86_EBX);
|
||||
XorX86RegToX86Reg(x86_EAX, x86_EAX);
|
||||
|
||||
|
@ -756,8 +829,15 @@ void Compile_LHU ( void ) {
|
|||
Addr &= 0xfff;
|
||||
|
||||
if ((Addr & 1) != 0) {
|
||||
CompilerWarning("Unaligned LHU at constant address PC = %04X", CompilePC);
|
||||
Cheat_r4300iOpcodeNoMessage(RSP_Opcode_LHU,"RSP_Opcode_LHU");
|
||||
if ((Addr & 2) == 0) {
|
||||
CompilerWarning("Unaligned LHU at constant address PC = %04X", CompilePC);
|
||||
Cheat_r4300iOpcodeNoMessage(RSP_Opcode_LHU, "RSP_Opcode_LHU");
|
||||
} else {
|
||||
char Address[32];
|
||||
sprintf(Address, "Dmem + %Xh", Addr);
|
||||
MoveZxVariableToX86regHalf(RSPInfo.DMEM + (Addr ^ 2), Address, x86_ECX);
|
||||
MoveX86regToVariable(x86_ECX, &RSP_GPR[RSPOpC.rt].UW, GPR_Name(RSPOpC.rt));
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
char Address[32];
|
||||
|
@ -1571,9 +1651,14 @@ void Compile_Cop0_MF ( void ) {
|
|||
MoveX86regToVariable(x86_EAX, &RSP_GPR[RSPOpC.rt].UW, GPR_Name(RSPOpC.rt));
|
||||
break;
|
||||
case 4:
|
||||
case 7:
|
||||
MoveConstToVariable(RSPOpC.Hex, &RSPOpC.Hex, "RSPOpC.Hex" );
|
||||
Call_Direct(RSP_Cop0_MF,"RSP_Cop0_MF");
|
||||
MoveVariableToX86reg(&RSP_MfStatusCount, "RSP_MfStatusCount", x86_ECX);
|
||||
MoveVariableToX86reg(RSPInfo.SP_STATUS_REG, "SP_STATUS_REG", x86_EAX);
|
||||
CompConstToX86reg(x86_ECX, 10);
|
||||
JbLabel8("label", 10);
|
||||
MoveConstToVariable(0, &RSP_Running, "RSP_Running");
|
||||
IncX86reg(x86_ECX);
|
||||
MoveX86regToVariable(x86_EAX, &RSP_GPR[RSPOpC.rt].UW, GPR_Name(RSPOpC.rt));
|
||||
MoveX86regToVariable(x86_ECX, &RSP_MfStatusCount, "RSP_MfStatusCount");
|
||||
if (NextInstruction == NORMAL)
|
||||
{
|
||||
MoveConstToVariable(CompilePC + 4,PrgCount,"RSP PC");
|
||||
|
@ -1586,6 +1671,28 @@ void Compile_Cop0_MF ( void ) {
|
|||
BreakPoint();
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
if (AudioHle || GraphicsHle)
|
||||
{
|
||||
MoveConstToVariable(0, &RSP_GPR[RSPOpC.rt].W, GPR_Name(RSPOpC.rt));
|
||||
} else {
|
||||
MoveVariableToX86reg(RSPInfo.SP_SEMAPHORE_REG, "SP_SEMAPHORE_REG", x86_EAX);
|
||||
MoveConstToVariable(0, &RSP_Running, "RSP_Running");
|
||||
MoveConstToVariable(1, RSPInfo.SP_SEMAPHORE_REG, "SP_SEMAPHORE_REG");
|
||||
MoveX86regToVariable(x86_EAX, &RSP_GPR[RSPOpC.rt].W, GPR_Name(RSPOpC.rt));
|
||||
if (NextInstruction == NORMAL)
|
||||
{
|
||||
MoveConstToVariable(CompilePC + 4, PrgCount, "RSP PC");
|
||||
Ret();
|
||||
NextInstruction = FINISH_SUB_BLOCK;
|
||||
} else if (NextInstruction == DELAY_SLOT) {
|
||||
NextInstruction = DELAY_SLOT_EXIT;
|
||||
} else {
|
||||
CompilerWarning("MF error\nWeird Delay Slot.\n\nNextInstruction = %X\nEmulation will now stop", NextInstruction);
|
||||
BreakPoint();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
MoveVariableToX86reg(RSPInfo.DPC_START_REG, "DPC_START_REG", x86_EAX);
|
||||
MoveX86regToVariable(x86_EAX, &RSP_GPR[RSPOpC.rt].UW, GPR_Name(RSPOpC.rt));
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
#define VERSION_MAJOR 1
|
||||
#define VERSION_MINOR 7
|
||||
#define VERSION_REVISION 0
|
||||
#define VERSION_BUILD 13
|
||||
#define VERSION_BUILD 9999
|
||||
|
||||
#define VER_FILE_DESCRIPTION_STR "RSP emulation Plugin"
|
||||
#define VER_FILE_VERSION VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION, VERSION_BUILD
|
||||
|
|
|
@ -1824,6 +1824,25 @@ void MoveSxX86RegPtrDispToX86RegHalf(int AddrReg, BYTE Disp, int Destination) {
|
|||
PUTDST8(RecompPos, Disp);
|
||||
}
|
||||
|
||||
void MoveSxVariableToX86regByte(void *Variable, char *VariableName, int x86reg) {
|
||||
CPU_Message(" movsx %s, byte ptr [%s]",x86_Name(x86reg),VariableName);
|
||||
|
||||
PUTDST16(RecompPos, 0xbe0f);
|
||||
|
||||
switch (x86reg) {
|
||||
case x86_EAX: PUTDST8(RecompPos,0x05); break;
|
||||
case x86_EBX: PUTDST8(RecompPos,0x1D); break;
|
||||
case x86_ECX: PUTDST8(RecompPos,0x0D); break;
|
||||
case x86_EDX: PUTDST8(RecompPos,0x15); break;
|
||||
case x86_ESI: PUTDST8(RecompPos,0x35); break;
|
||||
case x86_EDI: PUTDST8(RecompPos,0x3D); break;
|
||||
case x86_ESP: PUTDST8(RecompPos,0x25); break;
|
||||
case x86_EBP: PUTDST8(RecompPos,0x2D); break;
|
||||
default: DisplayError("MoveSxVariableToX86regByte\nUnknown x86 Register");
|
||||
}
|
||||
PUTDST32(RecompPos,Variable);
|
||||
}
|
||||
|
||||
void MoveSxVariableToX86regHalf(void *Variable, char *VariableName, int x86reg) {
|
||||
CPU_Message(" movsx %s, word ptr [%s]",x86_Name(x86reg),VariableName);
|
||||
|
||||
|
@ -1963,6 +1982,25 @@ void MoveZxX86RegPtrDispToX86RegHalf(int AddrReg, BYTE Disp, int Destination) {
|
|||
PUTDST8(RecompPos, Disp);
|
||||
}
|
||||
|
||||
void MoveZxVariableToX86regByte(void *Variable, char *VariableName, int x86reg) {
|
||||
CPU_Message(" movzx %s, byte ptr [%s]",x86_Name(x86reg),VariableName);
|
||||
|
||||
PUTDST16(RecompPos, 0xb60f);
|
||||
|
||||
switch (x86reg) {
|
||||
case x86_EAX: PUTDST8(RecompPos,0x05); break;
|
||||
case x86_EBX: PUTDST8(RecompPos,0x1D); break;
|
||||
case x86_ECX: PUTDST8(RecompPos,0x0D); break;
|
||||
case x86_EDX: PUTDST8(RecompPos,0x15); break;
|
||||
case x86_ESI: PUTDST8(RecompPos,0x35); break;
|
||||
case x86_EDI: PUTDST8(RecompPos,0x3D); break;
|
||||
case x86_ESP: PUTDST8(RecompPos,0x25); break;
|
||||
case x86_EBP: PUTDST8(RecompPos,0x2D); break;
|
||||
default: DisplayError("MoveZxVariableToX86regByte\nUnknown x86 Register");
|
||||
}
|
||||
PUTDST32(RecompPos,Variable);
|
||||
}
|
||||
|
||||
void MoveZxVariableToX86regHalf(void *Variable, char *VariableName, int x86reg) {
|
||||
CPU_Message(" movzx %s, word ptr [%s]",x86_Name(x86reg),VariableName);
|
||||
|
||||
|
|
|
@ -141,11 +141,13 @@ void MoveSxX86RegHalfToX86Reg ( int Source, int Destination );
|
|||
void MoveSxX86RegPtrDispToX86RegHalf( int AddrReg, BYTE Disp, int Destination );
|
||||
void MoveSxN64MemToX86regByte ( int x86reg, int AddrReg );
|
||||
void MoveSxN64MemToX86regHalf ( int x86reg, int AddrReg );
|
||||
void MoveSxVariableToX86regByte ( void *Variable, char *VariableName, int x86reg );
|
||||
void MoveSxVariableToX86regHalf ( void *Variable, char *VariableName, int x86reg );
|
||||
void MoveZxX86RegHalfToX86Reg ( int Source, int Destination );
|
||||
void MoveZxX86RegPtrDispToX86RegHalf( int AddrReg, BYTE Disp, int Destination );
|
||||
void MoveZxN64MemToX86regByte ( int x86reg, int AddrReg );
|
||||
void MoveZxN64MemToX86regHalf ( int x86reg, int AddrReg );
|
||||
void MoveZxVariableToX86regByte ( void *Variable, char *VariableName, int x86reg );
|
||||
void MoveZxVariableToX86regHalf ( void *Variable, char *VariableName, int x86reg );
|
||||
void MulX86reg ( int x86reg );
|
||||
void NegateX86reg ( int x86reg );
|
||||
|
|
|
@ -138,12 +138,18 @@ void ShowBPPanel ( void )
|
|||
void RefreshBpoints ( HWND hList )
|
||||
{
|
||||
char Message[100];
|
||||
int count, location;
|
||||
LRESULT location;
|
||||
int count;
|
||||
|
||||
for (count = 0; count < NoOfBpoints; count ++ ) {
|
||||
sprintf(Message," at 0x%03X (RSP)", BPoint[count].Location);
|
||||
location = SendMessage(hList,LB_ADDSTRING,0,(LPARAM)Message);
|
||||
SendMessage(hList,LB_SETITEMDATA,(WPARAM)location,(LPARAM)BPoint[count].Location);
|
||||
location = SendMessage(hList, LB_ADDSTRING, 0, (LPARAM)Message);
|
||||
SendMessage(
|
||||
hList,
|
||||
LB_SETITEMDATA,
|
||||
(WPARAM)location,
|
||||
(LPARAM)BPoint[count].Location
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -154,9 +160,18 @@ void RemoveAllBpoint ( void )
|
|||
|
||||
void RemoveBpoint ( HWND hList, int index )
|
||||
{
|
||||
DWORD location;
|
||||
|
||||
location = SendMessage(hList,LB_GETITEMDATA,(WPARAM)index,0);
|
||||
LRESULT response;
|
||||
uint32_t location;
|
||||
|
||||
response = SendMessage(hList, LB_GETITEMDATA, (WPARAM)index, 0);
|
||||
if (response < 0 || response > 0x7FFFFFFFL)
|
||||
{
|
||||
DisplayError(
|
||||
"LB_GETITEMDATA response for %i out of DWORD range.",
|
||||
index
|
||||
);
|
||||
}
|
||||
location = (uint32_t)response;
|
||||
RemoveRSPBreakPoint(location);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
@echo off
|
||||
SETLOCAL
|
||||
|
||||
set origdir=%cd%
|
||||
cd /d %~dp0..\..
|
||||
set base_dir=%cd%
|
||||
cd /d %origdir%
|
||||
|
||||
|
||||
if exist "C:\Program Files\Git\usr\bin\sed.exe" ( set SED="C:\Program Files\Git\usr\bin\sed.exe")
|
||||
if exist "C:\Program Files (x86)\Git\bin\sed.exe" ( set SED="C:\Program Files (x86)\Git\bin\sed.exe")
|
||||
|
||||
if %SED% == "" (
|
||||
echo can not find sed.exe
|
||||
goto :end
|
||||
)
|
||||
|
||||
SETLOCAL EnableDelayedExpansion
|
||||
FOR /F "tokens=1 delims=" %%A in ('git describe --tags --long') do SET current_tag=%%A
|
||||
FOR /F "tokens=1 delims=" %%A in ('echo !current_tag! ^| !sed! "s/v[0-9]*\.[0-9]*-\([0-9]*\).*/\1/"') do SET commits_since_tag=%%A
|
||||
|
||||
call :setVersion %base_dir%\Source\Project64\version.h !commits_since_tag!
|
||||
call :setVersion %base_dir%\Source\nragev20\version.h !commits_since_tag!
|
||||
call :setVersion %base_dir%\Source\RSP\version.h !commits_since_tag!
|
||||
call :setVersion %base_dir%\Source\Glide64\version.h !commits_since_tag!
|
||||
|
||||
ENDLOCAL
|
||||
|
||||
goto :eof
|
||||
|
||||
:setVersion
|
||||
set version_file=%~1
|
||||
set out_file=%~1.out
|
||||
set build_no=%~2
|
||||
|
||||
if exist "%out_file%" del "%out_file%"
|
||||
|
||||
SETLOCAL DisableDelayedExpansion
|
||||
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ %version_file%"`) do (
|
||||
set "line=%%a"
|
||||
SETLOCAL EnableDelayedExpansion
|
||||
set "line=!line:9999=%build_no%!"
|
||||
set "line=!line:*:=!"
|
||||
echo(!line!>>!out_file!
|
||||
ENDLOCAL
|
||||
)
|
||||
ENDLOCAL
|
||||
|
||||
if exist "%out_file%" (
|
||||
if exist "%version_file%" (
|
||||
del "%version_file%"
|
||||
move "%out_file%" "%version_file%"
|
||||
)
|
||||
)
|
||||
|
||||
goto :eof
|
|
@ -0,0 +1,41 @@
|
|||
@ECHO OFF
|
||||
SETLOCAL
|
||||
|
||||
set BuildMode=Release
|
||||
if not "%1" == "" set BuildMode=%1
|
||||
if "%1" == "debug" set BuildMode=Debug
|
||||
if "%1" == "release" set BuildMode=Release
|
||||
|
||||
set MSVC-BUILDER=
|
||||
set origdir=%cd%
|
||||
cd /d %~dp0..\..\
|
||||
set base_dir=%cd%
|
||||
cd /d %origdir%
|
||||
|
||||
if exist "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe" ( set MSVC-BUILDER="C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe")
|
||||
if exist "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe" ( set MSVC-BUILDER="C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe")
|
||||
|
||||
if %MSVC-BUILDER% == "" (
|
||||
echo can not find visual studio 2008
|
||||
goto :end
|
||||
)
|
||||
|
||||
:: Build Win32 version of the software
|
||||
IF EXIST "%base_dir%\output.txt" del "%base_dir%\output.txt"
|
||||
%MSVC-BUILDER% "%base_dir%\Project64.vs2008.sln" /build "%BuildMode%|Win32" /out "%base_dir%\output.txt"
|
||||
set Result=%ERRORLEVEL%
|
||||
type "%base_dir%\output.txt"
|
||||
echo Done - ERRORLEVEL: %Result%
|
||||
IF %Result% NEQ 0 goto :EndErr
|
||||
|
||||
echo Build ok
|
||||
goto :end
|
||||
|
||||
:EndErr
|
||||
ENDLOCAL
|
||||
echo Build failed
|
||||
exit /B 1
|
||||
|
||||
:End
|
||||
ENDLOCAL
|
||||
exit /B 0
|
|
@ -1,5 +1,13 @@
|
|||
@echo off
|
||||
|
||||
if exist "C:\Program Files\7-Zip\7z.exe" ( set zip="C:\Program Files\7-Zip\7z.exe")
|
||||
|
||||
|
||||
if %zip% == "" (
|
||||
echo can not find 7z.exe
|
||||
goto :end
|
||||
)
|
||||
|
||||
SET current_dir=%cd%
|
||||
cd /d %~dp0..\..\
|
||||
SET base_dir=%cd%
|
||||
|
@ -26,3 +34,7 @@ copy "%base_dir%\Plugin\GFX\Jabo_Direct3D8.dll" "%base_dir%\Bin\Package\Plugin\G
|
|||
copy "%base_dir%\Plugin\GFX\PJ64Glide64.dll" "%base_dir%\Bin\Package\Plugin\GFX"
|
||||
copy "%base_dir%\Plugin\Input\PJ64_NRage.dll" "%base_dir%\Bin\Package\Plugin\Input"
|
||||
copy "%base_dir%\Plugin\RSP\RSP 1.7.dll" "%base_dir%\Bin\Package\Plugin\RSP"
|
||||
|
||||
cd %base_dir%\Bin\Package
|
||||
%zip% a -tzip -r ../project64 *
|
||||
cd /d %current_dir%
|
|
@ -0,0 +1,352 @@
|
|||
' On Error Resume Next
|
||||
|
||||
if WScript.Arguments.Count < 3 then
|
||||
WScript.StdOut.WriteLine "Missing parameters"
|
||||
WScript.StdOut.WriteLine "[password] [file to upload] [BuildUrl]"
|
||||
WScript.Quit
|
||||
end if
|
||||
|
||||
Set IE = WScript.CreateObject("InternetExplorer.Application", "IE_")
|
||||
IE.Visible = True
|
||||
|
||||
Login IE
|
||||
PostThread IE
|
||||
|
||||
Sub Wait(IE)
|
||||
Dim complete
|
||||
complete = False
|
||||
|
||||
For count = 0 to 1000
|
||||
WScript.Sleep 100
|
||||
WScript.StdOut.WriteLine count & ": IE.ReadyState: " & IE.ReadyState
|
||||
if IE.ReadyState >= 4 then
|
||||
WScript.StdOut.WriteLine count & ": IE.Busy: " & IE.Busy
|
||||
if not IE.Busy then
|
||||
WScript.StdOut.WriteLine count & ": IE.document.readyState: " & IE.document.readyState
|
||||
if StrComp(IE.document.readyState, "complete", vbTextCompare) = 0 then
|
||||
complete = true
|
||||
exit for
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
Next
|
||||
|
||||
if not complete then
|
||||
WScript.StdOut.WriteLine "Failed to wait for IE"
|
||||
WScript.Quit
|
||||
end if
|
||||
End Sub
|
||||
|
||||
Sub Navigate(IE, url)
|
||||
WScript.StdOut.WriteLine "Navigating to: " & url
|
||||
IE.Navigate url
|
||||
Wait IE
|
||||
End Sub
|
||||
|
||||
Sub ValidateLoggedIn(IE)
|
||||
WScript.StdOut.WriteLine "validate login success"
|
||||
Navigate IE, "http://forum.pj64-emu.com/"
|
||||
Wait IE
|
||||
|
||||
Dim LoggedIn
|
||||
LoggedIn = False
|
||||
Set NodeList = IE.document.getElementsByTagName("a")
|
||||
For Each Elem In NodeList
|
||||
if lcase(Mid(Elem.href,1,39)) = "http://forum.pj64-emu.com/member.php?u=" then
|
||||
if lcase(Mid(Elem.parentElement.innerHTML,1,11)) = "welcome, <a" then
|
||||
if lcase(Elem.innerHTML) = "buildbot" then
|
||||
WScript.StdOut.WriteLine "Found welcome message"
|
||||
LoggedIn = true
|
||||
exit for
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
Next
|
||||
|
||||
if LoggedIn = false then
|
||||
WScript.StdOut.WriteLine "Failed to login"
|
||||
WScript.Quit
|
||||
end if
|
||||
End Sub
|
||||
|
||||
Sub Login(IE)
|
||||
Set IE2 = WScript.CreateObject("InternetExplorer.Application", "IE_")
|
||||
IE2.Visible = True
|
||||
WScript.StdOut.WriteLine "Login start"
|
||||
Navigate IE2, "http://forum.pj64-emu.com/"
|
||||
|
||||
set navbar_username = IE2.document.getelementbyid("navbar_username")
|
||||
set navbar_password = IE2.document.getelementbyid("navbar_password")
|
||||
if navbar_username is nothing then
|
||||
ValidateLoggedIn IE
|
||||
exit sub
|
||||
end if
|
||||
|
||||
navbar_username.value = "buildbot"
|
||||
navbar_password.value = WScript.Arguments(0)
|
||||
navbar_username.form.submit
|
||||
Wait IE2
|
||||
Dim FoundIt
|
||||
FoundIt = False
|
||||
|
||||
For count = 0 to 100
|
||||
WScript.StdOut.WriteLine count
|
||||
Set NodeList = IE2.document.getElementsByTagName("a")
|
||||
For Each Elem In NodeList
|
||||
if StrComp(Elem.href, "http://forum.pj64-emu.com/", vbTextCompare) = 0 then
|
||||
if StrComp(Elem.innerHTML, "Click here if your browser does not automatically redirect you.", vbTextCompare) = 0 then
|
||||
FoundIt = True
|
||||
Exit For
|
||||
End if
|
||||
end if
|
||||
Next
|
||||
if FoundIt = True then
|
||||
Exit For
|
||||
end if
|
||||
Next
|
||||
|
||||
if FoundIt = false then
|
||||
WScript.StdOut.WriteLine "Failed to find redirect"
|
||||
WScript.Quit
|
||||
end if
|
||||
|
||||
WScript.StdOut.WriteLine "found redirect"
|
||||
Navigate IE, "http://forum.pj64-emu.com/"
|
||||
Wait IE
|
||||
|
||||
WScript.StdOut.WriteLine "Quitting IE2"
|
||||
IE2.Quit
|
||||
ValidateLoggedIn IE
|
||||
WScript.StdOut.WriteLine "Login Done"
|
||||
End Sub
|
||||
|
||||
|
||||
Sub PostThread(IE)
|
||||
WScript.StdOut.WriteLine "PostThread start"
|
||||
Navigate IE, "http://forum.pj64-emu.com/newthread.php?do=newthread&f=8"
|
||||
Wait IE
|
||||
|
||||
Set NodeList = IE.document.getElementsByTagName("input")
|
||||
Dim submitButton
|
||||
For Each Elem In NodeList
|
||||
if lcase(Elem.className) = "button" and lcase(Elem.value) = "submit new thread" then
|
||||
WScript.StdOut.WriteLine "found submit button"
|
||||
set submitButton = Elem
|
||||
exit for
|
||||
end if
|
||||
Next
|
||||
|
||||
if submitButton is nothing then
|
||||
WScript.StdOut.WriteLine "failed to find submit button"
|
||||
WScript.Quit
|
||||
end if
|
||||
|
||||
SetPostDetails IE, WScript.Arguments(2)
|
||||
|
||||
set manage_attachments_button = ie.document.getelementbyid("manage_attachments_button")
|
||||
if not manage_attachments_button is nothing then
|
||||
manage_attachments_button.click
|
||||
Wait IE
|
||||
WScript.Sleep 2000
|
||||
UploadFile WScript.Arguments(1)
|
||||
end if
|
||||
|
||||
submitButton.click
|
||||
Wait IE
|
||||
End Sub
|
||||
|
||||
Sub SetPostDetails(IE, BuildUrl)
|
||||
WScript.StdOut.WriteLine "Posting Details"
|
||||
Dim oReq
|
||||
Set oReq = CreateObject("MSXML2.XMLHTTP")
|
||||
oReq.open "GET", BuildUrl & "api/xml?wrapper=changes", False
|
||||
oReq.send
|
||||
|
||||
if (oReq.status <> 200) then
|
||||
WScript.StdOut.WriteLine "failed to get job details (" & BuildUrl & "api/xml?wrapper=changes)"
|
||||
WScript.Quit
|
||||
end if
|
||||
|
||||
Dim xmlDoc
|
||||
Set xmlDoc = oReq.responseXML
|
||||
Set objLst = xmlDoc.getElementsByTagName("freeStyleBuild")
|
||||
|
||||
Dim PostTitle, PostContent
|
||||
For each elem in objLst
|
||||
set childNodes = elem.childNodes
|
||||
for each node in childNodes
|
||||
if lcase(node.nodeName)="fulldisplayname" then
|
||||
PostTitle = node.text
|
||||
end if
|
||||
if lcase(node.nodeName)="changeset" then
|
||||
for each item in node.childNodes
|
||||
dim commitId, comment
|
||||
|
||||
commitId = ""
|
||||
comment = ""
|
||||
|
||||
for each itemDetail in item.childNodes
|
||||
if lcase(itemDetail.nodeName)="commitid" then
|
||||
commitId = itemDetail.text
|
||||
end if
|
||||
if lcase(itemDetail.nodeName)="comment" then
|
||||
comment = Replace(Replace(itemDetail.text, vbLf, " "), vbCr, " ")
|
||||
end if
|
||||
next
|
||||
|
||||
if (Len(comment) > 0 and Len(commitId) > 0) then
|
||||
PostContent = PostContent & "[*]" & comment & " (commit: [URL=""https://github.com/project64/project64/commit/" & commitId & """]"& commitId & "[/URL])" & vbCr
|
||||
end if
|
||||
next
|
||||
end if
|
||||
next
|
||||
Next
|
||||
|
||||
if (Len(PostContent) > 0) then
|
||||
PostContent = "Changes:"&vbCr&"[LIST=1]" & vbCr & PostContent & "[/LIST]"
|
||||
else
|
||||
PostContent = "No code changes"
|
||||
end if
|
||||
|
||||
WScript.StdOut.WriteLine "PostTitle = """ & PostTitle & """"
|
||||
WScript.StdOut.WriteLine "PostContent = """ & PostContent & """"
|
||||
|
||||
Dim SetTitle
|
||||
SetTitle = False
|
||||
Set NodeList = IE.document.getElementsByTagName("input")
|
||||
For Each Elem In NodeList
|
||||
if lcase(Elem.name) = "subject" then
|
||||
Elem.value = PostTitle
|
||||
SetTitle = true
|
||||
exit for
|
||||
end if
|
||||
Next
|
||||
|
||||
if not SetTitle then
|
||||
WScript.StdOut.WriteLine "failed to set post title"
|
||||
WScript.Quit
|
||||
end if
|
||||
|
||||
Dim SetMessage
|
||||
SetMessage = False
|
||||
Set NodeList = IE.document.getElementsByTagName("textarea")
|
||||
For Each Elem In NodeList
|
||||
WScript.StdOut.WriteLine Elem.name
|
||||
if lcase(Elem.name) = "message" then
|
||||
Elem.value = PostContent
|
||||
SetMessage = true
|
||||
exit for
|
||||
end if
|
||||
Next
|
||||
|
||||
if not SetMessage then
|
||||
WScript.StdOut.WriteLine "failed to set post message"
|
||||
WScript.Quit
|
||||
end if
|
||||
|
||||
end sub
|
||||
|
||||
sub UploadFile(FileToUpload)
|
||||
WScript.StdOut.WriteLine "UploadFile start"
|
||||
|
||||
On Error resume next
|
||||
set IE = Nothing
|
||||
|
||||
Set Shell = CreateObject("Shell.Application")
|
||||
For i = 0 to Shell.Windows.Count -1
|
||||
set Win = Shell.Windows.Item(i)
|
||||
If TypeName(win.Document) = "HTMLDocument" Then
|
||||
if StrComp(win.Document.title, "Manage Attachments - Project64 Forums", vbTextCompare) = 0 then
|
||||
set IE = win
|
||||
end if
|
||||
End If
|
||||
|
||||
if not IE is nothing then
|
||||
exit for
|
||||
end if
|
||||
Next
|
||||
if IE is nothing then
|
||||
WScript.StdOut.WriteLine "Failed to find upload window"
|
||||
exit sub
|
||||
end if
|
||||
|
||||
WScript.StdOut.WriteLine "Found window"
|
||||
Set objShell = CreateObject("Wscript.Shell")
|
||||
WScript.StdOut.WriteLine "activate: " & win.Document.title & " - " & IE.name
|
||||
Dim activated
|
||||
For count = 0 to 100
|
||||
activated = objShell.AppActivate(win.Document.title & " - " & IE.name, True)
|
||||
if activated then
|
||||
exit for
|
||||
end if
|
||||
WScript.StdOut.WriteLine count & ": " & activated
|
||||
WScript.Sleep 100
|
||||
Next
|
||||
|
||||
if not activated then
|
||||
WScript.StdOut.WriteLine "Failed to activate window"
|
||||
WScript.Quit
|
||||
end if
|
||||
|
||||
Set NodeList = IE.document.getElementsByTagName("input")
|
||||
For Each Elem In NodeList
|
||||
if StrComp(Elem.name, "attachment[]", vbTextCompare) = 0 then
|
||||
Elem.focus()
|
||||
objShell.SendKeys " "
|
||||
|
||||
WScript.StdOut.WriteLine "Uploading: " & FileToUpload
|
||||
Wscript.Sleep 1000
|
||||
a=Split(FileToUpload,"\")
|
||||
b=ubound(a)
|
||||
For i=0 to b
|
||||
objShell.SendKeys a(i)
|
||||
if i < b then
|
||||
objShell.SendKeys "\"
|
||||
else
|
||||
objShell.SendKeys "{ENTER}"
|
||||
end if
|
||||
Wscript.Sleep 100
|
||||
Next
|
||||
exit for
|
||||
end if
|
||||
Next
|
||||
|
||||
For Each Elem In NodeList
|
||||
if StrComp(Elem.name, "upload", vbTextCompare) = 0 then
|
||||
Elem.click
|
||||
Wait IE
|
||||
exit for
|
||||
end if
|
||||
Next
|
||||
|
||||
Dim UploadDone
|
||||
UploadDone = False
|
||||
For count = 0 to 1000
|
||||
WScript.StdOut.WriteLine count & ": Waiting for upload done"
|
||||
Set NodeList = ie.document.getElementsByTagName("legend")
|
||||
For Each Elem In NodeList
|
||||
if (len(Elem.innerHTML) > 19) and lcase(Mid(Elem.innerHTML, 1, 19)) = "current attachments" then
|
||||
UploadDone = true
|
||||
WScript.StdOut.WriteLine "Upload done"
|
||||
exit for
|
||||
end if
|
||||
Next
|
||||
if UploadDone then
|
||||
exit for
|
||||
end if
|
||||
Next
|
||||
|
||||
if not UploadDone then
|
||||
WScript.StdOut.WriteLine "Failed to upload file"
|
||||
WScript.Quit
|
||||
end if
|
||||
|
||||
Set NodeList = IE.document.getElementsByTagName("input")
|
||||
For Each Elem In NodeList
|
||||
if lcase(Elem.value) = "close this window" then
|
||||
Elem.click
|
||||
exit for
|
||||
end if
|
||||
Next
|
||||
end sub
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
#define VERSION_MAJOR 2
|
||||
#define VERSION_MINOR 4
|
||||
#define VERSION_REVISION 0
|
||||
#define VERSION_BUILD 4
|
||||
#define VERSION_BUILD 9999
|
||||
|
||||
#define VER_FILE_DESCRIPTION_STR "N-Rage for Project64"
|
||||
#define VER_FILE_VERSION VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION, VERSION_BUILD
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
Plugged=1
|
||||
RawData=1
|
||||
RawData=0
|
||||
PakType=1
|
||||
RealN64Range=1
|
||||
RapidFireEnabled=0
|
||||
|
|
Loading…
Reference in New Issue