Merge ..\zilmar into PropertySheetsTemp

This commit is contained in:
Julio C. Rocha 2015-09-23 20:06:48 -07:00
commit e178ec96fc
88 changed files with 1751 additions and 710 deletions

View File

@ -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

View File

@ -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 lutilisation 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 limage chargée"
#252# "Lancer lémulation de limage ROM chargée"
#253# "Arrêter lémulation de limage 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 lapplication"
#257# "Redémarrer limage 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 à lemplacement 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 lutilisation 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 lapplication"
#276# "Voir la FAQ pour lapplication"
#278# "À propos de lapplication et des auteurs"
#277# "À propos des auteurs sur les fichiers de support"
#279# "Ouvrir limage 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 lapplication pour utiliser cette langue"
#282# "Choisir lemplacement 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 doù 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 dune 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 lordre :"
#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 quune 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 dune 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 linterruption 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 linterruption 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 lextension 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 daffichage 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 sarrêter.\n\nVérifiez la ROM et les paramètres de la ROM."
#2003# "Lallocation 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 à louverture du fichier de sauvegarde"
#2011# "Échec à louverture de lEEPROM"
#2012# "Échec à louverture de la RAM flash"
#2013# "Échec à louverture du mempak"
#2014# "La tentative douverture 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 douverture du fichier a échoué."
#2016# "Une erreur sest produite pendant louverture 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 sest 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 na 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 dabord.\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 limage"
#2040# "Impossible douvrir une ROM car les plugins nont 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 navez pas sélectionné de touche virtuelle à assigner à lentré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 na é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 larchive 7z"
#2054# "Émulation des graphismes bas niveau (LLE)"
#2055# "Les graphismes LLE ne sont pas à utiliser par tout le monde !!!\nIl est recommandé dutiliser 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# "Laudio HLE nécessite un plugin tiers !!!\nSi vous nutilisez pas un plugin audio tiers qui supporte le HLE, vous nentendrez aucun son.\n\nChanger pour laudio en mode HLE ?"

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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 )

View File

@ -1,5 +1,8 @@
#ifdef _DEBUG
#if (defined(_MSC_VER) && (_MSC_VER < 1900))
#define MEM_LEAK_TEST
#endif
#ifdef MEM_LEAK_TEST

View File

@ -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)

View File

@ -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);
}

View File

@ -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

View File

@ -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);
}

View File

@ -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);

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
}

View File

@ -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;

View File

@ -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);

View File

@ -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

View File

@ -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;

View File

@ -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()

View File

@ -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;
};

View File

@ -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

View File

@ -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);
}

View File

@ -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)
{
}

View File

@ -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
}

View File

@ -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();

View File

@ -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);

View File

@ -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 {

View File

@ -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)

View File

@ -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 );

View File

@ -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);

View File

@ -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));

View File

@ -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);

View File

@ -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)
{

View File

@ -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;

View File

@ -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)) {

View File

@ -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);

View File

@ -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,

View File

@ -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());
}

View File

@ -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);
}

View File

@ -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));

View File

@ -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));
}

View File

@ -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 )

View File

@ -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));
}

View File

@ -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;

View File

@ -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)
{
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 )

View File

@ -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)
{

View File

@ -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 );
};

View File

@ -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

View File

@ -1,5 +1,7 @@
#pragma once
#include <commctrl.h>
class CConfigSettingSection;
class CSettingsPage;

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -10,6 +10,8 @@
****************************************************************************/
#pragma once
#include <prsht.h>
class CSettingsPage
{
public:

View File

@ -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)
{
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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));

View File

@ -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

View File

@ -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);

View File

@ -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 );

View File

@ -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);
}

View File

@ -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

41
Source/Script/build.cmd Normal file
View File

@ -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

View File

@ -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%

View File

@ -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

View File

@ -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

View File

@ -1,5 +1,5 @@
Plugged=1
RawData=1
RawData=0
PakType=1
RealN64Range=1
RapidFireEnabled=0