base:using_a_running_vice_session_for_development
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
base:using_a_running_vice_session_for_development [2016-06-28 20:00] – compyx | base:using_a_running_vice_session_for_development [2016-06-30 14:44] – compyx | ||
---|---|---|---|
Line 141: | Line 141: | ||
Again, this becomes tedious, having to type this again and again, so we update our Makefile (just the new parts for now): | Again, this becomes tedious, having to type this again and again, so we update our Makefile (just the new parts for now): | ||
<code make> | <code make> | ||
+ | ASM=64tass | ||
+ | |||
+ | |||
# Default make target: just assemble the program: | # Default make target: just assemble the program: | ||
all: demo.prg | all: demo.prg | ||
Line 147: | Line 150: | ||
# Assemble program | # Assemble program | ||
demo.prg: demo.s | demo.prg: demo.s | ||
- | $(X64) -a -C -o demo.prg demo.s | + | $(ASM) -a -C -o demo.prg demo.s |
Line 177: | Line 180: | ||
<code make> | <code make> | ||
# x64 binary | # x64 binary | ||
- | X64 = / | + | X64=/ |
+ | # Assembler | ||
+ | ASM=64tass | ||
# Original KERNAL | # Original KERNAL | ||
Line 194: | Line 199: | ||
# Assemble program and output VICE labels file | # Assemble program and output VICE labels file | ||
demo.prg: demo.s | demo.prg: demo.s | ||
- | $(X64) -a -C -o demo.prg demo.s --vice-labels -l labels.txt | + | $(ASM) -a -C -o demo.prg demo.s --vice-labels -l labels.txt |
Line 230: | Line 235: | ||
Since we bypass the C64's OS (the BASIC interpreter), | Since we bypass the C64's OS (the BASIC interpreter), | ||
- | So we need a way to do a proper ' | + | So we need a way to do a proper ' |
+ | |||
+ | Let's assume our demo.s looks like this: | ||
+ | <code 64tass> | ||
+ | * = $0801 | ||
+ | |||
+ | ; BASIC section: this becomes "2016 sys2061" | ||
+ | .word (+), 2016 | ||
+ | .null $9e, ^start | ||
+ | + .word 0 | ||
+ | |||
+ | start ; this is $080d | ||
+ | lda #0 | ||
+ | sta $d020 | ||
+ | sta $d021 | ||
+ | rts | ||
+ | </ | ||
+ | |||
+ | When we run this using the Makefile shown, the border and background turn black, but we get a blinking cursor. So we need to somehow force BASIC to properly run this SYS line. This can be done with a little tweaking: | ||
+ | (Thanks to Groepaz for coming up with the suggestion of simply putting ' | ||
+ | |||
+ | First we load the binary into VICE, then we set the end-of-basic pointer to $080d, fill the keyboard buffer with " | ||
+ | <code bash> | ||
+ | # reset, and wait, otherwise the BASIC start-of-basic pointer gets overwritten to $0000 while loading | ||
+ | echo 'reset 0' | netcat -q 1 localhost 6510 | ||
+ | # load binary | ||
+ | echo 'l " | ||
+ | # put ' | ||
+ | echo 'f 0277 027a 52 55 4e 0d' | netcat localhost 6510 | ||
+ | # set keyboard buffer size to $04 -> strlen(" | ||
+ | echo 'f 00c6 00c6 04' | netcat localhost 6510 | ||
+ | </ | ||
+ | |||
+ | Putting this in our Makefile, we end up with this: | ||
+ | <code make> | ||
+ | # x64 binary | ||
+ | X64 = / | ||
+ | # Assembler | ||
+ | ASM=64tass | ||
+ | |||
+ | # Original KERNAL | ||
+ | KERNAL=/ | ||
+ | # Patched KERNAL | ||
+ | KERNAL_PATCHED=kernal-quick-memtest | ||
+ | |||
+ | |||
+ | # Generate patched KERNAL for faster reset (skip BASIC memtest) | ||
+ | $(KERNAL_PATCHED): | ||
+ | cp $(KERNAL) $(KERNAL_PATCHED) | ||
+ | echo "1d69: 9f" | xxd -r - $(KERNAL_PATCHED) | ||
+ | all: demo.prg | ||
+ | |||
+ | |||
+ | # Assemble program and output VICE labels file | ||
+ | demo.prg: demo.s | ||
+ | $(ASM) -a -C -o demo.prg demo.s --vice-labels -l labels.txt | ||
+ | |||
+ | |||
+ | # Inject program into VICE session and run it | ||
+ | run: demo.prg | ||
+ | # we need to wait one second for the reset to finish, so we use -q 1 | ||
+ | echo 'reset 0' | netcat -q 1 localhost 6510 | ||
+ | # clear and (re)load labels | ||
+ | echo ' | ||
+ | echo ' | ||
+ | # load demo.prg from the virtual FS, our host OS | ||
+ | echo 'l " | ||
+ | # put ' | ||
+ | echo 'f 0277 027a 52 55 4e 0d' | netcat localhost 6510 | ||
+ | # set keyboard buffer size to $04 -> strlen(" | ||
+ | echo 'f 00c6 00c6 04' | 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 | ||
+ | .PHONY: clean | ||
+ | clean: | ||
+ | rm -f demo.prg | ||
+ | rm -f $(KERNAL_PATCHED) | ||
+ | </ | ||
+ | |||
+ | |||
+ | More later.. | ||
- | (More coming up, tired) | + | TODO: |
+ | * attaching disk images | ||
+ | * debugging via telnet | ||
+ | * writing a proper Makefile | ||
+ | * VIM integration | ||
base/using_a_running_vice_session_for_development.txt · Last modified: 2016-07-01 13:35 by compyx