diff --git a/debugger/assets/styles/app.css b/debugger/assets/styles/app.css
index e64d2b08a..3809a6847 100644
--- a/debugger/assets/styles/app.css
+++ b/debugger/assets/styles/app.css
@@ -336,3 +336,44 @@ body {
max-height: 80vh;
overflow-y: auto;
}
+.debugger-module-info-outer-table {
+}
+.debugger-module-info-outer-table tbody tr td:nth-child(1) {
+ width: 110px;
+}
+.debugger-module-info-inner-table {
+ width: 300px;
+}
+.debugger-module-info-inner-table td:nth-child(1) {
+ text-align: right;
+}
+.debugger-module-info-headers {
+ width: 400px;
+}
+.debugger-module-info-sections {
+ width: 400px;
+}
+.debugger-module-info-static-libraries {
+ width: 400px;
+}
+.debugger-module-info-imports {
+ width: 900px;
+}
+.debugger-module-info-imports td:nth-child(1) {
+ width: 40px;
+}
+.debugger-module-info-imports td:nth-child(2) {
+ width: 64px;
+}
+.debugger-module-info-imports td:nth-child(3) {
+ width: 60px;
+}
+.debugger-module-info-imports td:nth-child(4) {
+ width: 100%;
+}
+.debugger-module-info-imports td:nth-child(5) {
+ width: 80px;
+}
+.debugger-module-info-imports td:nth-child(6) {
+ width: 80px;
+}
diff --git a/debugger/assets/ui/code/code-tab.html b/debugger/assets/ui/code/code-tab.html
index 282d35097..a5b4bd2c5 100644
--- a/debugger/assets/ui/code/code-tab.html
+++ b/debugger/assets/ui/code/code-tab.html
@@ -38,7 +38,7 @@
- {{ moduleInfo }}
+
+
+
+ Module |
+
+
+ |
+
+
+ Execution |
+
+
+
+
+ Media ID |
+ {{ moduleInfo.executionInfo.mediaId | hex32 }} |
+
+
+ Version |
+ {{ moduleInfo.executionInfo.version }} |
+
+
+ Base Version |
+ {{ moduleInfo.executionInfo.baseVersion }} |
+
+
+ Title ID |
+ {{ moduleInfo.executionInfo.titleId | hex32 }} |
+
+
+ Platform |
+ {{ moduleInfo.executionInfo.platform | hex32 }} |
+
+
+ Executable Table |
+ {{ moduleInfo.executionInfo.executableTable | hex32 }} |
+
+
+ Disc |
+ {{ moduleInfo.executionInfo.discNumber }} / {{ moduleInfo.executionInfo.discCount }} |
+
+
+ Save Game ID |
+ {{ moduleInfo.executionInfo.savegameId | hex32 }} |
+
+
+
+ |
+
+
+ Loader |
+
+
+
+
+ Image Flags |
+ {{ moduleInfo.loaderInfo.imageFlags | hex32 }} |
+
+
+ Game Regions |
+ {{ moduleInfo.loaderInfo.gameRegions | hex32 }} |
+
+
+ Media Flags |
+ {{ moduleInfo.loaderInfo.mediaFlags | hex32 }} |
+
+
+
+ |
+
+
+ TLS |
+
+
+
+
+ Slot Count |
+ {{ moduleInfo.tlsInfo.slotCount }} |
+
+
+ Data Size |
+ {{ moduleInfo.tlsInfo.dataSize }}b |
+
+
+ Raw Data Address |
+ {{ moduleInfo.tlsInfo.rawDataAddress | hex32 }} |
+
+
+ Raw Data Size |
+ {{ moduleInfo.tlsInfo.rawDataSize }}b |
+
+
+
+ |
+
+
+
+
+
+
+
Sections
+
+
+
Static Libraries
+
+
+
+ Name |
+ Version |
+
+
+
+
+ {{ library.name }} |
+ {{ library.version }} |
+
+
+
+
+
Imports
+
+
{{ library.name }}
+ Version: {{ library.version }} / min version: {{ library.minVersion }}
+
+
diff --git a/debugger/assets/ui/code/module-info.js b/debugger/assets/ui/code/module-info.js
index 53a0da773..8078d955e 100644
--- a/debugger/assets/ui/code/module-info.js
+++ b/debugger/assets/ui/code/module-info.js
@@ -21,6 +21,31 @@ module.controller('ModuleInfoController', function(
$scope.moduleName = moduleName;
$scope.moduleInfo = moduleInfo;
+ $scope.headerSort = {
+ column: 'key',
+ reverse: false
+ };
+ $scope.sectionSort = {
+ column: 'startAddress',
+ reverse: false
+ };
+ $scope.staticLibrarySort = {
+ column: 'name',
+ reverse: false
+ };
+ $scope.importSort = {
+ column: 'ordinal',
+ reverse: false
+ };
+ $scope.changeSort = function(sort, column) {
+ if (sort.column == column) {
+ sort.reverse = !sort.reverse;
+ } else {
+ sort.column = column;
+ sort.reverse = false;
+ }
+ };
+
$scope.close = function() {
$scope.$close(null);
};
diff --git a/debugger/src/directives.js b/debugger/src/directives.js
index fd24f22dd..30925723e 100644
--- a/debugger/src/directives.js
+++ b/debugger/src/directives.js
@@ -9,7 +9,9 @@
'use strict';
-var module = angular.module('xe.directives', []);
+var module = angular.module('xe.directives', [
+ 'ui.router'
+]);
module.directive('uiEnter', function() {
@@ -49,3 +51,39 @@ module.directive('uiScrollDownOn', function() {
};
});
+module.directive('xeCoderef', function($state) {
+ return {
+ priority: 1,
+ link: function($scope, element, attrs) {
+ var target = attrs.xeCoderef;
+ var stateName = 'session.code.function';
+ var stateParams = {
+ function: target,
+ a: null
+ };
+ element.attr('href', $state.href(stateName, stateParams));
+ element.bind('click', function(e) {
+ e.preventDefault();
+ $state.go(stateName, stateParams);
+ });
+ }
+ };
+});
+
+module.directive('xeMemref', function($state) {
+ return {
+ priority: 1,
+ link: function($scope, element, attrs) {
+ var target = attrs.xeMemref;
+ var stateName = 'session.memory';
+ var stateParams = {
+ a: target
+ };
+ element.attr('href', $state.href(stateName, stateParams));
+ element.bind('click', function(e) {
+ e.preventDefault();
+ $state.go(stateName, stateParams);
+ });
+ }
+ };
+});
diff --git a/debugger/src/filters.js b/debugger/src/filters.js
index 9cb2d144e..8bb6416c6 100644
--- a/debugger/src/filters.js
+++ b/debugger/src/filters.js
@@ -12,6 +12,16 @@
var module = angular.module('xe.filters', []);
+module.filter('hex16', function() {
+ return function(number) {
+ if (number !== null && number !== undefined) {
+ var str = '' + number.toString(16).toUpperCase();
+ while (str.length < 4) str = '0' + str;
+ return str;
+ }
+ };
+});
+
module.filter('hex32', function() {
return function(number) {
if (number !== null && number !== undefined) {
diff --git a/debugger/src/router.js b/debugger/src/router.js
index e5427ab3b..b1953e300 100644
--- a/debugger/src/router.js
+++ b/debugger/src/router.js
@@ -109,7 +109,7 @@ module.config(function($stateProvider, $urlRouterProvider) {
});
$stateProvider.state('session.memory', {
- url: '/memory',
+ url: '/memory?a',
templateUrl: 'assets/ui/memory/memory-tab.html',
controller: function($stateParams) {
},
diff --git a/src/xenia/cpu/processor.cc b/src/xenia/cpu/processor.cc
index 6884080f0..91bbc7c50 100644
--- a/src/xenia/cpu/processor.cc
+++ b/src/xenia/cpu/processor.cc
@@ -499,8 +499,6 @@ json_t* Processor::DumpModule(XexModule* module, bool& succeeded) {
json_t* header_entry_json = json_object();
json_object_set_integer_new(
header_entry_json, "key", opt_header->key);
- json_object_set_integer_new(
- header_entry_json, "offset", opt_header->offset);
json_object_set_integer_new(
header_entry_json, "length", opt_header->length);
json_object_set_integer_new(
@@ -610,7 +608,7 @@ json_t* Processor::DumpModule(XexModule* module, bool& succeeded) {
import_json, "valueAddress", info->value_address);
if (kernel_export && kernel_export->type == KernelExport::Variable) {
json_object_set_string_new(
- import_json, "type", "function");
+ import_json, "type", "variable");
} else if (kernel_export) {
json_object_set_string_new(
import_json, "type", "function");