From 991c09b01e6b099a5b00d7a9236d252b85a714b5 Mon Sep 17 00:00:00 2001 From: alekseiplusplus Date: Sun, 3 Dec 2023 11:32:39 +1100 Subject: half-fixed infinite loop; new debug util, old one out --- log/log-readable.cpp | 68 +++++++++++++++++++++++++++ log/rom-code-lines | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++ log/rom-hex-positions | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 324 insertions(+) create mode 100644 log/log-readable.cpp create mode 100644 log/rom-code-lines create mode 100644 log/rom-hex-positions (limited to 'log') diff --git a/log/log-readable.cpp b/log/log-readable.cpp new file mode 100644 index 0000000..82e263d --- /dev/null +++ b/log/log-readable.cpp @@ -0,0 +1,68 @@ +// log-readable.cpp +// A simple utility which makes the runtime log files into a more readable +// format by adding commented code lines from wozmon. + +#include +#include +#include +#include +#include + +using namespace std; + +int main() +{ + ifstream RomLine ("rom-hex-positions"); + ifstream Code ("rom-code-lines"); + + map Convert; + + string x; + string y; + + for (int i = 0; i < 128; i++) + { + getline (RomLine, x); + getline (Code, y, (char)0x0d); + if (i != 0) + y.erase(0,1); + Convert[x] = y; + + cout << x << " : " << Convert[x] << endl; + } + + RomLine.close(); + Code.close(); + + ifstream Log("log.raw"); + ofstream Output("log.new"); + + Output << "Time PC Label Instruction Comment\n" << endl; + while(!Log.eof()) + { + string t; + // Expects time counter, and prints. + Log >> t; + Output << t; + // Expecting a delimiter surrounded with space. + Log >> t; + Output << " : "; + // Expecting program counter + Log >> t; + Output << t; + // If a mapping exists, print out the program counter and line code. + try { + string s = Convert[t]; + Output << t << " : "; + Output << s; + } + // Otherwise, don't do anything. + catch (out_of_range) { } + // Newline + Output << endl; + } + + Log.close(); + Output.close(); + return 0; +} diff --git a/log/rom-code-lines b/log/rom-code-lines new file mode 100644 index 0000000..2ed13e6 --- /dev/null +++ b/log/rom-code-lines @@ -0,0 +1,128 @@ +RESET CLD Clear decimal arithmetic mode + CLI + LDY #%0111.1111 Mask for DSP data direction reg + STY DSP (DDR mode is assumed after reset) + LDA #%1010.0111 KBD and DSP control register mask + STA KBDCR Enable interrupts, set CA1, CB1 for + STA DSPCR positive edge sense/output mode. +NOTCR CMP #BS Backspace key? + BEQ BACKSPACE Yes + CMP #ESC ESC? + BEQ ESCAPE Yes + INY Advance text index + BPL NEXTCHAR Auto ESC if line longer than 127 +ESCAPE LDA #PROMPT Print prompt character + JSR ECHO Output it. +GETLINE LDA #CR Send CR + JSR ECHO + LDY #0+1 Start a new input line +BACKSPACE DEY Backup text index + BMI GETLINE Oops, line's empty, reinitialize +NEXTCHAR LDA KBDCR Wait for key press + BPL NEXTCHAR No key yet! + LDA KBD Load character. B7 should be '1' + STA IN,Y Add to text buffer + JSR ECHO Display character + CMP #CR + BNE NOTCR It's not CR! + LDY #-1 Reset text index + LDA #0 Default mode is XAM + TAX X=0 +SETSTOR ASL Leaves $7B if setting STOR mode +SETMODE STA MODE Set mode flags +BLSKIP INY Advance text index +NEXTITEM LDA IN,Y Get character + CMP #CR + BEQ GETLINE We're done if it's CR! + CMP #"." + BCC BLSKIP Ignore everything below "."! + BEQ SETMODE Set BLOCK XAM mode ("." = $AE) + CMP #":" + BEQ SETSTOR Set STOR mode! $BA will become $7B + CMP #"R" + BEQ RUN Run the program! Forget the rest + STX L Clear input value (X=0) + STX H + STY YSAV Save Y for comparison +NEXTHEX LDA IN,Y Get character for hex test + EOR #$B0 Map digits to 0-9 + CMP #9+1 Is it a decimal digit? + BCC DIG Yes! + ADC #$88 Map letter "A"-"F" to $FA-FF + CMP #$FA Hex letter? + BCC NOTHEX No! Character not hex +DIG ASL + ASL Hex digit to MSD of A + ASL + ASL + LDX #4 Shift count +HEXSHIFT ASL Hex digit left, MSB to carry + ROL L Rotate into LSD + ROL H Rotate into MSD's + DEX Done 4 shifts? + BNE HEXSHIFT No, loop + INY Advance text index + BNE NEXTHEX Always taken +NOTHEX CPY YSAV Was at least 1 hex digit given? + BEQ ESCAPE No! Ignore all, start from scratch + BIT MODE Test MODE byte + BVC NOTSTOR B6=0 is STOR, 1 is XAM or BLOCK XAM + LDA L LSD's of hex data + STA (STL,X) Store current 'store index'(X=0) + INC STL Increment store index. + BNE NEXTITEM No carry! + INC STH Add carry to 'store index' high +TONEXTITEM JMP NEXTITEM Get next command item. +RUN JMP (XAML) Run user's program +NOTSTOR BMI XAMNEXT B7 = 0 for XAM, 1 for BLOCK XAM + LDX #2 Copy 2 bytes +SETADR LDA L-1,X Copy hex data to + STA STL-1,X 'store index' + STA XAML-1,X and to 'XAM index' + DEX Next of 2 bytes + BNE SETADR Loop unless X = 0 +NXTPRNT BNE PRDATA NE means no address to print + LDA #CR Print CR first + JSR ECHO + LDA XAMH Output high-order byte of address + JSR PRBYTE + LDA XAML Output low-order byte of address + JSR PRBYTE + LDA #":" Print colon + JSR ECHO +PRDATA LDA #" " Print space + JSR ECHO + LDA (XAML,X) Get data from address (X=0) + JSR PRBYTE Output it in hex format +XAMNEXT STX MODE 0 -> MODE (XAM mode). + LDA XAML See if there's more to print + CMP L + LDA XAMH + SBC H + BCS TONEXTITEM Not less! No more data to output + INC XAML Increment 'examine index' + BNE MOD8CHK No carry! + INC XAMH +MOD8CHK LDA XAML If address MOD 8 = 0 start new line + AND #%0000.0111 + BPL NXTPRNT Always taken. +PRBYTE PHA Save A for LSD + LSR + LSR + LSR MSD to LSD position + LSR + JSR PRHEX Output hex digit + PLA Restore A +PRHEX AND #%0000.1111 Mask LSD for hex print + ORA #"0" Add "0" + CMP #"9"+1 Is it a decimal digit? + BCC ECHO Yes! output it + ADC #6 Add offset for letter A-F +ECHO BIT DSP DA bit (B7) cleared yet? + BMI ECHO No! Wait for display ready + STA DSP Output character. Sets DA + RTS + .DA $0000 Unused, what a pity +NMI_VEC .DA $0F00 NMI vector +RESET_VEC .DA RESET RESET vector +IRQ_VEC .DA $0000 IRQ vector \ No newline at end of file diff --git a/log/rom-hex-positions b/log/rom-hex-positions new file mode 100644 index 0000000..6d77f3a --- /dev/null +++ b/log/rom-hex-positions @@ -0,0 +1,128 @@ +ff00 +ff01 +ff02 +ff04 +ff07 +ff09 +ff0c +ff0f +ff11 +ff13 +ff15 +ff17 +ff18 +ff1a +ff1c +ff1f +ff21 +ff24 +ff26 +ff27 +ff29 +ff2c +ff2e +ff31 +ff34 +ff37 +ff39 +ff3b +ff3d +ff3f +ff40 +ff41 +ff43 +ff44 +ff47 +ff49 +ff4b +ff4d +ff4f +ff51 +ff53 +ff55 +ff57 +ff59 +ff5b +ff5d +ff5f +ff62 +ff64 +ff66 +ff68 +ff6a +ff6c +ff6e +ff6f +ff70 +ff71 +ff72 +ff74 +ff75 +ff77 +ff79 +ff7a +ff7c +ff7d +ff7f +ff81 +ff83 +ff85 +ff87 +ff89 +ff8b +ff8d +ff8f +ff91 +ff94 +ff97 +ff99 +ff9b +ff9d +ff9f +ffa1 +ffa2 +ffa4 +ffa6 +ffa8 +ffab +ffad +ffb0 +ffb2 +ffb5 +ffb7 +ffba +ffbc +ffbf +ffc1 +ffc4 +ffc6 +ffc8 +ffca +ffcc +ffce +ffd0 +ffd2 +ffd4 +ffd6 +ffd8 +ffda +ffdc +ffdd +ffde +ffdf +ffe0 +ffe1 +ffe4 +ffe5 +ffe7 +ffe9 +ffeb +ffed +ffef +fff2 +fff4 +fff7 +fff8 +fffa +fffc +fffe \ No newline at end of file -- cgit v1.2.3