From d861ef8aab92399b9aee58eb688ccde13fe04ff5 Mon Sep 17 00:00:00 2001 From: Ben Vanik Date: Sun, 22 Dec 2013 13:06:15 -0800 Subject: [PATCH] Prettier ppc disasm. --- debugger/assets/styles/app.css | 22 +++++ debugger/assets/ui/code/function-view.js | 118 ++++++++++++++++++++--- debugger/assets/ui/navbar.html | 10 +- debugger/src/app.js | 5 +- src/alloy/frontend/ppc/ppc_scanner.cc | 80 +++++++++++++++ src/alloy/frontend/ppc/ppc_scanner.h | 7 ++ src/alloy/frontend/ppc/ppc_translator.cc | 80 ++++++++++++++- src/alloy/frontend/ppc/ppc_translator.h | 2 + src/alloy/runtime/debug_info.cc | 3 +- src/alloy/runtime/debug_info.h | 3 + src/xenia/cpu/processor.cc | 2 +- 11 files changed, 311 insertions(+), 21 deletions(-) diff --git a/debugger/assets/styles/app.css b/debugger/assets/styles/app.css index f3b80a4df..fd7b6a8de 100644 --- a/debugger/assets/styles/app.css +++ b/debugger/assets/styles/app.css @@ -231,6 +231,28 @@ body { bottom: 0; height: 100%; } +.debugger-fnview-gutter-icon { + width: 30px; +} +.debugger-fnview-gutter-icon-el { +} +.debugger-fnview-gutter-addr { + width: 70px; +} +.debugger-fnview-gutter-addr-el { +} +.debugger-fnview-gutter-addr-el-inactive { + color: #999; +} +.debugger-fnview-gutter-code { + width: 76px; + background-color: #fff; + border-left: 1px solid #ddd; +} +.debugger-fnview-gutter-code-el { + padding-left: 6px; + color: #aaa; +} .debugger-fnview-graphview { order: 2; flex: 0 0 auto; diff --git a/debugger/assets/ui/code/function-view.js b/debugger/assets/ui/code/function-view.js index 865cc1cc6..b929a698e 100644 --- a/debugger/assets/ui/code/function-view.js +++ b/debugger/assets/ui/code/function-view.js @@ -42,22 +42,116 @@ module.controller('FunctionViewController', function( theme: 'default', indentUnit: 2, tabSize: 2, - lineNumbers: true, - firstLineNumber: 0, - lineNumberFormatter: function(line) { - return String(line); - }, - gutters: [], + lineNumbers: false, + gutters: [ + 'debugger-fnview-gutter-icon', + 'debugger-fnview-gutter-addr', + 'debugger-fnview-gutter-code' + ], readOnly: true }); - function updateCode() { - var codeType = $scope.codeType; - var value = ''; - if ($scope.fn) { - value = $scope.fn.disasm[codeType]; + function hex32(number) { + var str = "" + number.toString(16).toUpperCase(); + while (str.length < 8) str = "0" + str; + return str; + }; + + function updateSourceCode(fn) { + var cm = $scope.codeMirror; + if (!fn) { + $scope.sourceLines = []; + cm.setValue(''); + return; + } + + var doc = cm.getDoc(); + + var lines = fn.disasm.source.lines; + $scope.sourceLines = lines; + + var textContent = []; + for (var n = 0; n < lines.length; n++) { + var line = lines[n]; + textContent.push(line[3]); + } + cm.setValue(textContent.join('\n')); + + for (var n = 0; n < lines.length; n++) { + var line = lines[n]; + + var el = document.createElement('div'); + el.classList.add('debugger-fnview-gutter-addr-el'); + el.innerText = hex32(line[1]); + cm.setGutterMarker(n, 'debugger-fnview-gutter-addr', el); + if (line[0] != 'i') { + el.classList.add('debugger-fnview-gutter-addr-el-inactive'); + } + + if (line[0] == 'i') { + el = document.createElement('div'); + el.classList.add('debugger-fnview-gutter-code-el'); + el.innerText = hex32(line[2]); + cm.setGutterMarker(n, 'debugger-fnview-gutter-code', el); + } + } + }; + function updateCode() { + var cm = $scope.codeMirror; + var fn = $scope.fn || null; + var codeType = $scope.codeType; + + var gutters; + switch (codeType) { + case 'source': + gutters = [ + 'debugger-fnview-gutter-icon', + 'debugger-fnview-gutter-addr', + 'debugger-fnview-gutter-code' + ]; + break; + default: + gutters = [ + 'debugger-fnview-gutter-icon', + 'debugger-fnview-gutter-addr' + ]; + break; + } + cm.setOption('gutters', gutters); + + cm.clearGutter('debugger-fnview-gutter-icon'); + cm.clearGutter('debugger-fnview-gutter-addr'); + cm.clearGutter('debugger-fnview-gutter-code'); + + // Set last to make all option changes stick. + switch (codeType) { + case 'source': + updateSourceCode(fn); + break; + default: + var value = fn ? fn.disasm[codeType] : null; + cm.setValue(value || ''); + break; } - $scope.codeMirror.setValue(value || ''); }; $scope.$watch('codeType', updateCode); + + $scope.codeMirror.on('gutterClick', function( + instance, line, gutterClass, e) { + if (e.which == 1) { + if (gutterClass == 'debugger-fnview-gutter-icon') { + console.log('click', e); + } + } + }); +// $scope.codeMirror.on('gutterContextMenu', function( +// instance, line, gutterClass, e) { +// console.log('context menu'); +// e.preventDefault(); +// }); +// $scope.codeMirror.on('contextmenu', function( +// instance, e) { +// console.log('context menu main'); +// e.preventDefault(); +// }); }); diff --git a/debugger/assets/ui/navbar.html b/debugger/assets/ui/navbar.html index c73759112..c2a64c9ec 100644 --- a/debugger/assets/ui/navbar.html +++ b/debugger/assets/ui/navbar.html @@ -3,11 +3,11 @@ Xenia