From 7f0529db03ed8f0ee7a92491a1ccb098f423071c Mon Sep 17 00:00:00 2001 From: Michael Specht Date: Mon, 19 Feb 2018 23:35:31 +0100 Subject: [PATCH] documentation --- README.md | 23 +++++++++++++++++++++++ champ.rb | 2 +- doc/example05_1.gif | Bin 0 -> 33329 bytes examples/example05.s | 16 ++++------------ p65c02.c | 20 +++++++++++++++++--- 5 files changed, 45 insertions(+), 16 deletions(-) create mode 100644 doc/example05_1.gif diff --git a/README.md b/README.md index 6eec1fe..82d52b8 100644 --- a/README.md +++ b/README.md @@ -192,6 +192,29 @@ To disable a watch, add a `;` right behind the `@`: ADC FOO ; @;Au(post) ``` +### Error reporting + +Should your program run into an error, champ shows you where in the source code the error occured and an execution log of the previous 20 CPU steps (you can increase the size of the log with `--error-log-size`). +Look at this example ([example05.yaml](example05.yaml) / [example05.s](example05.s)): + +``` + DSK test + MX %11 + ORG $6000 + + LDX #$ff +COUNT PHA + PHA + DEX + BNE COUNT +``` + +This is a program which repeatedly pushes the A register onto the stack until the stack is full. Stack overflow, mission accomplished! Champ will generate the following output: + +![Error report](doc/example05_1.gif?raw=true) + +On the left hand side you can see that the error occured in example05.s, line 7, while attempting a `PHA` operation when `SP` is already down to zero from previous `PHA` operations (as can be seen on the right). + ## Did you know? By the way, there's a full-fledged, incremental, standalone, no-dependencies GIF encoder in [pgif.c](pgif.c) that writes animated GIFs and uses some optimizations to further minimize space. It's stream-friendly and as you feed pixels in via `stdin`, it dutifully writes GIF data to `stdout` until `stdin` gets closed. diff --git a/champ.rb b/champ.rb index 1744de0..5936869 100755 --- a/champ.rb +++ b/champ.rb @@ -853,7 +853,7 @@ class Champ def parse_merlin_output(path) input_file = File.basename(@source_path) @source_for_file[input_file] = File.read(@source_path).split("\n").map { |x| x.gsub("\t", ' ' * 4) } - @max_source_width_for_file[input_file] = @source_for_file[input_file].map { |x| x.size }.max + @max_source_width_for_file[input_file] = [@source_for_file[input_file].map { |x| x.size }.max, 40].max @source_line = -3 File.open(path, 'r') do |f| diff --git a/doc/example05_1.gif b/doc/example05_1.gif new file mode 100644 index 0000000000000000000000000000000000000000..c2eb6f07e498474fdf0395b501efd9fe440b711f GIT binary patch literal 33329 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 @ddTUR+T8b%8nsVx? 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 R 0) + watches = malloc(sizeof(r_watch) * watch_count); + watches_allocated = 1; } else {