base:using_a_running_vice_session_for_development
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | Last revisionBoth sides next revision | ||
base:using_a_running_vice_session_for_development [2016-06-30 14:44] – compyx | base:using_a_running_vice_session_for_development [2016-07-01 12:06] – Makefile example updates compyx | ||
---|---|---|---|
Line 11: | Line 11: | ||
This article attempts to explain that process. For now, only for *nix systems. | This article attempts to explain that process. For now, only for *nix systems. | ||
+ | Please note that I use a SVN snapshot of VICE, installed into /usr/local, so you may have to adjust a few paths, such as the location of the C64 kernal image. | ||
+ | |||
==== Requirements ==== | ==== Requirements ==== | ||
Line 21: | Line 23: | ||
* make for making things easier | * make for making things easier | ||
- | Obviously we need an assembler, one which can output VICE labels if you want to use that feature. I personally use 64tass (again, build a current version). | + | Obviously we need an assembler, one which can output VICE labels if you want to use that feature. I personally use 64tass (again, build a current version, r1184 added support for scoped labels, eg: .foo:bar). |
- | And of course a decent editor, one which can at least syntax highlight Makefile' | + | And of course a decent editor, one which can at least syntax highlight Makefile' |
Line 61: | Line 63: | ||
<code bash> | <code bash> | ||
- | cp /usr/lib/ | + | cp /usr/local/lib64/ |
echo "1d69: 9f" | xxd -r - kernal-quick-memtest | echo "1d69: 9f" | xxd -r - kernal-quick-memtest | ||
</ | </ | ||
Any method of altering a binary can be used, I prefer to do it this way, so I can stick it in a Makefile and never have to worry about whether I patched the KERNAL or not. | Any method of altering a binary can be used, I prefer to do it this way, so I can stick it in a Makefile and never have to worry about whether I patched the KERNAL or not. | ||
- | This makes the BASIC memtest finish immediately and still report the correct number of bytes free. (Thanks a lot to iAN CooG for suggesting this!) | + | This makes the BASIC memtest finish |
VICE still needs to know about this new KERNAL, so the command to start VICE becomes: | VICE still needs to know about this new KERNAL, so the command to start VICE becomes: | ||
Line 83: | Line 85: | ||
<code make> | <code make> | ||
- | # x64 binary | + | # VICE' |
- | X64 = / | + | X64=/ |
+ | # Standard flags to pass to VICE during startup | ||
+ | X64_FLAGS= | ||
# Original KERNAL | # Original KERNAL | ||
- | KERNAL=/ | + | KERNAL=/ |
# Patched KERNAL | # Patched KERNAL | ||
KERNAL_PATCHED=kernal-quick-memtest | KERNAL_PATCHED=kernal-quick-memtest | ||
Line 120: | Line 124: | ||
</ | </ | ||
+ | == Access VICE's output == | ||
+ | |||
+ | If you want to see VICE's messages, you redirect stdout and stderr to log files, which you inspect later, or just tail -f them. | ||
+ | |||
+ | <code make> | ||
+ | # VICE's x64 binary | ||
+ | X64=/ | ||
+ | # Standard flags to pass to VICE during startup | ||
+ | X64_FLAGS= | ||
+ | |||
+ | # Log file for x64's stdout (VICE' | ||
+ | X64_STDOUT=vice.log | ||
+ | # Log file for x64's stderr | ||
+ | X64_STDERR=vice.err (useful when debug VICE itself) | ||
+ | |||
+ | |||
+ | # Rule to start VICE with remote monitor, with patched KERNAl for quicker | ||
+ | # reset and running it in the background with any output of VICE redirected to | ||
+ | # log files | ||
+ | session: $(KERNAL_PATCHED) | ||
+ | $(X64) $(X64_FLAGS) -remotemonitor -kernal $(KERNAL_PATCHED) \ | ||
+ | 1> | ||
+ | </ | ||
==== Setting up the client side ==== | ==== Setting up the client side ==== | ||
Line 177: | Line 204: | ||
Again giving VICE time to process the ' | Again giving VICE time to process the ' | ||
- | So, lets update our Makefile once again (full Makefile now): | + | So, lets update our Makefile once again (nearly complete |
<code make> | <code make> | ||
- | # x64 binary | + | # vim: noet ts=8 sw=8 sts=8 |
- | X64=/ | + | # |
- | # Assembler | + | # Makefile for CB64 article 'Using a running VICE session for development' |
+ | |||
+ | # This uses an SVN build of VICE, so adjust the paths to the x64 binary | ||
+ | # the KERNAL if using the 2.4 stable build (which is way too old) | ||
+ | |||
+ | |||
+ | # Assembler | ||
ASM=64tass | ASM=64tass | ||
+ | # Assembler flags (see the 64tass manual) | ||
+ | ASM_FLAGS=--ascii --case-sensitive --shadow-check --m6502 | ||
+ | # Flags needed to output VICE labels (see the 64tass manual) | ||
+ | ASM_LABELS=--vice-labels -l $(LABEL_FILE) | ||
+ | |||
+ | # file to output VICE labels to | ||
+ | LABEL_FILE=labels.txt | ||
+ | |||
+ | |||
+ | # VICE's x64 binary | ||
+ | X64=/ | ||
+ | # Standard flags to pass to VICE during startup | ||
+ | X64_FLAGS= | ||
+ | # Log file for x64's stdout output | ||
+ | X64_STDOUT=vice.log | ||
+ | # Log file for x64's stderr output | ||
+ | X64_STDERR=vice.err | ||
+ | |||
+ | |||
+ | # Our demo binary | ||
+ | TARGET=demo.prg | ||
# Original KERNAL | # Original KERNAL | ||
- | KERNAL=/ | + | KERNAL=/ |
# Patched KERNAL | # Patched KERNAL | ||
KERNAL_PATCHED=kernal-quick-memtest | KERNAL_PATCHED=kernal-quick-memtest | ||
- | # Generate patched KERNAL | + | # Default make target, just our binary |
+ | all: $(TARGET) | ||
+ | |||
+ | |||
+ | # Rule to assemble our binary and output labels | ||
+ | $(TARGET): demo.s | ||
+ | $(ASM) $(ASM_FLAGS) $(ASM_LABELS) -o $@ $< | ||
+ | |||
+ | |||
+ | # Rule to patch the KERNAL for quicker reset | ||
$(KERNAL_PATCHED): | $(KERNAL_PATCHED): | ||
cp $(KERNAL) $(KERNAL_PATCHED) | cp $(KERNAL) $(KERNAL_PATCHED) | ||
echo "1d69: 9f" | xxd -r - $(KERNAL_PATCHED) | echo "1d69: 9f" | xxd -r - $(KERNAL_PATCHED) | ||
- | all: demo.prg | ||
- | # Assemble program | + | # Rule to start VICE with remote monitor, with patched KERNAl for quicker |
- | demo.prg: demo.s | + | # reset and running it in the background with any output |
- | $(ASM) -a -C -o demo.prg demo.s --vice-labels -l labels.txt | + | # log file files |
+ | session: $(KERNAL_PATCHED) | ||
+ | $(X64) $(X64_FLAGS) -remotemonitor | ||
+ | 1> | ||
- | # Inject | + | # Rule to inject the program |
- | run: demo.prg | + | run: $(TARGET) |
- | # we need to wait one second | + | # reset machine and wait for 1 second after EOF from machine |
- | echo 'reset 0' | netcat -q 1 localhost 6510 | + | echo 'reset 0' | netcat -q1 localhost 6510 |
- | # clear and (re)load labels | + | |
- | echo ' | + | # optional: |
- | echo ' | + | # command to complete) |
- | # load demo.prg from the virtual FS, our host OS | + | echo ' |
- | echo 'l "demo.prg 0"' | + | echo ' |
- | # this assumes demo.prg starts at $080d | + | |
+ | # load binary | ||
+ | echo 'l "$(TARGET)" | ||
+ | # execute binary, ignoring BASIC interpreter | ||
echo 'g 080d' | netcat localhost 6510 | echo 'g 080d' | netcat localhost 6510 | ||
- | |||
- | # Start VICE session with remote monitor and patched KERNAL in the background | ||
- | # redirecting VICE's output to a black hole | ||
- | session: $(KERNAL_PATCHED) | ||
- | $(X64) -remotemonitor -kernal $(KERNAL_PATCHED) \ | ||
- | > /dev/null 2>&1 & | ||
# Clean up | # Clean up | ||
Line 270: | Line 332: | ||
Putting this in our Makefile, we end up with this: | Putting this in our Makefile, we end up with this: | ||
<code make> | <code make> | ||
- | # x64 binary | + | # vim: noet ts=8 sw=8 sts=8 |
- | X64 = / | + | # |
- | # Assembler | + | # Makefile for CB64 article 'Using a running VICE session for development' |
+ | |||
+ | # This uses an SVN build of VICE, so adjust the paths to the x64 binary | ||
+ | # the KERNAL if using the 2.4 stable build (which is way too old) | ||
+ | |||
+ | |||
+ | # Assembler | ||
ASM=64tass | ASM=64tass | ||
+ | # Assembler flags (see the 64tass manual) | ||
+ | ASM_FLAGS=--ascii --case-sensitive --shadow-check --m6502 | ||
+ | # Flags needed to output VICE labels (see the 64tass manual) | ||
+ | ASM_LABELS=--vice-labels -l $(LABEL_FILE) | ||
+ | |||
+ | # file to output VICE labels to | ||
+ | LABEL_FILE=labels.txt | ||
+ | |||
+ | |||
+ | # VICE's x64 binary | ||
+ | X64=/ | ||
+ | # Standard flags to pass to VICE during startup | ||
+ | X64_FLAGS= | ||
+ | # Log file for x64's stdout output | ||
+ | X64_STDOUT=vice.log | ||
+ | # Log file for x64's stderr output | ||
+ | X64_STDERR=vice.err | ||
+ | |||
+ | |||
+ | # Our demo binary | ||
+ | TARGET=demo.prg | ||
# Original KERNAL | # Original KERNAL | ||
- | KERNAL=/ | + | KERNAL=/ |
# Patched KERNAL | # Patched KERNAL | ||
KERNAL_PATCHED=kernal-quick-memtest | KERNAL_PATCHED=kernal-quick-memtest | ||
- | # Generate patched KERNAL | + | # Default make target, just our binary |
+ | all: $(TARGET) | ||
+ | |||
+ | |||
+ | # Rule to assemble our binary and output labels | ||
+ | $(TARGET): demo.s | ||
+ | $(ASM) $(ASM_FLAGS) $(ASM_LABELS) -o $@ $< | ||
+ | |||
+ | |||
+ | # Rule to patch the KERNAL for quicker reset | ||
$(KERNAL_PATCHED): | $(KERNAL_PATCHED): | ||
cp $(KERNAL) $(KERNAL_PATCHED) | cp $(KERNAL) $(KERNAL_PATCHED) | ||
echo "1d69: 9f" | xxd -r - $(KERNAL_PATCHED) | echo "1d69: 9f" | xxd -r - $(KERNAL_PATCHED) | ||
- | all: demo.prg | ||
- | # Assemble program | + | # Rule to start VICE with remote monitor, with patched KERNAl for quicker |
- | demo.prg: demo.s | + | # reset and running it in the background with any output |
- | $(ASM) -a -C -o demo.prg demo.s --vice-labels -l labels.txt | + | # log file files |
+ | session: $(KERNAL_PATCHED) | ||
+ | $(X64) $(X64_FLAGS) -remotemonitor | ||
+ | 1> | ||
- | # Inject | + | # Rule to inject the program |
- | run: demo.prg | + | run: $(TARGET) |
- | # we need to wait one second | + | # reset machine and wait for 1 second after EOF from machine |
- | echo 'reset 0' | netcat -q 1 localhost 6510 | + | echo 'reset 0' | netcat -q1 localhost 6510 |
- | # clear and (re)load labels | + | |
- | echo ' | + | # optional: |
- | echo ' | + | # command to complete) |
- | # load demo.prg from the virtual FS, our host OS | + | echo ' |
- | echo 'l " | + | echo ' |
- | # put ' | + | |
- | echo 'f 0277 027a 52 55 4e 0d' | netcat localhost 6510 | + | |
- | # set keyboard buffer size to $04 -> strlen("RUN\r" | + | |
- | echo 'f 00c6 00c6 04' | netcat localhost 6510 | + | |
+ | # load binary | ||
+ | echo 'l " | ||
+ | # run binary by putting ' | ||
+ | echo 'f 0277 027a 52 55 4e 0d' | netcat localhost 6510 | ||
+ | echo 'f 00c6 00c6 04' | netcat localhost 6510 | ||
+ | # now the BASIC interpreter notices it has data in its buffer and parses that, | ||
+ | # resulting in a proper RUN being executed for our program. Even the KERNAL | ||
+ | # itself does it, just look at $e5ee, the handler for Shift+Run/ | ||
- | # Start VICE session with remote monitor and patched KERNAL in the background | ||
- | # redirecting VICE's output to a black hole | ||
- | session: $(KERNAL_PATCHED) | ||
- | $(X64) -remotemonitor -kernal $(KERNAL_PATCHED) \ | ||
- | > /dev/null 2>&1 & | ||
- | # Clean up | ||
.PHONY: clean | .PHONY: clean | ||
clean: | clean: | ||
- | | + | rm -f $(KERNAL_PATCHED) |
- | rm -f $(KERNAL_PATCHED) | + | rm -f $(LABEL_FILE) $(X64_STDOUT) $(X64_STDERR) |
+ | rm -f $(TARGET) | ||
</ | </ | ||
Line 327: | Line 426: | ||
* attaching disk images | * attaching disk images | ||
* debugging via telnet | * debugging via telnet | ||
- | * writing a proper Makefile (perhaps putting all those echo's into a file, updating it with sed) | + | * <del>writing a proper Makefile (perhaps putting all those echo's into a file, updating it with sed)</ |
* VIM integration | * VIM integration | ||
base/using_a_running_vice_session_for_development.txt · Last modified: 2016-07-01 13:35 by compyx