From b82c3f0a0748d64c0843a9f1ddff6fa45d8b6ebb Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 26 Apr 2020 23:30:04 +0200 Subject: [PATCH] Added time-of-day utility for commodore 64 . Moved MOS 6526 CIA to structs. --- src/main/kc/include/c64.h | 102 +- src/main/kc/include/tod.h | 27 + src/main/kc/lib/c64.c | 4 +- src/main/kc/lib/keyboard.c | 12 +- src/main/kc/lib/time.c | 9 +- src/main/kc/lib/tod.c | 46 + .../dk/camelot64/kickc/test/TestPrograms.java | 5 + src/test/kc/bitmap-plot-0.c | 2 +- src/test/kc/bitmap-plot-1.c | 2 +- src/test/kc/bitmap-plot-2.c | 2 +- src/test/kc/c64dtv-8bppcharstretch.c | 4 +- src/test/kc/c64dtv-8bppchunkystretch.c | 4 +- src/test/kc/c64dtv-gfxexplorer.c | 8 +- src/test/kc/c64dtv-gfxmodes.c | 32 +- src/test/kc/complex/clearscreen/clearscreen.c | 2 +- .../complex/spritescroller/spritescroller.c | 2 +- src/test/kc/complex/tetris/tetris-sprites.c | 3 +- src/test/kc/danny-joystick-problem.c | 4 +- .../kc/examples/eightqueens/eightqueens.c | 25 +- src/test/kc/examples/irq/irq-hyperscreen.c | 2 +- src/test/kc/examples/music/music_irq.c | 2 +- src/test/kc/examples/nmisamples/nmisamples.c | 8 +- src/test/kc/irq-hardware-clobber-jsr.c | 2 +- src/test/kc/irq-hardware-clobber.c | 2 +- src/test/kc/irq-hardware-stack.c | 2 +- src/test/kc/irq-hardware.c | 2 +- src/test/kc/irq-idx-problem.c | 2 +- src/test/kc/irq-kernel.c | 2 +- src/test/kc/irq-local-var-overlap-problem.c | 2 +- src/test/kc/irq-raster.c | 2 +- src/test/kc/irq-volatile-bool-problem.c | 2 +- src/test/kc/millfork-benchmarks/plasma-kc.c | 6 +- .../multiplexer-irq/simple-multiplexer-irq.c | 2 +- src/test/kc/tod-1.c | 12 + src/test/ref/bitmap-circle-2.log | 46 + src/test/ref/bitmap-circle-2.sym | 14 + src/test/ref/bitmap-circle.log | 46 + src/test/ref/bitmap-circle.sym | 14 + src/test/ref/bitmap-line-anim-1.log | 46 + src/test/ref/bitmap-line-anim-1.sym | 14 + src/test/ref/bitmap-line-anim-2.log | 46 + src/test/ref/bitmap-line-anim-2.sym | 14 + src/test/ref/bitmap-plot-0.asm | 9 +- src/test/ref/bitmap-plot-0.cfg | 2 +- src/test/ref/bitmap-plot-0.log | 92 +- src/test/ref/bitmap-plot-0.sym | 17 +- src/test/ref/bitmap-plot-1.asm | 9 +- src/test/ref/bitmap-plot-1.cfg | 2 +- src/test/ref/bitmap-plot-1.log | 92 +- src/test/ref/bitmap-plot-1.sym | 17 +- src/test/ref/bitmap-plot-2.asm | 9 +- src/test/ref/bitmap-plot-2.cfg | 2 +- src/test/ref/bitmap-plot-2.log | 92 +- src/test/ref/bitmap-plot-2.sym | 17 +- src/test/ref/bitmap-plot-3.log | 46 + src/test/ref/bitmap-plot-3.sym | 14 + src/test/ref/c64dtv-8bppcharstretch.asm | 15 +- src/test/ref/c64dtv-8bppcharstretch.cfg | 4 +- src/test/ref/c64dtv-8bppcharstretch.log | 139 +- src/test/ref/c64dtv-8bppcharstretch.sym | 18 +- src/test/ref/c64dtv-8bppchunkystretch.asm | 15 +- src/test/ref/c64dtv-8bppchunkystretch.cfg | 4 +- src/test/ref/c64dtv-8bppchunkystretch.log | 141 +- src/test/ref/c64dtv-8bppchunkystretch.sym | 18 +- src/test/ref/c64dtv-blitter-box.log | 46 + src/test/ref/c64dtv-blitter-box.sym | 14 + src/test/ref/c64dtv-blittermin.log | 46 + src/test/ref/c64dtv-blittermin.sym | 14 + src/test/ref/c64dtv-color.log | 46 + src/test/ref/c64dtv-color.sym | 14 + src/test/ref/c64dtv-gfxexplorer.asm | 51 +- src/test/ref/c64dtv-gfxexplorer.cfg | 16 +- src/test/ref/c64dtv-gfxexplorer.log | 378 +- src/test/ref/c64dtv-gfxexplorer.sym | 25 +- src/test/ref/c64dtv-gfxmodes.asm | 86 +- src/test/ref/c64dtv-gfxmodes.cfg | 36 +- src/test/ref/c64dtv-gfxmodes.log | 641 +- src/test/ref/c64dtv-gfxmodes.sym | 22 +- src/test/ref/cia-timer-cyclecount.asm | 28 +- src/test/ref/cia-timer-cyclecount.cfg | 8 +- src/test/ref/cia-timer-cyclecount.log | 199 +- src/test/ref/cia-timer-cyclecount.sym | 19 +- src/test/ref/cia-timer-simple.asm | 26 +- src/test/ref/cia-timer-simple.cfg | 8 +- src/test/ref/cia-timer-simple.log | 193 +- src/test/ref/cia-timer-simple.sym | 19 +- .../ref/complex/clearscreen/clearscreen.asm | 9 +- .../ref/complex/clearscreen/clearscreen.cfg | 2 +- .../ref/complex/clearscreen/clearscreen.log | 126 +- .../ref/complex/clearscreen/clearscreen.sym | 17 +- src/test/ref/complex/medusa/medusa.log | 46 + src/test/ref/complex/medusa/medusa.sym | 14 + src/test/ref/complex/prebob/grid-bobs.asm | 38 +- src/test/ref/complex/prebob/grid-bobs.cfg | 12 +- src/test/ref/complex/prebob/grid-bobs.log | 265 +- src/test/ref/complex/prebob/grid-bobs.sym | 22 +- src/test/ref/complex/prebob/vogel-bobs.asm | 38 +- src/test/ref/complex/prebob/vogel-bobs.cfg | 12 +- src/test/ref/complex/prebob/vogel-bobs.log | 277 +- src/test/ref/complex/prebob/vogel-bobs.sym | 22 +- src/test/ref/complex/prebob/vogel-sprites.asm | 15 +- src/test/ref/complex/prebob/vogel-sprites.cfg | 4 +- src/test/ref/complex/prebob/vogel-sprites.log | 136 +- src/test/ref/complex/prebob/vogel-sprites.sym | 18 +- .../ref/complex/splines/truetype-splines.asm | 15 +- .../ref/complex/splines/truetype-splines.cfg | 4 +- .../ref/complex/splines/truetype-splines.log | 137 +- .../ref/complex/splines/truetype-splines.sym | 18 +- .../complex/spritescroller/spritescroller.asm | 9 +- .../complex/spritescroller/spritescroller.cfg | 2 +- .../complex/spritescroller/spritescroller.log | 96 +- .../complex/spritescroller/spritescroller.sym | 17 +- src/test/ref/complex/tetris/test-sprites.asm | 24 +- src/test/ref/complex/tetris/test-sprites.cfg | 6 +- src/test/ref/complex/tetris/test-sprites.log | 173 +- src/test/ref/complex/tetris/test-sprites.sym | 20 +- src/test/ref/complex/tetris/tetris.asm | 37 +- src/test/ref/complex/tetris/tetris.cfg | 10 +- src/test/ref/complex/tetris/tetris.log | 256 +- src/test/ref/complex/tetris/tetris.sym | 23 +- src/test/ref/cordic-atan2-16-ref.log | 46 + src/test/ref/cordic-atan2-16-ref.sym | 14 + src/test/ref/cordic-atan2-16.log | 46 + src/test/ref/cordic-atan2-16.sym | 14 + src/test/ref/cordic-atan2-clear.log | 46 + src/test/ref/cordic-atan2-clear.sym | 14 + src/test/ref/cordic-atan2.log | 46 + src/test/ref/cordic-atan2.sym | 14 + src/test/ref/danny-joystick-problem.asm | 15 +- src/test/ref/danny-joystick-problem.cfg | 4 +- src/test/ref/danny-joystick-problem.log | 118 +- src/test/ref/danny-joystick-problem.sym | 17 +- src/test/ref/examples/3d/3d.log | 46 + src/test/ref/examples/3d/3d.sym | 14 + src/test/ref/examples/3d/perspective.log | 46 + src/test/ref/examples/3d/perspective.sym | 14 + .../examples/bresenham/bitmap-bresenham.log | 46 + .../examples/bresenham/bitmap-bresenham.sym | 14 + .../ref/examples/chargen/chargen-analysis.asm | 15 +- .../ref/examples/chargen/chargen-analysis.cfg | 4 +- .../ref/examples/chargen/chargen-analysis.log | 136 +- .../ref/examples/chargen/chargen-analysis.sym | 18 +- .../ref/examples/eightqueens/eightqueens.asm | 813 +- .../ref/examples/eightqueens/eightqueens.cfg | 1121 +- .../ref/examples/eightqueens/eightqueens.log | 11588 +++++++++------- .../ref/examples/eightqueens/eightqueens.sym | 446 +- src/test/ref/examples/fire/fire.log | 46 + src/test/ref/examples/fire/fire.sym | 14 + src/test/ref/examples/font-2x2/font-2x2.log | 46 + src/test/ref/examples/font-2x2/font-2x2.sym | 14 + src/test/ref/examples/irq/irq-hyperscreen.asm | 9 +- src/test/ref/examples/irq/irq-hyperscreen.cfg | 2 +- src/test/ref/examples/irq/irq-hyperscreen.log | 90 +- src/test/ref/examples/irq/irq-hyperscreen.sym | 17 +- .../ref/examples/kernalload/kernalload.log | 46 + .../ref/examples/kernalload/kernalload.sym | 14 + .../multiplexer/simple-multiplexer.log | 46 + .../multiplexer/simple-multiplexer.sym | 14 + src/test/ref/examples/music/music.log | 46 + src/test/ref/examples/music/music.sym | 14 + src/test/ref/examples/music/music_irq.asm | 9 +- src/test/ref/examples/music/music_irq.cfg | 2 +- src/test/ref/examples/music/music_irq.log | 90 +- src/test/ref/examples/music/music_irq.sym | 17 +- .../ref/examples/nmisamples/nmisamples.asm | 29 +- .../ref/examples/nmisamples/nmisamples.cfg | 8 +- .../ref/examples/nmisamples/nmisamples.log | 196 +- .../ref/examples/nmisamples/nmisamples.sym | 20 +- .../ref/examples/plasma/plasma-unroll.log | 46 + .../ref/examples/plasma/plasma-unroll.sym | 14 + src/test/ref/examples/plasma/plasma.log | 46 + src/test/ref/examples/plasma/plasma.sym | 14 + .../ref/examples/rasterbars/raster-bars.log | 46 + .../ref/examples/rasterbars/raster-bars.sym | 14 + src/test/ref/examples/rotate/rotate.asm | 28 +- src/test/ref/examples/rotate/rotate.cfg | 8 +- src/test/ref/examples/rotate/rotate.log | 209 +- src/test/ref/examples/rotate/rotate.sym | 19 +- .../ref/examples/scrolllogo/scrolllogo.log | 46 + .../ref/examples/scrolllogo/scrolllogo.sym | 14 + src/test/ref/examples/showlogo/showlogo.log | 46 + src/test/ref/examples/showlogo/showlogo.sym | 14 + .../ref/examples/sinplotter/sine-plotter.asm | 15 +- .../ref/examples/sinplotter/sine-plotter.cfg | 4 +- .../ref/examples/sinplotter/sine-plotter.log | 129 +- .../ref/examples/sinplotter/sine-plotter.sym | 18 +- .../ref/examples/sinsprites/sinus-sprites.log | 46 + .../ref/examples/sinsprites/sinus-sprites.sym | 14 + src/test/ref/font-hex-show.log | 46 + src/test/ref/font-hex-show.sym | 14 + src/test/ref/gfxbank.asm | 15 +- src/test/ref/gfxbank.cfg | 4 +- src/test/ref/gfxbank.log | 127 +- src/test/ref/gfxbank.sym | 18 +- src/test/ref/irq-hardware-clobber-jsr.asm | 9 +- src/test/ref/irq-hardware-clobber-jsr.cfg | 2 +- src/test/ref/irq-hardware-clobber-jsr.log | 90 +- src/test/ref/irq-hardware-clobber-jsr.sym | 17 +- src/test/ref/irq-idx-problem.asm | 9 +- src/test/ref/irq-idx-problem.cfg | 2 +- src/test/ref/irq-idx-problem.log | 94 +- src/test/ref/irq-idx-problem.sym | 17 +- src/test/ref/irq-kernel-minimal.log | 46 + src/test/ref/irq-kernel-minimal.sym | 14 + src/test/ref/keyboard-glitch.asm | 15 +- src/test/ref/keyboard-glitch.cfg | 4 +- src/test/ref/keyboard-glitch.log | 133 +- src/test/ref/keyboard-glitch.sym | 18 +- src/test/ref/line-anim.asm | 15 +- src/test/ref/line-anim.cfg | 4 +- src/test/ref/line-anim.log | 133 +- src/test/ref/line-anim.sym | 18 +- src/test/ref/loophead-problem-3.log | 46 + src/test/ref/loophead-problem-3.sym | 14 + src/test/ref/memcpy-0.log | 46 + src/test/ref/memcpy-0.sym | 14 + .../ref/millfork-benchmarks/linkedlist-kc.log | 50 + .../ref/millfork-benchmarks/linkedlist-kc.sym | 14 + .../ref/millfork-benchmarks/plasma-kc.asm | 16 +- .../ref/millfork-benchmarks/plasma-kc.cfg | 6 +- .../ref/millfork-benchmarks/plasma-kc.log | 130 +- .../ref/millfork-benchmarks/plasma-kc.sym | 16 +- .../ref/millfork-benchmarks/romsum-kc.log | 50 + .../ref/millfork-benchmarks/romsum-kc.sym | 14 + src/test/ref/millfork-benchmarks/sieve-kc.log | 50 + src/test/ref/millfork-benchmarks/sieve-kc.sym | 14 + .../simple-multiplexer-irq.asm | 9 +- .../simple-multiplexer-irq.cfg | 2 +- .../simple-multiplexer-irq.log | 94 +- .../simple-multiplexer-irq.sym | 17 +- src/test/ref/plasma-center.log | 46 + src/test/ref/plasma-center.sym | 14 + src/test/ref/processor-port-test.log | 46 + src/test/ref/processor-port-test.sym | 14 + src/test/ref/roll-sprite-msb.log | 46 + src/test/ref/roll-sprite-msb.sym | 14 + src/test/ref/scan-desire-problem.log | 52 + src/test/ref/scan-desire-problem.sym | 14 + src/test/ref/screen-center-angle.asm | 26 +- src/test/ref/screen-center-angle.cfg | 8 +- src/test/ref/screen-center-angle.log | 193 +- src/test/ref/screen-center-angle.sym | 19 +- src/test/ref/screen-center-distance.asm | 26 +- src/test/ref/screen-center-distance.cfg | 8 +- src/test/ref/screen-center-distance.log | 201 +- src/test/ref/screen-center-distance.sym | 19 +- src/test/ref/screen-show-spiral-buckets.log | 46 + src/test/ref/screen-show-spiral-buckets.sym | 14 + src/test/ref/semi-struct-2.asm | 29 +- src/test/ref/semi-struct-2.cfg | 8 +- src/test/ref/semi-struct-2.log | 211 +- src/test/ref/semi-struct-2.sym | 22 +- src/test/ref/sieve-min.log | 50 + src/test/ref/sieve-min.sym | 14 + src/test/ref/sieve.asm | 26 +- src/test/ref/sieve.cfg | 8 +- src/test/ref/sieve.log | 193 +- src/test/ref/sieve.sym | 19 +- src/test/ref/signed-words.log | 46 + src/test/ref/signed-words.sym | 14 + src/test/ref/test-comparisons-sword.log | 46 + src/test/ref/test-comparisons-sword.sym | 14 + src/test/ref/test-comparisons-word.log | 46 + src/test/ref/test-comparisons-word.sym | 14 + src/test/ref/test-keyboard-space.asm | 29 +- src/test/ref/test-keyboard-space.cfg | 8 +- src/test/ref/test-keyboard-space.log | 205 +- src/test/ref/test-keyboard-space.sym | 22 +- src/test/ref/test-keyboard.asm | 29 +- src/test/ref/test-keyboard.cfg | 8 +- src/test/ref/test-keyboard.log | 217 +- src/test/ref/test-keyboard.sym | 22 +- src/test/ref/textbox.log | 46 + src/test/ref/textbox.sym | 14 + src/test/ref/tod-1.asm | 333 + src/test/ref/tod-1.cfg | 178 + src/test/ref/tod-1.log | 3871 ++++++ src/test/ref/tod-1.sym | 207 + src/test/ref/zeropage-sinus.log | 46 + src/test/ref/zeropage-sinus.sym | 14 + 280 files changed, 21139 insertions(+), 8650 deletions(-) create mode 100644 src/main/kc/include/tod.h create mode 100644 src/main/kc/lib/tod.c create mode 100644 src/test/kc/tod-1.c create mode 100644 src/test/ref/tod-1.asm create mode 100644 src/test/ref/tod-1.cfg create mode 100644 src/test/ref/tod-1.log create mode 100644 src/test/ref/tod-1.sym diff --git a/src/main/kc/include/c64.h b/src/main/kc/include/c64.h index 1e3fdf4b4..7342d5568 100644 --- a/src/main/kc/include/c64.h +++ b/src/main/kc/include/c64.h @@ -81,65 +81,51 @@ const char IRQ_LIGHTPEN = %00001000; // Color Ram char* const COLS = $d800; -// CIA#1 Port A: keyboard matrix columns and joystick #2 -char* const CIA1_PORT_A = $dc00; -// CIA#1 Port B: keyboard matrix rows and joystick #1. -char* const CIA1_PORT_B = $dc01; -// CIA #1 Port A data direction register. -char* const CIA1_PORT_A_DDR = $dc02; -// CIA #1 Port B data direction register. -char* const CIA1_PORT_B_DDR = $dc03; -// CIA #1 Timer A Value -unsigned int* const CIA1_TIMER_A = $dc04; -// CIA #1 Timer B Value -unsigned int* const CIA1_TIMER_B = $dc06; -// CIA #1 Time-of-day real-time-clock tenth seconds (BCD) -char* const CIA1_TOD_10THS = $dc08; -// CIA #1 Time-of-day real-time-clock seconds (BCD) -char* const CIA1_TOD_SEC = $dc09; -// CIA #1 Time-of-day real-time-clock minutes (BCD) -char* const CIA1_TOD_MIN = $dc0a; -// CIA #1 Time-of-day real-time-clock hours (BCD) -char* const CIA1_TOD_HOURS = $dc0b; -// CIA #1 Serial Shift Register -char* const CIA1_SERIAL_SHIFT_OUT = $dc0c; -// CIA#1 Interrupt Status & Control Register -char* const CIA1_INTERRUPT = $dc0d; -// CIA#1 Timer A Control Register -char* const CIA1_TIMER_A_CONTROL = $dc0e; -// CIA#1 Timer B Control Register -char* const CIA1_TIMER_B_CONTROL = $dc0f; +// The MOS 6526 Complex Interface Adapter (CIA) +// http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf +struct MOS6526_CIA { + // Port A + char PORT_A; + // Port B + char PORT_B; + // Port A data direction register. + char PORT_A_DDR; + // Port B data direction register. + char PORT_B_DDR; + // Timer A Value + unsigned int TIMER_A; + // Timer B Value + unsigned int TIMER_B; + // Time-of-day real-time-clock tenth seconds (BCD) + char TOD_10THS; + // Time-of-day real-time-clock seconds (BCD) + char TOD_SEC; + // Time-of-day real-time-clock minutes (BCD) + char TOD_MIN; + // Time-of-day real-time-clock hours (BCD) + char TOD_HOURS; + // Serial Shift Register + char SERIAL_DATA; + // Interrupt Status & Control Register + char INTERRUPT; + // Timer A Control Register + char TIMER_A_CONTROL; + // Timer B Control Register + char TIMER_B_CONTROL; +}; -// CIA#2 Port A: Serial bus, RS-232, VIC memory bank -char* const CIA2_PORT_A = $dd00; -// CIA#2 Port B: RS-232 -char* const CIA2_PORT_B = $dd01; -// CIA #2 Port A data direction register. -char* const CIA2_PORT_A_DDR = $dd02; -// CIA #2 Port B data direction register. -char* const CIA2_PORT_B_DDR = $dd03; -// CIA #2 Timer A+B Value (32-bit) -unsigned long* const CIA2_TIMER_AB = $dd04; -// CIA #2 Timer A Value (16-bit) -unsigned int* const CIA2_TIMER_A = $dd04; -// CIA #2 Timer B Value (16-bit) -unsigned int* const CIA2_TIMER_B = $dd06; -// CIA #2 Time-of-day real-time-clock tenth seconds (BCD) -char* const CIA2_TOD_10THS = $dd08; -// CIA #2 Time-of-day real-time-clock seconds (BCD) -char* const CIA2_TOD_SEC = $dd09; -// CIA #2 Time-of-day real-time-clock minutes (BCD) -char* const CIA2_TOD_MIN = $dd0a; -// CIA #2 Time-of-day real-time-clock hours (BCD) -char* const CIA2_TOD_HOURS = $dd0b; -// CIA #2 Serial Shift Register -char* const CIA2_SERIAL_SHIFT_OUT = $dd0c; -// CIA #2 Interrupt Status & Control Register -char* const CIA2_INTERRUPT = $dd0d; -// CIA #2 Timer A Control Register -char* const CIA2_TIMER_A_CONTROL = $dd0e; -// CIA #2 Timer B Control Register -char* const CIA2_TIMER_B_CONTROL = $dd0f; +// The CIA#1: keyboard matrix, joystick #1/#2 +struct MOS6526_CIA * const CIA1 = 0xdc00; + +// The CIA#2: Serial bus, RS-232, VIC memory bank +struct MOS6526_CIA * const CIA2 = 0xdd00; + +// CIA#1 Interrupt for reading in ASM +char * const CIA1_INTERRUPT = 0xdc0d; +// CIA#2 Interrupt for reading in ASM +char * const CIA2_INTERRUPT = 0xdd0d; +// CIA#2 timer A&B as one single 32-bit value +unsigned long* const CIA2_TIMER_AB = 0xdd04; // Value that disables all CIA interrupts when stored to the CIA Interrupt registers const char CIA_INTERRUPT_CLEAR = $7f; diff --git a/src/main/kc/include/tod.h b/src/main/kc/include/tod.h new file mode 100644 index 000000000..24cbe2699 --- /dev/null +++ b/src/main/kc/include/tod.h @@ -0,0 +1,27 @@ +// Time-of-day helper +// Uses the MOS6526 CIA#1 on Commodore 64 + +// Time-of-day 24 hour format +struct TIME_OF_DAY { + // Time-of-day real-time-clock tenth seconds (BCD) + char TENTHS; + // Time-of-day real-time-clock seconds (BCD) + char SEC; + // Time-of-day real-time-clock minutes (BCD) + char MIN; + // Time-of-day real-time-clock hours (BCD) (bit 7 is AM/PM) + char HOURS; +}; + +// Time of Day 00:00:00:00 +struct TIME_OF_DAY TOD_ZERO = { 0,0,0,0 }; + +// Initialize time-of-day clock +// This uses the MOS6526 CIA#1 +void tod_init(struct TIME_OF_DAY tod); + +// Read time of day +struct TIME_OF_DAY tod_read(); + +// Convert time of day to a human-readable string "hh:mm:ss:10" +char* tod_str(struct TIME_OF_DAY tod); \ No newline at end of file diff --git a/src/main/kc/lib/c64.c b/src/main/kc/lib/c64.c index 7379aa7c4..2db84cf35 100644 --- a/src/main/kc/lib/c64.c +++ b/src/main/kc/lib/c64.c @@ -22,6 +22,6 @@ inline char toSpritePtr(char* sprite) { // Select a specific VIC graphics bank by setting the CIA 2 port A ($dd00) as needed inline void vicSelectGfxBank(char* gfx) { - *CIA2_PORT_A_DDR = %00000011; - *CIA2_PORT_A = toDd00(gfx); + CIA2->PORT_A_DDR = %00000011; + CIA2->PORT_A = toDd00(gfx); } diff --git a/src/main/kc/lib/keyboard.c b/src/main/kc/lib/keyboard.c index 081994be7..f918f6789 100644 --- a/src/main/kc/lib/keyboard.c +++ b/src/main/kc/lib/keyboard.c @@ -41,16 +41,16 @@ char keyboard_matrix_col_bitmask[8] = { %00000001, %00000010, %00000100, %000010 // Initialize keyboard reading by setting CIA#$ Data Direction Registers void keyboard_init() { // Keyboard Matrix Columns Write Mode - *CIA1_PORT_A_DDR = $ff; + CIA1->PORT_A_DDR = $ff; // Keyboard Matrix Columns Read Mode - *CIA1_PORT_B_DDR = $00; + CIA1->PORT_B_DDR = $00; } // Check if any key is currently pressed on the keyboard matrix // Return 0 if no key is pressed and not 0 if any key is pressed char keyboard_matrix_any(void) { - *CIA1_PORT_A = 0; - return ~*CIA1_PORT_B; + CIA1->PORT_A = 0; + return ~CIA1->PORT_B; } // Read a single row of the keyboard matrix @@ -59,8 +59,8 @@ char keyboard_matrix_any(void) { // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. char keyboard_matrix_read(char rowid) { - *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid]; - char row_pressed_bits = ~*CIA1_PORT_B; + CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid]; + char row_pressed_bits = ~CIA1->PORT_B; return row_pressed_bits; } diff --git a/src/main/kc/lib/time.c b/src/main/kc/lib/time.c index 408035420..71bb3f7a4 100644 --- a/src/main/kc/lib/time.c +++ b/src/main/kc/lib/time.c @@ -3,6 +3,7 @@ #include #include + // Returns the processor clock time used since the beginning of an implementation defined era (normally the beginning of the program). // This uses CIA #2 Timer A+B on the C64, and must be initialized using clock_start() clock_t clock(void) { @@ -13,9 +14,9 @@ clock_t clock(void) { // This uses CIA #2 Timer A+B on the C64 void clock_start(void) { // Setup CIA#2 timer A to count (down) CPU cycles - *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES; - *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A; + CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES; + CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A; *CIA2_TIMER_AB = 0xffffffff; - *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A; - *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES; + CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A; + CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES; } diff --git a/src/main/kc/lib/tod.c b/src/main/kc/lib/tod.c new file mode 100644 index 000000000..d931a8a58 --- /dev/null +++ b/src/main/kc/lib/tod.c @@ -0,0 +1,46 @@ +// Time-of-day helper +// Uses the MOS6526 CIA#1 on Commodore 64 +#include +#include + +// Initialize time-of-day clock +// This uses the MOS6526 CIA#1 +void tod_init(struct TIME_OF_DAY tod) { + // Set 50hz (this assumes PAL!) (bit7=1) + CIA1->TIMER_A_CONTROL |= 0x80; + // Writing TOD clock (bit7=0) + CIA1->TIMER_B_CONTROL &= 0x7f; + // Reset TOD clock + // Writing sequence is important. TOD stops when hours is written and starts when 10ths is written. + CIA1->TOD_HOURS = tod.HOURS; + CIA1->TOD_MIN = tod.MIN; + CIA1->TOD_SEC = tod.SEC; + CIA1->TOD_10THS = tod.TENTHS; +} + +// Read time of day +struct TIME_OF_DAY tod_read() { + // Reading sequence is important. TOD latches on reading hours until 10ths is read. + char hours = CIA1->TOD_HOURS; + char mins = CIA1->TOD_MIN; + char secs = CIA1->TOD_SEC; + char tenths = CIA1->TOD_10THS; + struct TIME_OF_DAY tod = { tenths, secs, mins, hours }; + return tod; +} + +// The buffer used by tod_str() +char tod_buffer[] = "00:00:00:00"; + +// Convert time of day to a human-readable string "hh:mm:ss:10" +char* tod_str(struct TIME_OF_DAY tod) { + tod_buffer[0] = '0'+(tod.HOURS>>4); + tod_buffer[1] = '0'+(tod.HOURS&0x0f); + tod_buffer[3] = '0'+(tod.MIN>>4); + tod_buffer[4] = '0'+(tod.MIN&0x0f); + tod_buffer[6] = '0'+(tod.SEC>>4); + tod_buffer[7] = '0'+(tod.SEC&0x0f); + tod_buffer[9] = '0'+(tod.TENTHS>>4); + tod_buffer[10] = '0'+(tod.TENTHS&0x0f); + return tod_buffer; +} \ No newline at end of file diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index e2f4ec1b5..9994af70e 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -40,6 +40,11 @@ public class TestPrograms { public TestPrograms() { } + @Test + public void testTod1() throws IOException, URISyntaxException { + compileAndCompare("tod-1.c"); + } + @Test public void testEightQueensRecursive() throws IOException, URISyntaxException { compileAndCompare("examples/eightqueens/eightqueens-recursive.c"); diff --git a/src/test/kc/bitmap-plot-0.c b/src/test/kc/bitmap-plot-0.c index 373842c0b..45322eca9 100644 --- a/src/test/kc/bitmap-plot-0.c +++ b/src/test/kc/bitmap-plot-0.c @@ -38,7 +38,7 @@ void init_irq() { *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK; *PROCPORT = PROCPORT_RAM_IO; // Disable CIA 1 Timer IRQ - *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR; // Set raster line to $100 *VIC_CONTROL |=$80; *RASTER = $00; diff --git a/src/test/kc/bitmap-plot-1.c b/src/test/kc/bitmap-plot-1.c index 4b514a047..8c613e23c 100644 --- a/src/test/kc/bitmap-plot-1.c +++ b/src/test/kc/bitmap-plot-1.c @@ -45,7 +45,7 @@ void init_irq() { *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK; *PROCPORT = PROCPORT_RAM_IO; // Disable CIA 1 Timer IRQ - *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR; // Set raster line to $100 *VIC_CONTROL |=$80; *RASTER = $00; diff --git a/src/test/kc/bitmap-plot-2.c b/src/test/kc/bitmap-plot-2.c index af037d068..c3d00d90c 100644 --- a/src/test/kc/bitmap-plot-2.c +++ b/src/test/kc/bitmap-plot-2.c @@ -54,7 +54,7 @@ void init_irq() { *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK; *PROCPORT = PROCPORT_RAM_IO; // Disable CIA 1 Timer IRQ - *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR; // Set raster line to $100 *VIC_CONTROL |=$80; *RASTER = $00; diff --git a/src/test/kc/c64dtv-8bppcharstretch.c b/src/test/kc/c64dtv-8bppcharstretch.c index 009d3aa23..b0e101964 100644 --- a/src/test/kc/c64dtv-8bppcharstretch.c +++ b/src/test/kc/c64dtv-8bppcharstretch.c @@ -33,8 +33,8 @@ void main() { *DTV_PLANEB_MODULO_LO = 0; *DTV_PLANEB_MODULO_HI = 0; // VIC Graphics Bank - *CIA2_PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input - *CIA2_PORT_A = %00000011 ^ (byte)((word)SCREEN/$4000); // Set VIC Bank + CIA2->PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input + CIA2->PORT_A = %00000011 ^ (byte)((word)SCREEN/$4000); // Set VIC Bank // VIC memory *VIC_MEMORY = (byte)((((word)SCREEN)&$3fff)/$40) | ((>(((word)SCREEN)&$3fff))/4); diff --git a/src/test/kc/c64dtv-8bppchunkystretch.c b/src/test/kc/c64dtv-8bppchunkystretch.c index 8d13989b1..f5b3f4d1c 100644 --- a/src/test/kc/c64dtv-8bppchunkystretch.c +++ b/src/test/kc/c64dtv-8bppchunkystretch.c @@ -24,8 +24,8 @@ void main() { *DTV_PLANEB_MODULO_LO = 0; *DTV_PLANEB_MODULO_HI = 0; // VIC Graphics Bank - *CIA2_PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input - *CIA2_PORT_A = %00000011 ^ (byte)((word)CHUNKY/$4000); // Set VIC Bank + CIA2->PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input + CIA2->PORT_A = %00000011 ^ (byte)((word)CHUNKY/$4000); // Set VIC Bank // VIC memory *VIC_MEMORY = (byte)((((word)CHUNKY)&$3fff)/$40) | ((>(((word)CHUNKY)&$3fff))/4); diff --git a/src/test/kc/c64dtv-gfxexplorer.c b/src/test/kc/c64dtv-gfxexplorer.c index b771629c7..1a48c32e0 100644 --- a/src/test/kc/c64dtv-gfxexplorer.c +++ b/src/test/kc/c64dtv-gfxexplorer.c @@ -352,8 +352,8 @@ void gfx_mode() { *DTV_PLANEB_MODULO_HI = 0; // VIC Graphics Bank - *CIA2_PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input - *CIA2_PORT_A = %00000011 ^ (byte)((word)VIC_SCREEN0/$4000); // Set VIC Bank + CIA2->PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input + CIA2->PORT_A = %00000011 ^ (byte)((word)VIC_SCREEN0/$4000); // Set VIC Bank // VIC memory *VIC_MEMORY = (byte)(((word)get_vic_screen(*form_vic_screen)&$3fff)/$40) | ((>((word)get_vic_charset(*form_vic_gfx)&$3fff))/4); @@ -644,8 +644,8 @@ void form_mode() { *DTV_COLOR_BANK_LO = <((word)(DTV_COLOR_BANK_DEFAULT/$400)); *DTV_COLOR_BANK_HI = >((word)(DTV_COLOR_BANK_DEFAULT/$400)); // VIC Graphics Bank - *CIA2_PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input - *CIA2_PORT_A = %00000011 ^ (byte)((word)FORM_CHARSET/$4000); // Set VIC Bank + CIA2->PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input + CIA2->PORT_A = %00000011 ^ (byte)((word)FORM_CHARSET/$4000); // Set VIC Bank // DTV Graphics Mode *DTV_CONTROL = 0; // VIC Graphics Mode diff --git a/src/test/kc/c64dtv-gfxmodes.c b/src/test/kc/c64dtv-gfxmodes.c index 37d6ba012..bb198177b 100644 --- a/src/test/kc/c64dtv-gfxmodes.c +++ b/src/test/kc/c64dtv-gfxmodes.c @@ -52,8 +52,8 @@ void menu() { // DTV Graphics Mode *DTV_CONTROL = 0; // VIC Graphics Bank - *CIA2_PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input - *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000); // Set VIC Bank + CIA2->PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input + CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000); // Set VIC Bank // VIC Graphics Mode *VIC_CONTROL = VIC_DEN|VIC_RSEL|3; *VIC_CONTROL2 = VIC_CSEL; @@ -199,8 +199,8 @@ void mode_stdchar() { dtv_control = 0; *DTV_CONTROL = 0; // VIC Graphics Bank - *CIA2_PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input - *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000); // Set VIC Bank + CIA2->PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input + CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000); // Set VIC Bank // VIC Graphics Mode *VIC_CONTROL = VIC_DEN|VIC_RSEL|3; *VIC_CONTROL2 = VIC_CSEL; @@ -250,8 +250,8 @@ void mode_ecmchar() { dtv_control = 0; *DTV_CONTROL = 0; // VIC Graphics Bank - *CIA2_PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input - *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000); // Set VIC Bank + CIA2->PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input + CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000); // Set VIC Bank // VIC Graphics Mode *VIC_CONTROL = VIC_DEN|VIC_RSEL|VIC_ECM|3; *VIC_CONTROL2 = VIC_CSEL; @@ -306,8 +306,8 @@ void mode_mcchar() { dtv_control = 0; *DTV_CONTROL = 0; // VIC Graphics Bank - *CIA2_PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input - *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000); // Set VIC Bank + CIA2->PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input + CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000); // Set VIC Bank // VIC Graphics Mode *VIC_CONTROL = VIC_DEN|VIC_RSEL|3; *VIC_CONTROL2 = VIC_CSEL|VIC_MCM; @@ -352,8 +352,8 @@ void mode_stdbitmap() { dtv_control = 0; *DTV_CONTROL = 0; // VIC Graphics Bank - *CIA2_PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input - *CIA2_PORT_A = %00000011 ^ (byte)((word)BITMAP/$4000); // Set VIC Bank + CIA2->PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input + CIA2->PORT_A = %00000011 ^ (byte)((word)BITMAP/$4000); // Set VIC Bank // VIC Graphics Mode *VIC_CONTROL = VIC_BMM|VIC_DEN|VIC_RSEL|3; *VIC_CONTROL2 = VIC_CSEL; @@ -408,8 +408,8 @@ void mode_hicolstdchar() { dtv_control = DTV_HIGHCOLOR; *DTV_CONTROL = DTV_HIGHCOLOR; // VIC Graphics Bank - *CIA2_PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input - *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000); // Set VIC Bank + CIA2->PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input + CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000); // Set VIC Bank // VIC Graphics Mode *VIC_CONTROL = VIC_DEN|VIC_RSEL|3; *VIC_CONTROL2 = VIC_CSEL; @@ -461,8 +461,8 @@ void mode_hicolecmchar() { dtv_control = DTV_HIGHCOLOR; *DTV_CONTROL = DTV_HIGHCOLOR; // VIC Graphics Bank - *CIA2_PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input - *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000); // Set VIC Bank + CIA2->PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input + CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000); // Set VIC Bank // VIC Graphics Mode *VIC_CONTROL = VIC_DEN|VIC_RSEL|VIC_ECM|3; *VIC_CONTROL2 = VIC_CSEL; @@ -517,8 +517,8 @@ void mode_hicolmcchar() { dtv_control = DTV_HIGHCOLOR; *DTV_CONTROL = DTV_HIGHCOLOR; // VIC Graphics Bank - *CIA2_PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input - *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000); // Set VIC Bank + CIA2->PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input + CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000); // Set VIC Bank // VIC Graphics Mode *VIC_CONTROL = VIC_DEN|VIC_RSEL|3; *VIC_CONTROL2 = VIC_CSEL|VIC_MCM; diff --git a/src/test/kc/complex/clearscreen/clearscreen.c b/src/test/kc/complex/clearscreen/clearscreen.c index b97af5680..e839ab09c 100644 --- a/src/test/kc/complex/clearscreen/clearscreen.c +++ b/src/test/kc/complex/clearscreen/clearscreen.c @@ -288,7 +288,7 @@ void setupRasterIrq(unsigned int raster, void()* irqRoutine) { *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK; *PROCPORT = PROCPORT_RAM_IO; // Disable CIA 1 Timer IRQ - *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR; if(raster<0x100) { *VIC_CONTROL &=0x7f; } else { diff --git a/src/test/kc/complex/spritescroller/spritescroller.c b/src/test/kc/complex/spritescroller/spritescroller.c index 5cdb9472d..da187149e 100644 --- a/src/test/kc/complex/spritescroller/spritescroller.c +++ b/src/test/kc/complex/spritescroller/spritescroller.c @@ -69,7 +69,7 @@ void main() { // Enable the plex IRQ asm { sei } // Disable CIA 1 Timer IRQ - *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR; // Set raster line to 0x00 *VIC_CONTROL &=0x7f; *RASTER = 0x28; diff --git a/src/test/kc/complex/tetris/tetris-sprites.c b/src/test/kc/complex/tetris/tetris-sprites.c index 5873c91ea..c166ebb6d 100644 --- a/src/test/kc/complex/tetris/tetris-sprites.c +++ b/src/test/kc/complex/tetris/tetris-sprites.c @@ -46,6 +46,7 @@ volatile char irq_sprite_ptr = toSpritePtr(PLAYFIELD_SPRITES) + 3; // Counting the 10 IRQs volatile char irq_cnt = 0; + // Setup the IRQ void sprites_irq_init() { asm { sei } @@ -57,7 +58,7 @@ void sprites_irq_init() { *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK; *PROCPORT = PROCPORT_RAM_IO; // Disable CIA 1 Timer IRQ - *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR; // Set raster line *VIC_CONTROL &=0x7f; *RASTER = IRQ_RASTER_FIRST; diff --git a/src/test/kc/danny-joystick-problem.c b/src/test/kc/danny-joystick-problem.c index ecbd1271f..60384a8ab 100644 --- a/src/test/kc/danny-joystick-problem.c +++ b/src/test/kc/danny-joystick-problem.c @@ -4,8 +4,8 @@ #include char* const SCREEN = 0x0400; void main() { - (*CIA2_PORT_B) &= 0x7f; + (CIA2->PORT_B) &= 0x7f; asm { lda #0 } - char port4Value = *CIA2_PORT_B; + char port4Value = CIA2->PORT_B; *SCREEN = port4Value; } \ No newline at end of file diff --git a/src/test/kc/examples/eightqueens/eightqueens.c b/src/test/kc/examples/eightqueens/eightqueens.c index 5194a7777..766e81f89 100644 --- a/src/test/kc/examples/eightqueens/eightqueens.c +++ b/src/test/kc/examples/eightqueens/eightqueens.c @@ -5,6 +5,7 @@ // This is an iterative solution. #include +#include #define QUEENS 8 #define PRINT_SOLUTIONS @@ -18,10 +19,14 @@ unsigned long count = 0; void main() { printf_cls(); printf(" - n queens problem using backtracking -"); - printf("\nNumber of queens:%u",QUEENS); + printf("\nnumber of queens:%u",QUEENS); + tod_init(TOD_ZERO); queens(); + struct TIME_OF_DAY tod = tod_read(); + printf("\ntime: %s",tod_str(tod)); } + // Generates all valid placements of queens on a NxN board without recursion // Works exactly like the recursive solution by generating all legal placements af a queen for a specific row taking into consideration the queens already placed on the rows below // and then moving on to generating all legal placements on the rows above. @@ -31,8 +36,8 @@ void main() { void queens() { // The current row where the queen is moving char row = 1; - while(true) { - // Move the queen forward the current row + while(1) { + // Move the queen forward on the current row board[row]++; if(board[row]==QUEENS+1) { // We moved past the end of the row - reset position and go down to the lower row @@ -48,19 +53,15 @@ void queens() { if(legal(row, board[row])) { // position is legal - move up to the next row if(row==QUEENS) { - // We have a complete legal board - print it! + // We have a complete legal board - print it - and move forward on top row! + ++count; #ifdef PRINT_SOLUTIONS print(); #endif - // Move forward on the top row! - continue; } else { // Move up to the next row row++; } - } else { - // position is illegal - move forward on the same row - continue; } } } @@ -84,16 +85,16 @@ char legal(char row,char column) { } // Find the absolute difference between two unsigned chars -char diff(char a, char b) { +inline char diff(char a, char b) { if(aINTERRUPT = CIA_INTERRUPT_CLEAR; // Set raster line to $fa *VIC_CONTROL &=$7f; *RASTER = $fa; diff --git a/src/test/kc/examples/music/music_irq.c b/src/test/kc/examples/music/music_irq.c index 82ddc75a4..814b7b4b5 100755 --- a/src/test/kc/examples/music/music_irq.c +++ b/src/test/kc/examples/music/music_irq.c @@ -21,7 +21,7 @@ void main() { jsr music.init } // Disable CIA 1 Timer IRQ - *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR; // Set raster line to $fd *VIC_CONTROL &=$7f; *RASTER = $fd; diff --git a/src/test/kc/examples/nmisamples/nmisamples.c b/src/test/kc/examples/nmisamples/nmisamples.c index 6b3d3e18b..ca48990ee 100644 --- a/src/test/kc/examples/nmisamples/nmisamples.c +++ b/src/test/kc/examples/nmisamples/nmisamples.c @@ -24,11 +24,11 @@ void main() { sta $d412 } asm { sei } - *CIA2_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA2->INTERRUPT = CIA_INTERRUPT_CLEAR; *KERNEL_NMI = &nmi; - *CIA2_TIMER_A = 0x88; // speed - *CIA2_INTERRUPT = 0x81; - *CIA2_TIMER_A_CONTROL = 0x01; + CIA2->TIMER_A = 0x88; // speed + CIA2->INTERRUPT = 0x81; + CIA2->TIMER_A_CONTROL = 0x01; asm { cli } } diff --git a/src/test/kc/irq-hardware-clobber-jsr.c b/src/test/kc/irq-hardware-clobber-jsr.c index 0f9f8234e..80449c598 100644 --- a/src/test/kc/irq-hardware-clobber-jsr.c +++ b/src/test/kc/irq-hardware-clobber-jsr.c @@ -7,7 +7,7 @@ void main() { *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK; *PROCPORT = PROCPORT_RAM_IO; // Disable CIA 1 Timer IRQ - *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR; // Set raster line to $100 *VIC_CONTROL |=$80; *RASTER = $00; diff --git a/src/test/kc/irq-hardware-clobber.c b/src/test/kc/irq-hardware-clobber.c index 04bfe37e4..1d31ee524 100644 --- a/src/test/kc/irq-hardware-clobber.c +++ b/src/test/kc/irq-hardware-clobber.c @@ -35,7 +35,7 @@ void main() { *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK; *PROCPORT = PROCPORT_RAM_IO; // Disable CIA 1 Timer IRQ - *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR; // Set raster line to $100 *VIC_CONTROL |=$80; *RASTER = $00; diff --git a/src/test/kc/irq-hardware-stack.c b/src/test/kc/irq-hardware-stack.c index 29e48f90f..0de6c64e5 100644 --- a/src/test/kc/irq-hardware-stack.c +++ b/src/test/kc/irq-hardware-stack.c @@ -35,7 +35,7 @@ void main() { *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK; *PROCPORT = PROCPORT_RAM_IO; // Disable CIA 1 Timer IRQ - *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR; // Set raster line to $100 *VIC_CONTROL |=$80; *RASTER = $00; diff --git a/src/test/kc/irq-hardware.c b/src/test/kc/irq-hardware.c index f01489aab..4eea68a34 100644 --- a/src/test/kc/irq-hardware.c +++ b/src/test/kc/irq-hardware.c @@ -35,7 +35,7 @@ void main() { *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK; *PROCPORT = PROCPORT_RAM_IO; // Disable CIA 1 Timer IRQ - *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR; // Set raster line to $100 *VIC_CONTROL |=$80; *RASTER = $00; diff --git a/src/test/kc/irq-idx-problem.c b/src/test/kc/irq-idx-problem.c index e1b8b2ed6..5d99e772c 100644 --- a/src/test/kc/irq-idx-problem.c +++ b/src/test/kc/irq-idx-problem.c @@ -6,7 +6,7 @@ byte* const SCREEN = $0400; void main() { asm { sei } // Disable CIA 1 Timer IRQ - *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR; // Set raster line to $60 *VIC_CONTROL &=$7f; *RASTER = $60; diff --git a/src/test/kc/irq-kernel.c b/src/test/kc/irq-kernel.c index f65f4aca2..cd8c61a27 100644 --- a/src/test/kc/irq-kernel.c +++ b/src/test/kc/irq-kernel.c @@ -19,7 +19,7 @@ const byte CIA_INTERRUPT_CLEAR = $7f; void main() { asm { sei } // Disable CIA 1 Timer IRQ - *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR; // Set raster line to $100 *VIC_CONTROL |=$80; *RASTER = $00; diff --git a/src/test/kc/irq-local-var-overlap-problem.c b/src/test/kc/irq-local-var-overlap-problem.c index df81a9efe..c392861bd 100644 --- a/src/test/kc/irq-local-var-overlap-problem.c +++ b/src/test/kc/irq-local-var-overlap-problem.c @@ -16,7 +16,7 @@ const byte CIA_INTERRUPT_CLEAR = $7f; void main() { asm { sei } // Disable CIA 1 Timer IRQ - *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR; // Set raster line to $0fd *VIC_CONTROL &=$7f; *RASTER = $fd; diff --git a/src/test/kc/irq-raster.c b/src/test/kc/irq-raster.c index 9c3f7930f..685d8692e 100644 --- a/src/test/kc/irq-raster.c +++ b/src/test/kc/irq-raster.c @@ -19,7 +19,7 @@ const byte CIA_INTERRUPT_CLEAR = $7f; void main() { asm { sei } // Disable CIA 1 Timer IRQ - *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR; // Set raster line to $100 *VIC_CONTROL |=$80; *RASTER = $00; diff --git a/src/test/kc/irq-volatile-bool-problem.c b/src/test/kc/irq-volatile-bool-problem.c index 113956331..cc8d3e1ea 100644 --- a/src/test/kc/irq-volatile-bool-problem.c +++ b/src/test/kc/irq-volatile-bool-problem.c @@ -16,7 +16,7 @@ const byte CIA_INTERRUPT_CLEAR = $7f; void main() { asm { sei } // Disable CIA 1 Timer IRQ - *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR; // Set raster line to $0fd *VIC_CONTROL &=$7f; *RASTER = $fd; diff --git a/src/test/kc/millfork-benchmarks/plasma-kc.c b/src/test/kc/millfork-benchmarks/plasma-kc.c index cfe766f19..be506d9b1 100644 --- a/src/test/kc/millfork-benchmarks/plasma-kc.c +++ b/src/test/kc/millfork-benchmarks/plasma-kc.c @@ -118,11 +118,11 @@ int main (void) makechar(); start(); - block = *CIA2_PORT_A; + block = CIA2->PORT_A; char tmp; tmp = block & 0xFC; tmp |= (char)((((unsigned int)SCREEN1) >> 14) ^ 0x03); - *CIA2_PORT_A = tmp; + CIA2->PORT_A = tmp; v = *VIC_MEMORY; /* Run the demo until a key was hit */ @@ -140,7 +140,7 @@ int main (void) } *VIC_MEMORY = v; - *CIA2_PORT_A = block; + CIA2->PORT_A = block; /* Reset screen colors */ end(); diff --git a/src/test/kc/multiplexer-irq/simple-multiplexer-irq.c b/src/test/kc/multiplexer-irq/simple-multiplexer-irq.c index e9d598e75..f95dd084f 100644 --- a/src/test/kc/multiplexer-irq/simple-multiplexer-irq.c +++ b/src/test/kc/multiplexer-irq/simple-multiplexer-irq.c @@ -40,7 +40,7 @@ void init() { } // enable the interrupt asm { sei } - *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR; + CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR; *IRQ_ENABLE = IRQ_RASTER; *IRQ_STATUS = IRQ_RASTER; *KERNEL_IRQ = &plex_irq; diff --git a/src/test/kc/tod-1.c b/src/test/kc/tod-1.c new file mode 100644 index 000000000..51fa9a822 --- /dev/null +++ b/src/test/kc/tod-1.c @@ -0,0 +1,12 @@ +// Time of Day / RTOS test using the 6526 CIA on C64 +#include +#include + +void main() { + tod_init(TOD_ZERO); + while(1) { + struct TIME_OF_DAY tod = tod_read(); + gotoxy(0,0); + cputs(tod_str(tod)); + } +} diff --git a/src/test/ref/bitmap-circle-2.log b/src/test/ref/bitmap-circle-2.log index 2864448dc..3ff96c4f7 100644 --- a/src/test/ref/bitmap-circle-2.log +++ b/src/test/ref/bitmap-circle-2.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -284,6 +286,20 @@ SYMBOL TABLE SSA (const nomodify byte) BLUE = (byte) 6 (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 (const nomodify byte*) D011 = (byte*)(number) $d011 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*)(number) $400 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 @@ -963,6 +979,20 @@ fill::@2: scope:[fill] from fill::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) circle((signed word) circle::xc , (signed word) circle::yc , (signed word) circle::r) (signed word~) circle::$0 2002.0 (signed word~) circle::$10 200002.0 @@ -1969,6 +1999,7 @@ Uplift Scope [plot] 2,080,017.2: zp[2]:12 [ plot::y#8 plot::y#5 plot::y#6 plot:: Uplift Scope [circle] 470,831.01: zp[2]:8 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ] 236,113.47: zp[2]:4 [ circle::x1#10 circle::x1#1 ] 200,002: zp[2]:21 [ circle::$5 ] 200,002: zp[2]:23 [ circle::$6 ] 200,002: zp[2]:25 [ circle::$7 ] 200,002: zp[2]:27 [ circle::$9 ] 200,002: zp[2]:29 [ circle::$10 ] 169,843.88: zp[2]:6 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ] 2,002: zp[2]:19 [ circle::$0 ] Uplift Scope [fill] 3,471.33: zp[2]:17 [ fill::addr#2 fill::addr#0 fill::addr#1 ] 220.4: zp[2]:51 [ fill::end#0 ] 166.83: zp[1]:16 [ fill::val#4 ] 101: zp[2]:14 [ fill::size#2 ] Uplift Scope [main] 303: zp[2]:2 [ main::i#2 main::i#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [] Uplifting [plot] best 53688 combination zp[2]:12 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] zp[2]:31 [ plot::$8 ] reg byte a [ plot::$9 ] reg byte a [ plot::$10 ] zp[2]:41 [ plot::$15 ] zp[2]:43 [ plot::$16 ] zp[2]:45 [ plot::$12 ] reg byte a [ plot::$13 ] reg byte a [ plot::$14 ] zp[2]:39 [ plot::$11 ] zp[2]:10 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] zp[2]:47 [ plot::location#3 ] zp[2]:33 [ plot::location#1 ] zp[2]:37 [ plot::location#2 ] @@ -1976,6 +2007,7 @@ Limited combination testing to 100 combinations of 256 possible. Uplifting [circle] best 53688 combination zp[2]:8 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ] zp[2]:4 [ circle::x1#10 circle::x1#1 ] zp[2]:21 [ circle::$5 ] zp[2]:23 [ circle::$6 ] zp[2]:25 [ circle::$7 ] zp[2]:27 [ circle::$9 ] zp[2]:29 [ circle::$10 ] zp[2]:6 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ] zp[2]:19 [ circle::$0 ] Uplifting [fill] best 53672 combination zp[2]:17 [ fill::addr#2 fill::addr#0 fill::addr#1 ] zp[2]:51 [ fill::end#0 ] reg byte x [ fill::val#4 ] zp[2]:14 [ fill::size#2 ] Uplifting [main] best 53672 combination zp[2]:2 [ main::i#2 main::i#1 ] +Uplifting [MOS6526_CIA] best 53672 combination Uplifting [] best 53672 combination Coalescing zero page register [ zp[2]:8 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ] ] with [ zp[2]:25 [ circle::$7 ] ] - score: 2 Coalescing zero page register [ zp[2]:8 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 circle::$7 ] ] with [ zp[2]:29 [ circle::$10 ] ] - score: 2 @@ -2774,6 +2806,20 @@ FINAL SYMBOL TABLE (const nomodify byte) BLUE = (byte) 6 (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) D011 = (byte*) 53265 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 diff --git a/src/test/ref/bitmap-circle-2.sym b/src/test/ref/bitmap-circle-2.sym index 7ecb069ca..8fbccf3da 100644 --- a/src/test/ref/bitmap-circle-2.sym +++ b/src/test/ref/bitmap-circle-2.sym @@ -5,6 +5,20 @@ (const nomodify byte) BLUE = (byte) 6 (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) D011 = (byte*) 53265 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 diff --git a/src/test/ref/bitmap-circle.log b/src/test/ref/bitmap-circle.log index e534d5ed4..e9b815f55 100644 --- a/src/test/ref/bitmap-circle.log +++ b/src/test/ref/bitmap-circle.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -260,6 +262,20 @@ SYMBOL TABLE SSA (const nomodify byte) BLUE = (byte) 6 (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 (const nomodify byte*) D011 = (byte*)(number) $d011 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*)(number) $400 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 @@ -869,6 +885,20 @@ fill::@2: scope:[fill] from fill::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) circle((signed word) circle::xc , (signed word) circle::yc , (signed word) circle::r) (signed word~) circle::$10 2002.0 (signed word~) circle::$5 2002.0 @@ -1760,6 +1790,7 @@ REGISTER UPLIFT SCOPES Uplift Scope [plot] 20,684.33: zp[2]:10 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] 20,002: zp[2]:27 [ plot::$0 ] 20,002: zp[1]:31 [ plot::$1 ] 20,002: zp[1]:32 [ plot::$2 ] 20,002: zp[2]:37 [ plot::$7 ] 20,002: zp[2]:39 [ plot::$8 ] 20,002: zp[2]:41 [ plot::$4 ] 20,002: zp[1]:45 [ plot::$5 ] 20,002: zp[1]:46 [ plot::$6 ] 15,001.5: zp[2]:35 [ plot::$3 ] 10,554.36: zp[2]:8 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] 10,001: zp[2]:43 [ plot::location#3 ] 6,667.33: zp[2]:29 [ plot::location#1 ] 4,000.4: zp[2]:33 [ plot::location#2 ] Uplift Scope [circle] 4,691.5: zp[2]:6 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] 2,363.47: zp[2]:2 [ circle::x1#10 circle::x1#1 ] 2,002: zp[2]:17 [ circle::$5 ] 2,002: zp[2]:19 [ circle::$6 ] 2,002: zp[2]:21 [ circle::$7 ] 2,002: zp[2]:23 [ circle::$9 ] 2,002: zp[2]:25 [ circle::$10 ] 1,691.43: zp[2]:4 [ circle::y#13 circle::y#10 circle::y#1 ] Uplift Scope [fill] 3,471.33: zp[2]:15 [ fill::addr#2 fill::addr#0 fill::addr#1 ] 220.4: zp[2]:47 [ fill::end#0 ] 166.83: zp[1]:14 [ fill::val#4 ] 101: zp[2]:12 [ fill::size#2 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplift Scope [] @@ -1767,6 +1798,7 @@ Uplifting [plot] best 6419 combination zp[2]:10 [ plot::y#8 plot::y#5 plot::y#6 Limited combination testing to 100 combinations of 256 possible. Uplifting [circle] best 6419 combination zp[2]:6 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] zp[2]:2 [ circle::x1#10 circle::x1#1 ] zp[2]:17 [ circle::$5 ] zp[2]:19 [ circle::$6 ] zp[2]:21 [ circle::$7 ] zp[2]:23 [ circle::$9 ] zp[2]:25 [ circle::$10 ] zp[2]:4 [ circle::y#13 circle::y#10 circle::y#1 ] Uplifting [fill] best 6403 combination zp[2]:15 [ fill::addr#2 fill::addr#0 fill::addr#1 ] zp[2]:47 [ fill::end#0 ] reg byte x [ fill::val#4 ] zp[2]:12 [ fill::size#2 ] +Uplifting [MOS6526_CIA] best 6403 combination Uplifting [main] best 6403 combination Uplifting [] best 6403 combination Coalescing zero page register [ zp[2]:6 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] ] with [ zp[2]:21 [ circle::$7 ] ] - score: 2 @@ -2468,6 +2500,20 @@ FINAL SYMBOL TABLE (const nomodify byte) BLUE = (byte) 6 (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) D011 = (byte*) 53265 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 diff --git a/src/test/ref/bitmap-circle.sym b/src/test/ref/bitmap-circle.sym index 6d73899a4..0ecbbe583 100644 --- a/src/test/ref/bitmap-circle.sym +++ b/src/test/ref/bitmap-circle.sym @@ -5,6 +5,20 @@ (const nomodify byte) BLUE = (byte) 6 (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) D011 = (byte*) 53265 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 diff --git a/src/test/ref/bitmap-line-anim-1.log b/src/test/ref/bitmap-line-anim-1.log index 4612ad57e..263549ae5 100644 --- a/src/test/ref/bitmap-line-anim-1.log +++ b/src/test/ref/bitmap-line-anim-1.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -643,6 +645,20 @@ SYMBOL TABLE SSA (const nomodify byte*) BITMAP = (byte*)(number) $2000 (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 (const nomodify byte*) D011 = (byte*)(number) $d011 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*)(number) $400 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 @@ -2119,6 +2135,20 @@ bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) bitmap_clear() (byte*) bitmap_clear::bitmap (word) bitmap_clear::bitmap#0 101.0 @@ -3431,6 +3461,7 @@ Uplift Scope [bitmap_init] 3,628.62: zp[2]:26 [ bitmap_init::yoffs#2 bitmap_init Uplift Scope [bitmap_line] 1,334.67: zp[1]:29 [ bitmap_line::xd#2 ] 1,334.67: zp[1]:32 [ bitmap_line::xd#1 ] 851: zp[1]:28 [ bitmap_line::x1#0 ] Uplift Scope [init_screen] 3,336.67: zp[2]:17 [ init_screen::c#2 init_screen::c#1 ] Uplift Scope [] 303: zp[1]:2 [ next#4 next#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplifting [bitmap_plot] best 40165 combination reg byte y [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] zp[2]:39 [ bitmap_plot::plotter_y#0 ] reg byte a [ bitmap_plot::$1 ] reg byte x [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] zp[2]:37 [ bitmap_plot::plotter_x#0 ] zp[2]:41 [ bitmap_plot::plotter#0 ] @@ -3444,6 +3475,7 @@ Limited combination testing to 100 combinations of 34560 possible. Uplifting [bitmap_line] best 38089 combination reg byte x [ bitmap_line::xd#2 ] reg byte x [ bitmap_line::xd#1 ] reg byte a [ bitmap_line::x1#0 ] Uplifting [init_screen] best 38089 combination zp[2]:17 [ init_screen::c#2 init_screen::c#1 ] Uplifting [] best 38089 combination zp[1]:2 [ next#4 next#1 ] +Uplifting [MOS6526_CIA] best 38089 combination Uplifting [main] best 38089 combination Attempting to uplift remaining variables inzp[1]:10 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] Uplifting [bitmap_line_ydxi] best 38089 combination zp[1]:10 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] @@ -4453,6 +4485,20 @@ FINAL SYMBOL TABLE (const nomodify byte*) BITMAP = (byte*) 8192 (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) D011 = (byte*) 53265 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 diff --git a/src/test/ref/bitmap-line-anim-1.sym b/src/test/ref/bitmap-line-anim-1.sym index 233a5387a..085ec46fb 100644 --- a/src/test/ref/bitmap-line-anim-1.sym +++ b/src/test/ref/bitmap-line-anim-1.sym @@ -5,6 +5,20 @@ (const nomodify byte*) BITMAP = (byte*) 8192 (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) D011 = (byte*) 53265 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 diff --git a/src/test/ref/bitmap-line-anim-2.log b/src/test/ref/bitmap-line-anim-2.log index 0605782ff..0c1e83c6c 100644 --- a/src/test/ref/bitmap-line-anim-2.log +++ b/src/test/ref/bitmap-line-anim-2.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -560,6 +562,20 @@ SYMBOL TABLE SSA (const nomodify byte*) BITMAP = (byte*)(number) $2000 (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 (const nomodify byte*) D011 = (byte*)(number) $d011 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) PURPLE = (byte) 4 (const nomodify byte*) SCREEN = (byte*)(number) $400 (const nomodify byte) VIC_BMM = (byte) $20 @@ -1864,6 +1880,20 @@ bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (word()) abs_u16((word) abs_u16::w) (byte~) abs_u16::$0 20002.0 (byte~) abs_u16::$1 20002.0 @@ -3170,6 +3200,7 @@ Uplift Scope [sgn_u16] 20,002: zp[1]:58 [ sgn_u16::$0 ] 20,002: zp[1]:59 [ sgn_u Uplift Scope [memset] 35,672.33: zp[2]:26 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 1,833.67: zp[2]:62 [ memset::end#0 ] 1,250.12: zp[1]:25 [ memset::c#4 ] 1,001: zp[2]:21 [ memset::num#2 ] 0: zp[2]:23 [ memset::str#3 ] Uplift Scope [bitmap_init] 3,628.62: zp[2]:31 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 3,169.83: zp[1]:28 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 2,002: zp[1]:29 [ bitmap_init::x#2 bitmap_init::x#1 ] 2,002: zp[1]:30 [ bitmap_init::y#2 bitmap_init::y#1 ] 2,002: zp[1]:65 [ bitmap_init::$4 ] 2,002: zp[1]:66 [ bitmap_init::$5 ] 2,002: zp[1]:67 [ bitmap_init::$6 ] 500.5: zp[1]:64 [ bitmap_init::$7 ] Uplift Scope [] 404: zp[2]:2 [ next#5 next#3 next#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [bitmap_clear] Uplift Scope [main] @@ -3181,6 +3212,7 @@ Uplifting [memset] best 37048 combination zp[2]:26 [ memset::dst#2 memset::dst#4 Uplifting [bitmap_init] best 36538 combination zp[2]:31 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp[1]:66 [ bitmap_init::$5 ] zp[1]:67 [ bitmap_init::$6 ] zp[1]:64 [ bitmap_init::$7 ] Limited combination testing to 100 combinations of 15360 possible. Uplifting [] best 36538 combination zp[2]:2 [ next#5 next#3 next#1 ] +Uplifting [MOS6526_CIA] best 36538 combination Uplifting [bitmap_clear] best 36538 combination Uplifting [main] best 36538 combination Attempting to uplift remaining variables inzp[1]:66 [ bitmap_init::$5 ] @@ -4203,6 +4235,20 @@ FINAL SYMBOL TABLE (const nomodify byte*) BITMAP = (byte*) 8192 (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) D011 = (byte*) 53265 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) PURPLE = (byte) 4 (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 diff --git a/src/test/ref/bitmap-line-anim-2.sym b/src/test/ref/bitmap-line-anim-2.sym index 1226a882c..28e4aaf9c 100644 --- a/src/test/ref/bitmap-line-anim-2.sym +++ b/src/test/ref/bitmap-line-anim-2.sym @@ -5,6 +5,20 @@ (const nomodify byte*) BITMAP = (byte*) 8192 (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) D011 = (byte*) 53265 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) PURPLE = (byte) 4 (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 diff --git a/src/test/ref/bitmap-plot-0.asm b/src/test/ref/bitmap-plot-0.asm index e6a40c824..43d0d05c4 100644 --- a/src/test/ref/bitmap-plot-0.asm +++ b/src/test/ref/bitmap-plot-0.asm @@ -25,8 +25,8 @@ .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -34,6 +34,7 @@ // The colors of the C64 .const BLACK = 0 .const WHITE = 1 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label BITMAP = $2000 .label SCREEN = $400 .label frame_cnt = 8 @@ -176,10 +177,10 @@ init_irq: { // *PROCPORT = PROCPORT_RAM_IO lda #PROCPORT_RAM_IO sta PROCPORT - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL |=$80 // Set raster line to $100 lda #$80 diff --git a/src/test/ref/bitmap-plot-0.cfg b/src/test/ref/bitmap-plot-0.cfg index fb31c2edc..6c3b98e84 100644 --- a/src/test/ref/bitmap-plot-0.cfg +++ b/src/test/ref/bitmap-plot-0.cfg @@ -84,7 +84,7 @@ init_irq: scope:[init_irq] from main::@7 asm { sei } [35] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [36] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [37] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [37] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [38] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 [39] *((const nomodify byte*) RASTER) ← (byte) 0 [40] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER diff --git a/src/test/ref/bitmap-plot-0.log b/src/test/ref/bitmap-plot-0.log index 04a714677..79d749503 100644 --- a/src/test/ref/bitmap-plot-0.log +++ b/src/test/ref/bitmap-plot-0.log @@ -2,6 +2,9 @@ Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference irq to interrupt(HARDWARE_CLOBBER)(void()) irq() +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$2 ← call toD018 (const byte*) SCREEN (const byte*) BITMAP @@ -342,7 +345,7 @@ init_irq: scope:[init_irq] from main::@7 asm { sei } *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (number) $80 *((const nomodify byte*) RASTER) ← (number) 0 *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -393,7 +396,7 @@ SYMBOL TABLE SSA (const nomodify byte*) BGCOL = (byte*)(number) $d021 (const byte*) BITMAP = (byte*)(number) $2000 (const nomodify byte) BLACK = (byte) 0 -(const nomodify byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D011 = (byte*)(number) $d011 (const nomodify byte*) D018 = (byte*)(number) $d018 @@ -401,6 +404,21 @@ SYMBOL TABLE SSA (const nomodify byte*) IRQ_ENABLE = (byte*)(number) $d01a (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*)(number) $d019 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) PROCPORT = (byte*)(number) 1 (const nomodify byte*) PROCPORT_DDR = (byte*)(number) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 @@ -762,7 +780,7 @@ Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 53273 Simplifying constant pointer cast (byte*) 53274 -Simplifying constant pointer cast (byte*) 56333 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 Simplifying constant pointer cast (void()**) 65534 Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 1024 @@ -1252,7 +1270,7 @@ init_irq: scope:[init_irq] from main::@7 asm { sei } [35] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [36] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [37] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [37] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [38] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 [39] *((const nomodify byte*) RASTER) ← (byte) 0 [40] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -1359,6 +1377,20 @@ irq::@return: scope:[irq] from irq::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (byte) bitmap_clear::bgcol (byte) bitmap_clear::col @@ -1539,8 +1571,8 @@ Target platform is c64basic / MOS6502X .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -1548,6 +1580,7 @@ Target platform is c64basic / MOS6502X // The colors of the C64 .const BLACK = 0 .const WHITE = 1 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label BITMAP = $2000 .label SCREEN = $400 .label frame_cnt = $14 @@ -1794,10 +1827,10 @@ init_irq: { // [36] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [37] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [37] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [38] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 lda #$80 @@ -2145,7 +2178,7 @@ Removing always clobbered register reg byte y as potential for zp[1]:4 [ main::y Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ] Statement [35] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:3::init_irq:12 [ frame_cnt ] { } ) always clobbers reg byte a Statement [36] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:3::init_irq:12 [ frame_cnt ] { } ) always clobbers reg byte a -Statement [37] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:12 [ frame_cnt ] { } ) always clobbers reg byte a +Statement [37] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:12 [ frame_cnt ] { } ) always clobbers reg byte a Statement [38] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 [ ] ( main:3::init_irq:12 [ frame_cnt ] { } ) always clobbers reg byte a Statement [39] *((const nomodify byte*) RASTER) ← (byte) 0 [ ] ( main:3::init_irq:12 [ frame_cnt ] { } ) always clobbers reg byte a Statement [40] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:3::init_irq:12 [ frame_cnt ] { } ) always clobbers reg byte a @@ -2183,7 +2216,7 @@ Statement [30] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plo Statement [32] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const to_nomodify byte*) bitmap_plot_bit + (byte~) bitmap_plot::$1) [ ] ( main:3::bitmap_plot:16 [ frame_cnt main::x#2 main::y#2 main::vx#2 main::vy#2 ] { { bitmap_plot::x#0 = main::x#2 } { bitmap_plot::y#0 = main::y#2 } } ) always clobbers reg byte a reg byte y Statement [35] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:3::init_irq:12 [ frame_cnt ] { } ) always clobbers reg byte a Statement [36] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:3::init_irq:12 [ frame_cnt ] { } ) always clobbers reg byte a -Statement [37] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:12 [ frame_cnt ] { } ) always clobbers reg byte a +Statement [37] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:12 [ frame_cnt ] { } ) always clobbers reg byte a Statement [38] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 [ ] ( main:3::init_irq:12 [ frame_cnt ] { } ) always clobbers reg byte a Statement [39] *((const nomodify byte*) RASTER) ← (byte) 0 [ ] ( main:3::init_irq:12 [ frame_cnt ] { } ) always clobbers reg byte a Statement [40] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:3::init_irq:12 [ frame_cnt ] { } ) always clobbers reg byte a @@ -2231,6 +2264,7 @@ Uplift Scope [bitmap_init] 3,628.62: zp[2]:18 [ bitmap_init::yoffs#2 bitmap_init Uplift Scope [bitmap_plot] 2,103: zp[1]:23 [ bitmap_plot::y#0 ] 2,002: zp[2]:26 [ bitmap_plot::$0 ] 2,002: zp[1]:30 [ bitmap_plot::$1 ] 1,501.5: zp[2]:28 [ bitmap_plot::plotter#1 ] 500.5: zp[2]:24 [ bitmap_plot::plotter#0 ] 420.6: zp[2]:21 [ bitmap_plot::x#0 ] Uplift Scope [main] 387.17: zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ] 303: zp[2]:5 [ main::vx#2 main::vx#6 main::vx#1 ] 112.48: zp[2]:2 [ main::x#2 main::x#1 ] 101: zp[1]:4 [ main::y#2 main::y#1 ] Uplift Scope [] 7.78: zp[1]:20 [ frame_cnt ] +Uplift Scope [MOS6526_CIA] Uplift Scope [bitmap_clear] Uplift Scope [init_irq] Uplift Scope [irq] @@ -2241,6 +2275,7 @@ Limited combination testing to 100 combinations of 15360 possible. Uplifting [bitmap_plot] best 4316 combination reg byte x [ bitmap_plot::y#0 ] zp[2]:26 [ bitmap_plot::$0 ] reg byte x [ bitmap_plot::$1 ] zp[2]:28 [ bitmap_plot::plotter#1 ] zp[2]:24 [ bitmap_plot::plotter#0 ] zp[2]:21 [ bitmap_plot::x#0 ] Uplifting [main] best 4316 combination zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ] zp[2]:5 [ main::vx#2 main::vx#6 main::vx#1 ] zp[2]:2 [ main::x#2 main::x#1 ] zp[1]:4 [ main::y#2 main::y#1 ] Uplifting [] best 4316 combination zp[1]:20 [ frame_cnt ] +Uplifting [MOS6526_CIA] best 4316 combination Uplifting [bitmap_clear] best 4316 combination Uplifting [init_irq] best 4316 combination Uplifting [irq] best 4316 combination @@ -2306,8 +2341,8 @@ ASSEMBLER BEFORE OPTIMIZATION .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -2315,6 +2350,7 @@ ASSEMBLER BEFORE OPTIMIZATION // The colors of the C64 .const BLACK = 0 .const WHITE = 1 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label BITMAP = $2000 .label SCREEN = $400 .label frame_cnt = 8 @@ -2550,10 +2586,10 @@ init_irq: { // [36] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [37] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [37] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [38] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 lda #$80 @@ -2954,7 +2990,7 @@ FINAL SYMBOL TABLE (const nomodify byte*) BGCOL = (byte*) 53281 (const byte*) BITMAP = (byte*) 8192 (const nomodify byte) BLACK = (byte) 0 -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte*) D018 = (byte*) 53272 @@ -2962,6 +2998,21 @@ FINAL SYMBOL TABLE (const nomodify byte*) IRQ_ENABLE = (byte*) 53274 (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 @@ -3135,8 +3186,8 @@ Score: 3175 .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -3144,6 +3195,7 @@ Score: 3175 // The colors of the C64 .const BLACK = 0 .const WHITE = 1 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label BITMAP = $2000 .label SCREEN = $400 .label frame_cnt = 8 @@ -3356,11 +3408,11 @@ init_irq: { // [36] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR - // [37] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR + // [37] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL |=$80 // [38] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 diff --git a/src/test/ref/bitmap-plot-0.sym b/src/test/ref/bitmap-plot-0.sym index 033b2306f..121066d93 100644 --- a/src/test/ref/bitmap-plot-0.sym +++ b/src/test/ref/bitmap-plot-0.sym @@ -5,7 +5,7 @@ (const nomodify byte*) BGCOL = (byte*) 53281 (const byte*) BITMAP = (byte*) 8192 (const nomodify byte) BLACK = (byte) 0 -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte*) D018 = (byte*) 53272 @@ -13,6 +13,21 @@ (const nomodify byte*) IRQ_ENABLE = (byte*) 53274 (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 diff --git a/src/test/ref/bitmap-plot-1.asm b/src/test/ref/bitmap-plot-1.asm index bb6951dc8..6e6f3044e 100644 --- a/src/test/ref/bitmap-plot-1.asm +++ b/src/test/ref/bitmap-plot-1.asm @@ -25,8 +25,8 @@ .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -41,6 +41,7 @@ // PI/2 in u[4.28] format .const PI_HALF_u4f28 = $1921fb54 .const SIZEOF_SIGNED_WORD = 2 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label BITMAP = $2000 .label SCREEN = $400 .label frame_cnt = $16 @@ -421,10 +422,10 @@ init_irq: { // *PROCPORT = PROCPORT_RAM_IO lda #PROCPORT_RAM_IO sta PROCPORT - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL |=$80 // Set raster line to $100 lda #$80 diff --git a/src/test/ref/bitmap-plot-1.cfg b/src/test/ref/bitmap-plot-1.cfg index 3928d3191..729b73394 100644 --- a/src/test/ref/bitmap-plot-1.cfg +++ b/src/test/ref/bitmap-plot-1.cfg @@ -167,7 +167,7 @@ init_irq: scope:[init_irq] from main::@5 asm { sei } [84] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [85] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [86] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [86] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [87] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 [88] *((const nomodify byte*) RASTER) ← (byte) 0 [89] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER diff --git a/src/test/ref/bitmap-plot-1.log b/src/test/ref/bitmap-plot-1.log index 98a5a3b49..66f926f9b 100644 --- a/src/test/ref/bitmap-plot-1.log +++ b/src/test/ref/bitmap-plot-1.log @@ -2,6 +2,9 @@ Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference irq to interrupt(HARDWARE_CLOBBER)(void()) irq() +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$3 ← call toD018 (const byte*) SCREEN (const byte*) BITMAP @@ -862,7 +865,7 @@ init_irq: scope:[init_irq] from main::@7 asm { sei } *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (number) $80 *((const nomodify byte*) RASTER) ← (number) 0 *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -917,7 +920,7 @@ SYMBOL TABLE SSA (const nomodify byte*) BGCOL = (byte*)(number) $d021 (const byte*) BITMAP = (byte*)(number) $2000 (const nomodify byte) BLACK = (byte) 0 -(const nomodify byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D011 = (byte*)(number) $d011 (const nomodify byte*) D018 = (byte*)(number) $d018 @@ -925,6 +928,21 @@ SYMBOL TABLE SSA (const nomodify byte*) IRQ_ENABLE = (byte*)(number) $d01a (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*)(number) $d019 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 (const nomodify dword) PI_u4f28 = (dword) $3243f6a9 @@ -1818,7 +1836,7 @@ Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 53273 Simplifying constant pointer cast (byte*) 53274 -Simplifying constant pointer cast (byte*) 56333 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 Simplifying constant pointer cast (void()**) 65534 Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 1024 @@ -2798,7 +2816,7 @@ init_irq: scope:[init_irq] from main::@5 asm { sei } [84] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [85] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [86] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [86] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [87] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 [88] *((const nomodify byte*) RASTER) ← (byte) 0 [89] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -3093,6 +3111,20 @@ irq::@return: scope:[irq] from irq::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (byte) bitmap_clear::bgcol (byte) bitmap_clear::col @@ -3673,8 +3705,8 @@ Target platform is c64basic / MOS6502X .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -3689,6 +3721,7 @@ Target platform is c64basic / MOS6502X // PI/2 in u[4.28] format .const PI_HALF_u4f28 = $1921fb54 .const SIZEOF_SIGNED_WORD = 2 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label BITMAP = $2000 .label SCREEN = $400 .label frame_cnt = $41 @@ -4354,10 +4387,10 @@ init_irq: { // [85] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [86] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [86] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [87] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 lda #$80 @@ -5569,7 +5602,7 @@ Statement [77] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::re Statement [79] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { mul16s::b#1 = mul16s::b#3 main::cos_x#0 } { mul16s::return#0 = mul16s::return#3 } { mul16u::b#0 = mul16u::b#2 } { mul16u::a#1 = mul16u::a#6 } { mul16u::return#2 = mul16u::res#2 } } main:3::mul16s:30::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { mul16s::b#2 = mul16s::b#3 main::sin_y#0 } { mul16s::return#0 = mul16s::return#4 } { mul16u::b#0 = mul16u::b#2 } { mul16u::a#1 = mul16u::a#6 } { mul16u::return#2 = mul16u::res#2 } } main:3::sin16s_gen2:6::mul16s:140::mul16u:57 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { mul16s::a#0 = mul16s::a#3 sin16s::return#0 } { mul16s::return#0 = mul16s::return#2 } { mul16u::b#0 = mul16u::b#2 } { mul16u::a#1 = mul16u::a#6 } { mul16u::return#2 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#0 = mulu16_sel::return#12 } { mul16u::a#2 = mul16u::a#6 mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#0 mulu16_sel::v1#5 mulu16_sel::v1#0 sin16s::x1#0 } { mul16u::return#3 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#1 = mulu16_sel::return#12 } { mul16u::b#1 = mul16u::b#2 mulu16_sel::v2#5 mulu16_sel::v2#1 sin16s::x1#0 } { mul16u::a#2 = mul16u::a#6 mulu16_sel::v1#5 mulu16_sel::v1#1 sin16s::x2#0 } { mul16u::return#3 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#12 = mulu16_sel::return#2 } { mul16u::b#1 = mul16u::b#2 mulu16_sel::v2#5 } { mul16u::a#2 = mul16u::a#6 mulu16_sel::v1#5 mulu16_sel::v1#2 sin16s::x3#0 } { mul16u::return#3 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#10 = mulu16_sel::return#12 } { mul16u::b#1 = mul16u::b#2 mulu16_sel::v2#5 mulu16_sel::v2#3 sin16s::x1#0 } { mul16u::a#2 = mul16u::a#6 mulu16_sel::v1#5 mulu16_sel::v1#3 sin16s::x3#0 } { mul16u::return#3 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#11 = mulu16_sel::return#12 } { mul16u::b#1 = mul16u::b#2 mulu16_sel::v2#5 mulu16_sel::v2#4 sin16s::x1#0 } { mul16u::a#2 = mul16u::a#6 mulu16_sel::v1#5 mulu16_sel::v1#4 sin16s::x4#0 } { mul16u::return#3 = mul16u::res#2 } } ) always clobbers reg byte a Statement [84] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a Statement [85] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a -Statement [86] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a +Statement [86] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a Statement [87] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a Statement [88] *((const nomodify byte*) RASTER) ← (byte) 0 [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a Statement [89] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a @@ -5694,7 +5727,7 @@ Statement [77] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::re Statement [79] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { mul16s::b#1 = mul16s::b#3 main::cos_x#0 } { mul16s::return#0 = mul16s::return#3 } { mul16u::b#0 = mul16u::b#2 } { mul16u::a#1 = mul16u::a#6 } { mul16u::return#2 = mul16u::res#2 } } main:3::mul16s:30::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { mul16s::b#2 = mul16s::b#3 main::sin_y#0 } { mul16s::return#0 = mul16s::return#4 } { mul16u::b#0 = mul16u::b#2 } { mul16u::a#1 = mul16u::a#6 } { mul16u::return#2 = mul16u::res#2 } } main:3::sin16s_gen2:6::mul16s:140::mul16u:57 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { mul16s::a#0 = mul16s::a#3 sin16s::return#0 } { mul16s::return#0 = mul16s::return#2 } { mul16u::b#0 = mul16u::b#2 } { mul16u::a#1 = mul16u::a#6 } { mul16u::return#2 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#0 = mulu16_sel::return#12 } { mul16u::a#2 = mul16u::a#6 mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#0 mulu16_sel::v1#5 mulu16_sel::v1#0 sin16s::x1#0 } { mul16u::return#3 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#1 = mulu16_sel::return#12 } { mul16u::b#1 = mul16u::b#2 mulu16_sel::v2#5 mulu16_sel::v2#1 sin16s::x1#0 } { mul16u::a#2 = mul16u::a#6 mulu16_sel::v1#5 mulu16_sel::v1#1 sin16s::x2#0 } { mul16u::return#3 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#12 = mulu16_sel::return#2 } { mul16u::b#1 = mul16u::b#2 mulu16_sel::v2#5 } { mul16u::a#2 = mul16u::a#6 mulu16_sel::v1#5 mulu16_sel::v1#2 sin16s::x3#0 } { mul16u::return#3 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#10 = mulu16_sel::return#12 } { mul16u::b#1 = mul16u::b#2 mulu16_sel::v2#5 mulu16_sel::v2#3 sin16s::x1#0 } { mul16u::a#2 = mul16u::a#6 mulu16_sel::v1#5 mulu16_sel::v1#3 sin16s::x3#0 } { mul16u::return#3 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#11 = mulu16_sel::return#12 } { mul16u::b#1 = mul16u::b#2 mulu16_sel::v2#5 mulu16_sel::v2#4 sin16s::x1#0 } { mul16u::a#2 = mul16u::a#6 mulu16_sel::v1#5 mulu16_sel::v1#4 sin16s::x4#0 } { mul16u::return#3 = mul16u::res#2 } } ) always clobbers reg byte a Statement [84] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a Statement [85] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a -Statement [86] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a +Statement [86] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a Statement [87] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a Statement [88] *((const nomodify byte*) RASTER) ← (byte) 0 [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a Statement [89] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a @@ -5881,6 +5914,7 @@ Uplift Scope [sin16s_gen2] 2,233: zp[2]:38 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] Uplift Scope [div32u16u] 2,002: zp[2]:215 [ div32u16u::quotient_lo#0 ] 400.4: zp[2]:211 [ div32u16u::quotient_hi#0 ] 367.33: zp[4]:217 [ div32u16u::return#0 ] 202: zp[4]:143 [ div32u16u::return#2 ] Uplift Scope [main] 212.82: zp[2]:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] 202: zp[2]:66 [ main::$19 ] 202: zp[2]:68 [ main::$21 ] 202: zp[2]:70 [ main::cos_x#0 ] 202: zp[4]:76 [ main::xpos#0 ] 202: zp[4]:80 [ main::$6 ] 202: zp[2]:84 [ main::$7 ] 202: zp[2]:88 [ main::$20 ] 202: zp[2]:90 [ main::$22 ] 202: zp[2]:92 [ main::sin_y#0 ] 202: zp[4]:98 [ main::ypos#0 ] 202: zp[4]:102 [ main::$10 ] 202: zp[2]:106 [ main::$11 ] 147.29: zp[2]:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] 50.5: zp[2]:108 [ main::y#0 ] 18.36: zp[2]:86 [ main::x#0 ] Uplift Scope [] 2,200.4: zp[2]:223 [ rem16u#1 ] 4.47: zp[1]:65 [ frame_cnt ] +Uplift Scope [MOS6526_CIA] Uplift Scope [bitmap_clear] Uplift Scope [init_irq] Uplift Scope [irq] @@ -5898,6 +5932,7 @@ Uplifting [sin16s_gen2] best 26843 combination zp[2]:38 [ sin16s_gen2::i#2 sin16 Uplifting [div32u16u] best 26843 combination zp[2]:215 [ div32u16u::quotient_lo#0 ] zp[2]:211 [ div32u16u::quotient_hi#0 ] zp[4]:217 [ div32u16u::return#0 ] zp[4]:143 [ div32u16u::return#2 ] Uplifting [main] best 26603 combination zp[2]:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] zp[2]:66 [ main::$19 ] zp[2]:68 [ main::$21 ] zp[2]:70 [ main::cos_x#0 ] zp[4]:76 [ main::xpos#0 ] zp[4]:80 [ main::$6 ] reg byte alu [ main::$7 ] zp[2]:88 [ main::$20 ] zp[2]:90 [ main::$22 ] zp[2]:92 [ main::sin_y#0 ] zp[4]:98 [ main::ypos#0 ] zp[4]:102 [ main::$10 ] reg byte alu [ main::$11 ] zp[2]:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] zp[2]:108 [ main::y#0 ] zp[2]:86 [ main::x#0 ] Uplifting [] best 26603 combination zp[2]:223 [ rem16u#1 ] zp[1]:65 [ frame_cnt ] +Uplifting [MOS6526_CIA] best 26603 combination Uplifting [bitmap_clear] best 26603 combination Uplifting [init_irq] best 26603 combination Uplifting [irq] best 26603 combination @@ -6027,8 +6062,8 @@ ASSEMBLER BEFORE OPTIMIZATION .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -6043,6 +6078,7 @@ ASSEMBLER BEFORE OPTIMIZATION // PI/2 in u[4.28] format .const PI_HALF_u4f28 = $1921fb54 .const SIZEOF_SIGNED_WORD = 2 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label BITMAP = $2000 .label SCREEN = $400 .label frame_cnt = $16 @@ -6605,10 +6641,10 @@ init_irq: { // [85] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [86] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [86] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [87] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 lda #$80 @@ -7817,7 +7853,7 @@ FINAL SYMBOL TABLE (const nomodify byte*) BGCOL = (byte*) 53281 (const byte*) BITMAP = (byte*) 8192 (const nomodify byte) BLACK = (byte) 0 -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte*) D018 = (byte*) 53272 @@ -7825,6 +7861,21 @@ FINAL SYMBOL TABLE (const nomodify byte*) IRQ_ENABLE = (byte*) 53274 (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 (const nomodify dword) PI_u4f28 = (dword) $3243f6a9 @@ -8246,8 +8297,8 @@ Score: 20648 .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -8262,6 +8313,7 @@ Score: 20648 // PI/2 in u[4.28] format .const PI_HALF_u4f28 = $1921fb54 .const SIZEOF_SIGNED_WORD = 2 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label BITMAP = $2000 .label SCREEN = $400 .label frame_cnt = $16 @@ -8793,11 +8845,11 @@ init_irq: { // [85] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR - // [86] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR + // [86] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL |=$80 // [87] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 diff --git a/src/test/ref/bitmap-plot-1.sym b/src/test/ref/bitmap-plot-1.sym index b90358e14..1f7efb64f 100644 --- a/src/test/ref/bitmap-plot-1.sym +++ b/src/test/ref/bitmap-plot-1.sym @@ -5,7 +5,7 @@ (const nomodify byte*) BGCOL = (byte*) 53281 (const byte*) BITMAP = (byte*) 8192 (const nomodify byte) BLACK = (byte) 0 -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte*) D018 = (byte*) 53272 @@ -13,6 +13,21 @@ (const nomodify byte*) IRQ_ENABLE = (byte*) 53274 (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 (const nomodify dword) PI_u4f28 = (dword) $3243f6a9 diff --git a/src/test/ref/bitmap-plot-2.asm b/src/test/ref/bitmap-plot-2.asm index e2fc444d3..33ee65dd3 100644 --- a/src/test/ref/bitmap-plot-2.asm +++ b/src/test/ref/bitmap-plot-2.asm @@ -26,8 +26,8 @@ .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -42,6 +42,7 @@ // PI/2 in u[4.28] format .const PI_HALF_u4f28 = $1921fb54 .const SIZEOF_SIGNED_WORD = 2 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label BITMAP = $2000 .label SCREEN = $400 .label frame_cnt = $1b @@ -458,10 +459,10 @@ init_irq: { // *PROCPORT = PROCPORT_RAM_IO lda #PROCPORT_RAM_IO sta PROCPORT - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL |=$80 // Set raster line to $100 lda #$80 diff --git a/src/test/ref/bitmap-plot-2.cfg b/src/test/ref/bitmap-plot-2.cfg index 8a9842cd3..b4f9a1f90 100644 --- a/src/test/ref/bitmap-plot-2.cfg +++ b/src/test/ref/bitmap-plot-2.cfg @@ -186,7 +186,7 @@ init_irq: scope:[init_irq] from main::@8 asm { sei } [93] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [94] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [95] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [95] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [96] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 [97] *((const nomodify byte*) RASTER) ← (byte) 0 [98] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER diff --git a/src/test/ref/bitmap-plot-2.log b/src/test/ref/bitmap-plot-2.log index 3a17ece93..ffd7dde14 100644 --- a/src/test/ref/bitmap-plot-2.log +++ b/src/test/ref/bitmap-plot-2.log @@ -2,6 +2,9 @@ Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference irq to interrupt(HARDWARE_CLOBBER)(void()) irq() +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$3 ← call toD018 (const byte*) SCREEN (const byte*) BITMAP @@ -924,7 +927,7 @@ init_irq: scope:[init_irq] from main::@11 asm { sei } *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (number) $80 *((const nomodify byte*) RASTER) ← (number) 0 *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -980,7 +983,7 @@ SYMBOL TABLE SSA (const byte*) BITMAP = (byte*)(number) $2000 (const nomodify byte) BLACK = (byte) 0 (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 -(const nomodify byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D011 = (byte*)(number) $d011 (const nomodify byte*) D018 = (byte*)(number) $d018 @@ -988,6 +991,21 @@ SYMBOL TABLE SSA (const nomodify byte*) IRQ_ENABLE = (byte*)(number) $d01a (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*)(number) $d019 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 (const nomodify dword) PI_u4f28 = (dword) $3243f6a9 @@ -1938,7 +1956,7 @@ Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 53273 Simplifying constant pointer cast (byte*) 53274 -Simplifying constant pointer cast (byte*) 56333 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 Simplifying constant pointer cast (void()**) 65534 Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 1024 @@ -2989,7 +3007,7 @@ init_irq: scope:[init_irq] from main::@8 asm { sei } [93] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [94] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [95] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [95] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [96] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 [97] *((const nomodify byte*) RASTER) ← (byte) 0 [98] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -3284,6 +3302,20 @@ irq::@return: scope:[irq] from irq::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (byte) bitmap_clear::bgcol (byte) bitmap_clear::col @@ -3880,8 +3912,8 @@ Target platform is c64basic / MOS6502X .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -3896,6 +3928,7 @@ Target platform is c64basic / MOS6502X // PI/2 in u[4.28] format .const PI_HALF_u4f28 = $1921fb54 .const SIZEOF_SIGNED_WORD = 2 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label BITMAP = $2000 .label SCREEN = $400 .label frame_cnt = $44 @@ -4608,10 +4641,10 @@ init_irq: { // [94] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [95] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [95] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [96] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 lda #$80 @@ -5834,7 +5867,7 @@ Statement [86] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::re Statement [88] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { mul16s::a#1 = mul16s::a#3 main::r#10 } { mul16s::b#1 = mul16s::b#3 main::cos_x#0 } { mul16s::return#0 = mul16s::return#3 } { mul16u::b#0 = mul16u::b#2 } { mul16u::a#1 = mul16u::a#6 } { mul16u::return#2 = mul16u::res#2 } } main:3::mul16s:32::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { mul16s::a#2 = mul16s::a#3 main::r#10 } { mul16s::b#2 = mul16s::b#3 main::sin_y#0 } { mul16s::return#0 = mul16s::return#4 } { mul16u::b#0 = mul16u::b#2 } { mul16u::a#1 = mul16u::a#6 } { mul16u::return#2 = mul16u::res#2 } } main:3::sin16s_gen2:6::mul16s:149::mul16u:66 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { mul16s::a#0 = mul16s::a#3 sin16s::return#0 } { mul16s::return#0 = mul16s::return#2 } { mul16u::b#0 = mul16u::b#2 } { mul16u::a#1 = mul16u::a#6 } { mul16u::return#2 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#0 = mulu16_sel::return#12 } { mul16u::a#2 = mul16u::a#6 mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#0 mulu16_sel::v1#5 mulu16_sel::v1#0 sin16s::x1#0 } { mul16u::return#3 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#1 = mulu16_sel::return#12 } { mul16u::b#1 = mul16u::b#2 mulu16_sel::v2#5 mulu16_sel::v2#1 sin16s::x1#0 } { mul16u::a#2 = mul16u::a#6 mulu16_sel::v1#5 mulu16_sel::v1#1 sin16s::x2#0 } { mul16u::return#3 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#12 = mulu16_sel::return#2 } { mul16u::b#1 = mul16u::b#2 mulu16_sel::v2#5 } { mul16u::a#2 = mul16u::a#6 mulu16_sel::v1#5 mulu16_sel::v1#2 sin16s::x3#0 } { mul16u::return#3 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#10 = mulu16_sel::return#12 } { mul16u::b#1 = mul16u::b#2 mulu16_sel::v2#5 mulu16_sel::v2#3 sin16s::x1#0 } { mul16u::a#2 = mul16u::a#6 mulu16_sel::v1#5 mulu16_sel::v1#3 sin16s::x3#0 } { mul16u::return#3 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#11 = mulu16_sel::return#12 } { mul16u::b#1 = mul16u::b#2 mulu16_sel::v2#5 mulu16_sel::v2#4 sin16s::x1#0 } { mul16u::a#2 = mul16u::a#6 mulu16_sel::v1#5 mulu16_sel::v1#4 sin16s::x4#0 } { mul16u::return#3 = mul16u::res#2 } } ) always clobbers reg byte a Statement [93] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a Statement [94] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a -Statement [95] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a +Statement [95] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a Statement [96] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a Statement [97] *((const nomodify byte*) RASTER) ← (byte) 0 [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a Statement [98] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a @@ -5969,7 +6002,7 @@ Statement [86] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::re Statement [88] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { mul16s::a#1 = mul16s::a#3 main::r#10 } { mul16s::b#1 = mul16s::b#3 main::cos_x#0 } { mul16s::return#0 = mul16s::return#3 } { mul16u::b#0 = mul16u::b#2 } { mul16u::a#1 = mul16u::a#6 } { mul16u::return#2 = mul16u::res#2 } } main:3::mul16s:32::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { mul16s::a#2 = mul16s::a#3 main::r#10 } { mul16s::b#2 = mul16s::b#3 main::sin_y#0 } { mul16s::return#0 = mul16s::return#4 } { mul16u::b#0 = mul16u::b#2 } { mul16u::a#1 = mul16u::a#6 } { mul16u::return#2 = mul16u::res#2 } } main:3::sin16s_gen2:6::mul16s:149::mul16u:66 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { mul16s::a#0 = mul16s::a#3 sin16s::return#0 } { mul16s::return#0 = mul16s::return#2 } { mul16u::b#0 = mul16u::b#2 } { mul16u::a#1 = mul16u::a#6 } { mul16u::return#2 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#0 = mulu16_sel::return#12 } { mul16u::a#2 = mul16u::a#6 mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#0 mulu16_sel::v1#5 mulu16_sel::v1#0 sin16s::x1#0 } { mul16u::return#3 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#1 = mulu16_sel::return#12 } { mul16u::b#1 = mul16u::b#2 mulu16_sel::v2#5 mulu16_sel::v2#1 sin16s::x1#0 } { mul16u::a#2 = mul16u::a#6 mulu16_sel::v1#5 mulu16_sel::v1#1 sin16s::x2#0 } { mul16u::return#3 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#12 = mulu16_sel::return#2 } { mul16u::b#1 = mul16u::b#2 mulu16_sel::v2#5 } { mul16u::a#2 = mul16u::a#6 mulu16_sel::v1#5 mulu16_sel::v1#2 sin16s::x3#0 } { mul16u::return#3 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#10 = mulu16_sel::return#12 } { mul16u::b#1 = mul16u::b#2 mulu16_sel::v2#5 mulu16_sel::v2#3 sin16s::x1#0 } { mul16u::a#2 = mul16u::a#6 mulu16_sel::v1#5 mulu16_sel::v1#3 sin16s::x3#0 } { mul16u::return#3 = mul16u::res#2 } } main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen2::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::return#11 = mulu16_sel::return#12 } { mul16u::b#1 = mul16u::b#2 mulu16_sel::v2#5 mulu16_sel::v2#4 sin16s::x1#0 } { mul16u::a#2 = mul16u::a#6 mulu16_sel::v1#5 mulu16_sel::v1#4 sin16s::x4#0 } { mul16u::return#3 = mul16u::res#2 } } ) always clobbers reg byte a Statement [93] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a Statement [94] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a -Statement [95] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a +Statement [95] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a Statement [96] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a Statement [97] *((const nomodify byte*) RASTER) ← (byte) 0 [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a Statement [98] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:3::init_irq:14 [ frame_cnt ] { } ) always clobbers reg byte a @@ -6158,6 +6191,7 @@ Uplift Scope [sin16s_gen2] 2,233: zp[2]:41 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] Uplift Scope [div32u16u] 2,002: zp[2]:214 [ div32u16u::quotient_lo#0 ] 400.4: zp[2]:210 [ div32u16u::quotient_hi#0 ] 367.33: zp[4]:216 [ div32u16u::return#0 ] 202: zp[4]:142 [ div32u16u::return#2 ] Uplift Scope [main] 372.11: zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] 202: zp[2]:69 [ main::$26 ] 202: zp[2]:71 [ main::$30 ] 202: zp[4]:79 [ main::xpos#0 ] 202: zp[2]:85 [ main::$7 ] 202: zp[2]:89 [ main::$27 ] 202: zp[2]:91 [ main::$31 ] 202: zp[4]:99 [ main::ypos#0 ] 202: zp[2]:105 [ main::$11 ] 139.77: zp[2]:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] 139.63: zp[2]:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] 101: zp[2]:73 [ main::cos_x#0 ] 101: zp[2]:83 [ main::$28 ] 101: zp[2]:93 [ main::sin_y#0 ] 101: zp[2]:103 [ main::$29 ] 62.04: zp[2]:4 [ main::r#10 main::r#1 ] 50.5: zp[2]:107 [ main::y#0 ] 8.42: zp[2]:87 [ main::x#0 ] Uplift Scope [] 2,200.4: zp[2]:222 [ rem16u#1 ] 3.82: zp[1]:68 [ frame_cnt ] +Uplift Scope [MOS6526_CIA] Uplift Scope [bitmap_clear] Uplift Scope [init_irq] Uplift Scope [irq] @@ -6175,6 +6209,7 @@ Uplifting [sin16s_gen2] best 26768 combination zp[2]:41 [ sin16s_gen2::i#2 sin16 Uplifting [div32u16u] best 26768 combination zp[2]:214 [ div32u16u::quotient_lo#0 ] zp[2]:210 [ div32u16u::quotient_hi#0 ] zp[4]:216 [ div32u16u::return#0 ] zp[4]:142 [ div32u16u::return#2 ] Uplifting [main] best 26768 combination zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] zp[2]:69 [ main::$26 ] zp[2]:71 [ main::$30 ] zp[4]:79 [ main::xpos#0 ] zp[2]:85 [ main::$7 ] zp[2]:89 [ main::$27 ] zp[2]:91 [ main::$31 ] zp[4]:99 [ main::ypos#0 ] zp[2]:105 [ main::$11 ] zp[2]:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] zp[2]:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] zp[2]:73 [ main::cos_x#0 ] zp[2]:83 [ main::$28 ] zp[2]:93 [ main::sin_y#0 ] zp[2]:103 [ main::$29 ] zp[2]:4 [ main::r#10 main::r#1 ] zp[2]:107 [ main::y#0 ] zp[2]:87 [ main::x#0 ] Uplifting [] best 26768 combination zp[2]:222 [ rem16u#1 ] zp[1]:68 [ frame_cnt ] +Uplifting [MOS6526_CIA] best 26768 combination Uplifting [bitmap_clear] best 26768 combination Uplifting [init_irq] best 26768 combination Uplifting [irq] best 26768 combination @@ -6309,8 +6344,8 @@ ASSEMBLER BEFORE OPTIMIZATION .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -6325,6 +6360,7 @@ ASSEMBLER BEFORE OPTIMIZATION // PI/2 in u[4.28] format .const PI_HALF_u4f28 = $1921fb54 .const SIZEOF_SIGNED_WORD = 2 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label BITMAP = $2000 .label SCREEN = $400 .label frame_cnt = $1b @@ -6946,10 +6982,10 @@ init_irq: { // [94] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [95] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [95] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [96] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 lda #$80 @@ -8177,7 +8213,7 @@ FINAL SYMBOL TABLE (const byte*) BITMAP = (byte*) 8192 (const nomodify byte) BLACK = (byte) 0 (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte*) D018 = (byte*) 53272 @@ -8185,6 +8221,21 @@ FINAL SYMBOL TABLE (const nomodify byte*) IRQ_ENABLE = (byte*) 53274 (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 (const nomodify dword) PI_u4f28 = (dword) $3243f6a9 @@ -8619,8 +8670,8 @@ Score: 20833 .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -8635,6 +8686,7 @@ Score: 20833 // PI/2 in u[4.28] format .const PI_HALF_u4f28 = $1921fb54 .const SIZEOF_SIGNED_WORD = 2 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label BITMAP = $2000 .label SCREEN = $400 .label frame_cnt = $1b @@ -9221,11 +9273,11 @@ init_irq: { // [94] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR - // [95] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR + // [95] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL |=$80 // [96] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 diff --git a/src/test/ref/bitmap-plot-2.sym b/src/test/ref/bitmap-plot-2.sym index b2286877a..52e38d7e3 100644 --- a/src/test/ref/bitmap-plot-2.sym +++ b/src/test/ref/bitmap-plot-2.sym @@ -6,7 +6,7 @@ (const byte*) BITMAP = (byte*) 8192 (const nomodify byte) BLACK = (byte) 0 (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte*) D018 = (byte*) 53272 @@ -14,6 +14,21 @@ (const nomodify byte*) IRQ_ENABLE = (byte*) 53274 (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 (const nomodify dword) PI_u4f28 = (dword) $3243f6a9 diff --git a/src/test/ref/bitmap-plot-3.log b/src/test/ref/bitmap-plot-3.log index e173ea943..745092333 100644 --- a/src/test/ref/bitmap-plot-3.log +++ b/src/test/ref/bitmap-plot-3.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$2 ← call toD018 (const byte*) SCREEN (const byte*) BITMAP @@ -591,6 +593,20 @@ SYMBOL TABLE SSA (const byte*) COSTAB = (const byte*) SINTAB+(number) $40 (const nomodify byte*) D011 = (byte*)(number) $d011 (const nomodify byte*) D018 = (byte*)(number) $d018 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1988,6 +2004,20 @@ bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (word()) abs_u16((word) abs_u16::w) (byte~) abs_u16::$0 20002.0 (byte~) abs_u16::$1 20002.0 @@ -3425,6 +3455,7 @@ Uplift Scope [sgn_u16] 20,002: zp[1]:64 [ sgn_u16::$0 ] 20,002: zp[1]:65 [ sgn_u Uplift Scope [memset] 35,672.33: zp[2]:26 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 1,833.67: zp[2]:68 [ memset::end#0 ] 1,250.12: zp[1]:25 [ memset::c#4 ] 1,001: zp[2]:21 [ memset::num#2 ] 0: zp[2]:23 [ memset::str#3 ] Uplift Scope [bitmap_init] 3,628.62: zp[2]:31 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 3,169.83: zp[1]:28 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 2,002: zp[1]:29 [ bitmap_init::x#2 bitmap_init::x#1 ] 2,002: zp[1]:30 [ bitmap_init::y#2 bitmap_init::y#1 ] 2,002: zp[1]:71 [ bitmap_init::$4 ] 2,002: zp[1]:72 [ bitmap_init::$5 ] 2,002: zp[1]:73 [ bitmap_init::$6 ] 500.5: zp[1]:70 [ bitmap_init::$7 ] Uplift Scope [main] 232.3: zp[1]:2 [ main::i#2 main::i#1 ] 202: zp[2]:33 [ main::$13 ] 202: zp[2]:35 [ main::$14 ] 123.44: zp[1]:3 [ main::a#2 main::a#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [bitmap_clear] Uplift Scope [RADIX] Uplift Scope [] @@ -3437,6 +3468,7 @@ Uplifting [memset] best 33028 combination zp[2]:26 [ memset::dst#2 memset::dst#4 Uplifting [bitmap_init] best 32518 combination zp[2]:31 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp[1]:72 [ bitmap_init::$5 ] zp[1]:73 [ bitmap_init::$6 ] zp[1]:70 [ bitmap_init::$7 ] Limited combination testing to 100 combinations of 15360 possible. Uplifting [main] best 32518 combination zp[1]:2 [ main::i#2 main::i#1 ] zp[2]:33 [ main::$13 ] zp[2]:35 [ main::$14 ] zp[1]:3 [ main::a#2 main::a#1 ] +Uplifting [MOS6526_CIA] best 32518 combination Uplifting [bitmap_clear] best 32518 combination Uplifting [RADIX] best 32518 combination Uplifting [] best 32518 combination @@ -4477,6 +4509,20 @@ FINAL SYMBOL TABLE (const byte*) COSTAB = (const byte*) SINTAB+(byte) $40 (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte*) D018 = (byte*) 53272 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/bitmap-plot-3.sym b/src/test/ref/bitmap-plot-3.sym index f99c51033..004167796 100644 --- a/src/test/ref/bitmap-plot-3.sym +++ b/src/test/ref/bitmap-plot-3.sym @@ -5,6 +5,20 @@ (const byte*) COSTAB = (const byte*) SINTAB+(byte) $40 (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte*) D018 = (byte*) 53272 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/c64dtv-8bppcharstretch.asm b/src/test/ref/c64dtv-8bppcharstretch.asm index 4a07e5407..4f9e7d016 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.asm +++ b/src/test/ref/c64dtv-8bppcharstretch.asm @@ -24,10 +24,8 @@ .const VIC_MCM = $10 .const VIC_CSEL = 8 .label VIC_MEMORY = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Feature enables or disables the extra C64 DTV features .label DTV_FEATURE = $d03f .const DTV_FEATURE_ENABLE = 1 @@ -57,6 +55,7 @@ .label SCREEN = $7c00 // Plane with all pixels .label CHARSET8 = $8000 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 main: { // asm sei @@ -117,14 +116,14 @@ main: { sta DTV_PLANEB_MODULO_LO // *DTV_PLANEB_MODULO_HI = 0 sta DTV_PLANEB_MODULO_HI - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)SCREEN/$4000) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)SCREEN/$4000) // Set VIC Bank bits to output - all others to input lda #3^SCREEN/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_MEMORY = (byte)((((word)SCREEN)&$3fff)/$40) | ((>(((word)SCREEN)&$3fff))/4) // Set VIC Bank // VIC memory diff --git a/src/test/ref/c64dtv-8bppcharstretch.cfg b/src/test/ref/c64dtv-8bppcharstretch.cfg index 4a0039f71..a04ce5c07 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.cfg +++ b/src/test/ref/c64dtv-8bppcharstretch.cfg @@ -32,8 +32,8 @@ main::@6: scope:[main] from main [21] *((const nomodify byte*) DTV_PLANEB_STEP) ← (byte) 0 [22] *((const nomodify byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0 [23] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 - [24] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [25] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) SCREEN/(word) $4000 + [24] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [25] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) SCREEN/(word) $4000 [26] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) SCREEN&(word) $3fff/(byte) $40|>(word)(const nomodify byte*) SCREEN&(word) $3fff/(byte) 4 to:main::@1 main::@1: scope:[main] from main::@1 main::@6 diff --git a/src/test/ref/c64dtv-8bppcharstretch.log b/src/test/ref/c64dtv-8bppcharstretch.log index 49df62f33..79a361564 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.log +++ b/src/test/ref/c64dtv-8bppcharstretch.log @@ -1,3 +1,7 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -38,8 +42,8 @@ main::@7: scope:[main] from main *((const nomodify byte*) DTV_PLANEB_STEP) ← (number) 0 *((const nomodify byte*) DTV_PLANEB_MODULO_LO) ← (number) 0 *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (number) 0 - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 - *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) SCREEN/(number) $4000 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) SCREEN/(number) $4000 *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) SCREEN&(number) $3fff/(number) $40|>(word)(const nomodify byte*) SCREEN&(number) $3fff/(number) 4 (byte) main::j#0 ← (byte) 0 to:main::@1 @@ -248,8 +252,7 @@ SYMBOL TABLE SSA (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 (const nomodify byte*) CHARGEN = (byte*)(number) $d000 (const nomodify byte*) CHARSET8 = (byte*)(number) $8000 -(const nomodify byte*) CIA2_PORT_A = (byte*)(number) $dd00 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const nomodify byte) DTV_BADLINE_OFF = (byte) $20 (const nomodify byte) DTV_CHUNKY = (byte) $40 (const nomodify byte*) DTV_CONTROL = (byte*)(number) $d03c @@ -270,6 +273,22 @@ SYMBOL TABLE SSA (const nomodify byte*) DTV_PLANEB_START_LO = (byte*)(number) $d049 (const nomodify byte*) DTV_PLANEB_START_MI = (byte*)(number) $d04a (const nomodify byte*) DTV_PLANEB_STEP = (byte*)(number) $d04c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*)(number) 1 (const nomodify byte*) PROCPORT_DDR = (byte*)(number) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 @@ -444,10 +463,10 @@ Adding number conversion cast (unumber) 0 in *((const nomodify byte*) DTV_PLANEB Adding number conversion cast (unumber) 0 in *((const nomodify byte*) DTV_PLANEB_STEP) ← (number) 0 Adding number conversion cast (unumber) 0 in *((const nomodify byte*) DTV_PLANEB_MODULO_LO) ← (number) 0 Adding number conversion cast (unumber) 0 in *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (number) 0 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 -Adding number conversion cast (unumber) 3^(byte)(word)SCREEN/$4000 in *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) SCREEN/(number) $4000 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) SCREEN/(number) $4000 -Adding number conversion cast (unumber) $4000 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) SCREEN/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3^(byte)(word)SCREEN/$4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) SCREEN/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) SCREEN/(number) $4000 +Adding number conversion cast (unumber) $4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) SCREEN/(number) $4000 Adding number conversion cast (unumber) (byte)(word)SCREEN&$3fff/$40|>(word)SCREEN&$3fff/4 in *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) SCREEN&(number) $3fff/(number) $40|>(word)(const nomodify byte*) SCREEN&(number) $3fff/(number) 4 Adding number conversion cast (unumber) >(word)SCREEN&$3fff/4 in *((const nomodify byte*) VIC_MEMORY) ← ((unumber)) (byte)(word)(const nomodify byte*) SCREEN&(number) $3fff/(number) $40|>(word)(const nomodify byte*) SCREEN&(number) $3fff/(number) 4 Adding number conversion cast (unumber) $3fff in *((const nomodify byte*) VIC_MEMORY) ← ((unumber)) (byte)(word)(const nomodify byte*) SCREEN&(number) $3fff/(number) $40|(unumber)>(word)(const nomodify byte*) SCREEN&(number) $3fff/(number) 4 @@ -490,8 +509,8 @@ Inlining cast *((const nomodify byte*) DTV_PLANEB_START_HI) ← (unumber)(number Inlining cast *((const nomodify byte*) DTV_PLANEB_STEP) ← (unumber)(number) 0 Inlining cast *((const nomodify byte*) DTV_PLANEB_MODULO_LO) ← (unumber)(number) 0 Inlining cast *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (unumber)(number) 0 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 -Inlining cast *((const nomodify byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) SCREEN/(unumber)(number) $4000 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) SCREEN/(unumber)(number) $4000 Inlining cast *((const nomodify byte*) VIC_MEMORY) ← (unumber)(byte)(word)(const nomodify byte*) SCREEN&(unumber)(number) $3fff/(unumber)(number) $40|(unumber)>(word)(const nomodify byte*) SCREEN&(unumber)(number) $3fff/(unumber)(number) 4 Inlining cast *((const nomodify byte*) VIC_CONTROL) ← (unumber)(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_ECM|(const nomodify byte) VIC_RSEL|(unumber)(number) 3 Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) 0 @@ -504,8 +523,7 @@ Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53270 Simplifying constant pointer cast (byte*) 53272 -Simplifying constant pointer cast (byte*) 56576 -Simplifying constant pointer cast (byte*) 56578 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (byte*) 53311 Simplifying constant pointer cast (byte*) 53308 Simplifying constant pointer cast (byte*) 53760 @@ -683,8 +701,10 @@ Simplifying constant evaluating to zero <(const nomodify byte*) SCREEN in [12] * Simplifying constant evaluating to zero <(const nomodify byte*) CHARSET8 in [18] *((const nomodify byte*) DTV_PLANEB_START_LO) ← <(const nomodify byte*) CHARSET8 Successful SSA optimization PassNSimplifyConstantZero Simplifying expression containing zero $4000 in +Simplifying expression containing zero (byte*)CIA2 in [25] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) SCREEN/(word) $4000 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused variable (byte) gfx_init_plane_charset8::gfxbCpuBank#1 and assignment [62] (byte) gfx_init_plane_charset8::gfxbCpuBank#1 ← ++ (const byte) gfx_init_plane_charset8::gfxbCpuBank#0 +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks @@ -850,8 +870,8 @@ main::@6: scope:[main] from main [21] *((const nomodify byte*) DTV_PLANEB_STEP) ← (byte) 0 [22] *((const nomodify byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0 [23] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 - [24] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [25] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) SCREEN/(word) $4000 + [24] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [25] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) SCREEN/(word) $4000 [26] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) SCREEN&(word) $3fff/(byte) $40|>(word)(const nomodify byte*) SCREEN&(word) $3fff/(byte) 4 to:main::@1 main::@1: scope:[main] from main::@1 main::@6 @@ -993,6 +1013,20 @@ gfx_init_screen0::@return: scope:[gfx_init_screen0] from gfx_init_screen0::@3 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx) (byte) dtvSetCpuBankSegment1::cpuBankIdx (byte) dtvSetCpuBankSegment1::cpuBankIdx#2 10001.0 @@ -1155,10 +1189,8 @@ Target platform is c64basic / MOS6502X .const VIC_MCM = $10 .const VIC_CSEL = 8 .label VIC_MEMORY = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Feature enables or disables the extra C64 DTV features .label DTV_FEATURE = $d03f .const DTV_FEATURE_ENABLE = 1 @@ -1188,6 +1220,7 @@ Target platform is c64basic / MOS6502X .label SCREEN = $7c00 // Plane with all pixels .label CHARSET8 = $8000 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -1278,14 +1311,14 @@ main: { // [23] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_PLANEB_MODULO_HI - // [24] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [24] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [25] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) SCREEN/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [25] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) SCREEN/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^SCREEN/$4000 - sta CIA2_PORT_A + sta CIA2 // [26] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) SCREEN&(word) $3fff/(byte) $40|>(word)(const nomodify byte*) SCREEN&(word) $3fff/(byte) 4 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC memory @@ -1778,8 +1811,8 @@ Statement [20] *((const nomodify byte*) DTV_PLANEB_START_HI) ← (byte) 0 [ ] ( Statement [21] *((const nomodify byte*) DTV_PLANEB_STEP) ← (byte) 0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [22] *((const nomodify byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [23] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [24] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [25] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) SCREEN/(word) $4000 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [24] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [25] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) SCREEN/(word) $4000 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [26] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) SCREEN&(word) $3fff/(byte) $40|>(word)(const nomodify byte*) SCREEN&(word) $3fff/(byte) 4 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize } always clobbers reg byte x Statement [32] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_ECM|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a @@ -1827,8 +1860,8 @@ Statement [20] *((const nomodify byte*) DTV_PLANEB_START_HI) ← (byte) 0 [ ] ( Statement [21] *((const nomodify byte*) DTV_PLANEB_STEP) ← (byte) 0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [22] *((const nomodify byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [23] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [24] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [25] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) SCREEN/(word) $4000 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [24] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [25] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) SCREEN/(word) $4000 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [26] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) SCREEN&(word) $3fff/(byte) $40|>(word)(const nomodify byte*) SCREEN&(word) $3fff/(byte) 4 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize } always clobbers reg byte x Statement [32] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_ECM|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a @@ -1874,6 +1907,7 @@ Uplift Scope [gfx_init_plane_charset8] 4,000,004: zp[1]:12 [ gfx_init_plane_char Uplift Scope [gfx_init_screen0] 200,002: zp[1]:23 [ gfx_init_screen0::$0 ] 200,002: zp[1]:25 [ gfx_init_screen0::$2 ] 200,002: zp[1]:26 [ gfx_init_screen0::$3 ] 192,859.07: zp[1]:15 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] 113,669.93: zp[2]:16 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ] 100,001: zp[1]:24 [ gfx_init_screen0::$1 ] 27,001.8: zp[1]:14 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ] Uplift Scope [dtvSetCpuBankSegment1] 10,001: zp[1]:13 [ dtvSetCpuBankSegment1::cpuBankIdx#2 ] Uplift Scope [main] 2,002: zp[1]:19 [ main::$3 ] 2,002: zp[1]:20 [ main::$4 ] 2,002: zp[1]:21 [ main::$5 ] 572: zp[1]:18 [ main::rst#1 ] 353.5: zp[1]:2 [ main::j#2 main::j#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [gfx_init] Uplift Scope [] @@ -1884,6 +1918,7 @@ Limited combination testing to 100 combinations of 768 possible. Uplifting [dtvSetCpuBankSegment1] best 95585 combination reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#2 ] Uplifting [main] best 92985 combination reg byte a [ main::$3 ] reg byte a [ main::$4 ] reg byte a [ main::$5 ] reg byte x [ main::rst#1 ] zp[1]:2 [ main::j#2 main::j#1 ] Limited combination testing to 100 combinations of 768 possible. +Uplifting [MOS6526_CIA] best 92985 combination Uplifting [gfx_init] best 92985 combination Uplifting [] best 92985 combination Attempting to uplift remaining variables inzp[1]:7 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] @@ -1940,10 +1975,8 @@ ASSEMBLER BEFORE OPTIMIZATION .const VIC_MCM = $10 .const VIC_CSEL = 8 .label VIC_MEMORY = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Feature enables or disables the extra C64 DTV features .label DTV_FEATURE = $d03f .const DTV_FEATURE_ENABLE = 1 @@ -1973,6 +2006,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label SCREEN = $7c00 // Plane with all pixels .label CHARSET8 = $8000 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -2058,14 +2092,14 @@ main: { // [23] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_PLANEB_MODULO_HI - // [24] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [24] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [25] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) SCREEN/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [25] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) SCREEN/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^SCREEN/$4000 - sta CIA2_PORT_A + sta CIA2 // [26] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) SCREEN&(word) $3fff/(byte) $40|>(word)(const nomodify byte*) SCREEN&(word) $3fff/(byte) 4 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC memory @@ -2602,8 +2636,7 @@ FINAL SYMBOL TABLE (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) CHARGEN = (byte*) 53248 (const nomodify byte*) CHARSET8 = (byte*) 32768 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte) DTV_BADLINE_OFF = (byte) $20 (const nomodify byte) DTV_CHUNKY = (byte) $40 (const nomodify byte*) DTV_CONTROL = (byte*) 53308 @@ -2624,6 +2657,21 @@ FINAL SYMBOL TABLE (const nomodify byte*) DTV_PLANEB_START_LO = (byte*) 53321 (const nomodify byte*) DTV_PLANEB_START_MI = (byte*) 53322 (const nomodify byte*) DTV_PLANEB_STEP = (byte*) 53324 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 @@ -2779,10 +2827,8 @@ Score: 75375 .const VIC_MCM = $10 .const VIC_CSEL = 8 .label VIC_MEMORY = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Feature enables or disables the extra C64 DTV features .label DTV_FEATURE = $d03f .const DTV_FEATURE_ENABLE = 1 @@ -2812,6 +2858,7 @@ Score: 75375 .label SCREEN = $7c00 // Plane with all pixels .label CHARSET8 = $8000 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 @@ -2901,16 +2948,16 @@ main: { // *DTV_PLANEB_MODULO_HI = 0 // [23] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 sta DTV_PLANEB_MODULO_HI - // *CIA2_PORT_A_DDR = %00000011 - // [24] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [24] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)SCREEN/$4000) - // [25] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) SCREEN/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)SCREEN/$4000) + // [25] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) SCREEN/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^SCREEN/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_MEMORY = (byte)((((word)SCREEN)&$3fff)/$40) | ((>(((word)SCREEN)&$3fff))/4) // [26] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) SCREEN&(word) $3fff/(byte) $40|>(word)(const nomodify byte*) SCREEN&(word) $3fff/(byte) 4 -- _deref_pbuc1=vbuc2 // Set VIC Bank diff --git a/src/test/ref/c64dtv-8bppcharstretch.sym b/src/test/ref/c64dtv-8bppcharstretch.sym index 3ab655656..8495acc41 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.sym +++ b/src/test/ref/c64dtv-8bppcharstretch.sym @@ -4,8 +4,7 @@ (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) CHARGEN = (byte*) 53248 (const nomodify byte*) CHARSET8 = (byte*) 32768 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte) DTV_BADLINE_OFF = (byte) $20 (const nomodify byte) DTV_CHUNKY = (byte) $40 (const nomodify byte*) DTV_CONTROL = (byte*) 53308 @@ -26,6 +25,21 @@ (const nomodify byte*) DTV_PLANEB_START_LO = (byte*) 53321 (const nomodify byte*) DTV_PLANEB_START_MI = (byte*) 53322 (const nomodify byte*) DTV_PLANEB_STEP = (byte*) 53324 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 diff --git a/src/test/ref/c64dtv-8bppchunkystretch.asm b/src/test/ref/c64dtv-8bppchunkystretch.asm index f70aba19b..14d5e78cc 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.asm +++ b/src/test/ref/c64dtv-8bppchunkystretch.asm @@ -20,10 +20,8 @@ .const VIC_MCM = $10 .const VIC_CSEL = 8 .label VIC_MEMORY = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Feature enables or disables the extra C64 DTV features .label DTV_FEATURE = $d03f .const DTV_FEATURE_ENABLE = 1 @@ -45,6 +43,7 @@ .label DTV_PLANEB_MODULO_HI = $d048 // Plane with all pixels .label CHUNKY = $8000 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 main: { // asm sei @@ -90,14 +89,14 @@ main: { sta DTV_PLANEB_MODULO_LO // *DTV_PLANEB_MODULO_HI = 0 sta DTV_PLANEB_MODULO_HI - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)CHUNKY/$4000) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)CHUNKY/$4000) // Set VIC Bank bits to output - all others to input lda #3^CHUNKY/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_MEMORY = (byte)((((word)CHUNKY)&$3fff)/$40) | ((>(((word)CHUNKY)&$3fff))/4) // Set VIC Bank // VIC memory diff --git a/src/test/ref/c64dtv-8bppchunkystretch.cfg b/src/test/ref/c64dtv-8bppchunkystretch.cfg index acf8a23ba..dad6a6248 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.cfg +++ b/src/test/ref/c64dtv-8bppchunkystretch.cfg @@ -26,8 +26,8 @@ main::@6: scope:[main] from main [15] *((const nomodify byte*) DTV_PLANEB_STEP) ← (byte) 8 [16] *((const nomodify byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0 [17] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 - [18] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [19] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) CHUNKY/(word) $4000 + [18] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [19] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) CHUNKY/(word) $4000 [20] *((const nomodify byte*) VIC_MEMORY) ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@1 main::@6 diff --git a/src/test/ref/c64dtv-8bppchunkystretch.log b/src/test/ref/c64dtv-8bppchunkystretch.log index 859f86f2c..69aad00db 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.log +++ b/src/test/ref/c64dtv-8bppchunkystretch.log @@ -1,3 +1,7 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -32,8 +36,8 @@ main::@7: scope:[main] from main *((const nomodify byte*) DTV_PLANEB_STEP) ← (number) 8 *((const nomodify byte*) DTV_PLANEB_MODULO_LO) ← (number) 0 *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (number) 0 - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 - *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) CHUNKY/(number) $4000 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) CHUNKY/(number) $4000 *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) CHUNKY&(number) $3fff/(number) $40|>(word)(const nomodify byte*) CHUNKY&(number) $3fff/(number) 4 (byte) main::j#0 ← (byte) 0 to:main::@1 @@ -161,8 +165,7 @@ SYMBOL TABLE SSA (label) @end (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 (const nomodify byte*) CHUNKY = (byte*)(number) $8000 -(const nomodify byte*) CIA2_PORT_A = (byte*)(number) $dd00 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const nomodify byte) DTV_BADLINE_OFF = (byte) $20 (const nomodify byte) DTV_CHUNKY = (byte) $40 (const nomodify byte) DTV_COLORRAM_OFF = (byte) $10 @@ -178,6 +181,22 @@ SYMBOL TABLE SSA (const nomodify byte*) DTV_PLANEB_START_LO = (byte*)(number) $d049 (const nomodify byte*) DTV_PLANEB_START_MI = (byte*)(number) $d04a (const nomodify byte*) DTV_PLANEB_STEP = (byte*)(number) $d04c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*)(number) 1 (const nomodify byte*) PROCPORT_DDR = (byte*)(number) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 @@ -282,10 +301,10 @@ Adding number conversion cast (unumber) 0 in *((const nomodify byte*) DTV_PLANEB Adding number conversion cast (unumber) 8 in *((const nomodify byte*) DTV_PLANEB_STEP) ← (number) 8 Adding number conversion cast (unumber) 0 in *((const nomodify byte*) DTV_PLANEB_MODULO_LO) ← (number) 0 Adding number conversion cast (unumber) 0 in *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (number) 0 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 -Adding number conversion cast (unumber) 3^(byte)(word)CHUNKY/$4000 in *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) CHUNKY/(number) $4000 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) CHUNKY/(number) $4000 -Adding number conversion cast (unumber) $4000 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) CHUNKY/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3^(byte)(word)CHUNKY/$4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) CHUNKY/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) CHUNKY/(number) $4000 +Adding number conversion cast (unumber) $4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) CHUNKY/(number) $4000 Adding number conversion cast (unumber) (byte)(word)CHUNKY&$3fff/$40|>(word)CHUNKY&$3fff/4 in *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) CHUNKY&(number) $3fff/(number) $40|>(word)(const nomodify byte*) CHUNKY&(number) $3fff/(number) 4 Adding number conversion cast (unumber) >(word)CHUNKY&$3fff/4 in *((const nomodify byte*) VIC_MEMORY) ← ((unumber)) (byte)(word)(const nomodify byte*) CHUNKY&(number) $3fff/(number) $40|>(word)(const nomodify byte*) CHUNKY&(number) $3fff/(number) 4 Adding number conversion cast (unumber) $3fff in *((const nomodify byte*) VIC_MEMORY) ← ((unumber)) (byte)(word)(const nomodify byte*) CHUNKY&(number) $3fff/(number) $40|(unumber)>(word)(const nomodify byte*) CHUNKY&(number) $3fff/(number) 4 @@ -310,8 +329,8 @@ Inlining cast *((const nomodify byte*) DTV_PLANEB_START_HI) ← (unumber)(number Inlining cast *((const nomodify byte*) DTV_PLANEB_STEP) ← (unumber)(number) 8 Inlining cast *((const nomodify byte*) DTV_PLANEB_MODULO_LO) ← (unumber)(number) 0 Inlining cast *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (unumber)(number) 0 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 -Inlining cast *((const nomodify byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) CHUNKY/(unumber)(number) $4000 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) CHUNKY/(unumber)(number) $4000 Inlining cast *((const nomodify byte*) VIC_MEMORY) ← (unumber)(byte)(word)(const nomodify byte*) CHUNKY&(unumber)(number) $3fff/(unumber)(number) $40|(unumber)>(word)(const nomodify byte*) CHUNKY&(unumber)(number) $3fff/(unumber)(number) 4 Inlining cast *((const nomodify byte*) VIC_CONTROL) ← (unumber)(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_ECM|(const nomodify byte) VIC_RSEL|(unumber)(number) 3 Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) 0 @@ -324,8 +343,7 @@ Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53270 Simplifying constant pointer cast (byte*) 53272 -Simplifying constant pointer cast (byte*) 56576 -Simplifying constant pointer cast (byte*) 56578 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (byte*) 53311 Simplifying constant pointer cast (byte*) 53308 Simplifying constant pointer cast (byte*) 53760 @@ -432,6 +450,10 @@ Resolved ranged comparison value [71] if(gfx_init_chunky::y#1!=rangelast(0,$32)) Simplifying constant evaluating to zero <(const nomodify byte*) CHUNKY in [12] *((const nomodify byte*) DTV_PLANEB_START_LO) ← <(const nomodify byte*) CHUNKY Simplifying constant evaluating to zero (byte)(word)(const nomodify byte*) CHUNKY&(word) $3fff/(byte) $40|>(word)(const nomodify byte*) CHUNKY&(word) $3fff/(byte) 4 in [20] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) CHUNKY&(word) $3fff/(byte) $40|>(word)(const nomodify byte*) CHUNKY&(word) $3fff/(byte) 4 Successful SSA optimization PassNSimplifyConstantZero +Simplifying expression containing zero (byte*)CIA2 in [19] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) CHUNKY/(word) $4000 +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A +Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks Adding number conversion cast (unumber) $10 in if((byte) main::j#1!=(number) $10) goto main::@1 @@ -555,8 +577,8 @@ main::@6: scope:[main] from main [15] *((const nomodify byte*) DTV_PLANEB_STEP) ← (byte) 8 [16] *((const nomodify byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0 [17] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 - [18] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [19] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) CHUNKY/(word) $4000 + [18] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [19] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) CHUNKY/(word) $4000 [20] *((const nomodify byte*) VIC_MEMORY) ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@1 main::@6 @@ -644,6 +666,20 @@ dtvSetCpuBankSegment1::@return: scope:[dtvSetCpuBankSegment1] from dtvSetCpuBan VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx) (byte) dtvSetCpuBankSegment1::cpuBankIdx (byte) dtvSetCpuBankSegment1::cpuBankIdx#1 20002.0 @@ -744,10 +780,8 @@ Target platform is c64basic / MOS6502X .const VIC_MCM = $10 .const VIC_CSEL = 8 .label VIC_MEMORY = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Feature enables or disables the extra C64 DTV features .label DTV_FEATURE = $d03f .const DTV_FEATURE_ENABLE = 1 @@ -769,6 +803,7 @@ Target platform is c64basic / MOS6502X .label DTV_PLANEB_MODULO_HI = $d048 // Plane with all pixels .label CHUNKY = $8000 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -840,14 +875,14 @@ main: { // [17] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_PLANEB_MODULO_HI - // [18] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [18] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [19] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) CHUNKY/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [19] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) CHUNKY/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHUNKY/$4000 - sta CIA2_PORT_A + sta CIA2 // [20] *((const nomodify byte*) VIC_MEMORY) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC memory @@ -1194,8 +1229,8 @@ Statement [14] *((const nomodify byte*) DTV_PLANEB_START_HI) ← (byte) 0 [ ] ( Statement [15] *((const nomodify byte*) DTV_PLANEB_STEP) ← (byte) 8 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [16] *((const nomodify byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [17] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [18] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [19] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) CHUNKY/(word) $4000 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [18] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [19] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) CHUNKY/(word) $4000 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [20] *((const nomodify byte*) VIC_MEMORY) ← (byte) 0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize } always clobbers reg byte x Statement [26] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_ECM|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a @@ -1226,8 +1261,8 @@ Statement [14] *((const nomodify byte*) DTV_PLANEB_START_HI) ← (byte) 0 [ ] ( Statement [15] *((const nomodify byte*) DTV_PLANEB_STEP) ← (byte) 8 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [16] *((const nomodify byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [17] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [18] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [19] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) CHUNKY/(word) $4000 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [18] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [19] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) CHUNKY/(word) $4000 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [20] *((const nomodify byte*) VIC_MEMORY) ← (byte) 0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize } always clobbers reg byte x Statement [26] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_ECM|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a @@ -1259,12 +1294,14 @@ REGISTER UPLIFT SCOPES Uplift Scope [dtvSetCpuBankSegment1] 130,004: zp[1]:9 [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ] Uplift Scope [gfx_init_chunky] 35,700.14: zp[1]:6 [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ] 29,205.35: zp[2]:7 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ] 20,002: zp[1]:16 [ gfx_init_chunky::c#0 ] 18,001.8: zp[2]:4 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ] 10,001: zp[2]:14 [ gfx_init_chunky::$5 ] 2,424.81: zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ] Uplift Scope [main] 2,002: zp[1]:11 [ main::$3 ] 2,002: zp[1]:12 [ main::$4 ] 2,002: zp[1]:13 [ main::$5 ] 572: zp[1]:10 [ main::rst#1 ] 353.5: zp[1]:2 [ main::j#2 main::j#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [] Uplifting [dtvSetCpuBankSegment1] best 26171 combination reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ] Uplifting [gfx_init_chunky] best 25141 combination reg byte x [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ] zp[2]:7 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ] reg byte a [ gfx_init_chunky::c#0 ] zp[2]:4 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ] zp[2]:14 [ gfx_init_chunky::$5 ] zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ] Uplifting [main] best 22541 combination reg byte a [ main::$3 ] reg byte a [ main::$4 ] reg byte a [ main::$5 ] reg byte x [ main::rst#1 ] zp[1]:2 [ main::j#2 main::j#1 ] Limited combination testing to 100 combinations of 768 possible. +Uplifting [MOS6526_CIA] best 22541 combination Uplifting [] best 22541 combination Attempting to uplift remaining variables inzp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ] Uplifting [gfx_init_chunky] best 22541 combination zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ] @@ -1301,10 +1338,8 @@ ASSEMBLER BEFORE OPTIMIZATION .const VIC_MCM = $10 .const VIC_CSEL = 8 .label VIC_MEMORY = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Feature enables or disables the extra C64 DTV features .label DTV_FEATURE = $d03f .const DTV_FEATURE_ENABLE = 1 @@ -1326,6 +1361,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label DTV_PLANEB_MODULO_HI = $d048 // Plane with all pixels .label CHUNKY = $8000 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -1392,14 +1428,14 @@ main: { // [17] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_PLANEB_MODULO_HI - // [18] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [18] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [19] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) CHUNKY/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [19] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) CHUNKY/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHUNKY/$4000 - sta CIA2_PORT_A + sta CIA2 // [20] *((const nomodify byte*) VIC_MEMORY) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC memory @@ -1784,8 +1820,7 @@ FINAL SYMBOL TABLE (label) @end (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) CHUNKY = (byte*) 32768 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte) DTV_BADLINE_OFF = (byte) $20 (const nomodify byte) DTV_CHUNKY = (byte) $40 (const nomodify byte) DTV_COLORRAM_OFF = (byte) $10 @@ -1801,6 +1836,21 @@ FINAL SYMBOL TABLE (const nomodify byte*) DTV_PLANEB_START_LO = (byte*) 53321 (const nomodify byte*) DTV_PLANEB_START_MI = (byte*) 53322 (const nomodify byte*) DTV_PLANEB_STEP = (byte*) 53324 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 @@ -1906,10 +1956,8 @@ Score: 19882 .const VIC_MCM = $10 .const VIC_CSEL = 8 .label VIC_MEMORY = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Feature enables or disables the extra C64 DTV features .label DTV_FEATURE = $d03f .const DTV_FEATURE_ENABLE = 1 @@ -1931,6 +1979,7 @@ Score: 19882 .label DTV_PLANEB_MODULO_HI = $d048 // Plane with all pixels .label CHUNKY = $8000 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 @@ -1999,16 +2048,16 @@ main: { // *DTV_PLANEB_MODULO_HI = 0 // [17] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 sta DTV_PLANEB_MODULO_HI - // *CIA2_PORT_A_DDR = %00000011 - // [18] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [18] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)CHUNKY/$4000) - // [19] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) CHUNKY/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)CHUNKY/$4000) + // [19] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) CHUNKY/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHUNKY/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_MEMORY = (byte)((((word)CHUNKY)&$3fff)/$40) | ((>(((word)CHUNKY)&$3fff))/4) // [20] *((const nomodify byte*) VIC_MEMORY) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Set VIC Bank diff --git a/src/test/ref/c64dtv-8bppchunkystretch.sym b/src/test/ref/c64dtv-8bppchunkystretch.sym index 56c84cb20..b5f73da99 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.sym +++ b/src/test/ref/c64dtv-8bppchunkystretch.sym @@ -3,8 +3,7 @@ (label) @end (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) CHUNKY = (byte*) 32768 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte) DTV_BADLINE_OFF = (byte) $20 (const nomodify byte) DTV_CHUNKY = (byte) $40 (const nomodify byte) DTV_COLORRAM_OFF = (byte) $10 @@ -20,6 +19,21 @@ (const nomodify byte*) DTV_PLANEB_START_LO = (byte*) 53321 (const nomodify byte*) DTV_PLANEB_START_MI = (byte*) 53322 (const nomodify byte*) DTV_PLANEB_STEP = (byte*) 53324 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 diff --git a/src/test/ref/c64dtv-blitter-box.log b/src/test/ref/c64dtv-blitter-box.log index d43f04903..8a3f01dbe 100644 --- a/src/test/ref/c64dtv-blitter-box.log +++ b/src/test/ref/c64dtv-blitter-box.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -100,6 +102,20 @@ SYMBOL TABLE SSA (const nomodify byte) DTV_BLIT_TRANSPARANCY_NONE = (byte) 0 (const nomodify byte*) DTV_FEATURE = (byte*)(number) $d03f (const nomodify byte) DTV_FEATURE_ENABLE = (byte) 1 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*)(number) $400 (const to_nomodify byte*) SRCA[] = (byte*) "camelot rules!" (const to_nomodify byte*) SRCB[] = { (byte) $80 } @@ -290,6 +306,20 @@ main::@return: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) main() (byte~) main::$0 202.0 @@ -557,9 +587,11 @@ Potential registers zp[1]:2 [ main::$0 ] : zp[1]:2 , reg byte a , reg byte x , r REGISTER UPLIFT SCOPES Uplift Scope [main] 202: zp[1]:2 [ main::$0 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [] Uplifting [main] best 348 combination reg byte a [ main::$0 ] +Uplifting [MOS6526_CIA] best 348 combination Uplifting [] best 348 combination ASSEMBLER BEFORE OPTIMIZATION @@ -849,6 +881,20 @@ FINAL SYMBOL TABLE (const nomodify byte) DTV_BLIT_TRANSPARANCY_NONE = (byte) 0 (const nomodify byte*) DTV_FEATURE = (byte*) 53311 (const nomodify byte) DTV_FEATURE_ENABLE = (byte) 1 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 1024 (const to_nomodify byte*) SRCA[] = (byte*) "camelot rules!" (const to_nomodify byte*) SRCB[] = { (byte) $80 } diff --git a/src/test/ref/c64dtv-blitter-box.sym b/src/test/ref/c64dtv-blitter-box.sym index f3ce767dc..10824d7c8 100644 --- a/src/test/ref/c64dtv-blitter-box.sym +++ b/src/test/ref/c64dtv-blitter-box.sym @@ -42,6 +42,20 @@ (const nomodify byte) DTV_BLIT_TRANSPARANCY_NONE = (byte) 0 (const nomodify byte*) DTV_FEATURE = (byte*) 53311 (const nomodify byte) DTV_FEATURE_ENABLE = (byte) 1 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 1024 (const to_nomodify byte*) SRCA[] = (byte*) "camelot rules!" (const to_nomodify byte*) SRCB[] = { (byte) $80 } diff --git a/src/test/ref/c64dtv-blittermin.log b/src/test/ref/c64dtv-blittermin.log index 99a61458d..96b31f80d 100644 --- a/src/test/ref/c64dtv-blittermin.log +++ b/src/test/ref/c64dtv-blittermin.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -109,6 +111,20 @@ SYMBOL TABLE SSA (const nomodify byte) DTV_BLIT_TRANSPARANCY_NONE = (byte) 0 (const nomodify byte*) DTV_FEATURE = (byte*)(number) $d03f (const nomodify byte) DTV_FEATURE_ENABLE = (byte) 1 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*)(number) $400 (const to_nomodify byte*) SRCA[] = { (byte) 'c', (byte) 'a', (byte) 'm', (byte) 'e', (byte) 'l', (byte) 'o', (byte) 't', (byte) '!', (byte) ' ' } (const nomodify byte) SRCA_LEN = (byte) 9 @@ -322,6 +338,20 @@ main::@return: scope:[main] from main::@2 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) main() (byte~) main::$0 2002.0 (byte) main::r @@ -655,9 +685,11 @@ Potential registers zp[1]:3 [ main::$0 ] : zp[1]:3 , reg byte a , reg byte x , r REGISTER UPLIFT SCOPES Uplift Scope [main] 2,002: zp[1]:3 [ main::$0 ] 702.5: zp[1]:2 [ main::r#2 main::r#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [] Uplifting [main] best 2515 combination reg byte a [ main::$0 ] reg byte x [ main::r#2 main::r#1 ] +Uplifting [MOS6526_CIA] best 2515 combination Uplifting [] best 2515 combination ASSEMBLER BEFORE OPTIMIZATION @@ -980,6 +1012,20 @@ FINAL SYMBOL TABLE (const nomodify byte) DTV_BLIT_TRANSPARANCY_NONE = (byte) 0 (const nomodify byte*) DTV_FEATURE = (byte*) 53311 (const nomodify byte) DTV_FEATURE_ENABLE = (byte) 1 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 1024 (const to_nomodify byte*) SRCA[] = { (byte) 'c', (byte) 'a', (byte) 'm', (byte) 'e', (byte) 'l', (byte) 'o', (byte) 't', (byte) '!', (byte) ' ' } (const nomodify byte) SRCA_LEN = (byte) 9 diff --git a/src/test/ref/c64dtv-blittermin.sym b/src/test/ref/c64dtv-blittermin.sym index 8710daedf..80c04d539 100644 --- a/src/test/ref/c64dtv-blittermin.sym +++ b/src/test/ref/c64dtv-blittermin.sym @@ -42,6 +42,20 @@ (const nomodify byte) DTV_BLIT_TRANSPARANCY_NONE = (byte) 0 (const nomodify byte*) DTV_FEATURE = (byte*) 53311 (const nomodify byte) DTV_FEATURE_ENABLE = (byte) 1 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 1024 (const to_nomodify byte*) SRCA[] = { (byte) 'c', (byte) 'a', (byte) 'm', (byte) 'e', (byte) 'l', (byte) 'o', (byte) 't', (byte) '!', (byte) ' ' } (const nomodify byte) SRCA_LEN = (byte) 9 diff --git a/src/test/ref/c64dtv-color.log b/src/test/ref/c64dtv-color.log index 68adf25e5..46da47f3c 100644 --- a/src/test/ref/c64dtv-color.log +++ b/src/test/ref/c64dtv-color.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -63,6 +65,20 @@ SYMBOL TABLE SSA (const nomodify byte) DTV_FEATURE_ENABLE = (byte) 1 (const nomodify byte) DTV_HIGHCOLOR = (byte) 4 (const nomodify byte*) DTV_PALETTE = (byte*)(number) $d200 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) RASTER = (byte*)(number) $d012 (void()) main() (bool~) main::$0 @@ -198,6 +214,20 @@ main::@4: scope:[main] from main::@3 main::@4 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) main() (byte) main::c (byte) main::c#1 1501.5 @@ -370,9 +400,11 @@ Potential registers zp[1]:3 [ main::c#2 main::c#1 ] : zp[1]:3 , reg byte x , reg REGISTER UPLIFT SCOPES Uplift Scope [main] 3,503.5: zp[1]:3 [ main::c#2 main::c#1 ] 2,168.83: zp[1]:2 [ main::r#2 main::r#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [] Uplifting [main] best 11689 combination reg byte x [ main::c#2 main::c#1 ] reg byte x [ main::r#2 main::r#1 ] +Uplifting [MOS6526_CIA] best 11689 combination Uplifting [] best 11689 combination ASSEMBLER BEFORE OPTIMIZATION @@ -546,6 +578,20 @@ FINAL SYMBOL TABLE (const nomodify byte) DTV_FEATURE_ENABLE = (byte) 1 (const nomodify byte) DTV_HIGHCOLOR = (byte) 4 (const nomodify byte*) DTV_PALETTE = (byte*) 53760 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) RASTER = (byte*) 53266 (void()) main() (label) main::@1 diff --git a/src/test/ref/c64dtv-color.sym b/src/test/ref/c64dtv-color.sym index ab08186e9..d8669cefa 100644 --- a/src/test/ref/c64dtv-color.sym +++ b/src/test/ref/c64dtv-color.sym @@ -9,6 +9,20 @@ (const nomodify byte) DTV_FEATURE_ENABLE = (byte) 1 (const nomodify byte) DTV_HIGHCOLOR = (byte) 4 (const nomodify byte*) DTV_PALETTE = (byte*) 53760 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) RASTER = (byte*) 53266 (void()) main() (label) main::@1 diff --git a/src/test/ref/c64dtv-gfxexplorer.asm b/src/test/ref/c64dtv-gfxexplorer.asm index a41e28031..da1638c9d 100644 --- a/src/test/ref/c64dtv-gfxexplorer.asm +++ b/src/test/ref/c64dtv-gfxexplorer.asm @@ -32,18 +32,10 @@ .label VIC_MEMORY = $d018 // Color Ram .label COLS = $d800 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA #1 Port A data direction register. - .label CIA1_PORT_A_DDR = $dc02 - // CIA #1 Port B data direction register. - .label CIA1_PORT_B_DDR = $dc03 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Feature enables or disables the extra C64 DTV features .label DTV_FEATURE = $d03f .const DTV_FEATURE_ENABLE = 1 @@ -163,6 +155,9 @@ .label form_vic_bg3_lo = form_fields_val+$23 // The number of frames to use for a full blink cycle .const FORM_CURSOR_BLINK = $28 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = 3 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // Number of form fields .const form_fields_cnt = $24 .label print_line_cursor = 7 @@ -457,14 +452,14 @@ gfx_mode: { // *DTV_PLANEB_MODULO_HI = 0 lda #0 sta DTV_PLANEB_MODULO_HI - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)VIC_SCREEN0/$4000) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)VIC_SCREEN0/$4000) // Set VIC Bank bits to output - all others to input lda #3^VIC_SCREEN0/$4000 - sta CIA2_PORT_A + sta CIA2 // get_vic_screen(*form_vic_screen) lda form_vic_screen jsr get_vic_screen @@ -820,11 +815,11 @@ keyboard_event_pressed: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] lda keyboard_matrix_row_bitmask,x - sta CIA1_PORT_A - // ~*CIA1_PORT_B - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // } rts @@ -1167,13 +1162,13 @@ form_mode: { // *DTV_COLOR_BANK_HI = >((word)(DTV_COLOR_BANK_DEFAULT/$400)) lda #0 sta DTV_COLOR_BANK_HI - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)FORM_CHARSET/$4000) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)FORM_CHARSET/$4000) // Set VIC Bank bits to output - all others to input - sta CIA2_PORT_A + sta CIA2 // *DTV_CONTROL = 0 // Set VIC Bank // DTV Graphics Mode @@ -3146,14 +3141,14 @@ gfx_init_screen0: { } // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { - // *CIA1_PORT_A_DDR = $ff + // CIA1->PORT_A_DDR = $ff // Keyboard Matrix Columns Write Mode lda #$ff - sta CIA1_PORT_A_DDR - // *CIA1_PORT_B_DDR = $00 + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA1->PORT_B_DDR = $00 // Keyboard Matrix Columns Read Mode lda #0 - sta CIA1_PORT_B_DDR + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR // } rts } diff --git a/src/test/ref/c64dtv-gfxexplorer.cfg b/src/test/ref/c64dtv-gfxexplorer.cfg index f35fdb285..fc641dd72 100644 --- a/src/test/ref/c64dtv-gfxexplorer.cfg +++ b/src/test/ref/c64dtv-gfxexplorer.cfg @@ -150,8 +150,8 @@ gfx_mode::@28: scope:[gfx_mode] from gfx_mode::@27 [87] (byte~) gfx_mode::$45 ← (byte~) gfx_mode::$44 | *((const nomodify byte*) form_b_mod_lo) [88] *((const nomodify byte*) DTV_PLANEB_MODULO_LO) ← (byte~) gfx_mode::$45 [89] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 - [90] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [91] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(word) $4000 + [90] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [91] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(word) $4000 [92] (byte) get_vic_screen::idx#0 ← *((const nomodify byte*) form_vic_screen) [93] call get_vic_screen [94] (byte*) get_vic_screen::return#10 ← (byte*) get_vic_screen::return#5 @@ -385,8 +385,8 @@ keyboard_event_pressed::@return: scope:[keyboard_event_pressed] from keyboard_e (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_event_scan::@7 - [217] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) - [218] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [217] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) + [218] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [219] return @@ -525,8 +525,8 @@ form_mode::@16: scope:[form_mode] from form_mode::@15 [270] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [271] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [272] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 - [273] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [274] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3 + [273] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [274] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3 [275] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 [276] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [277] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL @@ -1809,8 +1809,8 @@ gfx_init_screen0::@return: scope:[gfx_init_screen0] from gfx_init_screen0::@3 (void()) keyboard_init() keyboard_init: scope:[keyboard_init] from main - [863] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff - [864] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 + [863] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff + [864] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 to:keyboard_init::@return keyboard_init::@return: scope:[keyboard_init] from keyboard_init [865] return diff --git a/src/test/ref/c64dtv-gfxexplorer.log b/src/test/ref/c64dtv-gfxexplorer.log index a8e308024..443409e66 100644 --- a/src/test/ref/c64dtv-gfxexplorer.log +++ b/src/test/ref/c64dtv-gfxexplorer.log @@ -1,3 +1,15 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -231,8 +243,8 @@ print_set_screen::@return: scope:[print_set_screen] from print_set_screen (void()) keyboard_init() keyboard_init: scope:[keyboard_init] from main - *((const nomodify byte*) CIA1_PORT_A_DDR) ← (number) $ff - *((const nomodify byte*) CIA1_PORT_B_DDR) ← (number) 0 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) $ff + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (number) 0 to:keyboard_init::@return keyboard_init::@return: scope:[keyboard_init] from keyboard_init return @@ -241,8 +253,8 @@ keyboard_init::@return: scope:[keyboard_init] from keyboard_init (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_event_scan::@7 (byte) keyboard_matrix_read::rowid#1 ← phi( keyboard_event_scan::@7/(byte) keyboard_matrix_read::rowid#0 ) - *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) - (byte~) keyboard_matrix_read::$0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) + (byte~) keyboard_matrix_read::$0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) (byte) keyboard_matrix_read::row_pressed_bits#0 ← (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#0 ← (byte) keyboard_matrix_read::row_pressed_bits#0 to:keyboard_matrix_read::@return @@ -1787,8 +1799,8 @@ gfx_mode::@31: scope:[gfx_mode] from gfx_mode::@30 (number~) gfx_mode::$45 ← (number~) gfx_mode::$44 | *((const nomodify byte*) form_b_mod_lo) *((const nomodify byte*) DTV_PLANEB_MODULO_LO) ← (number~) gfx_mode::$45 *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (number) 0 - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 - *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(number) $4000 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(number) $4000 (byte) get_vic_screen::idx#0 ← *((const nomodify byte*) form_vic_screen) call get_vic_screen (byte*) get_vic_screen::return#7 ← (byte*) get_vic_screen::return#5 @@ -2803,8 +2815,8 @@ form_mode::@16: scope:[form_mode] from form_mode::@15 *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte)(dword)(const nomodify byte*) FORM_CHARSET/(number) $10000 *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(number) $400 *((const nomodify byte*) DTV_COLOR_BANK_HI) ← >(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(number) $400 - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 - *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) FORM_CHARSET/(number) $4000 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) FORM_CHARSET/(number) $4000 *((const nomodify byte*) DTV_CONTROL) ← (number) 0 *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL @@ -3329,12 +3341,8 @@ SYMBOL TABLE SSA (const nomodify byte*) BGCOL4 = (byte*)(number) $d024 (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 (const nomodify byte*) CHARGEN = (byte*)(number) $d000 -(const nomodify byte*) CIA1_PORT_A = (byte*)(number) $dc00 -(const nomodify byte*) CIA1_PORT_A_DDR = (byte*)(number) $dc02 -(const nomodify byte*) CIA1_PORT_B = (byte*)(number) $dc01 -(const nomodify byte*) CIA1_PORT_B_DDR = (byte*)(number) $dc03 -(const nomodify byte*) CIA2_PORT_A = (byte*)(number) $dd00 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const nomodify byte*) COLS = (byte*)(number) $d800 (const nomodify byte) DTV_BORDER_OFF = (byte) 2 (const nomodify byte) DTV_CHUNKY = (byte) $40 @@ -3380,6 +3388,24 @@ SYMBOL TABLE SSA (const nomodify byte) KEY_MODIFIER_SHIFT = (const nomodify byte) KEY_MODIFIER_LSHIFT|(const nomodify byte) KEY_MODIFIER_RSHIFT (const nomodify byte) KEY_RSHIFT = (byte) $34 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 (const nomodify dword) PLANE_8BPP_CHUNKY = (dword) $20000 (const nomodify dword) PLANE_BLANK = (dword) $38000 (const nomodify dword) PLANE_CHARSET8 = (dword) $3c000 @@ -6081,8 +6107,8 @@ Adding number conversion cast (unumber) 0 in (bool~) print_str_lines::$4 ← (nu Adding number conversion cast (unumber) 0 in (bool~) print_str_at::$0 ← (number) 0 != *((byte*) print_str_at::str#2) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#21 + (number) $28 Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 -Adding number conversion cast (unumber) $ff in *((const nomodify byte*) CIA1_PORT_A_DDR) ← (number) $ff -Adding number conversion cast (unumber) 0 in *((const nomodify byte*) CIA1_PORT_B_DDR) ← (number) 0 +Adding number conversion cast (unumber) $ff in *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) $ff +Adding number conversion cast (unumber) 0 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (number) 0 Adding number conversion cast (unumber) 8 in (number~) keyboard_event_scan::$14 ← (byte) keyboard_event_scan::keycode#3 + (number) 8 Adding number conversion cast (unumber) keyboard_event_scan::$14 in (number~) keyboard_event_scan::$14 ← (byte) keyboard_event_scan::keycode#3 + (unumber)(number) 8 Adding number conversion cast (unumber) 0 in (bool~) keyboard_event_scan::$17 ← (byte~) keyboard_event_scan::$16 != (number) 0 @@ -6202,10 +6228,10 @@ Adding number conversion cast (unumber) $10 in (number~) gfx_mode::$44 ← *((co Adding number conversion cast (unumber) gfx_mode::$44 in (number~) gfx_mode::$44 ← *((const nomodify byte*) form_b_mod_hi) * (unumber)(number) $10 Adding number conversion cast (unumber) gfx_mode::$45 in (number~) gfx_mode::$45 ← (unumber~) gfx_mode::$44 | *((const nomodify byte*) form_b_mod_lo) Adding number conversion cast (unumber) 0 in *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (number) 0 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 -Adding number conversion cast (unumber) 3^(byte)(word)VIC_SCREEN0/$4000 in *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(number) $4000 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(number) $4000 -Adding number conversion cast (unumber) $4000 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3^(byte)(word)VIC_SCREEN0/$4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(number) $4000 +Adding number conversion cast (unumber) $4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(number) $4000 Adding number conversion cast (unumber) $3fff in (number~) gfx_mode::$47 ← (word~) gfx_mode::$82 & (number) $3fff Adding number conversion cast (unumber) gfx_mode::$47 in (number~) gfx_mode::$47 ← (word~) gfx_mode::$82 & (unumber)(number) $3fff Adding number conversion cast (unumber) $40 in (number~) gfx_mode::$48 ← (unumber~) gfx_mode::$47 / (number) $40 @@ -6300,10 +6326,10 @@ Adding number conversion cast (unumber) gfx_init_plane_fill::$6 in (number~) gfx Adding number conversion cast (unumber) $10000 in *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte)(dword)(const nomodify byte*) FORM_CHARSET/(number) $10000 Adding number conversion cast (unumber) $400 in *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(number) $400 Adding number conversion cast (unumber) $400 in *((const nomodify byte*) DTV_COLOR_BANK_HI) ← >(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(number) $400 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 -Adding number conversion cast (unumber) 3^(byte)(word)FORM_CHARSET/$4000 in *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) FORM_CHARSET/(number) $4000 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) FORM_CHARSET/(number) $4000 -Adding number conversion cast (unumber) $4000 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) FORM_CHARSET/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3^(byte)(word)FORM_CHARSET/$4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) FORM_CHARSET/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) FORM_CHARSET/(number) $4000 +Adding number conversion cast (unumber) $4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) FORM_CHARSET/(number) $4000 Adding number conversion cast (unumber) 0 in *((const nomodify byte*) DTV_CONTROL) ← (number) 0 Adding number conversion cast (unumber) VIC_DEN|VIC_RSEL|3 in *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) 3 in *((const nomodify byte*) VIC_CONTROL) ← ((unumber)) (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 @@ -6349,8 +6375,8 @@ Adding number conversion cast (unumber) $400 in *((const nomodify byte*) VIC_MEM Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast *((const nomodify byte*) CIA1_PORT_A_DDR) ← (unumber)(number) $ff -Inlining cast *((const nomodify byte*) CIA1_PORT_B_DDR) ← (unumber)(number) 0 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) $ff +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (unumber)(number) 0 Inlining cast (byte) keyboard_modifiers#1 ← (unumber)(number) 0 Inlining cast (byte) keyboard_event_get::return#0 ← (unumber)(number) $ff Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 @@ -6358,8 +6384,8 @@ Inlining cast *((byte*) bitmap_clear::bitmap#2) ← (unumber)(number) 0 Inlining cast (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$0 Inlining cast *((const nomodify byte*) DTV_PLANEA_MODULO_HI) ← (unumber)(number) 0 Inlining cast *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (unumber)(number) 0 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 -Inlining cast *((const nomodify byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(unumber)(number) $4000 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(unumber)(number) $4000 Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) 0 Inlining cast *((const nomodify byte*) PROCPORT) ← (unumber)(number) $32 Inlining cast *((const nomodify byte*) PROCPORT) ← (unumber)(number) $37 @@ -6372,8 +6398,8 @@ Inlining cast (byte) gfx_init_plane_fill::fill#0 ← (unumber)(number) $1b Inlining cast (byte) gfx_init_plane_fill::fill#1 ← (unumber)(number) 0 Inlining cast (byte) gfx_init_plane_fill::fill#2 ← (unumber)(number) $ff Inlining cast (byte*) gfx_init_plane_fill::gfxb#0 ← (byte*)(unumber~) gfx_init_plane_fill::$6 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 -Inlining cast *((const nomodify byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) FORM_CHARSET/(unumber)(number) $4000 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) FORM_CHARSET/(unumber)(number) $4000 Inlining cast *((const nomodify byte*) DTV_CONTROL) ← (unumber)(number) 0 Inlining cast *((const nomodify byte*) VIC_CONTROL) ← (unumber)(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(unumber)(number) 3 Inlining cast *((const nomodify byte*) DTV_PLANEA_START_HI) ← (unumber)(number) 0 @@ -6401,12 +6427,8 @@ Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53270 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 55296 -Simplifying constant pointer cast (byte*) 56320 -Simplifying constant pointer cast (byte*) 56321 -Simplifying constant pointer cast (byte*) 56322 -Simplifying constant pointer cast (byte*) 56323 -Simplifying constant pointer cast (byte*) 56576 -Simplifying constant pointer cast (byte*) 56578 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (byte*) 53311 Simplifying constant pointer cast (byte*) 53308 Simplifying constant pointer cast (byte*) 53760 @@ -8035,18 +8057,21 @@ Simplifying constant evaluating to zero (const nomodify dword) PLANE_HORISONTAL2 Simplifying constant evaluating to zero (const nomodify dword) PLANE_CHARSET8&(word) $3fff in Simplifying constant evaluating to zero (byte)(dword)(const nomodify byte*) FORM_CHARSET/(dword) $10000 in [1029] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte)(dword)(const nomodify byte*) FORM_CHARSET/(dword) $10000 Simplifying constant evaluating to zero >(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 in [1031] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← >(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 -Simplifying constant evaluating to zero (byte)(word)(const nomodify byte*) FORM_CHARSET/(word) $4000 in [1033] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) FORM_CHARSET/(word) $4000 +Simplifying constant evaluating to zero (byte)(word)(const nomodify byte*) FORM_CHARSET/(word) $4000 in [1033] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) FORM_CHARSET/(word) $4000 Simplifying constant evaluating to zero <(const nomodify byte*) FORM_SCREEN in [1038] *((const nomodify byte*) DTV_PLANEA_START_LO) ← <(const nomodify byte*) FORM_SCREEN Successful SSA optimization PassNSimplifyConstantZero Simplifying expression containing zero form_fields_val in Simplifying expression containing zero $4000 in Simplifying expression containing zero $4000 in Simplifying expression containing zero $4000 in +Simplifying expression containing zero (byte*)CIA1 in [68] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) Simplifying expression containing zero KEY_MODIFIER_LSHIFT in [124] (byte) keyboard_modifiers#2 ← (const byte) keyboard_modifiers#1 | (const nomodify byte) KEY_MODIFIER_LSHIFT Simplifying expression containing zero bitmap_plot_xhi in [193] (word~) bitmap_clear::$3 ← *((const to_nomodify byte*) bitmap_plot_xhi + (byte) 0) w= *((const to_nomodify byte*) bitmap_plot_xlo + (byte) 0) Simplifying expression containing zero bitmap_plot_xlo in [193] (word~) bitmap_clear::$3 ← *((const to_nomodify byte*) bitmap_plot_xhi) w= *((const to_nomodify byte*) bitmap_plot_xlo + (byte) 0) Simplifying expression containing zero DTV_LINEAR in [537] (byte) gfx_mode::dtv_control#1 ← (const byte) gfx_mode::dtv_control#0 | (const nomodify byte) DTV_LINEAR -Simplifying expression containing zero 3 in [1033] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte) 0 +Simplifying expression containing zero (byte*)CIA2 in [619] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(word) $4000 +Simplifying expression containing zero 3 in [1033] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) 3^(byte) 0 +Simplifying expression containing zero (byte*)CIA2 in [1033] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) 3 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused variable (void*) memset::return#2 and assignment [40] (void*) memset::return#2 ← (void*) memset::str#0 Eliminating unused variable - keeping the phi block (byte*) print_screen#13 @@ -8064,6 +8089,7 @@ Eliminating unused constant (const byte) bitmap_line::xd#0 Eliminating unused constant (const byte) bitmap_line::yd#0 Eliminating unused constant (const byte*) apply_preset::preset#0 Eliminating unused constant (const byte*) render_preset_name::name#0 +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A Successful SSA optimization PassNEliminateUnusedVars Eliminating unused variable - keeping the phi block (byte) keyboard_modifiers#24 Eliminating unused variable - keeping the phi block (byte) keyboard_modifiers#13 @@ -9662,8 +9688,8 @@ gfx_mode::@28: scope:[gfx_mode] from gfx_mode::@27 [87] (byte~) gfx_mode::$45 ← (byte~) gfx_mode::$44 | *((const nomodify byte*) form_b_mod_lo) [88] *((const nomodify byte*) DTV_PLANEB_MODULO_LO) ← (byte~) gfx_mode::$45 [89] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 - [90] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [91] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(word) $4000 + [90] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [91] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(word) $4000 [92] (byte) get_vic_screen::idx#0 ← *((const nomodify byte*) form_vic_screen) [93] call get_vic_screen [94] (byte*) get_vic_screen::return#10 ← (byte*) get_vic_screen::return#5 @@ -9897,8 +9923,8 @@ keyboard_event_pressed::@return: scope:[keyboard_event_pressed] from keyboard_e (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_event_scan::@7 - [217] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) - [218] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [217] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) + [218] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [219] return @@ -10037,8 +10063,8 @@ form_mode::@16: scope:[form_mode] from form_mode::@15 [270] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [271] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [272] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 - [273] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [274] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3 + [273] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [274] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3 [275] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 [276] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [277] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL @@ -11321,8 +11347,8 @@ gfx_init_screen0::@return: scope:[gfx_init_screen0] from gfx_init_screen0::@3 (void()) keyboard_init() keyboard_init: scope:[keyboard_init] from main - [863] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff - [864] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 + [863] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff + [864] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 to:keyboard_init::@return keyboard_init::@return: scope:[keyboard_init] from keyboard_init [865] return @@ -11330,6 +11356,20 @@ keyboard_init::@return: scope:[keyboard_init] from keyboard_init VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) apply_preset((byte) apply_preset::idx) (byte) apply_preset::i (byte) apply_preset::i#1 2.000000002E9 @@ -12899,18 +12939,10 @@ Target platform is c64basic / MOS6502X .label VIC_MEMORY = $d018 // Color Ram .label COLS = $d800 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA #1 Port A data direction register. - .label CIA1_PORT_A_DDR = $dc02 - // CIA #1 Port B data direction register. - .label CIA1_PORT_B_DDR = $dc03 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Feature enables or disables the extra C64 DTV features .label DTV_FEATURE = $d03f .const DTV_FEATURE_ENABLE = 1 @@ -13030,6 +13062,9 @@ Target platform is c64basic / MOS6502X .label form_vic_bg3_lo = form_fields_val+$23 // The number of frames to use for a full blink cycle .const FORM_CURSOR_BLINK = $28 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = 3 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // Number of form fields .const form_fields_cnt = $24 .label print_line_cursor = $36 @@ -13595,14 +13630,14 @@ gfx_mode: { // [89] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_PLANEB_MODULO_HI - // [90] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [90] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [91] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [91] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^VIC_SCREEN0/$4000 - sta CIA2_PORT_A + sta CIA2 // [92] (byte) get_vic_screen::idx#0 ← *((const nomodify byte*) form_vic_screen) -- vbuz1=_deref_pbuc1 lda form_vic_screen sta.z get_vic_screen.idx @@ -14351,12 +14386,12 @@ keyboard_matrix_read: { .label return = $102 .label rowid = $ef .label return_1 = $f0 - // [217] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [217] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy.z rowid lda keyboard_matrix_row_bitmask,y - sta CIA1_PORT_A - // [218] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuz1=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [218] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuz1=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff sta.z return jmp __breturn @@ -14911,14 +14946,14 @@ form_mode: { // [272] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_COLOR_BANK_HI - // [273] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [273] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [274] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [274] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3 - sta CIA2_PORT_A + sta CIA2 // [275] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Set VIC Bank // DTV Graphics Mode @@ -18730,14 +18765,14 @@ gfx_init_screen0: { // keyboard_init // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { - // [863] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 + // [863] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Write Mode lda #$ff - sta CIA1_PORT_A_DDR - // [864] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [864] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Read Mode lda #0 - sta CIA1_PORT_B_DDR + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR jmp __breturn // keyboard_init::@return __breturn: @@ -18851,8 +18886,8 @@ Statement [84] (byte~) gfx_mode::$43 ← (byte~) gfx_mode::$42 | *((const nomodi Statement [86] (byte~) gfx_mode::$44 ← *((const nomodify byte*) form_b_mod_hi) << (byte) 4 [ keyboard_events_size#24 gfx_mode::$44 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 gfx_mode::$44 ] { { get_vic_screen::idx#0 = get_vic_screen::idx#2 } { get_vic_screen::return#10 = get_vic_screen::return#5 } } ) always clobbers reg byte a Statement [87] (byte~) gfx_mode::$45 ← (byte~) gfx_mode::$44 | *((const nomodify byte*) form_b_mod_lo) [ keyboard_events_size#24 gfx_mode::$45 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 gfx_mode::$45 ] { { get_vic_screen::idx#0 = get_vic_screen::idx#2 } { get_vic_screen::return#10 = get_vic_screen::return#5 } } ) always clobbers reg byte a Statement [89] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 [ keyboard_events_size#24 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 ] { { get_vic_screen::idx#0 = get_vic_screen::idx#2 } { get_vic_screen::return#10 = get_vic_screen::return#5 } } ) always clobbers reg byte a -Statement [90] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ keyboard_events_size#24 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 ] { { get_vic_screen::idx#0 = get_vic_screen::idx#2 } { get_vic_screen::return#10 = get_vic_screen::return#5 } } ) always clobbers reg byte a -Statement [91] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(word) $4000 [ keyboard_events_size#24 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 ] { { get_vic_screen::idx#0 = get_vic_screen::idx#2 } { get_vic_screen::return#10 = get_vic_screen::return#5 } } ) always clobbers reg byte a +Statement [90] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ keyboard_events_size#24 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 ] { { get_vic_screen::idx#0 = get_vic_screen::idx#2 } { get_vic_screen::return#10 = get_vic_screen::return#5 } } ) always clobbers reg byte a +Statement [91] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(word) $4000 [ keyboard_events_size#24 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 ] { { get_vic_screen::idx#0 = get_vic_screen::idx#2 } { get_vic_screen::return#10 = get_vic_screen::return#5 } } ) always clobbers reg byte a Statement [94] (byte*) get_vic_screen::return#10 ← (byte*) get_vic_screen::return#5 [ keyboard_events_size#24 get_vic_screen::return#10 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 get_vic_screen::return#10 ] { { get_vic_screen::idx#0 = get_vic_screen::idx#2 } { get_vic_screen::return#10 = get_vic_screen::return#5 } } ) always clobbers reg byte a Statement [95] (byte*~) gfx_mode::$82 ← (byte*) get_vic_screen::return#10 [ keyboard_events_size#24 gfx_mode::$82 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 gfx_mode::$82 ] { { get_vic_charset::return#2 = get_vic_charset::return#4 } } ) always clobbers reg byte a Statement [96] (word~) gfx_mode::$47 ← (word)(byte*~) gfx_mode::$82 & (word) $3fff [ keyboard_events_size#24 gfx_mode::$47 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 gfx_mode::$47 ] { { get_vic_charset::return#2 = get_vic_charset::return#4 } } ) always clobbers reg byte a @@ -18906,13 +18941,13 @@ Removing always clobbered register reg byte a as potential for zp[1]:15 [ keyboa Statement [214] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#4 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:169 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#10 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:169 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#10 } } main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:175 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_modifiers#18 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#10 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:175 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_modifiers#18 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#10 } } main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:181 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_modifiers#19 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#2 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:181 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_modifiers#19 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#2 } } main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:187 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_modifiers#20 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#3 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:187 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_modifiers#20 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#3 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:255 [ keyboard_event_pressed::row_bits#0 ] Statement [215] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#10 ] ( main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:169 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_event_pressed::return#10 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#10 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:169 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_event_pressed::return#10 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#10 } } main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:175 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_modifiers#18 keyboard_event_pressed::return#10 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#10 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:175 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_modifiers#18 keyboard_event_pressed::return#10 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#10 } } main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:181 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_modifiers#19 keyboard_event_pressed::return#10 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#2 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:181 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_modifiers#19 keyboard_event_pressed::return#10 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#2 } } main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:187 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_modifiers#20 keyboard_event_pressed::return#10 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#3 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:187 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_modifiers#20 keyboard_event_pressed::return#10 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#3 } } ) always clobbers reg byte a -Statement [217] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_matrix_read:160 [ form_cursor_count#16 form_field_idx#18 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#106 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_matrix_read:160 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#106 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [218] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_matrix_read:160 [ form_cursor_count#16 form_field_idx#18 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#106 keyboard_matrix_read::return#0 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_matrix_read:160 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#106 keyboard_matrix_read::return#0 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [217] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_matrix_read:160 [ form_cursor_count#16 form_field_idx#18 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#106 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_matrix_read:160 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#106 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [218] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_matrix_read:160 [ form_cursor_count#16 form_field_idx#18 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#106 keyboard_matrix_read::return#0 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_matrix_read:160 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#106 keyboard_matrix_read::return#0 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [270] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a Statement [271] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a Statement [272] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a -Statement [273] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a -Statement [274] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a +Statement [273] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a +Statement [274] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a Statement [275] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a Statement [276] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a Statement [277] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a @@ -19159,8 +19194,8 @@ Removing always clobbered register reg byte a as potential for zp[1]:347 [ gfx_i Statement [856] *((byte*) gfx_init_screen0::ch#2) ← (byte~) gfx_init_screen0::$3 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 ] ( main:2::gfx_init:10::gfx_init_screen0:453 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 ] { } ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:154 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ] Removing always clobbered register reg byte y as potential for zp[1]:155 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] -Statement [863] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff [ ] ( main:2::keyboard_init:8 [ ] { } ) always clobbers reg byte a -Statement [864] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 [ ] ( main:2::keyboard_init:8 [ ] { } ) always clobbers reg byte a +Statement [863] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff [ ] ( main:2::keyboard_init:8 [ ] { } ) always clobbers reg byte a +Statement [864] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 [ ] ( main:2::keyboard_init:8 [ ] { } ) always clobbers reg byte a Statement [5] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [6] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [7] *((const nomodify byte*) DTV_FEATURE) ← (const nomodify byte) DTV_FEATURE_ENABLE [ ] ( main:2 [ ] { } ) always clobbers reg byte a @@ -19203,8 +19238,8 @@ Statement [84] (byte~) gfx_mode::$43 ← (byte~) gfx_mode::$42 | *((const nomodi Statement [86] (byte~) gfx_mode::$44 ← *((const nomodify byte*) form_b_mod_hi) << (byte) 4 [ keyboard_events_size#24 gfx_mode::$44 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 gfx_mode::$44 ] { { get_vic_screen::idx#0 = get_vic_screen::idx#2 } { get_vic_screen::return#10 = get_vic_screen::return#5 } } ) always clobbers reg byte a Statement [87] (byte~) gfx_mode::$45 ← (byte~) gfx_mode::$44 | *((const nomodify byte*) form_b_mod_lo) [ keyboard_events_size#24 gfx_mode::$45 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 gfx_mode::$45 ] { { get_vic_screen::idx#0 = get_vic_screen::idx#2 } { get_vic_screen::return#10 = get_vic_screen::return#5 } } ) always clobbers reg byte a Statement [89] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 [ keyboard_events_size#24 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 ] { { get_vic_screen::idx#0 = get_vic_screen::idx#2 } { get_vic_screen::return#10 = get_vic_screen::return#5 } } ) always clobbers reg byte a -Statement [90] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ keyboard_events_size#24 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 ] { { get_vic_screen::idx#0 = get_vic_screen::idx#2 } { get_vic_screen::return#10 = get_vic_screen::return#5 } } ) always clobbers reg byte a -Statement [91] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(word) $4000 [ keyboard_events_size#24 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 ] { { get_vic_screen::idx#0 = get_vic_screen::idx#2 } { get_vic_screen::return#10 = get_vic_screen::return#5 } } ) always clobbers reg byte a +Statement [90] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ keyboard_events_size#24 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 ] { { get_vic_screen::idx#0 = get_vic_screen::idx#2 } { get_vic_screen::return#10 = get_vic_screen::return#5 } } ) always clobbers reg byte a +Statement [91] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(word) $4000 [ keyboard_events_size#24 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 ] { { get_vic_screen::idx#0 = get_vic_screen::idx#2 } { get_vic_screen::return#10 = get_vic_screen::return#5 } } ) always clobbers reg byte a Statement [94] (byte*) get_vic_screen::return#10 ← (byte*) get_vic_screen::return#5 [ keyboard_events_size#24 get_vic_screen::return#10 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 get_vic_screen::return#10 ] { { get_vic_screen::idx#0 = get_vic_screen::idx#2 } { get_vic_screen::return#10 = get_vic_screen::return#5 } } ) always clobbers reg byte a Statement [95] (byte*~) gfx_mode::$82 ← (byte*) get_vic_screen::return#10 [ keyboard_events_size#24 gfx_mode::$82 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 gfx_mode::$82 ] { { get_vic_charset::return#2 = get_vic_charset::return#4 } } ) always clobbers reg byte a Statement [96] (word~) gfx_mode::$47 ← (word)(byte*~) gfx_mode::$82 & (word) $3fff [ keyboard_events_size#24 gfx_mode::$47 ] ( main:2::gfx_mode:15 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#24 gfx_mode::$47 ] { { get_vic_charset::return#2 = get_vic_charset::return#4 } } ) always clobbers reg byte a @@ -19242,13 +19277,13 @@ Statement [208] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan: Statement [212] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#4 >> (byte) 3 [ keyboard_event_pressed::keycode#4 keyboard_event_pressed::$0 ] ( main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:169 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_event_pressed::keycode#4 keyboard_event_pressed::$0 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#10 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:169 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_event_pressed::keycode#4 keyboard_event_pressed::$0 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#10 } } main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:175 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_modifiers#18 keyboard_event_pressed::keycode#4 keyboard_event_pressed::$0 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#10 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:175 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_modifiers#18 keyboard_event_pressed::keycode#4 keyboard_event_pressed::$0 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#10 } } main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:181 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_modifiers#19 keyboard_event_pressed::keycode#4 keyboard_event_pressed::$0 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#2 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:181 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_modifiers#19 keyboard_event_pressed::keycode#4 keyboard_event_pressed::$0 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#2 } } main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:187 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_modifiers#20 keyboard_event_pressed::keycode#4 keyboard_event_pressed::$0 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#3 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:187 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_modifiers#20 keyboard_event_pressed::keycode#4 keyboard_event_pressed::$0 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#3 } } ) always clobbers reg byte a Statement [214] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#4 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:169 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#10 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:169 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#10 } } main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:175 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_modifiers#18 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#10 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:175 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_modifiers#18 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#10 } } main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:181 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_modifiers#19 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#2 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:181 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_modifiers#19 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#2 } } main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:187 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_modifiers#20 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#3 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:187 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_modifiers#20 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#3 } } ) always clobbers reg byte a Statement [215] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#10 ] ( main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:169 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_event_pressed::return#10 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#10 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:169 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_event_pressed::return#10 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#10 } } main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:175 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_modifiers#18 keyboard_event_pressed::return#10 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#10 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:175 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_modifiers#18 keyboard_event_pressed::return#10 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#10 } } main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:181 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_modifiers#19 keyboard_event_pressed::return#10 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#2 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:181 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_modifiers#19 keyboard_event_pressed::return#10 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#2 } } main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_event_pressed:187 [ form_cursor_count#16 form_field_idx#18 keyboard_events_size#100 keyboard_modifiers#20 keyboard_event_pressed::return#10 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#3 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_event_pressed:187 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_events_size#100 keyboard_modifiers#20 keyboard_event_pressed::return#10 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#3 } } ) always clobbers reg byte a -Statement [217] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_matrix_read:160 [ form_cursor_count#16 form_field_idx#18 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#106 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_matrix_read:160 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#106 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [218] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_matrix_read:160 [ form_cursor_count#16 form_field_idx#18 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#106 keyboard_matrix_read::return#0 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_matrix_read:160 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#106 keyboard_matrix_read::return#0 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [217] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_matrix_read:160 [ form_cursor_count#16 form_field_idx#18 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#106 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_matrix_read:160 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#106 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [218] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::gfx_mode:15::keyboard_event_scan:141::keyboard_matrix_read:160 [ form_cursor_count#16 form_field_idx#18 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#106 keyboard_matrix_read::return#0 ] { { keyboard_events_size#24 = keyboard_events_size#97 } { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::form_mode:13::form_control:292::keyboard_event_scan:372::keyboard_matrix_read:160 [ form_mode::preset_current#6 form_field_idx#28 form_control::field#0 form_cursor_count#15 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#106 keyboard_matrix_read::return#0 ] { { form_control::return#0 = form_control::return#2 } { keyboard_events_size#47 = keyboard_events_size#97 } { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [270] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a Statement [271] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a Statement [272] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a -Statement [273] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a -Statement [274] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a +Statement [273] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a +Statement [274] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a Statement [275] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a Statement [276] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a Statement [277] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ( main:2::form_mode:13 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] { } ) always clobbers reg byte a @@ -19368,8 +19403,8 @@ Statement [852] (byte~) gfx_init_screen0::$0 ← (byte) gfx_init_screen0::cy#4 & Statement [853] (byte~) gfx_init_screen0::$1 ← (byte~) gfx_init_screen0::$0 << (byte) 4 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 gfx_init_screen0::$1 ] ( main:2::gfx_init:10::gfx_init_screen0:453 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 gfx_init_screen0::$1 ] { } ) always clobbers reg byte a Statement [854] (byte~) gfx_init_screen0::$2 ← (byte) gfx_init_screen0::cx#2 & (byte) $f [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 gfx_init_screen0::$1 gfx_init_screen0::$2 ] ( main:2::gfx_init:10::gfx_init_screen0:453 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 gfx_init_screen0::$1 gfx_init_screen0::$2 ] { } ) always clobbers reg byte a Statement [856] *((byte*) gfx_init_screen0::ch#2) ← (byte~) gfx_init_screen0::$3 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 ] ( main:2::gfx_init:10::gfx_init_screen0:453 [ gfx_init_screen0::cy#4 gfx_init_screen0::cx#2 gfx_init_screen0::ch#2 ] { } ) always clobbers reg byte y -Statement [863] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff [ ] ( main:2::keyboard_init:8 [ ] { } ) always clobbers reg byte a -Statement [864] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 [ ] ( main:2::keyboard_init:8 [ ] { } ) always clobbers reg byte a +Statement [863] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff [ ] ( main:2::keyboard_init:8 [ ] { } ) always clobbers reg byte a +Statement [864] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 [ ] ( main:2::keyboard_init:8 [ ] { } ) always clobbers reg byte a Potential registers zp[1]:2 [ gfx_mode::dtv_control#12 gfx_mode::dtv_control#6 gfx_mode::dtv_control#13 gfx_mode::dtv_control#5 gfx_mode::dtv_control#11 gfx_mode::dtv_control#4 gfx_mode::dtv_control#10 gfx_mode::dtv_control#3 gfx_mode::dtv_control#15 gfx_mode::dtv_control#14 gfx_mode::dtv_control#2 ] : zp[1]:2 , reg byte x , reg byte y , Potential registers zp[1]:3 [ gfx_mode::vic_control#4 gfx_mode::vic_control#2 gfx_mode::vic_control#5 ] : zp[1]:3 , reg byte x , reg byte y , Potential registers zp[1]:4 [ gfx_mode::vic_control2#2 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , @@ -19678,6 +19713,7 @@ Uplift Scope [gfx_init_vic_bitmap] 30,003: zp[1]:96 [ gfx_init_vic_bitmap::l#2 g Uplift Scope [get_vic_screen] 14,405.4: zp[1]:20 [ get_vic_screen::idx#2 get_vic_screen::idx#0 get_vic_screen::idx#1 ] 2,002: zp[2]:208 [ get_vic_screen::return#10 ] 2,002: zp[2]:227 [ get_vic_screen::return#11 ] 500.5: zp[2]:21 [ get_vic_screen::return#5 ] Uplift Scope [get_plane] 14,148: zp[1]:25 [ get_plane::idx#10 get_plane::idx#1 get_plane::idx#0 ] 2,002: zp[4]:160 [ get_plane::return#16 ] 2,002: zp[4]:185 [ get_plane::return#17 ] 500.5: zp[4]:26 [ get_plane::return#14 ] Uplift Scope [get_vic_charset] 10,501.5: zp[1]:216 [ get_vic_charset::idx#0 ] 2,002: zp[2]:217 [ get_vic_charset::return#4 ] 333.67: zp[2]:23 [ get_vic_charset::return#2 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] @@ -19756,6 +19792,7 @@ Uplifting [gfx_init_vic_bitmap] best 15320867 combination zp[1]:96 [ gfx_init_vi Uplifting [get_vic_screen] best 15320846 combination reg byte a [ get_vic_screen::idx#2 get_vic_screen::idx#0 get_vic_screen::idx#1 ] zp[2]:208 [ get_vic_screen::return#10 ] zp[2]:227 [ get_vic_screen::return#11 ] zp[2]:21 [ get_vic_screen::return#5 ] Uplifting [get_plane] best 15320798 combination reg byte a [ get_plane::idx#10 get_plane::idx#1 get_plane::idx#0 ] zp[4]:160 [ get_plane::return#16 ] zp[4]:185 [ get_plane::return#17 ] zp[4]:26 [ get_plane::return#14 ] Uplifting [get_vic_charset] best 15320789 combination reg byte a [ get_vic_charset::idx#0 ] zp[2]:217 [ get_vic_charset::return#4 ] zp[2]:23 [ get_vic_charset::return#2 ] +Uplifting [MOS6526_CIA] best 15320789 combination Uplifting [RADIX] best 15320789 combination Uplifting [print_ln] best 15320789 combination Uplifting [print_cls] best 15320789 combination @@ -20208,18 +20245,10 @@ ASSEMBLER BEFORE OPTIMIZATION .label VIC_MEMORY = $d018 // Color Ram .label COLS = $d800 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA #1 Port A data direction register. - .label CIA1_PORT_A_DDR = $dc02 - // CIA #1 Port B data direction register. - .label CIA1_PORT_B_DDR = $dc03 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Feature enables or disables the extra C64 DTV features .label DTV_FEATURE = $d03f .const DTV_FEATURE_ENABLE = 1 @@ -20339,6 +20368,9 @@ ASSEMBLER BEFORE OPTIMIZATION .label form_vic_bg3_lo = form_fields_val+$23 // The number of frames to use for a full blink cycle .const FORM_CURSOR_BLINK = $28 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = 3 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // Number of form fields .const form_fields_cnt = $24 .label print_line_cursor = 7 @@ -20787,14 +20819,14 @@ gfx_mode: { // [89] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_PLANEB_MODULO_HI - // [90] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [90] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [91] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [91] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^VIC_SCREEN0/$4000 - sta CIA2_PORT_A + sta CIA2 // [92] (byte) get_vic_screen::idx#0 ← *((const nomodify byte*) form_vic_screen) -- vbuaa=_deref_pbuc1 lda form_vic_screen // [93] call get_vic_screen @@ -21406,11 +21438,11 @@ keyboard_event_pressed: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { - // [217] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // [217] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda keyboard_matrix_row_bitmask,x - sta CIA1_PORT_A - // [218] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [218] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff jmp __breturn // keyboard_matrix_read::@return @@ -21932,14 +21964,14 @@ form_mode: { // [272] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_COLOR_BANK_HI - // [273] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [273] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [274] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [274] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3 - sta CIA2_PORT_A + sta CIA2 // [275] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Set VIC Bank // DTV Graphics Mode @@ -25404,14 +25436,14 @@ gfx_init_screen0: { // keyboard_init // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { - // [863] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 + // [863] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Write Mode lda #$ff - sta CIA1_PORT_A_DDR - // [864] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [864] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Read Mode lda #0 - sta CIA1_PORT_B_DDR + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR jmp __breturn // keyboard_init::@return __breturn: @@ -26547,15 +26579,15 @@ Removing unreachable instruction jmp __b9 Removing unreachable instruction jmp __b14 Removing unreachable instruction jmp __b7 Succesful ASM optimization Pass5UnreachableCodeElimination -Fixing long branch [747] beq __b7 to bne -Fixing long branch [751] beq __b8 to bne -Fixing long branch [755] beq __b9 to bne -Fixing long branch [759] beq __b10 to bne -Fixing long branch [763] beq __b11 to bne -Fixing long branch [767] beq __b12 to bne -Fixing long branch [771] beq __b13 to bne -Fixing long branch [775] beq __b14 to bne -Fixing long branch [1350] bmi __b2 to bpl +Fixing long branch [742] beq __b7 to bne +Fixing long branch [746] beq __b8 to bne +Fixing long branch [750] beq __b9 to bne +Fixing long branch [754] beq __b10 to bne +Fixing long branch [758] beq __b11 to bne +Fixing long branch [762] beq __b12 to bne +Fixing long branch [766] beq __b13 to bne +Fixing long branch [770] beq __b14 to bne +Fixing long branch [1345] bmi __b2 to bpl FINAL SYMBOL TABLE (label) @1 @@ -26568,12 +26600,8 @@ FINAL SYMBOL TABLE (const nomodify byte*) BGCOL4 = (byte*) 53284 (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) CHARGEN = (byte*) 53248 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_A_DDR = (byte*) 56322 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 -(const nomodify byte*) CIA1_PORT_B_DDR = (byte*) 56323 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte*) COLS = (byte*) 55296 (const nomodify byte) DTV_BORDER_OFF = (byte) 2 (const nomodify byte) DTV_CHUNKY = (byte) $40 @@ -26619,6 +26647,23 @@ FINAL SYMBOL TABLE (const nomodify byte) KEY_MODIFIER_SHIFT = (const nomodify byte) KEY_MODIFIER_LSHIFT|(const nomodify byte) KEY_MODIFIER_RSHIFT (const nomodify byte) KEY_RSHIFT = (byte) $34 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 (const nomodify dword) PLANE_8BPP_CHUNKY = (dword) $20000 (const nomodify dword) PLANE_BLANK = (dword) $38000 (const nomodify dword) PLANE_CHARSET8 = (dword) $3c000 @@ -27999,18 +28044,10 @@ Score: 10118916 .label VIC_MEMORY = $d018 // Color Ram .label COLS = $d800 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA #1 Port A data direction register. - .label CIA1_PORT_A_DDR = $dc02 - // CIA #1 Port B data direction register. - .label CIA1_PORT_B_DDR = $dc03 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Feature enables or disables the extra C64 DTV features .label DTV_FEATURE = $d03f .const DTV_FEATURE_ENABLE = 1 @@ -28130,6 +28167,9 @@ Score: 10118916 .label form_vic_bg3_lo = form_fields_val+$23 // The number of frames to use for a full blink cycle .const FORM_CURSOR_BLINK = $28 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = 3 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // Number of form fields .const form_fields_cnt = $24 .label print_line_cursor = 7 @@ -28570,16 +28610,16 @@ gfx_mode: { // [89] *((const nomodify byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_PLANEB_MODULO_HI - // *CIA2_PORT_A_DDR = %00000011 - // [90] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [90] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)VIC_SCREEN0/$4000) - // [91] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)VIC_SCREEN0/$4000) + // [91] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) VIC_SCREEN0/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^VIC_SCREEN0/$4000 - sta CIA2_PORT_A + sta CIA2 // get_vic_screen(*form_vic_screen) // [92] (byte) get_vic_screen::idx#0 ← *((const nomodify byte*) form_vic_screen) -- vbuaa=_deref_pbuc1 lda form_vic_screen @@ -29165,13 +29205,13 @@ keyboard_event_pressed: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] - // [217] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] + // [217] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda keyboard_matrix_row_bitmask,x - sta CIA1_PORT_A - // ~*CIA1_PORT_B - // [218] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + // [218] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // keyboard_matrix_read::@return // } @@ -29656,15 +29696,15 @@ form_mode: { // [272] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_COLOR_BANK_HI - // *CIA2_PORT_A_DDR = %00000011 - // [273] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [273] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)FORM_CHARSET/$4000) - // [274] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)FORM_CHARSET/$4000) + // [274] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input - sta CIA2_PORT_A + sta CIA2 // *DTV_CONTROL = 0 // [275] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Set VIC Bank @@ -32875,16 +32915,16 @@ gfx_init_screen0: { // keyboard_init // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { - // *CIA1_PORT_A_DDR = $ff - // [863] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 + // CIA1->PORT_A_DDR = $ff + // [863] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Write Mode lda #$ff - sta CIA1_PORT_A_DDR - // *CIA1_PORT_B_DDR = $00 - // [864] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA1->PORT_B_DDR = $00 + // [864] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Read Mode lda #0 - sta CIA1_PORT_B_DDR + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR // keyboard_init::@return // } // [865] return diff --git a/src/test/ref/c64dtv-gfxexplorer.sym b/src/test/ref/c64dtv-gfxexplorer.sym index 61fefde62..5fa224982 100644 --- a/src/test/ref/c64dtv-gfxexplorer.sym +++ b/src/test/ref/c64dtv-gfxexplorer.sym @@ -8,12 +8,8 @@ (const nomodify byte*) BGCOL4 = (byte*) 53284 (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) CHARGEN = (byte*) 53248 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_A_DDR = (byte*) 56322 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 -(const nomodify byte*) CIA1_PORT_B_DDR = (byte*) 56323 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte*) COLS = (byte*) 55296 (const nomodify byte) DTV_BORDER_OFF = (byte) 2 (const nomodify byte) DTV_CHUNKY = (byte) $40 @@ -59,6 +55,23 @@ (const nomodify byte) KEY_MODIFIER_SHIFT = (const nomodify byte) KEY_MODIFIER_LSHIFT|(const nomodify byte) KEY_MODIFIER_RSHIFT (const nomodify byte) KEY_RSHIFT = (byte) $34 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 (const nomodify dword) PLANE_8BPP_CHUNKY = (dword) $20000 (const nomodify dword) PLANE_BLANK = (dword) $38000 (const nomodify dword) PLANE_CHARSET8 = (dword) $3c000 diff --git a/src/test/ref/c64dtv-gfxmodes.asm b/src/test/ref/c64dtv-gfxmodes.asm index d5b00b899..5592bcfec 100644 --- a/src/test/ref/c64dtv-gfxmodes.asm +++ b/src/test/ref/c64dtv-gfxmodes.asm @@ -30,14 +30,10 @@ .label VIC_MEMORY = $d018 // Color Ram .label COLS = $d800 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // The colors of the C64 .const BLACK = 0 .const GREEN = 5 @@ -96,6 +92,8 @@ .const KEY_1 = $38 .const KEY_2 = $3b .const KEY_SPACE = $3c + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label print_char_cursor = 6 .label print_line_cursor = 8 main: { @@ -137,14 +135,14 @@ menu: { // *DTV_CONTROL = 0 // DTV Graphics Mode sta DTV_CONTROL - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_CONTROL = VIC_DEN|VIC_RSEL|3 // Set VIC Bank // VIC Graphics Mode @@ -625,11 +623,11 @@ keyboard_key_pressed: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(Y) rowid) keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] lda keyboard_matrix_row_bitmask,y - sta CIA1_PORT_A - // ~*CIA1_PORT_B - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // } rts @@ -1478,14 +1476,14 @@ mode_hicolmcchar: { // *DTV_CONTROL = DTV_HIGHCOLOR lda #DTV_HIGHCOLOR sta DTV_CONTROL - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_CONTROL = VIC_DEN|VIC_RSEL|3 // Set VIC Bank // VIC Graphics Mode @@ -1615,14 +1613,14 @@ mode_hicolecmchar: { // *DTV_CONTROL = DTV_HIGHCOLOR lda #DTV_HIGHCOLOR sta DTV_CONTROL - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_CONTROL = VIC_DEN|VIC_RSEL|VIC_ECM|3 // Set VIC Bank // VIC Graphics Mode @@ -1751,14 +1749,14 @@ mode_hicolstdchar: { // *DTV_CONTROL = DTV_HIGHCOLOR lda #DTV_HIGHCOLOR sta DTV_CONTROL - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_CONTROL = VIC_DEN|VIC_RSEL|3 // Set VIC Bank // VIC Graphics Mode @@ -1868,14 +1866,14 @@ mode_stdbitmap: { sta DTV_GRAPHICS_VIC_BANK // *DTV_CONTROL = 0 sta DTV_CONTROL - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)BITMAP/$4000) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)BITMAP/$4000) // Set VIC Bank bits to output - all others to input lda #3^BITMAP/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_CONTROL = VIC_BMM|VIC_DEN|VIC_RSEL|3 // Set VIC Bank // VIC Graphics Mode @@ -2462,14 +2460,14 @@ mode_mcchar: { sta DTV_COLOR_BANK_HI // *DTV_CONTROL = 0 sta DTV_CONTROL - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_CONTROL = VIC_DEN|VIC_RSEL|3 // Set VIC Bank // VIC Graphics Mode @@ -2604,14 +2602,14 @@ mode_ecmchar: { sta DTV_COLOR_BANK_HI // *DTV_CONTROL = 0 sta DTV_CONTROL - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_CONTROL = VIC_DEN|VIC_RSEL|VIC_ECM|3 // Set VIC Bank // VIC Graphics Mode @@ -2744,14 +2742,14 @@ mode_stdchar: { sta DTV_COLOR_BANK_HI // *DTV_CONTROL = 0 sta DTV_CONTROL - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_CONTROL = VIC_DEN|VIC_RSEL|3 // Set VIC Bank // VIC Graphics Mode diff --git a/src/test/ref/c64dtv-gfxmodes.cfg b/src/test/ref/c64dtv-gfxmodes.cfg index 317249004..5cc9c7a4d 100644 --- a/src/test/ref/c64dtv-gfxmodes.cfg +++ b/src/test/ref/c64dtv-gfxmodes.cfg @@ -26,8 +26,8 @@ menu: scope:[menu] from main::@1 [11] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [12] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [13] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 - [14] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [15] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(word) $4000 + [14] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [15] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(word) $4000 [16] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [17] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [18] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) menu::CHARSET&(word) $3fff/(word) $400 @@ -421,8 +421,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [220] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) - [221] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [220] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) + [221] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [222] return @@ -824,8 +824,8 @@ mode_hicolmcchar: scope:[mode_hicolmcchar] from menu::@23 [451] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify byte*) mode_hicolmcchar::COLORS/(word) $400 [452] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [453] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR - [454] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [455] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(word) $4000 + [454] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [455] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(word) $4000 [456] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [457] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL|(const nomodify byte) VIC_MCM [458] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET&(word) $3fff/(word) $400 @@ -880,8 +880,8 @@ mode_hicolecmchar: scope:[mode_hicolecmchar] from menu::@22 [485] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify byte*) mode_hicolecmchar::COLORS/(word) $400 [486] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [487] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR - [488] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [489] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(word) $4000 + [488] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [489] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(word) $4000 [490] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(byte) 3 [491] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [492] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET&(word) $3fff/(word) $400 @@ -937,8 +937,8 @@ mode_hicolstdchar: scope:[mode_hicolstdchar] from menu::@21 [520] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify byte*) mode_hicolstdchar::COLORS/(word) $400 [521] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [522] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR - [523] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [524] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(word) $4000 + [523] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [524] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(word) $4000 [525] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [526] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [527] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET&(word) $3fff/(word) $400 @@ -989,8 +989,8 @@ mode_hicolstdchar::@return: scope:[mode_hicolstdchar] from mode_hicolstdchar::@ mode_stdbitmap: scope:[mode_stdbitmap] from menu::@20 [551] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [552] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 - [553] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [554] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(word) $4000 + [553] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [554] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(word) $4000 [555] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [556] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [557] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP&(word) $3fff/(word) $400 @@ -1386,8 +1386,8 @@ mode_mcchar: scope:[mode_mcchar] from menu::@19 [758] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [759] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [760] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 - [761] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [762] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(word) $4000 + [761] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [762] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(word) $4000 [763] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [764] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL|(const nomodify byte) VIC_MCM [765] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_mcchar::CHARSET&(word) $3fff/(word) $400 @@ -1444,8 +1444,8 @@ mode_ecmchar: scope:[mode_ecmchar] from menu::@18 [794] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [795] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [796] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 - [797] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [798] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(word) $4000 + [797] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [798] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(word) $4000 [799] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(byte) 3 [800] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [801] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET&(word) $3fff/(word) $400 @@ -1503,8 +1503,8 @@ mode_stdchar: scope:[mode_stdchar] from menu::@17 [831] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [832] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [833] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 - [834] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [835] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(word) $4000 + [834] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [835] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(word) $4000 [836] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [837] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [838] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_stdchar::CHARSET&(word) $3fff/(word) $400 diff --git a/src/test/ref/c64dtv-gfxmodes.log b/src/test/ref/c64dtv-gfxmodes.log index fc17485d7..bb2008b4b 100644 --- a/src/test/ref/c64dtv-gfxmodes.log +++ b/src/test/ref/c64dtv-gfxmodes.log @@ -1,3 +1,27 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -210,8 +234,8 @@ print_set_screen::@return: scope:[print_set_screen] from print_set_screen (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed (byte) keyboard_matrix_read::rowid#1 ← phi( keyboard_key_pressed/(byte) keyboard_matrix_read::rowid#0 ) - *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) - (byte~) keyboard_matrix_read::$0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) + (byte~) keyboard_matrix_read::$0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) (byte) keyboard_matrix_read::row_pressed_bits#0 ← (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#0 ← (byte) keyboard_matrix_read::row_pressed_bits#0 to:keyboard_matrix_read::@return @@ -861,8 +885,8 @@ menu: scope:[menu] from main::@2 *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(number) $400 *((const nomodify byte*) DTV_COLOR_BANK_HI) ← >(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(number) $400 *((const nomodify byte*) DTV_CONTROL) ← (number) 0 - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 - *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(number) $4000 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(number) $4000 *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) menu::SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) menu::CHARSET&(number) $3fff/(number) $400 @@ -1580,8 +1604,8 @@ mode_stdchar: scope:[mode_stdchar] from menu::@19 *((const nomodify byte*) DTV_COLOR_BANK_HI) ← >(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(number) $400 (byte) dtv_control#18 ← (number) 0 *((const nomodify byte*) DTV_CONTROL) ← (number) 0 - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 - *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(number) $4000 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(number) $4000 *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_stdchar::SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) mode_stdchar::CHARSET&(number) $3fff/(number) $400 @@ -1660,8 +1684,8 @@ mode_ecmchar: scope:[mode_ecmchar] from menu::@20 *((const nomodify byte*) DTV_COLOR_BANK_HI) ← >(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(number) $400 (byte) dtv_control#21 ← (number) 0 *((const nomodify byte*) DTV_CONTROL) ← (number) 0 - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 - *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(number) $4000 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(number) $4000 *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(number) 3 *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_ecmchar::SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) mode_ecmchar::CHARSET&(number) $3fff/(number) $400 @@ -1743,8 +1767,8 @@ mode_mcchar: scope:[mode_mcchar] from menu::@21 *((const nomodify byte*) DTV_COLOR_BANK_HI) ← >(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(number) $400 (byte) dtv_control#24 ← (number) 0 *((const nomodify byte*) DTV_CONTROL) ← (number) 0 - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 - *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(number) $4000 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(number) $4000 *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL|(const nomodify byte) VIC_MCM *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_mcchar::SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) mode_mcchar::CHARSET&(number) $3fff/(number) $400 @@ -1823,8 +1847,8 @@ mode_stdbitmap: scope:[mode_stdbitmap] from menu::@22 *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte)(dword)(const nomodify byte*) mode_stdbitmap::BITMAP/(number) $10000 (byte) dtv_control#27 ← (number) 0 *((const nomodify byte*) DTV_CONTROL) ← (number) 0 - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 - *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(number) $4000 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(number) $4000 *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_stdbitmap::SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) mode_stdbitmap::BITMAP&(number) $3fff/(number) $400 @@ -1933,8 +1957,8 @@ mode_hicolstdchar: scope:[mode_hicolstdchar] from menu::@23 *((const nomodify byte*) DTV_COLOR_BANK_HI) ← >(word)(const nomodify byte*) mode_hicolstdchar::COLORS/(number) $400 (byte) dtv_control#30 ← (const nomodify byte) DTV_HIGHCOLOR *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 - *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(number) $4000 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(number) $4000 *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolstdchar::SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) mode_hicolstdchar::CHARSET&(number) $3fff/(number) $400 @@ -2012,8 +2036,8 @@ mode_hicolecmchar: scope:[mode_hicolecmchar] from menu::@24 *((const nomodify byte*) DTV_COLOR_BANK_HI) ← >(word)(const nomodify byte*) mode_hicolecmchar::COLORS/(number) $400 (byte) dtv_control#33 ← (const nomodify byte) DTV_HIGHCOLOR *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 - *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(number) $4000 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(number) $4000 *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(number) 3 *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolecmchar::SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) mode_hicolecmchar::CHARSET&(number) $3fff/(number) $400 @@ -2094,8 +2118,8 @@ mode_hicolmcchar: scope:[mode_hicolmcchar] from menu::@25 *((const nomodify byte*) DTV_COLOR_BANK_HI) ← >(word)(const nomodify byte*) mode_hicolmcchar::COLORS/(number) $400 (byte) dtv_control#36 ← (const nomodify byte) DTV_HIGHCOLOR *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 - *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(number) $4000 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(number) $4000 *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL|(const nomodify byte) VIC_MCM *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolmcchar::SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) mode_hicolmcchar::CHARSET&(number) $3fff/(number) $400 @@ -2929,10 +2953,8 @@ SYMBOL TABLE SSA (const nomodify byte) BLACK = (byte) 0 (const nomodify byte) BLUE = (byte) 6 (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 -(const nomodify byte*) CIA1_PORT_A = (byte*)(number) $dc00 -(const nomodify byte*) CIA1_PORT_B = (byte*)(number) $dc01 -(const nomodify byte*) CIA2_PORT_A = (byte*)(number) $dd00 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const nomodify byte*) COLS = (byte*)(number) $d800 (const nomodify byte) DTV_BORDER_OFF = (byte) 2 (const nomodify byte) DTV_CHUNKY = (byte) $40 @@ -2982,6 +3004,23 @@ SYMBOL TABLE SSA (const nomodify byte) KEY_U = (byte) $1e (const nomodify byte) LIGHT_GREEN = (byte) $d (const byte*) MENU_TEXT[] = (byte*) "C64DTV Graphics Modes CCLHBME@ OHIIMCC@ LUNCMMM@----------------------------------------@1. Standard Char (V) 0000000@2. Extended Color Char (V) 0000001@3. Multicolor Char (V) 0000010@4. Standard Bitmap (V) 0000100@5. Multicolor Bitmap (V) 0000110@6. High Color Standard Char (H) 0001000@7. High Extended Color Char (H) 0001001@8. High Multicolor Char (H) 0001010@9. High Multicolor Bitmap (H) 0001110@a. Sixs Fred 2 (D) 0010111@b. Two Plane Bitmap (D) 0011101@c. Sixs Fred (2 Plane MC BM) (D) 0011111@d. 8bpp Pixel Cell (D) 0111011@e. Chunky 8bpp Bitmap (D) 1111011@----------------------------------------@ (V) vicII (H) vicII+hicol (D) c64dtv@" +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte*) PROCPORT = (byte*)(number) 1 (const nomodify byte*) PROCPORT_DDR = (byte*)(number) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 @@ -5295,10 +5334,10 @@ Adding number conversion cast (unumber) $10000 in *((const nomodify byte*) DTV_G Adding number conversion cast (unumber) $400 in *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(number) $400 Adding number conversion cast (unumber) $400 in *((const nomodify byte*) DTV_COLOR_BANK_HI) ← >(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(number) $400 Adding number conversion cast (unumber) 0 in *((const nomodify byte*) DTV_CONTROL) ← (number) 0 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 -Adding number conversion cast (unumber) 3^(byte)(word)menu::CHARSET/$4000 in *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(number) $4000 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(number) $4000 -Adding number conversion cast (unumber) $4000 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3^(byte)(word)menu::CHARSET/$4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(number) $4000 +Adding number conversion cast (unumber) $4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(number) $4000 Adding number conversion cast (unumber) VIC_DEN|VIC_RSEL|3 in *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) 3 in *((const nomodify byte*) VIC_CONTROL) ← ((unumber)) (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) $3fff in *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) menu::SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) menu::CHARSET&(number) $3fff/(number) $400 @@ -5333,10 +5372,10 @@ Adding number conversion cast (unumber) $400 in *((const nomodify byte*) DTV_COL Adding number conversion cast (unumber) $400 in *((const nomodify byte*) DTV_COLOR_BANK_HI) ← >(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(number) $400 Adding number conversion cast (unumber) 0 in (byte) dtv_control#18 ← (number) 0 Adding number conversion cast (unumber) 0 in *((const nomodify byte*) DTV_CONTROL) ← (number) 0 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 -Adding number conversion cast (unumber) 3^(byte)(word)mode_stdchar::CHARSET/$4000 in *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(number) $4000 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(number) $4000 -Adding number conversion cast (unumber) $4000 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3^(byte)(word)mode_stdchar::CHARSET/$4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) $4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(number) $4000 Adding number conversion cast (unumber) VIC_DEN|VIC_RSEL|3 in *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) 3 in *((const nomodify byte*) VIC_CONTROL) ← ((unumber)) (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) $3fff in *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_stdchar::SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) mode_stdchar::CHARSET&(number) $3fff/(number) $400 @@ -5357,10 +5396,10 @@ Adding number conversion cast (unumber) $400 in *((const nomodify byte*) DTV_COL Adding number conversion cast (unumber) $400 in *((const nomodify byte*) DTV_COLOR_BANK_HI) ← >(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(number) $400 Adding number conversion cast (unumber) 0 in (byte) dtv_control#21 ← (number) 0 Adding number conversion cast (unumber) 0 in *((const nomodify byte*) DTV_CONTROL) ← (number) 0 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 -Adding number conversion cast (unumber) 3^(byte)(word)mode_ecmchar::CHARSET/$4000 in *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(number) $4000 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(number) $4000 -Adding number conversion cast (unumber) $4000 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3^(byte)(word)mode_ecmchar::CHARSET/$4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) $4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(number) $4000 Adding number conversion cast (unumber) VIC_DEN|VIC_RSEL|VIC_ECM|3 in *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(number) 3 Adding number conversion cast (unumber) 3 in *((const nomodify byte*) VIC_CONTROL) ← ((unumber)) (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(number) 3 Adding number conversion cast (unumber) $3fff in *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_ecmchar::SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) mode_ecmchar::CHARSET&(number) $3fff/(number) $400 @@ -5384,10 +5423,10 @@ Adding number conversion cast (unumber) $400 in *((const nomodify byte*) DTV_COL Adding number conversion cast (unumber) $400 in *((const nomodify byte*) DTV_COLOR_BANK_HI) ← >(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(number) $400 Adding number conversion cast (unumber) 0 in (byte) dtv_control#24 ← (number) 0 Adding number conversion cast (unumber) 0 in *((const nomodify byte*) DTV_CONTROL) ← (number) 0 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 -Adding number conversion cast (unumber) 3^(byte)(word)mode_mcchar::CHARSET/$4000 in *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(number) $4000 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(number) $4000 -Adding number conversion cast (unumber) $4000 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3^(byte)(word)mode_mcchar::CHARSET/$4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) $4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(number) $4000 Adding number conversion cast (unumber) VIC_DEN|VIC_RSEL|3 in *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) 3 in *((const nomodify byte*) VIC_CONTROL) ← ((unumber)) (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) $3fff in *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_mcchar::SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) mode_mcchar::CHARSET&(number) $3fff/(number) $400 @@ -5405,10 +5444,10 @@ Adding number conversion cast (unumber) mode_mcchar::$7 in (number~) mode_mcchar Adding number conversion cast (unumber) $10000 in *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte)(dword)(const nomodify byte*) mode_stdbitmap::BITMAP/(number) $10000 Adding number conversion cast (unumber) 0 in (byte) dtv_control#27 ← (number) 0 Adding number conversion cast (unumber) 0 in *((const nomodify byte*) DTV_CONTROL) ← (number) 0 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 -Adding number conversion cast (unumber) 3^(byte)(word)mode_stdbitmap::BITMAP/$4000 in *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(number) $4000 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(number) $4000 -Adding number conversion cast (unumber) $4000 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3^(byte)(word)mode_stdbitmap::BITMAP/$4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(number) $4000 +Adding number conversion cast (unumber) $4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(number) $4000 Adding number conversion cast (unumber) VIC_BMM|VIC_DEN|VIC_RSEL|3 in *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) 3 in *((const nomodify byte*) VIC_CONTROL) ← ((unumber)) (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) $3fff in *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_stdbitmap::SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) mode_stdbitmap::BITMAP&(number) $3fff/(number) $400 @@ -5427,10 +5466,10 @@ Adding number conversion cast (unumber) mode_stdbitmap::$13 in (number~) mode_st Adding number conversion cast (unumber) $10000 in *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte)(dword)(const nomodify byte*) mode_hicolstdchar::CHARSET/(number) $10000 Adding number conversion cast (unumber) $400 in *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify byte*) mode_hicolstdchar::COLORS/(number) $400 Adding number conversion cast (unumber) $400 in *((const nomodify byte*) DTV_COLOR_BANK_HI) ← >(word)(const nomodify byte*) mode_hicolstdchar::COLORS/(number) $400 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 -Adding number conversion cast (unumber) 3^(byte)(word)mode_hicolstdchar::CHARSET/$4000 in *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(number) $4000 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(number) $4000 -Adding number conversion cast (unumber) $4000 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3^(byte)(word)mode_hicolstdchar::CHARSET/$4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) $4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(number) $4000 Adding number conversion cast (unumber) VIC_DEN|VIC_RSEL|3 in *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) 3 in *((const nomodify byte*) VIC_CONTROL) ← ((unumber)) (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) $3fff in *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolstdchar::SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) mode_hicolstdchar::CHARSET&(number) $3fff/(number) $400 @@ -5447,10 +5486,10 @@ Adding number conversion cast (unumber) mode_hicolstdchar::$5 in (number~) mode_ Adding number conversion cast (unumber) $10000 in *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte)(dword)(const nomodify byte*) mode_hicolecmchar::CHARSET/(number) $10000 Adding number conversion cast (unumber) $400 in *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify byte*) mode_hicolecmchar::COLORS/(number) $400 Adding number conversion cast (unumber) $400 in *((const nomodify byte*) DTV_COLOR_BANK_HI) ← >(word)(const nomodify byte*) mode_hicolecmchar::COLORS/(number) $400 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 -Adding number conversion cast (unumber) 3^(byte)(word)mode_hicolecmchar::CHARSET/$4000 in *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(number) $4000 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(number) $4000 -Adding number conversion cast (unumber) $4000 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3^(byte)(word)mode_hicolecmchar::CHARSET/$4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) $4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(number) $4000 Adding number conversion cast (unumber) VIC_DEN|VIC_RSEL|VIC_ECM|3 in *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(number) 3 Adding number conversion cast (unumber) 3 in *((const nomodify byte*) VIC_CONTROL) ← ((unumber)) (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(number) 3 Adding number conversion cast (unumber) $3fff in *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolecmchar::SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) mode_hicolecmchar::CHARSET&(number) $3fff/(number) $400 @@ -5470,10 +5509,10 @@ Adding number conversion cast (unumber) mode_hicolecmchar::$5 in (number~) mode_ Adding number conversion cast (unumber) $10000 in *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte)(dword)(const nomodify byte*) mode_hicolmcchar::CHARSET/(number) $10000 Adding number conversion cast (unumber) $400 in *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify byte*) mode_hicolmcchar::COLORS/(number) $400 Adding number conversion cast (unumber) $400 in *((const nomodify byte*) DTV_COLOR_BANK_HI) ← >(word)(const nomodify byte*) mode_hicolmcchar::COLORS/(number) $400 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 -Adding number conversion cast (unumber) 3^(byte)(word)mode_hicolmcchar::CHARSET/$4000 in *((const nomodify byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(number) $4000 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(number) $4000 -Adding number conversion cast (unumber) $4000 in *((const nomodify byte*) CIA2_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3^(byte)(word)mode_hicolmcchar::CHARSET/$4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (number) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(number) $4000 +Adding number conversion cast (unumber) $4000 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(number) $4000 Adding number conversion cast (unumber) VIC_DEN|VIC_RSEL|3 in *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) 3 in *((const nomodify byte*) VIC_CONTROL) ← ((unumber)) (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) $3fff in *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolmcchar::SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) mode_hicolmcchar::CHARSET&(number) $3fff/(number) $400 @@ -5617,23 +5656,23 @@ Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 Inlining cast *((byte*) bitmap_clear::bitmap#2) ← (unumber)(number) 0 Inlining cast (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$0 Inlining cast *((const nomodify byte*) DTV_CONTROL) ← (unumber)(number) 0 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 -Inlining cast *((const nomodify byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(unumber)(number) $4000 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(unumber)(number) $4000 Inlining cast *((const nomodify byte*) VIC_CONTROL) ← (unumber)(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(unumber)(number) 3 Inlining cast *((const nomodify byte*) BGCOL) ← (unumber)(number) 0 Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) 0 Inlining cast (byte) mode_ctrl::ctrl#7 ← (unumber)(number) 0 Inlining cast (byte) dtv_control#18 ← (unumber)(number) 0 Inlining cast *((const nomodify byte*) DTV_CONTROL) ← (unumber)(number) 0 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 -Inlining cast *((const nomodify byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(unumber)(number) $4000 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(unumber)(number) $4000 Inlining cast *((const nomodify byte*) VIC_CONTROL) ← (unumber)(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(unumber)(number) 3 Inlining cast *((const nomodify byte*) BGCOL) ← (unumber)(number) 0 Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) 0 Inlining cast (byte) dtv_control#21 ← (unumber)(number) 0 Inlining cast *((const nomodify byte*) DTV_CONTROL) ← (unumber)(number) 0 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 -Inlining cast *((const nomodify byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(unumber)(number) $4000 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(unumber)(number) $4000 Inlining cast *((const nomodify byte*) VIC_CONTROL) ← (unumber)(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(unumber)(number) 3 Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) 0 Inlining cast *((const nomodify byte*) BGCOL1) ← (unumber)(number) 0 @@ -5642,30 +5681,30 @@ Inlining cast *((const nomodify byte*) BGCOL3) ← (unumber)(number) 5 Inlining cast *((const nomodify byte*) BGCOL4) ← (unumber)(number) 6 Inlining cast (byte) dtv_control#24 ← (unumber)(number) 0 Inlining cast *((const nomodify byte*) DTV_CONTROL) ← (unumber)(number) 0 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 -Inlining cast *((const nomodify byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(unumber)(number) $4000 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(unumber)(number) $4000 Inlining cast *((const nomodify byte*) VIC_CONTROL) ← (unumber)(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(unumber)(number) 3 Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) 0 Inlining cast (byte) dtv_control#27 ← (unumber)(number) 0 Inlining cast *((const nomodify byte*) DTV_CONTROL) ← (unumber)(number) 0 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 -Inlining cast *((const nomodify byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(unumber)(number) $4000 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(unumber)(number) $4000 Inlining cast *((const nomodify byte*) VIC_CONTROL) ← (unumber)(const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(unumber)(number) 3 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 -Inlining cast *((const nomodify byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(unumber)(number) $4000 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(unumber)(number) $4000 Inlining cast *((const nomodify byte*) VIC_CONTROL) ← (unumber)(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(unumber)(number) 3 Inlining cast *((const nomodify byte*) BGCOL) ← (unumber)(number) 0 Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) 0 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 -Inlining cast *((const nomodify byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(unumber)(number) $4000 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(unumber)(number) $4000 Inlining cast *((const nomodify byte*) VIC_CONTROL) ← (unumber)(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(unumber)(number) 3 Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) 0 Inlining cast *((const nomodify byte*) BGCOL1) ← (unumber)(number) $50 Inlining cast *((const nomodify byte*) BGCOL2) ← (unumber)(number) $54 Inlining cast *((const nomodify byte*) BGCOL3) ← (unumber)(number) $58 Inlining cast *((const nomodify byte*) BGCOL4) ← (unumber)(number) $5c -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 -Inlining cast *((const nomodify byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(unumber)(number) $4000 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(unumber)(number) $4000 Inlining cast *((const nomodify byte*) VIC_CONTROL) ← (unumber)(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(unumber)(number) 3 Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) 0 Inlining cast *((const nomodify byte*) BGCOL1) ← (unumber)(number) $50 @@ -5738,10 +5777,8 @@ Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53270 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 55296 -Simplifying constant pointer cast (byte*) 56320 -Simplifying constant pointer cast (byte*) 56321 -Simplifying constant pointer cast (byte*) 56576 -Simplifying constant pointer cast (byte*) 56578 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (byte*) 53311 Simplifying constant pointer cast (byte*) 53308 Simplifying constant pointer cast (byte*) 53760 @@ -7394,15 +7431,24 @@ Simplifying constant evaluating to zero <(const nomodify byte*) mode_8bpppixelce Simplifying constant evaluating to zero <<(const nomodify dword) mode_8bppchunkybmm::PLANEB in [1101] *((const nomodify byte*) DTV_PLANEB_START_LO) ← <<(const nomodify dword) mode_8bppchunkybmm::PLANEB Simplifying constant evaluating to zero ><(const nomodify dword) mode_8bppchunkybmm::PLANEB in [1102] *((const nomodify byte*) DTV_PLANEB_START_MI) ← ><(const nomodify dword) mode_8bppchunkybmm::PLANEB Successful SSA optimization PassNSimplifyConstantZero +Simplifying expression containing zero (byte*)CIA1 in [57] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) Simplifying expression containing zero bitmap_plot_xhi in [104] (word~) bitmap_clear::$3 ← *((const to_nomodify byte*) bitmap_plot_xhi + (byte) 0) w= *((const to_nomodify byte*) bitmap_plot_xlo + (byte) 0) Simplifying expression containing zero bitmap_plot_xlo in [104] (word~) bitmap_clear::$3 ← *((const to_nomodify byte*) bitmap_plot_xhi) w= *((const to_nomodify byte*) bitmap_plot_xlo + (byte) 0) +Simplifying expression containing zero (byte*)CIA2 in [283] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(word) $4000 Simplifying expression containing zero (word)menu::CHARSET&$3fff/$400 in [286] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word) 0|(word)(const nomodify byte*) menu::CHARSET&(word) $3fff/(word) $400 +Simplifying expression containing zero (byte*)CIA2 in [492] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(word) $4000 Simplifying expression containing zero (word)mode_stdchar::CHARSET&$3fff/$400 in [495] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word) 0|(word)(const nomodify byte*) mode_stdchar::CHARSET&(word) $3fff/(word) $400 +Simplifying expression containing zero (byte*)CIA2 in [535] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(word) $4000 Simplifying expression containing zero (word)mode_ecmchar::CHARSET&$3fff/$400 in [538] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word) 0|(word)(const nomodify byte*) mode_ecmchar::CHARSET&(word) $3fff/(word) $400 +Simplifying expression containing zero (byte*)CIA2 in [581] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(word) $4000 Simplifying expression containing zero (word)mode_mcchar::CHARSET&$3fff/$400 in [584] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word) 0|(word)(const nomodify byte*) mode_mcchar::CHARSET&(word) $3fff/(word) $400 +Simplifying expression containing zero (byte*)CIA2 in [624] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(word) $4000 Simplifying expression containing zero (word)mode_stdbitmap::BITMAP&$3fff/$400 in [627] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word) 0|(word)(const nomodify byte*) mode_stdbitmap::BITMAP&(word) $3fff/(word) $400 +Simplifying expression containing zero (byte*)CIA2 in [678] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(word) $4000 Simplifying expression containing zero (word)mode_hicolstdchar::CHARSET&$3fff/$400 in [681] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word) 0|(word)(const nomodify byte*) mode_hicolstdchar::CHARSET&(word) $3fff/(word) $400 +Simplifying expression containing zero (byte*)CIA2 in [719] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(word) $4000 Simplifying expression containing zero (word)mode_hicolecmchar::CHARSET&$3fff/$400 in [722] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word) 0|(word)(const nomodify byte*) mode_hicolecmchar::CHARSET&(word) $3fff/(word) $400 +Simplifying expression containing zero (byte*)CIA2 in [763] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(word) $4000 Simplifying expression containing zero (word)mode_hicolmcchar::CHARSET&$3fff/$400 in [766] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word) 0|(word)(const nomodify byte*) mode_hicolmcchar::CHARSET&(word) $3fff/(word) $400 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused variable - keeping the phi block (byte*) print_screen#12 @@ -7412,6 +7458,7 @@ Eliminating unused variable - keeping the phi block (byte) dtv_control#1 Eliminating unused constant (const void*) memset::return#2 Eliminating unused constant (const byte) bitmap_line::xd#0 Eliminating unused constant (const byte) bitmap_line::yd#0 +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A Successful SSA optimization PassNEliminateUnusedVars Eliminating unused variable - keeping the phi block (byte) dtv_control#3 Eliminating unused constant (const byte*) print_screen#0 @@ -8700,8 +8747,8 @@ menu: scope:[menu] from main::@1 [11] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [12] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [13] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 - [14] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [15] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(word) $4000 + [14] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [15] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(word) $4000 [16] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [17] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [18] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) menu::CHARSET&(word) $3fff/(word) $400 @@ -9095,8 +9142,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [220] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) - [221] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [220] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) + [221] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [222] return @@ -9498,8 +9545,8 @@ mode_hicolmcchar: scope:[mode_hicolmcchar] from menu::@23 [451] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify byte*) mode_hicolmcchar::COLORS/(word) $400 [452] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [453] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR - [454] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [455] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(word) $4000 + [454] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [455] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(word) $4000 [456] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [457] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL|(const nomodify byte) VIC_MCM [458] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET&(word) $3fff/(word) $400 @@ -9554,8 +9601,8 @@ mode_hicolecmchar: scope:[mode_hicolecmchar] from menu::@22 [485] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify byte*) mode_hicolecmchar::COLORS/(word) $400 [486] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [487] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR - [488] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [489] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(word) $4000 + [488] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [489] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(word) $4000 [490] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(byte) 3 [491] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [492] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET&(word) $3fff/(word) $400 @@ -9611,8 +9658,8 @@ mode_hicolstdchar: scope:[mode_hicolstdchar] from menu::@21 [520] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify byte*) mode_hicolstdchar::COLORS/(word) $400 [521] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [522] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR - [523] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [524] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(word) $4000 + [523] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [524] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(word) $4000 [525] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [526] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [527] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET&(word) $3fff/(word) $400 @@ -9663,8 +9710,8 @@ mode_hicolstdchar::@return: scope:[mode_hicolstdchar] from mode_hicolstdchar::@ mode_stdbitmap: scope:[mode_stdbitmap] from menu::@20 [551] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [552] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 - [553] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [554] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(word) $4000 + [553] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [554] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(word) $4000 [555] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [556] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [557] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP&(word) $3fff/(word) $400 @@ -10060,8 +10107,8 @@ mode_mcchar: scope:[mode_mcchar] from menu::@19 [758] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [759] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [760] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 - [761] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [762] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(word) $4000 + [761] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [762] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(word) $4000 [763] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [764] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL|(const nomodify byte) VIC_MCM [765] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_mcchar::CHARSET&(word) $3fff/(word) $400 @@ -10118,8 +10165,8 @@ mode_ecmchar: scope:[mode_ecmchar] from menu::@18 [794] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [795] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [796] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 - [797] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [798] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(word) $4000 + [797] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [798] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(word) $4000 [799] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(byte) 3 [800] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [801] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET&(word) $3fff/(word) $400 @@ -10177,8 +10224,8 @@ mode_stdchar: scope:[mode_stdchar] from menu::@17 [831] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [832] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [833] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 - [834] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 - [835] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(word) $4000 + [834] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [835] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(word) $4000 [836] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [837] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [838] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_stdchar::CHARSET&(word) $3fff/(word) $400 @@ -10352,6 +10399,20 @@ null depth in calling loop Loop head: mode_ctrl::@1 tails: mode_ctrl::@11 blocks null depth in calling loop Loop head: mode_ctrl::@1 tails: mode_ctrl::@18 blocks: mode_ctrl::@18 mode_ctrl::@11 mode_ctrl::@26 mode_ctrl::@27 mode_ctrl::@10 mode_ctrl::@17 mode_ctrl::@25 mode_ctrl::@9 mode_ctrl::@16 mode_ctrl::@24 mode_ctrl::@8 mode_ctrl::@15 mode_ctrl::@23 mode_ctrl::@7 mode_ctrl::@14 mode_ctrl::@22 mode_ctrl::@6 mode_ctrl::@13 mode_ctrl::@21 mode_ctrl::@5 mode_ctrl::@12 mode_ctrl::@20 mode_ctrl::@4 mode_ctrl::@19 mode_ctrl::@3 mode_ctrl::@2 mode_ctrl::@1 in scope keyboard_key_pressed VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) bitmap_clear() (byte*) bitmap_clear::bitmap (word) bitmap_clear::bitmap#0 100001.0 @@ -11842,14 +11903,10 @@ Target platform is c64basic / MOS6502X .label VIC_MEMORY = $d018 // Color Ram .label COLS = $d800 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // The colors of the C64 .const BLACK = 0 .const GREEN = 5 @@ -11908,6 +11965,8 @@ Target platform is c64basic / MOS6502X .const KEY_1 = $38 .const KEY_2 = $3b .const KEY_SPACE = $3c + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // The value of the DTV control register // DTV Graphics Mode // DTV Graphics Mode @@ -11998,14 +12057,14 @@ menu: { // DTV Graphics Mode lda #0 sta DTV_CONTROL - // [14] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [14] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [15] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [15] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // [16] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC Graphics Mode @@ -13149,12 +13208,12 @@ keyboard_matrix_read: { .label return = $d2 .label rowid = $ce .label return_1 = $cf - // [220] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [220] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy.z rowid lda keyboard_matrix_row_bitmask,y - sta CIA1_PORT_A - // [221] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuz1=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [221] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuz1=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff sta.z return jmp __breturn @@ -14585,14 +14644,14 @@ mode_hicolmcchar: { // [453] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR -- _deref_pbuc1=vbuc2 lda #DTV_HIGHCOLOR sta DTV_CONTROL - // [454] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [454] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [455] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [455] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // [456] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC Graphics Mode @@ -14796,14 +14855,14 @@ mode_hicolecmchar: { // [487] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR -- _deref_pbuc1=vbuc2 lda #DTV_HIGHCOLOR sta DTV_CONTROL - // [488] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [488] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [489] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [489] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // [490] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC Graphics Mode @@ -15006,14 +15065,14 @@ mode_hicolstdchar: { // [522] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR -- _deref_pbuc1=vbuc2 lda #DTV_HIGHCOLOR sta DTV_CONTROL - // [523] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [523] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [524] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [524] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // [525] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC Graphics Mode @@ -15200,14 +15259,14 @@ mode_stdbitmap: { // [552] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_CONTROL - // [553] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [553] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [554] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [554] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^BITMAP/$4000 - sta CIA2_PORT_A + sta CIA2 // [555] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC Graphics Mode @@ -16360,14 +16419,14 @@ mode_mcchar: { // [760] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_CONTROL - // [761] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [761] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [762] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [762] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // [763] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC Graphics Mode @@ -16582,14 +16641,14 @@ mode_ecmchar: { // [796] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_CONTROL - // [797] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [797] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [798] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [798] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // [799] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC Graphics Mode @@ -16803,14 +16862,14 @@ mode_stdchar: { // [833] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_CONTROL - // [834] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [834] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [835] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [835] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // [836] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC Graphics Mode @@ -17223,8 +17282,8 @@ Statement [10] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ ] Statement [11] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a Statement [12] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a Statement [13] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a -Statement [14] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a -Statement [15] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(word) $4000 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a +Statement [14] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a +Statement [15] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(word) $4000 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a Statement [16] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a Statement [17] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a Statement [18] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) menu::CHARSET&(word) $3fff/(word) $400 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a @@ -17264,8 +17323,8 @@ Statement [199] (byte) mode_ctrl::ctrl#6 ← (byte) mode_ctrl::ctrl#13 | (const Statement [213] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#20 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::menu:9::keyboard_key_pressed:33 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:41 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#24 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:48 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#25 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:55 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#26 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:62 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#27 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:69 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#28 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:76 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#29 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:83 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#30 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:90 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:97 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:104 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:111 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:204 [ keyboard_key_pressed::colidx#0 ] Removing always clobbered register reg byte a as potential for zp[1]:13 [ mode_ctrl::ctrl#14 mode_ctrl::ctrl#22 mode_ctrl::ctrl#6 mode_ctrl::ctrl#13 mode_ctrl::ctrl#5 mode_ctrl::ctrl#12 mode_ctrl::ctrl#4 mode_ctrl::ctrl#11 mode_ctrl::ctrl#3 mode_ctrl::ctrl#10 mode_ctrl::ctrl#2 mode_ctrl::ctrl#17 mode_ctrl::ctrl#1 mode_ctrl::ctrl#0 ] -Statement [220] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::menu:9::keyboard_key_pressed:33::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:41::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#24 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:48::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#25 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:55::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#26 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:62::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#27 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:69::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#28 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:76::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#29 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:83::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#30 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:90::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:97::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:104::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:111::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [221] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::menu:9::keyboard_key_pressed:33::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:41::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#24 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:48::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#25 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:55::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#26 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:62::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#27 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:69::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#28 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:76::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#29 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:83::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#30 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:90::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:97::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:104::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:111::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [220] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::menu:9::keyboard_key_pressed:33::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:41::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#24 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:48::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#25 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:55::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#26 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:62::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#27 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:69::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#28 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:76::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#29 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:83::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#30 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:90::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:97::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:104::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:111::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [221] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::menu:9::keyboard_key_pressed:33::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:41::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#24 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:48::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#25 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:55::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#26 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:62::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#27 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:69::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#28 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:76::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#29 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:83::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#30 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:90::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:97::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:104::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:111::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement asm { .byte$32,$dd lda$ff .byte$32,$00 } always clobbers reg byte a Statement [227] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR|(const nomodify byte) DTV_LINEAR|(const nomodify byte) DTV_CHUNKY [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] { } ) always clobbers reg byte a Statement [228] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] { } ) always clobbers reg byte a @@ -17418,8 +17477,8 @@ Statement [450] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ ] Statement [451] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify byte*) mode_hicolmcchar::COLORS/(word) $400 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a Statement [452] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a Statement [453] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a -Statement [454] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a -Statement [455] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a +Statement [454] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a +Statement [455] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a Statement [456] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a Statement [457] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL|(const nomodify byte) VIC_MCM [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a Statement [458] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a @@ -17441,8 +17500,8 @@ Statement [484] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ ] Statement [485] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify byte*) mode_hicolecmchar::COLORS/(word) $400 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a Statement [486] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a Statement [487] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a -Statement [488] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a -Statement [489] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a +Statement [488] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a +Statement [489] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a Statement [490] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(byte) 3 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a Statement [491] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a Statement [492] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a @@ -17465,8 +17524,8 @@ Statement [519] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ ] Statement [520] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify byte*) mode_hicolstdchar::COLORS/(word) $400 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a Statement [521] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a Statement [522] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a -Statement [523] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a -Statement [524] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a +Statement [523] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a +Statement [524] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a Statement [525] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a Statement [526] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a Statement [527] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a @@ -17484,8 +17543,8 @@ Removing always clobbered register reg byte y as potential for zp[1]:242 [ mode_ Statement [542] *((byte*) mode_hicolstdchar::ch#2) ← (byte) mode_hicolstdchar::v#0 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::col#1 mode_hicolstdchar::cx#2 mode_hicolstdchar::ch#2 ] ( main:2::menu:9::mode_hicolstdchar:67 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::col#1 mode_hicolstdchar::cx#2 mode_hicolstdchar::ch#2 ] { } ) always clobbers reg byte y Statement [551] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a Statement [552] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a -Statement [553] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a -Statement [554] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(word) $4000 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a +Statement [553] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a +Statement [554] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(word) $4000 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a Statement [555] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a Statement [556] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a Statement [557] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a @@ -17601,8 +17660,8 @@ Statement [757] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ ] Statement [758] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a Statement [759] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a Statement [760] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a -Statement [761] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a -Statement [762] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a +Statement [761] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a +Statement [762] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a Statement [763] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a Statement [764] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL|(const nomodify byte) VIC_MCM [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a Statement [765] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_mcchar::CHARSET&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a @@ -17627,8 +17686,8 @@ Statement [793] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ ] Statement [794] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a Statement [795] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a Statement [796] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a -Statement [797] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a -Statement [798] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a +Statement [797] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a +Statement [798] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a Statement [799] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(byte) 3 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a Statement [800] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a Statement [801] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a @@ -17654,8 +17713,8 @@ Statement [830] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ ] Statement [831] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a Statement [832] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a Statement [833] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a -Statement [834] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a -Statement [835] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a +Statement [834] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a +Statement [835] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a Statement [836] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a Statement [837] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a Statement [838] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_stdchar::CHARSET&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a @@ -17690,8 +17749,8 @@ Statement [10] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ ] Statement [11] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a Statement [12] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a Statement [13] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a -Statement [14] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a -Statement [15] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(word) $4000 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a +Statement [14] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a +Statement [15] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(word) $4000 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a Statement [16] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a Statement [17] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a Statement [18] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) menu::CHARSET&(word) $3fff/(word) $400 [ ] ( main:2::menu:9 [ ] { } ) always clobbers reg byte a @@ -17723,8 +17782,8 @@ Statement [187] (byte) mode_ctrl::ctrl#4 ← (byte) mode_ctrl::ctrl#11 | (const Statement [193] (byte) mode_ctrl::ctrl#5 ← (byte) mode_ctrl::ctrl#12 | (const nomodify byte) DTV_CHUNKY [ dtv_control#114 mode_ctrl::ctrl#5 ] ( main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#5 ] { } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#5 ] { } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#5 ] { } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#5 ] { } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#5 ] { } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#5 ] { } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#5 ] { } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#5 ] { } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584 [ dtv_control#114 mode_ctrl::ctrl#5 ] { } main:2::menu:9::mode_mcchar:53::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#5 ] { } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#5 ] { } main:2::menu:9::mode_stdchar:38::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#5 ] { } ) always clobbers reg byte a Statement [199] (byte) mode_ctrl::ctrl#6 ← (byte) mode_ctrl::ctrl#13 | (const nomodify byte) DTV_COLORRAM_OFF [ dtv_control#114 mode_ctrl::ctrl#6 ] ( main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153 [ dtv_control#114 mode_ctrl::ctrl#6 ] { } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280 [ dtv_control#114 mode_ctrl::ctrl#6 ] { } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333 [ dtv_control#114 mode_ctrl::ctrl#6 ] { } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391 [ dtv_control#114 mode_ctrl::ctrl#6 ] { } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448 [ dtv_control#114 mode_ctrl::ctrl#6 ] { } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482 [ dtv_control#114 mode_ctrl::ctrl#6 ] { } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517 [ dtv_control#114 mode_ctrl::ctrl#6 ] { } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549 [ dtv_control#114 mode_ctrl::ctrl#6 ] { } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584 [ dtv_control#114 mode_ctrl::ctrl#6 ] { } main:2::menu:9::mode_mcchar:53::mode_ctrl:791 [ dtv_control#114 mode_ctrl::ctrl#6 ] { } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828 [ dtv_control#114 mode_ctrl::ctrl#6 ] { } main:2::menu:9::mode_stdchar:38::mode_ctrl:862 [ dtv_control#114 mode_ctrl::ctrl#6 ] { } ) always clobbers reg byte a Statement [213] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#20 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::menu:9::keyboard_key_pressed:33 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:41 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#24 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:48 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#25 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:55 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#26 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:62 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#27 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:69 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#28 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:76 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#29 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:83 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#30 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:90 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:97 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:104 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:111 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:159 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:165 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:171 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:177 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:183 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:189 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:195 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:201 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [220] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::menu:9::keyboard_key_pressed:33::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:41::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#24 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:48::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#25 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:55::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#26 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:62::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#27 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:69::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#28 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:76::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#29 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:83::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#30 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:90::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:97::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:104::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:111::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [221] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::menu:9::keyboard_key_pressed:33::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:41::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#24 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:48::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#25 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:55::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#26 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:62::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#27 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:69::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#28 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:76::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#29 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:83::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#30 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:90::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:97::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:104::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:111::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [220] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::menu:9::keyboard_key_pressed:33::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:41::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#24 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:48::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#25 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:55::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#26 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:62::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#27 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:69::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#28 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:76::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#29 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:83::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#30 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:90::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:97::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:104::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:111::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [221] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::menu:9::keyboard_key_pressed:33::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:41::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#24 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:48::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#25 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:55::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#26 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:62::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#27 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:69::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#28 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:76::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#29 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:83::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#30 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:90::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:97::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:104::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::keyboard_key_pressed:111::keyboard_matrix_read:215 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:159::keyboard_matrix_read:215 [ dtv_control#114 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:165::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#0 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#15 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:171::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#17 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#16 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:177::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#10 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#17 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:183::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#18 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:189::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#12 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#19 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:195::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#13 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#20 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bppchunkybmm:116::mode_ctrl:153::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_8bpppixelcell:109::mode_ctrl:280::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred:102::mode_ctrl:333::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_twoplanebitmap:95::mode_ctrl:391::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_sixsfred2:88::mode_ctrl:448::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolmcchar:81::mode_ctrl:482::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolecmchar:74::mode_ctrl:517::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_hicolstdchar:67::mode_ctrl:549::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdbitmap:60::mode_ctrl:584::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_mcchar:53::mode_ctrl:791::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_ecmchar:46::mode_ctrl:828::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:9::mode_stdchar:38::mode_ctrl:862::keyboard_key_pressed:201::keyboard_matrix_read:215 [ dtv_control#114 mode_ctrl::ctrl#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#21 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement asm { .byte$32,$dd lda$ff .byte$32,$00 } always clobbers reg byte a Statement [227] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR|(const nomodify byte) DTV_LINEAR|(const nomodify byte) DTV_CHUNKY [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] { } ) always clobbers reg byte a Statement [228] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2::menu:9::mode_8bpppixelcell:109 [ ] { } ) always clobbers reg byte a @@ -17830,8 +17889,8 @@ Statement [450] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ ] Statement [451] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify byte*) mode_hicolmcchar::COLORS/(word) $400 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a Statement [452] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a Statement [453] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a -Statement [454] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a -Statement [455] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a +Statement [454] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a +Statement [455] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a Statement [456] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a Statement [457] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL|(const nomodify byte) VIC_MCM [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a Statement [458] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolmcchar:81 [ ] { } ) always clobbers reg byte a @@ -17848,8 +17907,8 @@ Statement [484] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ ] Statement [485] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify byte*) mode_hicolecmchar::COLORS/(word) $400 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a Statement [486] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a Statement [487] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a -Statement [488] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a -Statement [489] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a +Statement [488] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a +Statement [489] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a Statement [490] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(byte) 3 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a Statement [491] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a Statement [492] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolecmchar:74 [ ] { } ) always clobbers reg byte a @@ -17867,8 +17926,8 @@ Statement [519] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ ] Statement [520] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify byte*) mode_hicolstdchar::COLORS/(word) $400 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a Statement [521] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a Statement [522] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a -Statement [523] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a -Statement [524] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a +Statement [523] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a +Statement [524] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a Statement [525] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a Statement [526] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a Statement [527] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_hicolstdchar:67 [ ] { } ) always clobbers reg byte a @@ -17881,8 +17940,8 @@ Statement [540] *((byte*) mode_hicolstdchar::col#2) ← (byte) mode_hicolstdchar Statement [542] *((byte*) mode_hicolstdchar::ch#2) ← (byte) mode_hicolstdchar::v#0 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::col#1 mode_hicolstdchar::cx#2 mode_hicolstdchar::ch#2 ] ( main:2::menu:9::mode_hicolstdchar:67 [ mode_hicolstdchar::cy#4 mode_hicolstdchar::col#1 mode_hicolstdchar::cx#2 mode_hicolstdchar::ch#2 ] { } ) always clobbers reg byte y Statement [551] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a Statement [552] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a -Statement [553] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a -Statement [554] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(word) $4000 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a +Statement [553] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a +Statement [554] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(word) $4000 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a Statement [555] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a Statement [556] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a Statement [557] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_stdbitmap:60 [ ] { } ) always clobbers reg byte a @@ -17928,8 +17987,8 @@ Statement [757] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ ] Statement [758] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a Statement [759] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a Statement [760] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a -Statement [761] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a -Statement [762] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a +Statement [761] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a +Statement [762] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a Statement [763] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a Statement [764] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL|(const nomodify byte) VIC_MCM [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a Statement [765] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_mcchar::CHARSET&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_mcchar:53 [ ] { } ) always clobbers reg byte a @@ -17948,8 +18007,8 @@ Statement [793] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ ] Statement [794] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a Statement [795] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a Statement [796] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a -Statement [797] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a -Statement [798] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a +Statement [797] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a +Statement [798] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a Statement [799] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(byte) 3 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a Statement [800] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a Statement [801] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_ecmchar:46 [ ] { } ) always clobbers reg byte a @@ -17969,8 +18028,8 @@ Statement [830] *((const nomodify byte*) DTV_GRAPHICS_VIC_BANK) ← (byte) 0 [ ] Statement [831] *((const nomodify byte*) DTV_COLOR_BANK_LO) ← <(word)(const nomodify dword) DTV_COLOR_BANK_DEFAULT/(word) $400 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a Statement [832] *((const nomodify byte*) DTV_COLOR_BANK_HI) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a Statement [833] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a -Statement [834] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a -Statement [835] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a +Statement [834] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a +Statement [835] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(word) $4000 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a Statement [836] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a Statement [837] *((const nomodify byte*) VIC_CONTROL2) ← (const nomodify byte) VIC_CSEL [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a Statement [838] *((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) mode_stdchar::CHARSET&(word) $3fff/(word) $400 [ ] ( main:2::menu:9::mode_stdchar:38 [ ] { } ) always clobbers reg byte a @@ -18277,6 +18336,7 @@ Uplift Scope [bitmap_line] 6,050,000.65: zp[1]:251 [ bitmap_line::y1#0 ] 5,761,9 Uplift Scope [memset] 33,333,336.67: zp[2]:159 [ memset::dst#2 memset::dst#1 ] Uplift Scope [print_str_lines] 19,333,337.17: zp[2]:153 [ print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 ] 6,666,667.33: zp[1]:294 [ print_str_lines::ch#0 ] Uplift Scope [menu] 350,003.5: zp[1]:2 [ menu::i#2 menu::i#1 ] 333,336.67: zp[2]:3 [ menu::c#2 menu::c#1 ] 200,002: zp[1]:162 [ menu::$5 ] 200,002: zp[1]:164 [ menu::$9 ] 200,002: zp[1]:166 [ menu::$13 ] 200,002: zp[1]:168 [ menu::$17 ] 200,002: zp[1]:170 [ menu::$21 ] 200,002: zp[1]:172 [ menu::$25 ] 200,002: zp[1]:174 [ menu::$29 ] 200,002: zp[1]:176 [ menu::$33 ] 200,002: zp[1]:178 [ menu::$37 ] 200,002: zp[1]:180 [ menu::$41 ] 200,002: zp[1]:182 [ menu::$45 ] 200,002: zp[1]:184 [ menu::$49 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] @@ -18333,6 +18393,7 @@ Uplifting [memset] best 3394247 combination zp[2]:159 [ memset::dst#2 memset::ds Uplifting [print_str_lines] best 3382247 combination zp[2]:153 [ print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 ] reg byte a [ print_str_lines::ch#0 ] Uplifting [menu] best 3380447 combination reg byte x [ menu::i#2 menu::i#1 ] zp[2]:3 [ menu::c#2 menu::c#1 ] reg byte a [ menu::$5 ] zp[1]:164 [ menu::$9 ] zp[1]:166 [ menu::$13 ] zp[1]:168 [ menu::$17 ] zp[1]:170 [ menu::$21 ] zp[1]:172 [ menu::$25 ] zp[1]:174 [ menu::$29 ] zp[1]:176 [ menu::$33 ] zp[1]:178 [ menu::$37 ] zp[1]:180 [ menu::$41 ] zp[1]:182 [ menu::$45 ] zp[1]:184 [ menu::$49 ] Limited combination testing to 10 combinations of 50331648 possible. +Uplifting [MOS6526_CIA] best 3380447 combination Uplifting [RADIX] best 3380447 combination Uplifting [print_ln] best 3380447 combination Uplifting [print_cls] best 3380447 combination @@ -18818,14 +18879,10 @@ ASSEMBLER BEFORE OPTIMIZATION .label VIC_MEMORY = $d018 // Color Ram .label COLS = $d800 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // The colors of the C64 .const BLACK = 0 .const GREEN = 5 @@ -18884,6 +18941,8 @@ ASSEMBLER BEFORE OPTIMIZATION .const KEY_1 = $38 .const KEY_2 = $3b .const KEY_SPACE = $3c + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label print_char_cursor = 6 .label print_line_cursor = 8 // @begin @@ -18947,14 +19006,14 @@ menu: { // DTV Graphics Mode lda #0 sta DTV_CONTROL - // [14] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [14] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [15] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [15] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // [16] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC Graphics Mode @@ -19915,11 +19974,11 @@ keyboard_key_pressed: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(Y) rowid) keyboard_matrix_read: { - // [220] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuyy + // [220] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuyy lda keyboard_matrix_row_bitmask,y - sta CIA1_PORT_A - // [221] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [221] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff jmp __breturn // keyboard_matrix_read::@return @@ -21236,14 +21295,14 @@ mode_hicolmcchar: { // [453] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR -- _deref_pbuc1=vbuc2 lda #DTV_HIGHCOLOR sta DTV_CONTROL - // [454] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [454] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [455] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [455] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // [456] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC Graphics Mode @@ -21429,14 +21488,14 @@ mode_hicolecmchar: { // [487] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR -- _deref_pbuc1=vbuc2 lda #DTV_HIGHCOLOR sta DTV_CONTROL - // [488] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [488] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [489] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [489] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // [490] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC Graphics Mode @@ -21621,14 +21680,14 @@ mode_hicolstdchar: { // [522] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR -- _deref_pbuc1=vbuc2 lda #DTV_HIGHCOLOR sta DTV_CONTROL - // [523] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [523] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [524] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [524] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // [525] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC Graphics Mode @@ -21796,14 +21855,14 @@ mode_stdbitmap: { // [552] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_CONTROL - // [553] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [553] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [554] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [554] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^BITMAP/$4000 - sta CIA2_PORT_A + sta CIA2 // [555] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC Graphics Mode @@ -22817,14 +22876,14 @@ mode_mcchar: { // [760] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_CONTROL - // [761] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [761] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [762] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [762] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // [763] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC Graphics Mode @@ -23016,14 +23075,14 @@ mode_ecmchar: { // [796] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_CONTROL - // [797] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [797] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [798] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [798] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // [799] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC Graphics Mode @@ -23214,14 +23273,14 @@ mode_stdchar: { // [833] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta DTV_CONTROL - // [834] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [834] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // [835] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [835] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // [836] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank // VIC Graphics Mode @@ -24507,9 +24566,9 @@ Removing instruction __bbegin: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [254] beq __b5 to bne -Fixing long branch [161] bne __b3 to beq -Fixing long branch [166] bne __b3 to beq +Fixing long branch [252] beq __b5 to bne +Fixing long branch [159] bne __b3 to beq +Fixing long branch [164] bne __b3 to beq FINAL SYMBOL TABLE (label) @1 @@ -24523,10 +24582,8 @@ FINAL SYMBOL TABLE (const nomodify byte) BLACK = (byte) 0 (const nomodify byte) BLUE = (byte) 6 (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte*) COLS = (byte*) 55296 (const nomodify byte) DTV_BORDER_OFF = (byte) 2 (const nomodify byte) DTV_CHUNKY = (byte) $40 @@ -24576,6 +24633,22 @@ FINAL SYMBOL TABLE (const nomodify byte) KEY_U = (byte) $1e (const nomodify byte) LIGHT_GREEN = (byte) $d (const byte*) MENU_TEXT[] = (byte*) "C64DTV Graphics Modes CCLHBME@ OHIIMCC@ LUNCMMM@----------------------------------------@1. Standard Char (V) 0000000@2. Extended Color Char (V) 0000001@3. Multicolor Char (V) 0000010@4. Standard Bitmap (V) 0000100@5. Multicolor Bitmap (V) 0000110@6. High Color Standard Char (H) 0001000@7. High Extended Color Char (H) 0001001@8. High Multicolor Char (H) 0001010@9. High Multicolor Bitmap (H) 0001110@a. Sixs Fred 2 (D) 0010111@b. Two Plane Bitmap (D) 0011101@c. Sixs Fred (2 Plane MC BM) (D) 0011111@d. 8bpp Pixel Cell (D) 0111011@e. Chunky 8bpp Bitmap (D) 1111011@----------------------------------------@ (V) vicII (H) vicII+hicol (D) c64dtv@" +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 @@ -25796,14 +25869,10 @@ Score: 2307926 .label VIC_MEMORY = $d018 // Color Ram .label COLS = $d800 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // The colors of the C64 .const BLACK = 0 .const GREEN = 5 @@ -25862,6 +25931,8 @@ Score: 2307926 .const KEY_1 = $38 .const KEY_2 = $3b .const KEY_SPACE = $3c + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label print_char_cursor = 6 .label print_line_cursor = 8 // @begin @@ -25922,16 +25993,16 @@ menu: { // [13] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // DTV Graphics Mode sta DTV_CONTROL - // *CIA2_PORT_A_DDR = %00000011 - // [14] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [14] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) - // [15] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) + // [15] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) menu::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_CONTROL = VIC_DEN|VIC_RSEL|3 // [16] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank @@ -26791,13 +26862,13 @@ keyboard_key_pressed: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(Y) rowid) keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] - // [220] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuyy + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] + // [220] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuyy lda keyboard_matrix_row_bitmask,y - sta CIA1_PORT_A - // ~*CIA1_PORT_B - // [221] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + // [221] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // keyboard_matrix_read::@return // } @@ -28092,16 +28163,16 @@ mode_hicolmcchar: { // [453] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR -- _deref_pbuc1=vbuc2 lda #DTV_HIGHCOLOR sta DTV_CONTROL - // *CIA2_PORT_A_DDR = %00000011 - // [454] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [454] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) - // [455] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) + // [455] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolmcchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_CONTROL = VIC_DEN|VIC_RSEL|3 // [456] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank @@ -28290,16 +28361,16 @@ mode_hicolecmchar: { // [487] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR -- _deref_pbuc1=vbuc2 lda #DTV_HIGHCOLOR sta DTV_CONTROL - // *CIA2_PORT_A_DDR = %00000011 - // [488] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [488] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) - // [489] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) + // [489] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolecmchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_CONTROL = VIC_DEN|VIC_RSEL|VIC_ECM|3 // [490] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank @@ -28488,16 +28559,16 @@ mode_hicolstdchar: { // [522] *((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR -- _deref_pbuc1=vbuc2 lda #DTV_HIGHCOLOR sta DTV_CONTROL - // *CIA2_PORT_A_DDR = %00000011 - // [523] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [523] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) - // [524] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) + // [524] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_hicolstdchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_CONTROL = VIC_DEN|VIC_RSEL|3 // [525] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank @@ -28662,16 +28733,16 @@ mode_stdbitmap: { // *DTV_CONTROL = 0 // [552] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 sta DTV_CONTROL - // *CIA2_PORT_A_DDR = %00000011 - // [553] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [553] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)BITMAP/$4000) - // [554] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)BITMAP/$4000) + // [554] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdbitmap::BITMAP/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^BITMAP/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_CONTROL = VIC_BMM|VIC_DEN|VIC_RSEL|3 // [555] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank @@ -29649,16 +29720,16 @@ mode_mcchar: { // *DTV_CONTROL = 0 // [760] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 sta DTV_CONTROL - // *CIA2_PORT_A_DDR = %00000011 - // [761] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [761] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) - // [762] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) + // [762] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_mcchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_CONTROL = VIC_DEN|VIC_RSEL|3 // [763] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank @@ -29854,16 +29925,16 @@ mode_ecmchar: { // *DTV_CONTROL = 0 // [796] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 sta DTV_CONTROL - // *CIA2_PORT_A_DDR = %00000011 - // [797] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [797] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) - // [798] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) + // [798] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_ecmchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_CONTROL = VIC_DEN|VIC_RSEL|VIC_ECM|3 // [799] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(const nomodify byte) VIC_ECM|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank @@ -30058,16 +30129,16 @@ mode_stdchar: { // *DTV_CONTROL = 0 // [833] *((const nomodify byte*) DTV_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 sta DTV_CONTROL - // *CIA2_PORT_A_DDR = %00000011 - // [834] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [834] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 // VIC Graphics Bank lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) - // [835] *((const nomodify byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = %00000011 ^ (byte)((word)CHARSET/$4000) + // [835] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) 3^(byte)(word)(const nomodify byte*) mode_stdchar::CHARSET/(word) $4000 -- _deref_pbuc1=vbuc2 // Set VIC Bank bits to output - all others to input lda #3^CHARSET/$4000 - sta CIA2_PORT_A + sta CIA2 // *VIC_CONTROL = VIC_DEN|VIC_RSEL|3 // [836] *((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Set VIC Bank diff --git a/src/test/ref/c64dtv-gfxmodes.sym b/src/test/ref/c64dtv-gfxmodes.sym index 42e4d396e..281b526c8 100644 --- a/src/test/ref/c64dtv-gfxmodes.sym +++ b/src/test/ref/c64dtv-gfxmodes.sym @@ -9,10 +9,8 @@ (const nomodify byte) BLACK = (byte) 0 (const nomodify byte) BLUE = (byte) 6 (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte*) COLS = (byte*) 55296 (const nomodify byte) DTV_BORDER_OFF = (byte) 2 (const nomodify byte) DTV_CHUNKY = (byte) $40 @@ -62,6 +60,22 @@ (const nomodify byte) KEY_U = (byte) $1e (const nomodify byte) LIGHT_GREEN = (byte) $d (const byte*) MENU_TEXT[] = (byte*) "C64DTV Graphics Modes CCLHBME@ OHIIMCC@ LUNCMMM@----------------------------------------@1. Standard Char (V) 0000000@2. Extended Color Char (V) 0000001@3. Multicolor Char (V) 0000010@4. Standard Bitmap (V) 0000100@5. Multicolor Bitmap (V) 0000110@6. High Color Standard Char (H) 0001000@7. High Extended Color Char (H) 0001001@8. High Multicolor Char (H) 0001010@9. High Multicolor Bitmap (H) 0001110@a. Sixs Fred 2 (D) 0010111@b. Two Plane Bitmap (D) 0011101@c. Sixs Fred (2 Plane MC BM) (D) 0011111@d. 8bpp Pixel Cell (D) 0111011@e. Chunky 8bpp Bitmap (D) 1111011@----------------------------------------@ (V) vicII (H) vicII+hicol (D) c64dtv@" +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 diff --git a/src/test/ref/cia-timer-cyclecount.asm b/src/test/ref/cia-timer-cyclecount.asm index 185dc4544..7c22c2991 100644 --- a/src/test/ref/cia-timer-cyclecount.asm +++ b/src/test/ref/cia-timer-cyclecount.asm @@ -2,12 +2,8 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - // CIA #2 Timer A+B Value (32-bit) - .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -15,7 +11,11 @@ // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 + // CIA#2 timer A&B as one single 32-bit value + .label CIA2_TIMER_AB = $dd04 .label SCREEN = $400 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f main: { .label __1 = 9 .label cyclecount = 9 @@ -168,13 +168,13 @@ clock: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // *CIA2_TIMER_AB = 0xffffffff lda #<$ffffffff sta CIA2_TIMER_AB @@ -184,12 +184,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL // } rts } diff --git a/src/test/ref/cia-timer-cyclecount.cfg b/src/test/ref/cia-timer-cyclecount.cfg index 5585c3d90..16ce6f9cf 100644 --- a/src/test/ref/cia-timer-cyclecount.cfg +++ b/src/test/ref/cia-timer-cyclecount.cfg @@ -97,11 +97,11 @@ clock::@return: scope:[clock] from clock (void()) clock_start() clock_start: scope:[clock_start] from main::@1 - [42] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 - [43] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [42] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 + [43] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [44] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff - [45] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - [46] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START + [45] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [46] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start [47] return diff --git a/src/test/ref/cia-timer-cyclecount.log b/src/test/ref/cia-timer-cyclecount.log index 1857177db..3ad9b5cf7 100644 --- a/src/test/ref/cia-timer-cyclecount.log +++ b/src/test/ref/cia-timer-cyclecount.log @@ -1,3 +1,9 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -17,11 +23,11 @@ clock::@return: scope:[clock] from clock (void()) clock_start() clock_start: scope:[clock_start] from main::@2 - *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES - *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A *((const nomodify dword*) CIA2_TIMER_AB) ← (number) $ffffffff - *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start return @@ -149,15 +155,30 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const nomodify dword*) CIA2_TIMER_AB = (dword*)(number) $dd04 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*)(number) $dd0e -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*)(number) $dd0f (const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES = (byte) 0 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS = (byte) 0 (const nomodify byte) CIA_TIMER_CONTROL_START = (byte) 1 (const nomodify byte) CIA_TIMER_CONTROL_STOP = (byte) 0 (const nomodify dword) CLOCKS_PER_INIT = (dword) $12 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -258,9 +279,8 @@ Adding number conversion cast (unumber) 1 in (byte*~) print_uchar_at::$3 ← (by Successful SSA optimization PassNAddNumberTypeConversions Inlining cast *((const nomodify dword*) CIA2_TIMER_AB) ← (unumber)(number) $ffffffff Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (dword*) 56580 -Simplifying constant pointer cast (byte*) 56590 -Simplifying constant pointer cast (byte*) 56591 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $ffffffff Simplifying constant integer cast $ffffffff @@ -306,14 +326,14 @@ Constant (const byte*) print_uint_at::at#0 = print_ulong_at::at#0 Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [37] if(true) goto main::@2 Successful SSA optimization Pass2ConstantIfs -Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES in [2] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES -Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS in [3] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES in [2] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES +Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS in [3] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A in [3] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (byte) 0|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -Simplifying expression containing zero CIA_TIMER_CONTROL_START in [5] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -Simplifying expression containing zero CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS in [6] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES +Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A in [3] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (byte) 0|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying expression containing zero CIA_TIMER_CONTROL_START in [5] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying expression containing zero CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS in [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES Successful SSA optimization PassNSimplifyExpressionWithZero -Simplifying expression containing zero CIA_TIMER_CONTROL_START in [6] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS +Simplifying expression containing zero CIA_TIMER_CONTROL_START in [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const nomodify byte) CIA_TIMER_CONTROL_STOP Eliminating unused constant (const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS @@ -476,11 +496,11 @@ clock::@return: scope:[clock] from clock (void()) clock_start() clock_start: scope:[clock_start] from main::@1 - [42] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 - [43] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [42] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 + [43] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [44] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff - [45] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - [46] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START + [45] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [46] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start [47] return @@ -488,6 +508,20 @@ clock_start::@return: scope:[clock_start] from clock_start VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (dword()) clock() (dword) clock::return (dword) clock::return#0 367.33333333333337 @@ -580,12 +614,8 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels - // CIA #2 Timer A+B Value (32-bit) - .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -593,7 +623,11 @@ Target platform is c64basic / MOS6502X // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 + // CIA#2 timer A&B as one single 32-bit value + .label CIA2_TIMER_AB = $dd04 .label SCREEN = $400 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -877,13 +911,13 @@ clock: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // [42] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [42] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // [43] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // [43] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // [44] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB @@ -893,12 +927,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // [45] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // [45] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // [46] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // [46] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL jmp __breturn // clock_start::@return __breturn: @@ -927,11 +961,11 @@ Removing always clobbered register reg byte a as potential for zp[1]:29 [ print_ Statement [38] *((byte*) print_char_at::at#2) ← (byte) print_char_at::ch#2 [ ] ( main:2::print_ulong_at:13::print_uint_at:15::print_uchar_at:22::print_char_at:31 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } main:2::print_ulong_at:13::print_uint_at:17::print_uchar_at:22::print_char_at:31 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } main:2::print_ulong_at:13::print_uint_at:15::print_uchar_at:25::print_char_at:31 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } main:2::print_ulong_at:13::print_uint_at:17::print_uchar_at:25::print_char_at:31 [ print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } main:2::print_ulong_at:13::print_uint_at:15::print_uchar_at:22::print_char_at:35 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:13::print_uint_at:17::print_uchar_at:22::print_char_at:35 [ print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:13::print_uint_at:15::print_uchar_at:25::print_char_at:35 [ print_ulong_at::dw#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:13::print_uint_at:17::print_uchar_at:25::print_char_at:35 [ ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ] Statement [40] (dword) clock::return#0 ← (dword) $ffffffff - *((const nomodify dword*) CIA2_TIMER_AB) [ clock::return#0 ] ( main:2::clock:8 [ clock::return#0 ] { { clock::return#0 = clock::return#2 } } ) always clobbers reg byte a -Statement [42] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a -Statement [43] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a +Statement [42] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a +Statement [43] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a Statement [44] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a -Statement [45] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a -Statement [46] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a +Statement [45] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a +Statement [46] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a Statement [9] (dword) clock::return#2 ← (dword) clock::return#0 [ clock::return#2 ] ( main:2 [ clock::return#2 ] { { clock::return#0 = clock::return#2 } } ) always clobbers reg byte a Statement [10] (dword~) main::$1 ← (dword) clock::return#2 [ main::$1 ] ( main:2 [ main::$1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } } ) always clobbers reg byte a Statement [11] (dword) main::cyclecount#0 ← (dword~) main::$1 - (const nomodify dword) CLOCKS_PER_INIT [ main::cyclecount#0 ] ( main:2 [ main::cyclecount#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } } ) always clobbers reg byte a @@ -946,11 +980,11 @@ Statement [32] (byte~) print_uchar_at::$2 ← (byte) print_uchar_at::b#2 & (byte Statement [33] (byte*) print_char_at::at#1 ← (byte*) print_uchar_at::at#2 + (byte) 1 [ print_uchar_at::$2 print_char_at::at#1 ] ( main:2::print_ulong_at:13::print_uint_at:15::print_uchar_at:22 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:13::print_uint_at:17::print_uchar_at:22 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:13::print_uint_at:15::print_uchar_at:25 [ print_ulong_at::dw#0 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:13::print_uint_at:17::print_uchar_at:25 [ print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a Statement [38] *((byte*) print_char_at::at#2) ← (byte) print_char_at::ch#2 [ ] ( main:2::print_ulong_at:13::print_uint_at:15::print_uchar_at:22::print_char_at:31 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } main:2::print_ulong_at:13::print_uint_at:17::print_uchar_at:22::print_char_at:31 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } main:2::print_ulong_at:13::print_uint_at:15::print_uchar_at:25::print_char_at:31 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } main:2::print_ulong_at:13::print_uint_at:17::print_uchar_at:25::print_char_at:31 [ print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } main:2::print_ulong_at:13::print_uint_at:15::print_uchar_at:22::print_char_at:35 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:13::print_uint_at:17::print_uchar_at:22::print_char_at:35 [ print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:13::print_uint_at:15::print_uchar_at:25::print_char_at:35 [ print_ulong_at::dw#0 ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:13::print_uint_at:17::print_uchar_at:25::print_char_at:35 [ ] { { print_ulong_at::dw#0 = main::cyclecount#0 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a reg byte y Statement [40] (dword) clock::return#0 ← (dword) $ffffffff - *((const nomodify dword*) CIA2_TIMER_AB) [ clock::return#0 ] ( main:2::clock:8 [ clock::return#0 ] { { clock::return#0 = clock::return#2 } } ) always clobbers reg byte a -Statement [42] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a -Statement [43] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a +Statement [42] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a +Statement [43] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a Statement [44] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a -Statement [45] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a -Statement [46] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a +Statement [45] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a +Statement [46] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:6 [ ] { } ) always clobbers reg byte a Potential registers zp[2]:2 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] : zp[2]:2 , Potential registers zp[2]:4 [ print_uint_at::at#2 ] : zp[2]:4 , Potential registers zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ] : zp[1]:6 , reg byte x , @@ -972,6 +1006,7 @@ Uplift Scope [print_uint_at] 9,505: zp[2]:2 [ print_uint_at::w#2 print_uint_at:: Uplift Scope [print_ulong_at] 701: zp[4]:24 [ print_ulong_at::dw#0 ] Uplift Scope [clock] 367.33: zp[4]:30 [ clock::return#0 ] 202: zp[4]:12 [ clock::return#2 ] Uplift Scope [main] 202: zp[4]:16 [ main::$1 ] 202: zp[4]:20 [ main::cyclecount#0 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [clock_start] Uplift Scope [RADIX] Uplift Scope [] @@ -982,6 +1017,7 @@ Uplifting [print_uint_at] best 1731 combination zp[2]:2 [ print_uint_at::w#2 pri Uplifting [print_ulong_at] best 1731 combination zp[4]:24 [ print_ulong_at::dw#0 ] Uplifting [clock] best 1731 combination zp[4]:30 [ clock::return#0 ] zp[4]:12 [ clock::return#2 ] Uplifting [main] best 1731 combination zp[4]:16 [ main::$1 ] zp[4]:20 [ main::cyclecount#0 ] +Uplifting [MOS6526_CIA] best 1731 combination Uplifting [clock_start] best 1731 combination Uplifting [RADIX] best 1731 combination Uplifting [] best 1731 combination @@ -1003,12 +1039,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels - // CIA #2 Timer A+B Value (32-bit) - .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -1016,7 +1048,11 @@ ASSEMBLER BEFORE OPTIMIZATION // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 + // CIA#2 timer A&B as one single 32-bit value + .label CIA2_TIMER_AB = $dd04 .label SCREEN = $400 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -1264,13 +1300,13 @@ clock: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // [42] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [42] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // [43] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // [43] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // [44] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB @@ -1280,12 +1316,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // [45] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // [45] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // [46] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // [46] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL jmp __breturn // clock_start::@return __breturn: @@ -1348,12 +1384,27 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify dword*) CIA2_TIMER_AB = (dword*) 56580 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_START = (byte) 1 (const nomodify dword) CLOCKS_PER_INIT = (dword) $12 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1433,12 +1484,8 @@ Score: 869 :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels - // CIA #2 Timer A+B Value (32-bit) - .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -1446,7 +1493,11 @@ Score: 869 // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 + // CIA#2 timer A&B as one single 32-bit value + .label CIA2_TIMER_AB = $dd04 .label SCREEN = $400 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 @@ -1676,15 +1727,15 @@ clock: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES - // [42] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // [42] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - // [43] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // [43] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // *CIA2_TIMER_AB = 0xffffffff // [44] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff @@ -1695,14 +1746,14 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - // [45] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // [45] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES - // [46] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // [46] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL // clock_start::@return // } // [47] return diff --git a/src/test/ref/cia-timer-cyclecount.sym b/src/test/ref/cia-timer-cyclecount.sym index 4ae9503dd..17b3d6677 100644 --- a/src/test/ref/cia-timer-cyclecount.sym +++ b/src/test/ref/cia-timer-cyclecount.sym @@ -1,12 +1,27 @@ (label) @1 (label) @begin (label) @end +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify dword*) CIA2_TIMER_AB = (dword*) 56580 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_START = (byte) 1 (const nomodify dword) CLOCKS_PER_INIT = (dword) $12 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/cia-timer-simple.asm b/src/test/ref/cia-timer-simple.asm index df02acf59..208ea3418 100644 --- a/src/test/ref/cia-timer-simple.asm +++ b/src/test/ref/cia-timer-simple.asm @@ -2,17 +2,17 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - // CIA #2 Timer A+B Value (32-bit) + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label SCREEN = $400 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f main: { // clock_start() // Reset & start the CIA#2 timer A+B @@ -146,13 +146,13 @@ clock: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // *CIA2_TIMER_AB = 0xffffffff lda #<$ffffffff sta CIA2_TIMER_AB @@ -162,12 +162,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL // } rts } diff --git a/src/test/ref/cia-timer-simple.cfg b/src/test/ref/cia-timer-simple.cfg index 6d3994e4c..ab88746be 100644 --- a/src/test/ref/cia-timer-simple.cfg +++ b/src/test/ref/cia-timer-simple.cfg @@ -92,11 +92,11 @@ clock::@return: scope:[clock] from clock (void()) clock_start() clock_start: scope:[clock_start] from main - [39] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 - [40] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [39] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 + [40] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [41] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff - [42] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - [43] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START + [42] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [43] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start [44] return diff --git a/src/test/ref/cia-timer-simple.log b/src/test/ref/cia-timer-simple.log index 2a84e31c9..51410b34d 100644 --- a/src/test/ref/cia-timer-simple.log +++ b/src/test/ref/cia-timer-simple.log @@ -1,3 +1,9 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -17,11 +23,11 @@ clock::@return: scope:[clock] from clock (void()) clock_start() clock_start: scope:[clock_start] from main - *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES - *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A *((const nomodify dword*) CIA2_TIMER_AB) ← (number) $ffffffff - *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start return @@ -146,14 +152,29 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const nomodify dword*) CIA2_TIMER_AB = (dword*)(number) $dd04 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*)(number) $dd0e -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*)(number) $dd0f (const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES = (byte) 0 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS = (byte) 0 (const nomodify byte) CIA_TIMER_CONTROL_START = (byte) 1 (const nomodify byte) CIA_TIMER_CONTROL_STOP = (byte) 0 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -251,9 +272,8 @@ Adding number conversion cast (unumber) 1 in (byte*~) print_uchar_at::$3 ← (by Successful SSA optimization PassNAddNumberTypeConversions Inlining cast *((const nomodify dword*) CIA2_TIMER_AB) ← (unumber)(number) $ffffffff Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (dword*) 56580 -Simplifying constant pointer cast (byte*) 56590 -Simplifying constant pointer cast (byte*) 56591 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $ffffffff Simplifying constant integer cast $ffffffff @@ -299,14 +319,14 @@ Constant (const byte*) print_uint_at::at#0 = print_ulong_at::at#0 Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [38] if(true) goto main::@2 Successful SSA optimization Pass2ConstantIfs -Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES in [2] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES -Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS in [3] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES in [2] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES +Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS in [3] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A in [3] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (byte) 0|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -Simplifying expression containing zero CIA_TIMER_CONTROL_START in [5] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -Simplifying expression containing zero CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS in [6] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES +Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A in [3] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (byte) 0|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying expression containing zero CIA_TIMER_CONTROL_START in [5] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying expression containing zero CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS in [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES Successful SSA optimization PassNSimplifyExpressionWithZero -Simplifying expression containing zero CIA_TIMER_CONTROL_START in [6] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS +Simplifying expression containing zero CIA_TIMER_CONTROL_START in [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const nomodify byte) CIA_TIMER_CONTROL_STOP Eliminating unused constant (const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS @@ -465,11 +485,11 @@ clock::@return: scope:[clock] from clock (void()) clock_start() clock_start: scope:[clock_start] from main - [39] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 - [40] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [39] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 + [40] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [41] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff - [42] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - [43] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START + [42] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [43] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start [44] return @@ -477,6 +497,20 @@ clock_start::@return: scope:[clock_start] from clock_start VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (dword()) clock() (dword) clock::return (dword) clock::return#0 367.33333333333337 @@ -560,17 +594,17 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels - // CIA #2 Timer A+B Value (32-bit) + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label SCREEN = $400 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -823,13 +857,13 @@ clock: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // [39] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [39] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // [40] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // [40] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // [41] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB @@ -839,12 +873,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // [42] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // [42] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // [43] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // [43] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL jmp __breturn // clock_start::@return __breturn: @@ -871,11 +905,11 @@ Removing always clobbered register reg byte a as potential for zp[1]:21 [ print_ Statement [35] *((byte*) print_char_at::at#2) ← (byte) print_char_at::ch#2 [ ] ( main:2::print_ulong_at:10::print_uint_at:12::print_uchar_at:19::print_char_at:28 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } main:2::print_ulong_at:10::print_uint_at:14::print_uchar_at:19::print_char_at:28 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } main:2::print_ulong_at:10::print_uint_at:12::print_uchar_at:22::print_char_at:28 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } main:2::print_ulong_at:10::print_uint_at:14::print_uchar_at:22::print_char_at:28 [ print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } main:2::print_ulong_at:10::print_uint_at:12::print_uchar_at:19::print_char_at:32 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:10::print_uint_at:14::print_uchar_at:19::print_char_at:32 [ print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:10::print_uint_at:12::print_uchar_at:22::print_char_at:32 [ print_ulong_at::dw#0 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:10::print_uint_at:14::print_uchar_at:22::print_char_at:32 [ ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ] Statement [37] (dword) clock::return#0 ← (dword) $ffffffff - *((const nomodify dword*) CIA2_TIMER_AB) [ clock::return#0 ] ( main:2::clock:7 [ clock::return#0 ] { { clock::return#0 = clock::return#2 } } ) always clobbers reg byte a -Statement [39] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a -Statement [40] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a +Statement [39] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a +Statement [40] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a Statement [41] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a -Statement [42] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a -Statement [43] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a +Statement [42] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a +Statement [43] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a Statement [8] (dword) clock::return#2 ← (dword) clock::return#0 [ clock::return#2 ] ( main:2 [ clock::return#2 ] { { clock::return#0 = clock::return#2 } } ) always clobbers reg byte a Statement [9] (dword) print_ulong_at::dw#0 ← (dword) clock::return#2 [ print_ulong_at::dw#0 ] ( main:2 [ print_ulong_at::dw#0 ] { { print_ulong_at::dw#0 = clock::return#2 } } ) always clobbers reg byte a Statement [11] (word) print_uint_at::w#0 ← > (dword) print_ulong_at::dw#0 [ print_ulong_at::dw#0 print_uint_at::w#0 ] ( main:2::print_ulong_at:10 [ print_ulong_at::dw#0 print_uint_at::w#0 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } } ) always clobbers reg byte a @@ -888,11 +922,11 @@ Statement [29] (byte~) print_uchar_at::$2 ← (byte) print_uchar_at::b#2 & (byte Statement [30] (byte*) print_char_at::at#1 ← (byte*) print_uchar_at::at#2 + (byte) 1 [ print_uchar_at::$2 print_char_at::at#1 ] ( main:2::print_ulong_at:10::print_uint_at:12::print_uchar_at:19 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:10::print_uint_at:14::print_uchar_at:19 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:10::print_uint_at:12::print_uchar_at:22 [ print_ulong_at::dw#0 print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:10::print_uint_at:14::print_uchar_at:22 [ print_uchar_at::$2 print_char_at::at#1 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a Statement [35] *((byte*) print_char_at::at#2) ← (byte) print_char_at::ch#2 [ ] ( main:2::print_ulong_at:10::print_uint_at:12::print_uchar_at:19::print_char_at:28 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } main:2::print_ulong_at:10::print_uint_at:14::print_uchar_at:19::print_char_at:28 [ print_uint_at::w#2 print_uint_at::at#2 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#0 print_uint_at::at#2 } } main:2::print_ulong_at:10::print_uint_at:12::print_uchar_at:22::print_char_at:28 [ print_ulong_at::dw#0 print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } main:2::print_ulong_at:10::print_uint_at:14::print_uchar_at:22::print_char_at:28 [ print_uchar_at::b#2 print_uchar_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_char_at::ch#0 = print_char_at::ch#2 } { print_char_at::at#0 = print_char_at::at#2 print_uchar_at::at#2 print_uchar_at::at#1 } } main:2::print_ulong_at:10::print_uint_at:12::print_uchar_at:19::print_char_at:32 [ print_ulong_at::dw#0 print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:10::print_uint_at:14::print_uchar_at:19::print_char_at:32 [ print_uint_at::w#2 print_uint_at::at#2 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#0 = print_uchar_at::b#2 } { print_uchar_at::at#0 = print_uchar_at::at#2 print_uint_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:10::print_uint_at:12::print_uchar_at:22::print_char_at:32 [ print_ulong_at::dw#0 ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#0 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } main:2::print_ulong_at:10::print_uint_at:14::print_uchar_at:22::print_char_at:32 [ ] { { print_ulong_at::dw#0 = clock::return#2 } { print_uint_at::w#1 = print_uint_at::w#2 } { print_uchar_at::b#1 = print_uchar_at::b#2 } { print_uchar_at::at#1 = print_uchar_at::at#2 } { print_char_at::ch#1 = print_char_at::ch#2 } { print_char_at::at#1 = print_char_at::at#2 } } ) always clobbers reg byte a reg byte y Statement [37] (dword) clock::return#0 ← (dword) $ffffffff - *((const nomodify dword*) CIA2_TIMER_AB) [ clock::return#0 ] ( main:2::clock:7 [ clock::return#0 ] { { clock::return#0 = clock::return#2 } } ) always clobbers reg byte a -Statement [39] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a -Statement [40] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a +Statement [39] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a +Statement [40] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a Statement [41] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a -Statement [42] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a -Statement [43] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a +Statement [42] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a +Statement [43] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:5 [ ] { } ) always clobbers reg byte a Potential registers zp[2]:2 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] : zp[2]:2 , Potential registers zp[2]:4 [ print_uint_at::at#2 ] : zp[2]:4 , Potential registers zp[1]:6 [ print_uchar_at::b#2 print_uchar_at::b#0 print_uchar_at::b#1 ] : zp[1]:6 , reg byte x , @@ -911,6 +945,7 @@ Uplift Scope [print_uchar_at] 200,002: zp[1]:20 [ print_uchar_at::$0 ] 100,001: Uplift Scope [print_uint_at] 9,505: zp[2]:2 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] 4,000.4: zp[2]:4 [ print_uint_at::at#2 ] Uplift Scope [print_ulong_at] 701: zp[4]:16 [ print_ulong_at::dw#0 ] Uplift Scope [clock] 367.33: zp[4]:22 [ clock::return#0 ] 202: zp[4]:12 [ clock::return#2 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [clock_start] Uplift Scope [RADIX] Uplift Scope [main] @@ -921,6 +956,7 @@ Uplifting [print_uchar_at] best 1047 combination reg byte a [ print_uchar_at::$0 Uplifting [print_uint_at] best 1047 combination zp[2]:2 [ print_uint_at::w#2 print_uint_at::w#0 print_uint_at::w#1 ] zp[2]:4 [ print_uint_at::at#2 ] Uplifting [print_ulong_at] best 1047 combination zp[4]:16 [ print_ulong_at::dw#0 ] Uplifting [clock] best 1047 combination zp[4]:22 [ clock::return#0 ] zp[4]:12 [ clock::return#2 ] +Uplifting [MOS6526_CIA] best 1047 combination Uplifting [clock_start] best 1047 combination Uplifting [RADIX] best 1047 combination Uplifting [main] best 1047 combination @@ -941,17 +977,17 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels - // CIA #2 Timer A+B Value (32-bit) + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label SCREEN = $400 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -1176,13 +1212,13 @@ clock: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // [39] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [39] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // [40] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // [40] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // [41] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB @@ -1192,12 +1228,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // [42] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // [42] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // [43] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // [43] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL jmp __breturn // clock_start::@return __breturn: @@ -1258,11 +1294,26 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify dword*) CIA2_TIMER_AB = (dword*) 56580 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_START = (byte) 1 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1338,17 +1389,17 @@ Score: 455 :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels - // CIA #2 Timer A+B Value (32-bit) + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label SCREEN = $400 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 @@ -1555,15 +1606,15 @@ clock: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES - // [39] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // [39] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - // [40] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // [40] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // *CIA2_TIMER_AB = 0xffffffff // [41] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff @@ -1574,14 +1625,14 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - // [42] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // [42] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES - // [43] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // [43] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL // clock_start::@return // } // [44] return diff --git a/src/test/ref/cia-timer-simple.sym b/src/test/ref/cia-timer-simple.sym index c5dc0bdc2..1cffe7f10 100644 --- a/src/test/ref/cia-timer-simple.sym +++ b/src/test/ref/cia-timer-simple.sym @@ -1,11 +1,26 @@ (label) @1 (label) @begin (label) @end +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify dword*) CIA2_TIMER_AB = (dword*) 56580 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_START = (byte) 1 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/complex/clearscreen/clearscreen.asm b/src/test/ref/complex/clearscreen/clearscreen.asm index ef34e2a2f..ca76385c2 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.asm +++ b/src/test/ref/complex/clearscreen/clearscreen.asm @@ -41,8 +41,8 @@ .const IRQ_RASTER = 1 // Color Ram .label COLS = $d800 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -74,6 +74,7 @@ .const OFFSET_STRUCT_PROCESSINGSPRITE_COL = $a .const OFFSET_STRUCT_PROCESSINGSPRITE_STATUS = $b .const OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR = $c + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // Top of the heap used by malloc() .label HEAP_TOP = $a000 // Head of the heap. Moved backward each malloc() @@ -656,10 +657,10 @@ setupRasterIrq: { // *PROCPORT = PROCPORT_RAM_IO lda #PROCPORT_RAM_IO sta PROCPORT - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL &=0x7f lda #$7f and VIC_CONTROL diff --git a/src/test/ref/complex/clearscreen/clearscreen.cfg b/src/test/ref/complex/clearscreen/clearscreen.cfg index 5f038de26..0b54b1b72 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.cfg +++ b/src/test/ref/complex/clearscreen/clearscreen.cfg @@ -245,7 +245,7 @@ setupRasterIrq: scope:[setupRasterIrq] from main::@10 asm { sei } [138] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [139] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [140] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [140] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR to:setupRasterIrq::@1 setupRasterIrq::@1: scope:[setupRasterIrq] from setupRasterIrq [141] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f diff --git a/src/test/ref/complex/clearscreen/clearscreen.log b/src/test/ref/complex/clearscreen/clearscreen.log index b35dec58b..8df1b5d92 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.log +++ b/src/test/ref/complex/clearscreen/clearscreen.log @@ -60,6 +60,8 @@ Adding value simple copy *((byte*)(const struct ProcessingSprite*) PROCESSING+(c Adding value simple copy *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$22) ← (byte) startProcessing::spriteCol Adding value simple copy *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$22) ← (const byte) STATUS_NEW Adding value simple copy *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$22) ← (byte*) startProcessing::screenPtr +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Replacing struct member reference (struct ProcessingChar) main::center.dist with member unwinding reference (byte) main::center_dist Replacing struct member reference (struct ProcessingChar) getCharToProcess::closest.dist with member unwinding reference (byte) getCharToProcess::closest_dist Replacing struct member reference (struct ProcessingChar) getCharToProcess::closest.dist with member unwinding reference (byte) getCharToProcess::closest_dist @@ -96,6 +98,7 @@ Replacing struct member reference *((struct ProcessingSprite*) processChars::pro Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).y with member unwinding reference *((word*~) processChars::$54) Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).vy with member unwinding reference *((word*~) processChars::$55) Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).y with member unwinding reference *((word*~) processChars::$56) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Eliminating unused variable with no statement (struct ProcessingChar~) main::$5 Unwinding list assignment { (byte~) main::$5_x, (byte~) main::$5_y, (byte~) main::$5_dist } ← { (byte) getCharToProcess::return_x, (byte) getCharToProcess::return_y, (byte) getCharToProcess::return_dist } @@ -1033,7 +1036,7 @@ setupRasterIrq: scope:[setupRasterIrq] from main::@11 asm { sei } *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR (bool~) setupRasterIrq::$0 ← (word) setupRasterIrq::raster#1 < (number) $100 if((bool~) setupRasterIrq::$0) goto setupRasterIrq::@1 to:setupRasterIrq::@3 @@ -1164,7 +1167,7 @@ SYMBOL TABLE SSA (const nomodify byte) BORDER_YPOS_BOTTOM = (byte) $fa (const nomodify byte) BORDER_YPOS_TOP = (byte) $32 (const nomodify byte*) CHARGEN = (byte*)(number) $d000 -(const nomodify byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) COLS = (byte*)(number) $d800 (const word*) CORDIC_ATAN2_ANGLES_16[(const nomodify byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; iINTERRUPT = CIA_INTERRUPT_CLEAR + // [140] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // setupRasterIrq::@1 // *VIC_CONTROL &=0x7f // [141] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 diff --git a/src/test/ref/complex/clearscreen/clearscreen.sym b/src/test/ref/complex/clearscreen/clearscreen.sym index bba1f2fd2..0e006eb7d 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.sym +++ b/src/test/ref/complex/clearscreen/clearscreen.sym @@ -10,7 +10,7 @@ (const nomodify byte) BORDER_YPOS_BOTTOM = (byte) $fa (const nomodify byte) BORDER_YPOS_TOP = (byte) $32 (const nomodify byte*) CHARGEN = (byte*) 53248 -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) COLS = (byte*) 55296 (const word*) CORDIC_ATAN2_ANGLES_16[(const nomodify byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; iPORT_A_DDR = %00000011 lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = toDd00(gfx) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = toDd00(gfx) lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // *D018 = toD018(BOB_SCREEN, BOB_CHARSET) lda #toD0181_return sta D018 @@ -210,12 +208,12 @@ main: { // while(keyboard_key_pressed(KEY_SPACE)) cmp #0 bne __b8 - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = toDd00(gfx) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = toDd00(gfx) lda #vicSelectGfxBank2_toDd001_return - sta CIA2_PORT_A + sta CIA2 // *D018 = toD018(BASIC_SCREEN, BASIC_CHARSET) lda #toD0182_return sta D018 @@ -242,11 +240,11 @@ keyboard_key_pressed: { // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // ~*CIA1_PORT_B - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // } rts diff --git a/src/test/ref/complex/prebob/grid-bobs.cfg b/src/test/ref/complex/prebob/grid-bobs.cfg index 73fcdd8a6..9f31d538e 100644 --- a/src/test/ref/complex/prebob/grid-bobs.cfg +++ b/src/test/ref/complex/prebob/grid-bobs.cfg @@ -22,13 +22,13 @@ main::@12: scope:[main] from main::@11 [9] call renderBobInit to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main::@12 - [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 [11] phi() to:main::vicSelectGfxBank1_@1 main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001 - [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 + [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 to:main::toD0181 main::toD0181: scope:[main] from main::vicSelectGfxBank1_@1 [13] phi() @@ -103,13 +103,13 @@ main::@16: scope:[main] from main::@8 [49] if((byte) 0!=(byte~) main::$17) goto main::@8 to:main::vicSelectGfxBank2 main::vicSelectGfxBank2: scope:[main] from main::@16 - [50] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [50] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank2_toDd001 main::vicSelectGfxBank2_toDd001: scope:[main] from main::vicSelectGfxBank2 [51] phi() to:main::vicSelectGfxBank2_@1 main::vicSelectGfxBank2_@1: scope:[main] from main::vicSelectGfxBank2_toDd001 - [52] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 + [52] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 to:main::toD0182 main::toD0182: scope:[main] from main::vicSelectGfxBank2_@1 [53] phi() @@ -137,8 +137,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [62] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) - [63] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [62] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) + [63] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [64] return diff --git a/src/test/ref/complex/prebob/grid-bobs.log b/src/test/ref/complex/prebob/grid-bobs.log index 7b54fe21e..cce70ac77 100644 --- a/src/test/ref/complex/prebob/grid-bobs.log +++ b/src/test/ref/complex/prebob/grid-bobs.log @@ -1,4 +1,16 @@ Resolved forward reference bob_charset_next_id to (byte) bob_charset_next_id +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call mulf8s_prepare (signed byte) mulf8s::a Inlined call call vicSelectGfxBank (const nomodify byte*) BOB_SCREEN @@ -57,8 +69,8 @@ memset::@return: scope:[memset] from memset::@1 (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed (byte) keyboard_matrix_read::rowid#1 ← phi( keyboard_key_pressed/(byte) keyboard_matrix_read::rowid#0 ) - *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) - (byte~) keyboard_matrix_read::$0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) + (byte~) keyboard_matrix_read::$0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) (byte) keyboard_matrix_read::row_pressed_bits#0 ← (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#0 ← (byte) keyboard_matrix_read::row_pressed_bits#0 to:keyboard_matrix_read::@return @@ -232,7 +244,7 @@ main::vicSelectGfxBank1: scope:[main] from main::@16 (byte*) progress_cursor#68 ← phi( main::@16/(byte*) progress_cursor#69 ) (byte**) renderBobCleanupNext#46 ← phi( main::@16/(byte**) renderBobCleanupNext#47 ) (byte*) main::vicSelectGfxBank1_gfx#1 ← phi( main::@16/(byte*) main::vicSelectGfxBank1_gfx#0 ) - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 (byte*) main::vicSelectGfxBank1_toDd001_gfx#0 ← (byte*) main::vicSelectGfxBank1_gfx#1 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 @@ -261,7 +273,7 @@ main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001_@ (byte**) renderBobCleanupNext#40 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte**) renderBobCleanupNext#42 ) (byte) main::vicSelectGfxBank1_toDd001_return#3 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte) main::vicSelectGfxBank1_toDd001_return#1 ) (byte~) main::vicSelectGfxBank1_$0 ← (byte) main::vicSelectGfxBank1_toDd001_return#3 - *((const nomodify byte*) CIA2_PORT_A) ← (byte~) main::vicSelectGfxBank1_$0 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte~) main::vicSelectGfxBank1_$0 to:main::@10 main::@10: scope:[main] from main::vicSelectGfxBank1_@1 (byte) bob_charset_next_id#68 ← phi( main::vicSelectGfxBank1_@1/(byte) bob_charset_next_id#70 ) @@ -489,7 +501,7 @@ main::vicSelectGfxBank2: scope:[main] from main::@9 (byte) progress_idx#46 ← phi( main::@9/(byte) progress_idx#47 ) (byte*) progress_cursor#46 ← phi( main::@9/(byte*) progress_cursor#47 ) (byte*) main::vicSelectGfxBank2_gfx#1 ← phi( main::@9/(byte*) main::vicSelectGfxBank2_gfx#0 ) - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 (byte*) main::vicSelectGfxBank2_toDd001_gfx#0 ← (byte*) main::vicSelectGfxBank2_gfx#1 to:main::vicSelectGfxBank2_toDd001 main::vicSelectGfxBank2_toDd001: scope:[main] from main::vicSelectGfxBank2 @@ -518,7 +530,7 @@ main::vicSelectGfxBank2_@1: scope:[main] from main::vicSelectGfxBank2_toDd001_@ (byte*) progress_cursor#39 ← phi( main::vicSelectGfxBank2_toDd001_@return/(byte*) progress_cursor#42 ) (byte) main::vicSelectGfxBank2_toDd001_return#3 ← phi( main::vicSelectGfxBank2_toDd001_@return/(byte) main::vicSelectGfxBank2_toDd001_return#1 ) (byte~) main::vicSelectGfxBank2_$0 ← (byte) main::vicSelectGfxBank2_toDd001_return#3 - *((const nomodify byte*) CIA2_PORT_A) ← (byte~) main::vicSelectGfxBank2_$0 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte~) main::vicSelectGfxBank2_$0 to:main::@12 main::@12: scope:[main] from main::vicSelectGfxBank2_@1 (byte**) renderBobCleanupNext#30 ← phi( main::vicSelectGfxBank2_@1/(byte**) renderBobCleanupNext#33 ) @@ -1155,14 +1167,29 @@ SYMBOL TABLE SSA (const nomodify byte) BOB_SUBTABLE_SIZE = (const nomodify byte) BOB_SHIFTS_X*(const nomodify byte) BOB_SHIFTS_Y (const byte*) BOB_TABLES[(number) 9*(number) 8*(number) 4] = { fill( 9*8*4, 0) } (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 -(const nomodify byte*) CIA1_PORT_A = (byte*)(number) $dc00 -(const nomodify byte*) CIA1_PORT_B = (byte*)(number) $dc01 -(const nomodify byte*) CIA2_PORT_A = (byte*)(number) $dd00 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const nomodify byte*) D018 = (byte*)(number) $d018 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const word*) MUL40[(number) $20] = { fill( $20, 0) } (const nomodify byte) NUM_BOBS = (byte) $19 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const to_nomodify byte*) PROTO_BOB[(number) 3*(number) 3*(number) 8] = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) .for (var x=0;x<3; x++) .for (var y=0; y<24; y++) @@ -2140,7 +2167,7 @@ Adding number conversion cast (unumber) $1ff in *((const byte*) mulf_sqr2_lo+(nu Adding number conversion cast (unumber) $100 in *((const byte*) mulf_sqr2_hi+(number) $1ff) ← *((const byte*) mulf_sqr1_hi+(number) $100) Adding number conversion cast (unumber) $1ff in *((const byte*) mulf_sqr2_hi+(number) $1ff) ← *((const byte*) mulf_sqr1_hi+(unumber)(number) $100) Adding number conversion cast (unumber) 1 in (byte) mulf_init::dir#1 ← (number) 1 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 Adding number conversion cast (unumber) $40 in (number~) main::vicSelectGfxBank1_toDd001_$1 ← (byte~) main::vicSelectGfxBank1_toDd001_$0 / (number) $40 Adding number conversion cast (unumber) main::vicSelectGfxBank1_toDd001_$1 in (number~) main::vicSelectGfxBank1_toDd001_$1 ← (byte~) main::vicSelectGfxBank1_toDd001_$0 / (unumber)(number) $40 Adding number conversion cast (unumber) 3 in (number~) main::vicSelectGfxBank1_toDd001_$2 ← (number) 3 ^ (unumber~) main::vicSelectGfxBank1_toDd001_$1 @@ -2166,7 +2193,7 @@ Adding number conversion cast (snumber) $80 in (signed word) main::rowOffsetY#1 Adding number conversion cast (unumber) 0 in *((const nomodify byte*) BORDERCOL) ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$19 ← (number) 0 != (byte~) main::$15 Adding number conversion cast (unumber) 0 in (bool~) main::$18 ← (number) 0 != (byte~) main::$17 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 Adding number conversion cast (unumber) $40 in (number~) main::vicSelectGfxBank2_toDd001_$1 ← (byte~) main::vicSelectGfxBank2_toDd001_$0 / (number) $40 Adding number conversion cast (unumber) main::vicSelectGfxBank2_toDd001_$1 in (number~) main::vicSelectGfxBank2_toDd001_$1 ← (byte~) main::vicSelectGfxBank2_toDd001_$0 / (unumber)(number) $40 Adding number conversion cast (unumber) 3 in (number~) main::vicSelectGfxBank2_toDd001_$2 ← (number) 3 ^ (unumber~) main::vicSelectGfxBank2_toDd001_$1 @@ -2272,14 +2299,14 @@ Adding number conversion cast (unumber) 0 in (byte) progress_idx#9 ← (number) Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (byte) mulf_init::dir#1 ← (unumber)(number) 1 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 Inlining cast (byte) memset::c#0 ← (unumber)(number) 0 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) $f Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) 1 Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) 2 Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) 0 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) 0) ← (unumber)(number) 0 Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $28) ← (unumber)(number) 0 Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $50) ← (unumber)(number) 0 @@ -2301,10 +2328,8 @@ Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53272 -Simplifying constant pointer cast (byte*) 56320 -Simplifying constant pointer cast (byte*) 56321 -Simplifying constant pointer cast (byte*) 56576 -Simplifying constant pointer cast (byte*) 56578 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 4096 Simplifying constant pointer cast (byte*) 10240 @@ -2942,6 +2967,9 @@ Resolved ranged next value [213] renderBobCleanup::i#1 ← ++ renderBobCleanup:: Resolved ranged comparison value [215] if(renderBobCleanup::i#1!=rangelast(0,NUM_BOBS-1)) goto renderBobCleanup::@1 to (const nomodify byte) NUM_BOBS-(byte) 1+(number) 1 Simplifying constant evaluating to zero (byte) 0*(const nomodify byte) BOB_SUBTABLE_SIZE in [190] *((byte*) renderBob::screen#0 + (byte) 0) ← *((const byte*) BOB_TABLES+(byte) 0*(const nomodify byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) Successful SSA optimization PassNSimplifyConstantZero +Simplifying expression containing zero (byte*)CIA1 in [14] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) +Simplifying expression containing zero (byte*)CIA2 in [77] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) main::vicSelectGfxBank1_toDd001_return#0 +Simplifying expression containing zero (byte*)CIA2 in [146] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) main::vicSelectGfxBank2_toDd001_return#0 Simplifying expression containing zero BOB_TABLES in [190] *((byte*) renderBob::screen#0 + (byte) 0) ← *((const byte*) BOB_TABLES+(byte) 0 + (byte) renderBob::bob_table_idx#0) Simplifying expression containing zero renderBob::screen#0 in [190] *((byte*) renderBob::screen#0 + (byte) 0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) Simplifying expression containing zero renderBobCleanup::screen#0 in [204] *((byte*) renderBobCleanup::screen#0 + (byte) 0) ← (byte) 0 @@ -2951,6 +2979,7 @@ Eliminating unused variable - keeping the phi block (byte**) renderBobCleanupNex Eliminating unused variable - keeping the phi block (byte**) renderBobCleanupNext#11 Eliminating unused variable (byte) charsetFindOrAddGlyph::return#0 and assignment [159] (byte) charsetFindOrAddGlyph::return#0 ← (byte) charsetFindOrAddGlyph::glyph_id#11 Eliminating unused constant (const void*) memset::return#2 +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A Eliminating unused constant (const byte) bob_charset_next_id#27 Eliminating unused constant (const byte*) progress_cursor#27 Eliminating unused constant (const byte) progress_idx#27 @@ -3447,13 +3476,13 @@ main::@12: scope:[main] from main::@11 [9] call renderBobInit to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main::@12 - [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 [11] phi() to:main::vicSelectGfxBank1_@1 main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001 - [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 + [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 to:main::toD0181 main::toD0181: scope:[main] from main::vicSelectGfxBank1_@1 [13] phi() @@ -3528,13 +3557,13 @@ main::@16: scope:[main] from main::@8 [49] if((byte) 0!=(byte~) main::$17) goto main::@8 to:main::vicSelectGfxBank2 main::vicSelectGfxBank2: scope:[main] from main::@16 - [50] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [50] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank2_toDd001 main::vicSelectGfxBank2_toDd001: scope:[main] from main::vicSelectGfxBank2 [51] phi() to:main::vicSelectGfxBank2_@1 main::vicSelectGfxBank2_@1: scope:[main] from main::vicSelectGfxBank2_toDd001 - [52] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 + [52] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 to:main::toD0182 main::toD0182: scope:[main] from main::vicSelectGfxBank2_@1 [53] phi() @@ -3562,8 +3591,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [62] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) - [63] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [62] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) + [63] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [64] return @@ -3932,6 +3961,20 @@ mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte) bob_charset_next_id (byte) bob_charset_next_id#14 1051.5 (byte) bob_charset_next_id#16 9.091909185454545E8 @@ -4412,14 +4455,10 @@ Target platform is c64basic / MOS6502X .label RASTER = $d012 .label BORDERCOL = $d020 .label D018 = $d018 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .const KEY_SPACE = $3c // The BASIC screen .label BASIC_SCREEN = $400 @@ -4438,6 +4477,8 @@ Target platform is c64basic / MOS6502X // The number of BOBs to render .const NUM_BOBS = $19 .const SIZEOF_POINTER = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // BOB charset ID of the next glyph to be added .label bob_charset_next_id = $22 // Current index within the progress cursor (0-7) @@ -4512,9 +4553,9 @@ main: { jmp vicSelectGfxBank1 // main::vicSelectGfxBank1 vicSelectGfxBank1: - // [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [11] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 @@ -4523,9 +4564,9 @@ main: { jmp vicSelectGfxBank1___b1 // main::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [13] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181] toD0181_from_vicSelectGfxBank1___b1: jmp toD0181 @@ -4773,9 +4814,9 @@ main: { jmp vicSelectGfxBank2 // main::vicSelectGfxBank2 vicSelectGfxBank2: - // [50] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [50] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [51] phi from main::vicSelectGfxBank2 to main::vicSelectGfxBank2_toDd001 [phi:main::vicSelectGfxBank2->main::vicSelectGfxBank2_toDd001] vicSelectGfxBank2_toDd001_from_vicSelectGfxBank2: jmp vicSelectGfxBank2_toDd001 @@ -4784,9 +4825,9 @@ main: { jmp vicSelectGfxBank2___b1 // main::vicSelectGfxBank2_@1 vicSelectGfxBank2___b1: - // [52] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [52] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank2_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [53] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182] toD0182_from_vicSelectGfxBank2___b1: jmp toD0182 @@ -4846,11 +4887,11 @@ keyboard_key_pressed: { keyboard_matrix_read: { .label return = $47 .label return_1 = $44 - // [62] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // [62] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // [63] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuz1=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [63] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuz1=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff sta.z return jmp __breturn @@ -6075,8 +6116,8 @@ PROTO_BOB: MUL40: .fill 2*$20, 0 REGISTER UPLIFT POTENTIAL REGISTERS -Statement [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [14] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [17] if(*((const nomodify byte*) RASTER)<(byte) $f8) goto main::@2 [ main::origX#8 main::rowOffsetY#10 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 ] { } ) always clobbers reg byte a Statement [18] *((const nomodify byte*) BORDERCOL) ← (byte) $f [ main::origX#8 main::rowOffsetY#10 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 ] { } ) always clobbers reg byte a @@ -6094,11 +6135,11 @@ Statement [35] (signed word) main::rowY#1 ← (signed word) main::y#0 + (const s Statement [38] (signed word) main::origX#1 ← (signed word) main::origX#8 + (signed word) $100 [ main::rowOffsetY#10 main::origX#1 ] ( main:2 [ main::rowOffsetY#10 main::origX#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } } ) always clobbers reg byte a Statement [39] (signed word) main::rowOffsetY#1 ← (signed word) main::rowOffsetY#10 + (signed word) $80 [ main::origX#1 main::rowOffsetY#1 ] ( main:2 [ main::origX#1 main::rowOffsetY#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } } ) always clobbers reg byte a Statement [40] *((const nomodify byte*) BORDERCOL) ← (byte) 0 [ main::origX#1 main::rowOffsetY#1 ] ( main:2 [ main::origX#1 main::rowOffsetY#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } } ) always clobbers reg byte a -Statement [50] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [52] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [50] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [52] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [54] *((const nomodify byte*) D018) ← (const byte) main::toD0182_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [62] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:41::keyboard_matrix_read:57 [ main::origX#1 main::rowOffsetY#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:46::keyboard_matrix_read:57 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [63] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:41::keyboard_matrix_read:57 [ main::origX#1 main::rowOffsetY#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:46::keyboard_matrix_read:57 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [62] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:41::keyboard_matrix_read:57 [ main::origX#1 main::rowOffsetY#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:46::keyboard_matrix_read:57 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [63] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:41::keyboard_matrix_read:57 [ main::origX#1 main::rowOffsetY#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:46::keyboard_matrix_read:57 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [65] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:62 [ renderBob::xpos#0 ] Removing always clobbered register reg byte a as potential for zp[1]:63 [ renderBob::ypos#0 ] @@ -6212,8 +6253,8 @@ Removing always clobbered register reg byte y as potential for zp[1]:50 [ mulf_i Removing always clobbered register reg byte y as potential for zp[1]:53 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] Statement [234] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] { } ) always clobbers reg byte y Statement [236] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] { } ) always clobbers reg byte a -Statement [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [14] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [17] if(*((const nomodify byte*) RASTER)<(byte) $f8) goto main::@2 [ main::origX#8 main::rowOffsetY#10 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 ] { } ) always clobbers reg byte a Statement [18] *((const nomodify byte*) BORDERCOL) ← (byte) $f [ main::origX#8 main::rowOffsetY#10 ] ( main:2 [ main::origX#8 main::rowOffsetY#10 ] { } ) always clobbers reg byte a @@ -6229,11 +6270,11 @@ Statement [35] (signed word) main::rowY#1 ← (signed word) main::y#0 + (const s Statement [38] (signed word) main::origX#1 ← (signed word) main::origX#8 + (signed word) $100 [ main::rowOffsetY#10 main::origX#1 ] ( main:2 [ main::rowOffsetY#10 main::origX#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } } ) always clobbers reg byte a Statement [39] (signed word) main::rowOffsetY#1 ← (signed word) main::rowOffsetY#10 + (signed word) $80 [ main::origX#1 main::rowOffsetY#1 ] ( main:2 [ main::origX#1 main::rowOffsetY#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } } ) always clobbers reg byte a Statement [40] *((const nomodify byte*) BORDERCOL) ← (byte) 0 [ main::origX#1 main::rowOffsetY#1 ] ( main:2 [ main::origX#1 main::rowOffsetY#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } } ) always clobbers reg byte a -Statement [50] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [52] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [50] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [52] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [54] *((const nomodify byte*) D018) ← (const byte) main::toD0182_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [62] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:41::keyboard_matrix_read:57 [ main::origX#1 main::rowOffsetY#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:46::keyboard_matrix_read:57 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [63] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:41::keyboard_matrix_read:57 [ main::origX#1 main::rowOffsetY#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:46::keyboard_matrix_read:57 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [62] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:41::keyboard_matrix_read:57 [ main::origX#1 main::rowOffsetY#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:46::keyboard_matrix_read:57 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [63] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:41::keyboard_matrix_read:57 [ main::origX#1 main::rowOffsetY#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:46::keyboard_matrix_read:57 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [65] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] { } ) always clobbers reg byte a Statement [66] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] { } ) always clobbers reg byte a Statement [67] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ( main:2::renderBob:28 [ main::origX#8 main::rowOffsetY#10 main::x#0 main::y#0 main::col#5 main::x#2 main::y#2 main::row#2 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] { } ) always clobbers reg byte a @@ -6400,6 +6441,7 @@ Uplift Scope [renderBobInit] 2,502.5: zp[1]:22 [ renderBobInit::i#2 renderBobIni Uplift Scope [keyboard_matrix_read] 3,667.33: zp[1]:71 [ keyboard_matrix_read::return#0 ] 2,002: zp[1]:68 [ keyboard_matrix_read::return#2 ] Uplift Scope [memset] 3,336.67: zp[2]:19 [ memset::dst#2 memset::dst#1 ] Uplift Scope [keyboard_key_pressed] 2,002: zp[1]:69 [ keyboard_key_pressed::$2 ] 300.75: zp[1]:70 [ keyboard_key_pressed::return#0 ] 202: zp[1]:64 [ keyboard_key_pressed::return#2 ] 202: zp[1]:66 [ keyboard_key_pressed::return#3 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [RADIX] Uplift Scope [progress_init] Uplift Scope [progress_inc] @@ -6423,6 +6465,7 @@ Uplifting [keyboard_matrix_read] best 4043196 combination reg byte a [ keyboard_ Uplifting [memset] best 4043196 combination zp[2]:19 [ memset::dst#2 memset::dst#1 ] Uplifting [keyboard_key_pressed] best 4043007 combination reg byte a [ keyboard_key_pressed::$2 ] reg byte a [ keyboard_key_pressed::return#0 ] reg byte a [ keyboard_key_pressed::return#2 ] reg byte a [ keyboard_key_pressed::return#3 ] Limited combination testing to 100 combinations of 256 possible. +Uplifting [MOS6526_CIA] best 4043007 combination Uplifting [RADIX] best 4043007 combination Uplifting [progress_init] best 4043007 combination Uplifting [progress_inc] best 4043007 combination @@ -6518,14 +6561,10 @@ ASSEMBLER BEFORE OPTIMIZATION .label RASTER = $d012 .label BORDERCOL = $d020 .label D018 = $d018 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .const KEY_SPACE = $3c // The BASIC screen .label BASIC_SCREEN = $400 @@ -6544,6 +6583,8 @@ ASSEMBLER BEFORE OPTIMIZATION // The number of BOBs to render .const NUM_BOBS = $19 .const SIZEOF_POINTER = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // BOB charset ID of the next glyph to be added .label bob_charset_next_id = $11 // Current index within the progress cursor (0-7) @@ -6615,9 +6656,9 @@ main: { jmp vicSelectGfxBank1 // main::vicSelectGfxBank1 vicSelectGfxBank1: - // [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [11] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 @@ -6626,9 +6667,9 @@ main: { jmp vicSelectGfxBank1___b1 // main::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [13] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181] toD0181_from_vicSelectGfxBank1___b1: jmp toD0181 @@ -6864,9 +6905,9 @@ main: { jmp vicSelectGfxBank2 // main::vicSelectGfxBank2 vicSelectGfxBank2: - // [50] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [50] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [51] phi from main::vicSelectGfxBank2 to main::vicSelectGfxBank2_toDd001 [phi:main::vicSelectGfxBank2->main::vicSelectGfxBank2_toDd001] vicSelectGfxBank2_toDd001_from_vicSelectGfxBank2: jmp vicSelectGfxBank2_toDd001 @@ -6875,9 +6916,9 @@ main: { jmp vicSelectGfxBank2___b1 // main::vicSelectGfxBank2_@1 vicSelectGfxBank2___b1: - // [52] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [52] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank2_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [53] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182] toD0182_from_vicSelectGfxBank2___b1: jmp toD0182 @@ -6925,11 +6966,11 @@ keyboard_key_pressed: { // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. keyboard_matrix_read: { - // [62] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // [62] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // [63] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [63] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff jmp __breturn // keyboard_matrix_read::@return @@ -8327,14 +8368,28 @@ FINAL SYMBOL TABLE (const nomodify byte) BOB_SUBTABLE_SIZE = (const nomodify byte) BOB_SHIFTS_X*(const nomodify byte) BOB_SHIFTS_Y (const byte*) BOB_TABLES[(number) 9*(number) 8*(number) 4] = { fill( 9*8*4, 0) } (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte*) D018 = (byte*) 53272 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const word*) MUL40[(number) $20] = { fill( $20, 0) } (const nomodify byte) NUM_BOBS = (byte) $19 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const to_nomodify byte*) PROTO_BOB[(number) 3*(number) 3*(number) 8] = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) .for (var x=0;x<3; x++) .for (var y=0; y<24; y++) @@ -8757,14 +8812,10 @@ Score: 3582851 .label RASTER = $d012 .label BORDERCOL = $d020 .label D018 = $d018 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .const KEY_SPACE = $3c // The BASIC screen .label BASIC_SCREEN = $400 @@ -8783,6 +8834,8 @@ Score: 3582851 // The number of BOBs to render .const NUM_BOBS = $19 .const SIZEOF_POINTER = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // BOB charset ID of the next glyph to be added .label bob_charset_next_id = $11 // Current index within the progress cursor (0-7) @@ -8837,17 +8890,17 @@ main: { // [109] phi from main::@12 to renderBobInit [phi:main::@12->renderBobInit] jsr renderBobInit // main::vicSelectGfxBank1 - // *CIA2_PORT_A_DDR = %00000011 - // [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [11] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] // main::vicSelectGfxBank1_toDd001 // main::vicSelectGfxBank1_@1 - // *CIA2_PORT_A = toDd00(gfx) - // [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A = toDd00(gfx) + // [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [13] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181] // main::toD0181 // main::@9 @@ -9065,17 +9118,17 @@ main: { cmp #0 bne __b8 // main::vicSelectGfxBank2 - // *CIA2_PORT_A_DDR = %00000011 - // [50] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [50] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [51] phi from main::vicSelectGfxBank2 to main::vicSelectGfxBank2_toDd001 [phi:main::vicSelectGfxBank2->main::vicSelectGfxBank2_toDd001] // main::vicSelectGfxBank2_toDd001 // main::vicSelectGfxBank2_@1 - // *CIA2_PORT_A = toDd00(gfx) - // [52] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A = toDd00(gfx) + // [52] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank2_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [53] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182] // main::toD0182 // main::@10 @@ -9117,13 +9170,13 @@ keyboard_key_pressed: { // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] - // [62] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] + // [62] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // ~*CIA1_PORT_B - // [63] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + // [63] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // keyboard_matrix_read::@return // } diff --git a/src/test/ref/complex/prebob/grid-bobs.sym b/src/test/ref/complex/prebob/grid-bobs.sym index 78e0a9b12..856be2b68 100644 --- a/src/test/ref/complex/prebob/grid-bobs.sym +++ b/src/test/ref/complex/prebob/grid-bobs.sym @@ -10,14 +10,28 @@ (const nomodify byte) BOB_SUBTABLE_SIZE = (const nomodify byte) BOB_SHIFTS_X*(const nomodify byte) BOB_SHIFTS_Y (const byte*) BOB_TABLES[(number) 9*(number) 8*(number) 4] = { fill( 9*8*4, 0) } (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte*) D018 = (byte*) 53272 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const word*) MUL40[(number) $20] = { fill( $20, 0) } (const nomodify byte) NUM_BOBS = (byte) $19 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const to_nomodify byte*) PROTO_BOB[(number) 3*(number) 3*(number) 8] = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) .for (var x=0;x<3; x++) .for (var y=0; y<24; y++) diff --git a/src/test/ref/complex/prebob/vogel-bobs.asm b/src/test/ref/complex/prebob/vogel-bobs.asm index 07c8d570c..aed885591 100644 --- a/src/test/ref/complex/prebob/vogel-bobs.asm +++ b/src/test/ref/complex/prebob/vogel-bobs.asm @@ -5,14 +5,10 @@ .label RASTER = $d012 .label BORDERCOL = $d020 .label D018 = $d018 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .const KEY_SPACE = $3c // The BASIC screen .label SCREEN_BASIC = $400 @@ -31,6 +27,8 @@ // The number of BOBs to render .const NUM_BOBS = $14 .const SIZEOF_POINTER = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label COS = SIN+$40 // BOB charset ID of the next glyph to be added .label bob_charset_next_id = 9 @@ -62,12 +60,12 @@ main: { jsr prepareBobs // renderBobInit() jsr renderBobInit - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = toDd00(gfx) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = toDd00(gfx) lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // *D018 = toD018(BOB_SCREEN, BOB_CHARSET) lda #toD0181_return sta D018 @@ -187,12 +185,12 @@ main: { // while(keyboard_key_pressed(KEY_SPACE)) cmp #0 bne __b6 - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = toDd00(gfx) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = toDd00(gfx) lda #vicSelectGfxBank2_toDd001_return - sta CIA2_PORT_A + sta CIA2 // *D018 = toD018(SCREEN_BASIC, CHARSET_BASIC) lda #toD0182_return sta D018 @@ -219,11 +217,11 @@ keyboard_key_pressed: { // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // ~*CIA1_PORT_B - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // } rts diff --git a/src/test/ref/complex/prebob/vogel-bobs.cfg b/src/test/ref/complex/prebob/vogel-bobs.cfg index 316915cda..45a80ffd3 100644 --- a/src/test/ref/complex/prebob/vogel-bobs.cfg +++ b/src/test/ref/complex/prebob/vogel-bobs.cfg @@ -22,13 +22,13 @@ main::@10: scope:[main] from main::@9 [9] call renderBobInit to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main::@10 - [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 [11] phi() to:main::vicSelectGfxBank1_@1 main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001 - [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 + [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 to:main::toD0181 main::toD0181: scope:[main] from main::vicSelectGfxBank1_@1 [13] phi() @@ -104,13 +104,13 @@ main::@16: scope:[main] from main::@6 [54] if((byte) 0!=(byte~) main::$21) goto main::@6 to:main::vicSelectGfxBank2 main::vicSelectGfxBank2: scope:[main] from main::@16 - [55] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [55] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank2_toDd001 main::vicSelectGfxBank2_toDd001: scope:[main] from main::vicSelectGfxBank2 [56] phi() to:main::vicSelectGfxBank2_@1 main::vicSelectGfxBank2_@1: scope:[main] from main::vicSelectGfxBank2_toDd001 - [57] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 + [57] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 to:main::toD0182 main::toD0182: scope:[main] from main::vicSelectGfxBank2_@1 [58] phi() @@ -138,8 +138,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [67] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) - [68] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [67] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) + [68] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [69] return diff --git a/src/test/ref/complex/prebob/vogel-bobs.log b/src/test/ref/complex/prebob/vogel-bobs.log index cad30618d..962ffe093 100644 --- a/src/test/ref/complex/prebob/vogel-bobs.log +++ b/src/test/ref/complex/prebob/vogel-bobs.log @@ -1,4 +1,16 @@ Resolved forward reference bob_charset_next_id to (byte) bob_charset_next_id +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call mulf8s_prepare (signed byte) mulf8s::a Inlined call call vicSelectGfxBank (const nomodify byte*) BOB_SCREEN @@ -57,8 +69,8 @@ memset::@return: scope:[memset] from memset::@1 (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed (byte) keyboard_matrix_read::rowid#1 ← phi( keyboard_key_pressed/(byte) keyboard_matrix_read::rowid#0 ) - *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) - (byte~) keyboard_matrix_read::$0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) + (byte~) keyboard_matrix_read::$0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) (byte) keyboard_matrix_read::row_pressed_bits#0 ← (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#0 ← (byte) keyboard_matrix_read::row_pressed_bits#0 to:keyboard_matrix_read::@return @@ -337,7 +349,7 @@ main::vicSelectGfxBank1: scope:[main] from main::@14 (byte*) progress_cursor#68 ← phi( main::@14/(byte*) progress_cursor#69 ) (byte**) renderBobCleanupNext#46 ← phi( main::@14/(byte**) renderBobCleanupNext#47 ) (byte*) main::vicSelectGfxBank1_gfx#1 ← phi( main::@14/(byte*) main::vicSelectGfxBank1_gfx#0 ) - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 (byte*) main::vicSelectGfxBank1_toDd001_gfx#0 ← (byte*) main::vicSelectGfxBank1_gfx#1 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 @@ -366,7 +378,7 @@ main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001_@ (byte**) renderBobCleanupNext#40 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte**) renderBobCleanupNext#42 ) (byte) main::vicSelectGfxBank1_toDd001_return#3 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte) main::vicSelectGfxBank1_toDd001_return#1 ) (byte~) main::vicSelectGfxBank1_$0 ← (byte) main::vicSelectGfxBank1_toDd001_return#3 - *((const nomodify byte*) CIA2_PORT_A) ← (byte~) main::vicSelectGfxBank1_$0 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte~) main::vicSelectGfxBank1_$0 to:main::@8 main::@8: scope:[main] from main::vicSelectGfxBank1_@1 (byte) bob_charset_next_id#68 ← phi( main::vicSelectGfxBank1_@1/(byte) bob_charset_next_id#70 ) @@ -586,7 +598,7 @@ main::vicSelectGfxBank2: scope:[main] from main::@7 (byte) progress_idx#46 ← phi( main::@7/(byte) progress_idx#47 ) (byte*) progress_cursor#46 ← phi( main::@7/(byte*) progress_cursor#47 ) (byte*) main::vicSelectGfxBank2_gfx#1 ← phi( main::@7/(byte*) main::vicSelectGfxBank2_gfx#0 ) - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 (byte*) main::vicSelectGfxBank2_toDd001_gfx#0 ← (byte*) main::vicSelectGfxBank2_gfx#1 to:main::vicSelectGfxBank2_toDd001 main::vicSelectGfxBank2_toDd001: scope:[main] from main::vicSelectGfxBank2 @@ -615,7 +627,7 @@ main::vicSelectGfxBank2_@1: scope:[main] from main::vicSelectGfxBank2_toDd001_@ (byte*) progress_cursor#39 ← phi( main::vicSelectGfxBank2_toDd001_@return/(byte*) progress_cursor#42 ) (byte) main::vicSelectGfxBank2_toDd001_return#3 ← phi( main::vicSelectGfxBank2_toDd001_@return/(byte) main::vicSelectGfxBank2_toDd001_return#1 ) (byte~) main::vicSelectGfxBank2_$0 ← (byte) main::vicSelectGfxBank2_toDd001_return#3 - *((const nomodify byte*) CIA2_PORT_A) ← (byte~) main::vicSelectGfxBank2_$0 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte~) main::vicSelectGfxBank2_$0 to:main::@10 main::@10: scope:[main] from main::vicSelectGfxBank2_@1 (byte**) renderBobCleanupNext#30 ← phi( main::vicSelectGfxBank2_@1/(byte**) renderBobCleanupNext#33 ) @@ -1248,15 +1260,30 @@ SYMBOL TABLE SSA (const byte*) BOB_TABLES[(number) 9*(number) 8*(number) 4] = { fill( 9*8*4, 0) } (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 (const nomodify byte*) CHARSET_BASIC = (byte*)(number) $1000 -(const nomodify byte*) CIA1_PORT_A = (byte*)(number) $dc00 -(const nomodify byte*) CIA1_PORT_B = (byte*)(number) $dc01 -(const nomodify byte*) CIA2_PORT_A = (byte*)(number) $dd00 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const signed byte*) COS = (const signed byte*) SIN+(number) $40 (const nomodify byte*) D018 = (byte*)(number) $d018 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const word*) MUL40[(number) $20] = { fill( $20, 0) } (const nomodify byte) NUM_BOBS = (byte) $14 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const to_nomodify byte*) PROTO_BOB[(number) 3*(number) 3*(number) 8] = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) .for (var x=0;x<3; x++) .for (var y=0; y<24; y++) @@ -2305,7 +2332,7 @@ Adding number conversion cast (unumber) $1ff in *((const byte*) mulf_sqr2_hi+(nu Adding number conversion cast (unumber) 1 in (byte) mulf_init::dir#1 ← (number) 1 Adding number conversion cast (snumber) 0 in (bool~) mulf8s_prepared::$1 ← *((const nomodify signed byte*) mulf8s_prepared::memA) < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) mulf8s_prepared::$3 ← (signed byte) mulf8s_prepared::b#2 < (number) 0 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 Adding number conversion cast (unumber) $40 in (number~) main::vicSelectGfxBank1_toDd001_$1 ← (byte~) main::vicSelectGfxBank1_toDd001_$0 / (number) $40 Adding number conversion cast (unumber) main::vicSelectGfxBank1_toDd001_$1 in (number~) main::vicSelectGfxBank1_toDd001_$1 ← (byte~) main::vicSelectGfxBank1_toDd001_$0 / (unumber)(number) $40 Adding number conversion cast (unumber) 3 in (number~) main::vicSelectGfxBank1_toDd001_$2 ← (number) 3 ^ (unumber~) main::vicSelectGfxBank1_toDd001_$1 @@ -2339,7 +2366,7 @@ Adding number conversion cast (unumber) 3 in (byte) main::angle#1 ← (byte) mai Adding number conversion cast (unumber) 0 in *((const nomodify byte*) BORDERCOL) ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$23 ← (number) 0 != (byte~) main::$19 Adding number conversion cast (unumber) 0 in (bool~) main::$22 ← (number) 0 != (byte~) main::$21 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 Adding number conversion cast (unumber) $40 in (number~) main::vicSelectGfxBank2_toDd001_$1 ← (byte~) main::vicSelectGfxBank2_toDd001_$0 / (number) $40 Adding number conversion cast (unumber) main::vicSelectGfxBank2_toDd001_$1 in (number~) main::vicSelectGfxBank2_toDd001_$1 ← (byte~) main::vicSelectGfxBank2_toDd001_$0 / (unumber)(number) $40 Adding number conversion cast (unumber) 3 in (number~) main::vicSelectGfxBank2_toDd001_$2 ← (number) 3 ^ (unumber~) main::vicSelectGfxBank2_toDd001_$1 @@ -2445,14 +2472,14 @@ Adding number conversion cast (unumber) 0 in (byte) progress_idx#9 ← (number) Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (byte) mulf_init::dir#1 ← (unumber)(number) 1 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 Inlining cast (byte) memset::c#0 ← (unumber)(number) 0 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) $f Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) 1 Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) 2 Inlining cast *((const nomodify byte*) BORDERCOL) ← (unumber)(number) 0 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) 0) ← (unumber)(number) 0 Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $28) ← (unumber)(number) 0 Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $50) ← (unumber)(number) 0 @@ -2474,10 +2501,8 @@ Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53272 -Simplifying constant pointer cast (byte*) 56320 -Simplifying constant pointer cast (byte*) 56321 -Simplifying constant pointer cast (byte*) 56576 -Simplifying constant pointer cast (byte*) 56578 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (byte*) 253 Simplifying constant pointer cast (byte*) 254 Simplifying constant pointer cast (byte*) 255 @@ -3137,6 +3162,9 @@ Resolved ranged next value [255] renderBobCleanup::i#1 ← ++ renderBobCleanup:: Resolved ranged comparison value [257] if(renderBobCleanup::i#1!=rangelast(0,NUM_BOBS-1)) goto renderBobCleanup::@1 to (const nomodify byte) NUM_BOBS-(byte) 1+(number) 1 Simplifying constant evaluating to zero (byte) 0*(const nomodify byte) BOB_SUBTABLE_SIZE in [232] *((byte*) renderBob::screen#0 + (byte) 0) ← *((const byte*) BOB_TABLES+(byte) 0*(const nomodify byte) BOB_SUBTABLE_SIZE + (byte) renderBob::bob_table_idx#0) Successful SSA optimization PassNSimplifyConstantZero +Simplifying expression containing zero (byte*)CIA1 in [14] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) +Simplifying expression containing zero (byte*)CIA2 in [115] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) main::vicSelectGfxBank1_toDd001_return#0 +Simplifying expression containing zero (byte*)CIA2 in [188] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) main::vicSelectGfxBank2_toDd001_return#0 Simplifying expression containing zero BOB_TABLES in [232] *((byte*) renderBob::screen#0 + (byte) 0) ← *((const byte*) BOB_TABLES+(byte) 0 + (byte) renderBob::bob_table_idx#0) Simplifying expression containing zero renderBob::screen#0 in [232] *((byte*) renderBob::screen#0 + (byte) 0) ← *((const byte*) BOB_TABLES + (byte) renderBob::bob_table_idx#0) Simplifying expression containing zero renderBobCleanup::screen#0 in [246] *((byte*) renderBobCleanup::screen#0 + (byte) 0) ← (byte) 0 @@ -3146,6 +3174,7 @@ Eliminating unused variable - keeping the phi block (byte**) renderBobCleanupNex Eliminating unused variable - keeping the phi block (byte**) renderBobCleanupNext#11 Eliminating unused variable (byte) bobCharsetFindOrAddGlyph::return#0 and assignment [199] (byte) bobCharsetFindOrAddGlyph::return#0 ← (byte) bobCharsetFindOrAddGlyph::glyph_id#11 Eliminating unused constant (const void*) memset::return#2 +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A Eliminating unused constant (const byte) bob_charset_next_id#27 Eliminating unused constant (const byte*) progress_cursor#27 Eliminating unused constant (const byte) progress_idx#27 @@ -3652,13 +3681,13 @@ main::@10: scope:[main] from main::@9 [9] call renderBobInit to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main::@10 - [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 [11] phi() to:main::vicSelectGfxBank1_@1 main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001 - [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 + [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 to:main::toD0181 main::toD0181: scope:[main] from main::vicSelectGfxBank1_@1 [13] phi() @@ -3734,13 +3763,13 @@ main::@16: scope:[main] from main::@6 [54] if((byte) 0!=(byte~) main::$21) goto main::@6 to:main::vicSelectGfxBank2 main::vicSelectGfxBank2: scope:[main] from main::@16 - [55] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [55] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank2_toDd001 main::vicSelectGfxBank2_toDd001: scope:[main] from main::vicSelectGfxBank2 [56] phi() to:main::vicSelectGfxBank2_@1 main::vicSelectGfxBank2_@1: scope:[main] from main::vicSelectGfxBank2_toDd001 - [57] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 + [57] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 to:main::toD0182 main::toD0182: scope:[main] from main::vicSelectGfxBank2_@1 [58] phi() @@ -3768,8 +3797,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [67] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) - [68] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [67] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) + [68] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [69] return @@ -4208,6 +4237,20 @@ mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte()) bobCharsetFindOrAddGlyph((byte*) bobCharsetFindOrAddGlyph::bob_glyph) (byte*) bobCharsetFindOrAddGlyph::bob_glyph (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 200002.0 @@ -4764,14 +4807,10 @@ Target platform is c64basic / MOS6502X .label RASTER = $d012 .label BORDERCOL = $d020 .label D018 = $d018 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .const KEY_SPACE = $3c // The BASIC screen .label SCREEN_BASIC = $400 @@ -4790,6 +4829,8 @@ Target platform is c64basic / MOS6502X // The number of BOBs to render .const NUM_BOBS = $14 .const SIZEOF_POINTER = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label COS = SIN+$40 // BOB charset ID of the next glyph to be added .label bob_charset_next_id = $1c @@ -4859,9 +4900,9 @@ main: { jmp vicSelectGfxBank1 // main::vicSelectGfxBank1 vicSelectGfxBank1: - // [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [11] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 @@ -4870,9 +4911,9 @@ main: { jmp vicSelectGfxBank1___b1 // main::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [13] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181] toD0181_from_vicSelectGfxBank1___b1: jmp toD0181 @@ -5120,9 +5161,9 @@ main: { jmp vicSelectGfxBank2 // main::vicSelectGfxBank2 vicSelectGfxBank2: - // [55] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [55] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [56] phi from main::vicSelectGfxBank2 to main::vicSelectGfxBank2_toDd001 [phi:main::vicSelectGfxBank2->main::vicSelectGfxBank2_toDd001] vicSelectGfxBank2_toDd001_from_vicSelectGfxBank2: jmp vicSelectGfxBank2_toDd001 @@ -5131,9 +5172,9 @@ main: { jmp vicSelectGfxBank2___b1 // main::vicSelectGfxBank2_@1 vicSelectGfxBank2___b1: - // [57] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [57] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank2_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [58] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182] toD0182_from_vicSelectGfxBank2___b1: jmp toD0182 @@ -5193,11 +5234,11 @@ keyboard_key_pressed: { keyboard_matrix_read: { .label return = $4f .label return_1 = $4c - // [67] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // [67] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // [68] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuz1=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [68] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuz1=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff sta.z return jmp __breturn @@ -6616,8 +6657,8 @@ SIN: MUL40: .fill 2*$20, 0 REGISTER UPLIFT POTENTIAL REGISTERS -Statement [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [14] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [17] if(*((const nomodify byte*) RASTER)<(byte) $f8) goto main::@2 [ main::angle#8 ] ( main:2 [ main::angle#8 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::angle#8 main::angle#1 ] @@ -6638,11 +6679,11 @@ Statement [37] (byte) main::a#1 ← (byte) main::a#2 + (byte) $62 [ main::angle# Statement [38] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byte) 3 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 main::x#0 main::y#0 ] ( main:2 [ main::angle#8 renderBobCleanupNext#17 main::i#2 main::r#1 main::a#1 main::x#0 main::y#0 ] { } ) always clobbers reg byte a Statement [44] (byte) main::angle#1 ← (byte) main::angle#8 + (byte) 3 [ main::angle#1 ] ( main:2 [ main::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } } ) always clobbers reg byte a Statement [45] *((const nomodify byte*) BORDERCOL) ← (byte) 0 [ main::angle#1 ] ( main:2 [ main::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } } ) always clobbers reg byte a -Statement [55] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [57] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [55] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [57] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [59] *((const nomodify byte*) D018) ← (const byte) main::toD0182_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [67] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:46::keyboard_matrix_read:62 [ main::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:51::keyboard_matrix_read:62 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [68] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:46::keyboard_matrix_read:62 [ main::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:51::keyboard_matrix_read:62 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [67] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:46::keyboard_matrix_read:62 [ main::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:51::keyboard_matrix_read:62 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [68] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:46::keyboard_matrix_read:62 [ main::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:51::keyboard_matrix_read:62 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [70] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ( main:2::renderBob:41 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:70 [ renderBob::xpos#0 ] Removing always clobbered register reg byte a as potential for zp[1]:71 [ renderBob::ypos#0 ] @@ -6774,8 +6815,8 @@ Removing always clobbered register reg byte y as potential for zp[1]:44 [ mulf_i Removing always clobbered register reg byte y as potential for zp[1]:47 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] Statement [268] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] { } ) always clobbers reg byte y Statement [270] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] { } ) always clobbers reg byte a -Statement [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [14] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [17] if(*((const nomodify byte*) RASTER)<(byte) $f8) goto main::@2 [ main::angle#8 ] ( main:2 [ main::angle#8 ] { } ) always clobbers reg byte a Statement [18] *((const nomodify byte*) BORDERCOL) ← (byte) $f [ main::angle#8 ] ( main:2 [ main::angle#8 ] { } ) always clobbers reg byte a @@ -6797,11 +6838,11 @@ Statement [38] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byt Statement [43] if((byte) main::i#1!=(const nomodify byte) NUM_BOBS-(byte) 1+(byte) 1) goto main::@4 [ main::angle#8 main::r#1 main::a#1 renderBobCleanupNext#13 main::i#1 ] ( main:2 [ main::angle#8 main::r#1 main::a#1 renderBobCleanupNext#13 main::i#1 ] { } ) always clobbers reg byte a Statement [44] (byte) main::angle#1 ← (byte) main::angle#8 + (byte) 3 [ main::angle#1 ] ( main:2 [ main::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } } ) always clobbers reg byte a reg byte x Statement [45] *((const nomodify byte*) BORDERCOL) ← (byte) 0 [ main::angle#1 ] ( main:2 [ main::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } } ) always clobbers reg byte a -Statement [55] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [57] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [55] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [57] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [59] *((const nomodify byte*) D018) ← (const byte) main::toD0182_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [67] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:46::keyboard_matrix_read:62 [ main::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:51::keyboard_matrix_read:62 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [68] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:46::keyboard_matrix_read:62 [ main::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:51::keyboard_matrix_read:62 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [67] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:46::keyboard_matrix_read:62 [ main::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:51::keyboard_matrix_read:62 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [68] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:46::keyboard_matrix_read:62 [ main::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:51::keyboard_matrix_read:62 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [70] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ( main:2::renderBob:41 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] { } ) always clobbers reg byte a Statement [71] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ( main:2::renderBob:41 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] { } ) always clobbers reg byte a Statement [72] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ( main:2::renderBob:41 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] { } ) always clobbers reg byte a @@ -6884,8 +6925,8 @@ Statement [260] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mul Statement [266] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] { } ) always clobbers reg byte y Statement [268] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] { } ) always clobbers reg byte y Statement [270] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] { } ) always clobbers reg byte a -Statement [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [14] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [17] if(*((const nomodify byte*) RASTER)<(byte) $f8) goto main::@2 [ main::angle#8 ] ( main:2 [ main::angle#8 ] { } ) always clobbers reg byte a Statement [18] *((const nomodify byte*) BORDERCOL) ← (byte) $f [ main::angle#8 ] ( main:2 [ main::angle#8 ] { } ) always clobbers reg byte a @@ -6906,11 +6947,11 @@ Statement [38] (signed byte) main::r#1 ← (signed byte) main::r#2 + (signed byt Statement [43] if((byte) main::i#1!=(const nomodify byte) NUM_BOBS-(byte) 1+(byte) 1) goto main::@4 [ main::angle#8 main::r#1 main::a#1 renderBobCleanupNext#13 main::i#1 ] ( main:2 [ main::angle#8 main::r#1 main::a#1 renderBobCleanupNext#13 main::i#1 ] { } ) always clobbers reg byte a Statement [44] (byte) main::angle#1 ← (byte) main::angle#8 + (byte) 3 [ main::angle#1 ] ( main:2 [ main::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } } ) always clobbers reg byte a reg byte x Statement [45] *((const nomodify byte*) BORDERCOL) ← (byte) 0 [ main::angle#1 ] ( main:2 [ main::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } } ) always clobbers reg byte a -Statement [55] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [57] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [55] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [57] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [59] *((const nomodify byte*) D018) ← (const byte) main::toD0182_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [67] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:46::keyboard_matrix_read:62 [ main::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:51::keyboard_matrix_read:62 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [68] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:46::keyboard_matrix_read:62 [ main::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:51::keyboard_matrix_read:62 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [67] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:46::keyboard_matrix_read:62 [ main::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:51::keyboard_matrix_read:62 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [68] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:46::keyboard_matrix_read:62 [ main::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:51::keyboard_matrix_read:62 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [70] (byte) renderBob::x_char_offset#0 ← (byte) renderBob::xpos#0 >> (byte) 2 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] ( main:2::renderBob:41 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 ] { } ) always clobbers reg byte a Statement [71] (byte) renderBob::y_char_offset#0 ← (byte) renderBob::ypos#0 >> (byte) 3 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] ( main:2::renderBob:41 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::y_char_offset#0 ] { } ) always clobbers reg byte a Statement [72] (byte~) renderBob::$8 ← (byte) renderBob::y_char_offset#0 << (byte) 1 [ renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] ( main:2::renderBob:41 [ main::angle#8 main::i#2 main::r#1 main::a#1 renderBobCleanupNext#17 renderBob::xpos#0 renderBob::ypos#0 renderBob::x_char_offset#0 renderBob::$8 ] { } ) always clobbers reg byte a @@ -7106,6 +7147,7 @@ Uplift Scope [main] 2,002: zp[2]:58 [ main::$10 ] 2,002: zp[2]:64 [ main::$12 ] Uplift Scope [keyboard_matrix_read] 3,667.33: zp[1]:79 [ keyboard_matrix_read::return#0 ] 2,002: zp[1]:76 [ keyboard_matrix_read::return#2 ] Uplift Scope [memset] 3,336.67: zp[2]:13 [ memset::dst#2 memset::dst#1 ] Uplift Scope [keyboard_key_pressed] 2,002: zp[1]:77 [ keyboard_key_pressed::$2 ] 300.75: zp[1]:78 [ keyboard_key_pressed::return#0 ] 202: zp[1]:72 [ keyboard_key_pressed::return#2 ] 202: zp[1]:74 [ keyboard_key_pressed::return#3 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [RADIX] Uplift Scope [progress_init] Uplift Scope [progress_inc] @@ -7134,6 +7176,7 @@ Uplifting [keyboard_matrix_read] best 3965606 combination reg byte a [ keyboard_ Uplifting [memset] best 3965606 combination zp[2]:13 [ memset::dst#2 memset::dst#1 ] Uplifting [keyboard_key_pressed] best 3965417 combination reg byte a [ keyboard_key_pressed::$2 ] reg byte a [ keyboard_key_pressed::return#0 ] reg byte a [ keyboard_key_pressed::return#2 ] reg byte a [ keyboard_key_pressed::return#3 ] Limited combination testing to 100 combinations of 256 possible. +Uplifting [MOS6526_CIA] best 3965417 combination Uplifting [RADIX] best 3965417 combination Uplifting [progress_init] best 3965417 combination Uplifting [progress_inc] best 3965417 combination @@ -7244,14 +7287,10 @@ ASSEMBLER BEFORE OPTIMIZATION .label RASTER = $d012 .label BORDERCOL = $d020 .label D018 = $d018 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .const KEY_SPACE = $3c // The BASIC screen .label SCREEN_BASIC = $400 @@ -7270,6 +7309,8 @@ ASSEMBLER BEFORE OPTIMIZATION // The number of BOBs to render .const NUM_BOBS = $14 .const SIZEOF_POINTER = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label COS = SIN+$40 // BOB charset ID of the next glyph to be added .label bob_charset_next_id = 9 @@ -7337,9 +7378,9 @@ main: { jmp vicSelectGfxBank1 // main::vicSelectGfxBank1 vicSelectGfxBank1: - // [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [11] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 @@ -7348,9 +7389,9 @@ main: { jmp vicSelectGfxBank1___b1 // main::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [13] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181] toD0181_from_vicSelectGfxBank1___b1: jmp toD0181 @@ -7564,9 +7605,9 @@ main: { jmp vicSelectGfxBank2 // main::vicSelectGfxBank2 vicSelectGfxBank2: - // [55] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [55] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [56] phi from main::vicSelectGfxBank2 to main::vicSelectGfxBank2_toDd001 [phi:main::vicSelectGfxBank2->main::vicSelectGfxBank2_toDd001] vicSelectGfxBank2_toDd001_from_vicSelectGfxBank2: jmp vicSelectGfxBank2_toDd001 @@ -7575,9 +7616,9 @@ main: { jmp vicSelectGfxBank2___b1 // main::vicSelectGfxBank2_@1 vicSelectGfxBank2___b1: - // [57] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [57] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank2_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [58] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182] toD0182_from_vicSelectGfxBank2___b1: jmp toD0182 @@ -7625,11 +7666,11 @@ keyboard_key_pressed: { // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. keyboard_matrix_read: { - // [67] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // [67] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // [68] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [68] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff jmp __breturn // keyboard_matrix_read::@return @@ -9200,15 +9241,29 @@ FINAL SYMBOL TABLE (const byte*) BOB_TABLES[(number) 9*(number) 8*(number) 4] = { fill( 9*8*4, 0) } (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) CHARSET_BASIC = (byte*) 4096 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const signed byte*) COS = (const signed byte*) SIN+(byte) $40 (const nomodify byte*) D018 = (byte*) 53272 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const word*) MUL40[(number) $20] = { fill( $20, 0) } (const nomodify byte) NUM_BOBS = (byte) $14 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const to_nomodify byte*) PROTO_BOB[(number) 3*(number) 3*(number) 8] = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) .for (var x=0;x<3; x++) .for (var y=0; y<24; y++) @@ -9681,14 +9736,10 @@ Score: 3510799 .label RASTER = $d012 .label BORDERCOL = $d020 .label D018 = $d018 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .const KEY_SPACE = $3c // The BASIC screen .label SCREEN_BASIC = $400 @@ -9707,6 +9758,8 @@ Score: 3510799 // The number of BOBs to render .const NUM_BOBS = $14 .const SIZEOF_POINTER = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label COS = SIN+$40 // BOB charset ID of the next glyph to be added .label bob_charset_next_id = 9 @@ -9757,17 +9810,17 @@ main: { // [143] phi from main::@10 to renderBobInit [phi:main::@10->renderBobInit] jsr renderBobInit // main::vicSelectGfxBank1 - // *CIA2_PORT_A_DDR = %00000011 - // [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [11] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] // main::vicSelectGfxBank1_toDd001 // main::vicSelectGfxBank1_@1 - // *CIA2_PORT_A = toDd00(gfx) - // [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A = toDd00(gfx) + // [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [13] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181] // main::toD0181 // main::@7 @@ -9966,17 +10019,17 @@ main: { cmp #0 bne __b6 // main::vicSelectGfxBank2 - // *CIA2_PORT_A_DDR = %00000011 - // [55] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [55] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [56] phi from main::vicSelectGfxBank2 to main::vicSelectGfxBank2_toDd001 [phi:main::vicSelectGfxBank2->main::vicSelectGfxBank2_toDd001] // main::vicSelectGfxBank2_toDd001 // main::vicSelectGfxBank2_@1 - // *CIA2_PORT_A = toDd00(gfx) - // [57] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A = toDd00(gfx) + // [57] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank2_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank2_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [58] phi from main::vicSelectGfxBank2_@1 to main::toD0182 [phi:main::vicSelectGfxBank2_@1->main::toD0182] // main::toD0182 // main::@8 @@ -10018,13 +10071,13 @@ keyboard_key_pressed: { // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] - // [67] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] + // [67] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // ~*CIA1_PORT_B - // [68] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + // [68] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // keyboard_matrix_read::@return // } diff --git a/src/test/ref/complex/prebob/vogel-bobs.sym b/src/test/ref/complex/prebob/vogel-bobs.sym index ca946d4e9..39c3660bb 100644 --- a/src/test/ref/complex/prebob/vogel-bobs.sym +++ b/src/test/ref/complex/prebob/vogel-bobs.sym @@ -9,15 +9,29 @@ (const byte*) BOB_TABLES[(number) 9*(number) 8*(number) 4] = { fill( 9*8*4, 0) } (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) CHARSET_BASIC = (byte*) 4096 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const signed byte*) COS = (const signed byte*) SIN+(byte) $40 (const nomodify byte*) D018 = (byte*) 53272 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const word*) MUL40[(number) $20] = { fill( $20, 0) } (const nomodify byte) NUM_BOBS = (byte) $14 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const to_nomodify byte*) PROTO_BOB[(number) 3*(number) 3*(number) 8] = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) .for (var x=0;x<3; x++) .for (var y=0; y<24; y++) diff --git a/src/test/ref/complex/prebob/vogel-sprites.asm b/src/test/ref/complex/prebob/vogel-sprites.asm index b6e8a8ebd..60982b95b 100644 --- a/src/test/ref/complex/prebob/vogel-sprites.asm +++ b/src/test/ref/complex/prebob/vogel-sprites.asm @@ -13,10 +13,8 @@ .const VIC_RST8 = $80 .const VIC_DEN = $10 .const VIC_RSEL = 8 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // The colors of the C64 .const BLACK = 0 .const GREEN = 5 @@ -27,6 +25,7 @@ .label SCREEN = $400 // The number of BOBs to render .const NUM_BOBS = $10 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label COS = SIN+$40 // The address of the sprite pointers on the current screen (screen+0x3f8). .label PLEX_SCREEN_PTR = SCREEN+$3f8 @@ -99,11 +98,11 @@ keyboard_key_pressed: { // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // ~*CIA1_PORT_B - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // } rts diff --git a/src/test/ref/complex/prebob/vogel-sprites.cfg b/src/test/ref/complex/prebob/vogel-sprites.cfg index c5b6c032f..be3cb05b2 100644 --- a/src/test/ref/complex/prebob/vogel-sprites.cfg +++ b/src/test/ref/complex/prebob/vogel-sprites.cfg @@ -69,8 +69,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [29] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) - [30] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [29] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) + [30] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [31] return diff --git a/src/test/ref/complex/prebob/vogel-sprites.log b/src/test/ref/complex/prebob/vogel-sprites.log index 65e813472..b8a20a057 100644 --- a/src/test/ref/complex/prebob/vogel-sprites.log +++ b/src/test/ref/complex/prebob/vogel-sprites.log @@ -1,3 +1,11 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call plexSetScreen (byte*) plexInit::screen Inlined call call plexFreePrepare @@ -424,8 +432,8 @@ memset::@return: scope:[memset] from memset::@1 (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed (byte) keyboard_matrix_read::rowid#1 ← phi( keyboard_key_pressed/(byte) keyboard_matrix_read::rowid#0 ) - *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) - (byte~) keyboard_matrix_read::$0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) + (byte~) keyboard_matrix_read::$0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) (byte) keyboard_matrix_read::row_pressed_bits#0 ← (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#0 ← (byte) keyboard_matrix_read::row_pressed_bits#0 to:keyboard_matrix_read::@return @@ -750,13 +758,28 @@ SYMBOL TABLE SSA (label) @end (const nomodify byte) BLACK = (byte) 0 (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 -(const nomodify byte*) CIA1_PORT_A = (byte*)(number) $dc00 -(const nomodify byte*) CIA1_PORT_B = (byte*)(number) $dc01 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const signed byte*) COS = (const signed byte*) SIN+(number) $40 (const nomodify byte*) D011 = (byte*)(number) $d011 (const nomodify byte) GREEN = (byte) 5 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) NUM_BOBS = (byte) $10 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const nomodify byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -1445,8 +1468,7 @@ Simplifying constant pointer cast (byte*) 53269 Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53287 Simplifying constant pointer cast (byte*) 53265 -Simplifying constant pointer cast (byte*) 56320 -Simplifying constant pointer cast (byte*) 56321 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 Simplifying constant pointer cast (byte*) 253 Simplifying constant pointer cast (byte*) 254 Simplifying constant pointer cast (byte*) 255 @@ -1825,7 +1847,10 @@ Resolved ranged next value [261] loop::i#1 ← ++ loop::i#2 to ++ Resolved ranged comparison value [263] if(loop::i#1!=rangelast(0,NUM_BOBS-1)) goto loop::@4 to (const nomodify byte) NUM_BOBS-(byte) 1+(number) 1 Resolved ranged next value [281] loop::i1#1 ← ++ loop::i1#5 to ++ Resolved ranged comparison value [283] if(loop::i1#1!=rangelast(0,PLEX_COUNT-1)) goto loop::@8 to (const nomodify byte) PLEX_COUNT-(byte) 1+(number) 1 +Simplifying expression containing zero (byte*)CIA1 in [169] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) +Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const void*) memset::return#2 +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A Eliminating unused constant (const byte*) PLEX_SCREEN_PTR#0 Successful SSA optimization PassNEliminateUnusedVars Adding number conversion cast (unumber) PLEX_COUNT-1+1 in if((byte) plexInit::i#1!=(const nomodify byte) PLEX_COUNT-(byte) 1+(number) 1) goto plexInit::@1 @@ -2200,8 +2225,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [29] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) - [30] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [29] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) + [30] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [31] return @@ -2598,6 +2623,20 @@ plexInit::@return: scope:[plexInit] from plexInit::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte*) PLEX_SCREEN_PTR (void()) exit() (byte~) exit::$0 2002.0 @@ -3059,10 +3098,8 @@ Target platform is c64basic / MOS6502X .const VIC_RST8 = $80 .const VIC_DEN = $10 .const VIC_RSEL = 8 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // The colors of the C64 .const BLACK = 0 .const GREEN = 5 @@ -3073,6 +3110,7 @@ Target platform is c64basic / MOS6502X .label SCREEN = $400 // The number of BOBs to render .const NUM_BOBS = $10 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label COS = SIN+$40 // The address of the sprite pointers on the current screen (screen+0x3f8). .label PLEX_SCREEN_PTR = SCREEN+$3f8 @@ -3227,11 +3265,11 @@ keyboard_key_pressed: { keyboard_matrix_read: { .label return = $2a .label return_1 = $27 - // [29] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // [29] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // [30] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuz1=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [30] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuz1=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff sta.z return jmp __breturn @@ -4493,9 +4531,9 @@ Statement [1] (volatile byte) plex_show_idx ← (byte) 0 [ ] ( [ ] { } ) alway Statement [2] (volatile byte) plex_sprite_idx ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a Statement [3] (volatile byte) plex_sprite_msb ← (byte) 1 [ ] ( [ ] { } ) always clobbers reg byte a Statement [4] (volatile byte) plex_free_next ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [29] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:6::exit:13::keyboard_key_pressed:18::keyboard_matrix_read:24 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::loop:11::keyboard_key_pressed:77::keyboard_matrix_read:24 [ loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [29] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:6::exit:13::keyboard_key_pressed:18::keyboard_matrix_read:24 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::loop:11::keyboard_key_pressed:77::keyboard_matrix_read:24 [ loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:2 [ loop::angle#6 loop::angle#1 ] -Statement [30] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:6::exit:13::keyboard_key_pressed:18::keyboard_matrix_read:24 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::loop:11::keyboard_key_pressed:77::keyboard_matrix_read:24 [ loop::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [30] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:6::exit:13::keyboard_key_pressed:18::keyboard_matrix_read:24 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::loop:11::keyboard_key_pressed:77::keyboard_matrix_read:24 [ loop::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [34] if(*((const nomodify byte*) RASTER)<(byte) $d8) goto loop::@2 [ loop::angle#6 ] ( main:6::loop:11 [ loop::angle#6 ] { } ) always clobbers reg byte a Statement [35] *((const nomodify byte*) BORDERCOL) ← (byte) $f [ loop::angle#6 ] ( main:6::loop:11 [ loop::angle#6 ] { } ) always clobbers reg byte a Statement [38] *((const nomodify byte*) BORDERCOL) ← (byte) 6 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } ) always clobbers reg byte a @@ -4611,8 +4649,8 @@ Statement [1] (volatile byte) plex_show_idx ← (byte) 0 [ ] ( [ ] { } ) alway Statement [2] (volatile byte) plex_sprite_idx ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a Statement [3] (volatile byte) plex_sprite_msb ← (byte) 1 [ ] ( [ ] { } ) always clobbers reg byte a Statement [4] (volatile byte) plex_free_next ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [29] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:6::exit:13::keyboard_key_pressed:18::keyboard_matrix_read:24 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::loop:11::keyboard_key_pressed:77::keyboard_matrix_read:24 [ loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [30] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:6::exit:13::keyboard_key_pressed:18::keyboard_matrix_read:24 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::loop:11::keyboard_key_pressed:77::keyboard_matrix_read:24 [ loop::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [29] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:6::exit:13::keyboard_key_pressed:18::keyboard_matrix_read:24 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::loop:11::keyboard_key_pressed:77::keyboard_matrix_read:24 [ loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [30] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:6::exit:13::keyboard_key_pressed:18::keyboard_matrix_read:24 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::loop:11::keyboard_key_pressed:77::keyboard_matrix_read:24 [ loop::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [34] if(*((const nomodify byte*) RASTER)<(byte) $d8) goto loop::@2 [ loop::angle#6 ] ( main:6::loop:11 [ loop::angle#6 ] { } ) always clobbers reg byte a Statement [35] *((const nomodify byte*) BORDERCOL) ← (byte) $f [ loop::angle#6 ] ( main:6::loop:11 [ loop::angle#6 ] { } ) always clobbers reg byte a Statement [38] *((const nomodify byte*) BORDERCOL) ← (byte) 6 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } ) always clobbers reg byte a @@ -4696,8 +4734,8 @@ Statement [1] (volatile byte) plex_show_idx ← (byte) 0 [ ] ( [ ] { } ) alway Statement [2] (volatile byte) plex_sprite_idx ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a Statement [3] (volatile byte) plex_sprite_msb ← (byte) 1 [ ] ( [ ] { } ) always clobbers reg byte a Statement [4] (volatile byte) plex_free_next ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [29] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:6::exit:13::keyboard_key_pressed:18::keyboard_matrix_read:24 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::loop:11::keyboard_key_pressed:77::keyboard_matrix_read:24 [ loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [30] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:6::exit:13::keyboard_key_pressed:18::keyboard_matrix_read:24 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::loop:11::keyboard_key_pressed:77::keyboard_matrix_read:24 [ loop::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [29] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:6::exit:13::keyboard_key_pressed:18::keyboard_matrix_read:24 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::loop:11::keyboard_key_pressed:77::keyboard_matrix_read:24 [ loop::angle#1 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [30] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:6::exit:13::keyboard_key_pressed:18::keyboard_matrix_read:24 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:6::loop:11::keyboard_key_pressed:77::keyboard_matrix_read:24 [ loop::angle#1 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [34] if(*((const nomodify byte*) RASTER)<(byte) $d8) goto loop::@2 [ loop::angle#6 ] ( main:6::loop:11 [ loop::angle#6 ] { } ) always clobbers reg byte a Statement [35] *((const nomodify byte*) BORDERCOL) ← (byte) $f [ loop::angle#6 ] ( main:6::loop:11 [ loop::angle#6 ] { } ) always clobbers reg byte a Statement [38] *((const nomodify byte*) BORDERCOL) ← (byte) 6 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] ( main:6::loop:11 [ loop::angle#6 loop::r#2 loop::a#2 loop::i#2 ] { { mulf8s::mulf8s_prepare1_a#0 = mulf8s::a#0 loop::r#2 } { mulf8s::b#0 = mulf8s::b#2 } { mulf8s::return#0 = mulf8s::return#2 } } ) always clobbers reg byte a @@ -4876,6 +4914,7 @@ Uplift Scope [memset] 33,336.67: zp[2]:16 [ memset::dst#2 memset::dst#1 ] Uplift Scope [keyboard_key_pressed] 20,002: zp[1]:40 [ keyboard_key_pressed::$2 ] 3,000.75: zp[1]:41 [ keyboard_key_pressed::return#0 ] 2,002: zp[1]:37 [ keyboard_key_pressed::return#2 ] 2,002: zp[1]:64 [ keyboard_key_pressed::return#3 ] Uplift Scope [init] 3,003: zp[1]:15 [ init::i1#2 init::i1#1 ] 2,302.3: zp[1]:14 [ init::i#2 init::i#1 ] 2,002: zp[1]:94 [ init::$10 ] 2,002: zp[1]:95 [ init::$3 ] 2,002: zp[1]:97 [ init::$9 ] 2,002: zp[1]:98 [ init::$5 ] 2,002: zp[1]:99 [ init::$6 ] 1,001: zp[1]:96 [ init::$4 ] Uplift Scope [exit] 2,002: zp[1]:38 [ exit::$0 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplifting [plexSort] best 105185 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] reg byte x [ plexSort::s#2 ] zp[1]:7 [ plexSort::m#2 plexSort::m#1 ] zp[1]:79 [ plexSort::nxt_y#0 ] zp[1]:78 [ plexSort::nxt_idx#0 ] @@ -4900,6 +4939,7 @@ Limited combination testing to 100 combinations of 256 possible. Uplifting [init] best 101332 combination reg byte x [ init::i1#2 init::i1#1 ] zp[1]:14 [ init::i#2 init::i#1 ] reg byte a [ init::$10 ] reg byte a [ init::$3 ] zp[1]:97 [ init::$9 ] zp[1]:98 [ init::$5 ] zp[1]:99 [ init::$6 ] zp[1]:96 [ init::$4 ] Limited combination testing to 100 combinations of 27648 possible. Uplifting [exit] best 101272 combination reg byte a [ exit::$0 ] +Uplifting [MOS6526_CIA] best 101272 combination Uplifting [main] best 101272 combination Attempting to uplift remaining variables inzp[1]:7 [ plexSort::m#2 plexSort::m#1 ] Uplifting [plexSort] best 101272 combination zp[1]:7 [ plexSort::m#2 plexSort::m#1 ] @@ -5021,10 +5061,8 @@ ASSEMBLER BEFORE OPTIMIZATION .const VIC_RST8 = $80 .const VIC_DEN = $10 .const VIC_RSEL = 8 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // The colors of the C64 .const BLACK = 0 .const GREEN = 5 @@ -5035,6 +5073,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label SCREEN = $400 // The number of BOBs to render .const NUM_BOBS = $10 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label COS = SIN+$40 // The address of the sprite pointers on the current screen (screen+0x3f8). .label PLEX_SCREEN_PTR = SCREEN+$3f8 @@ -5171,11 +5210,11 @@ keyboard_key_pressed: { // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. keyboard_matrix_read: { - // [29] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // [29] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // [30] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [30] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff jmp __breturn // keyboard_matrix_read::@return @@ -6506,13 +6545,27 @@ FINAL SYMBOL TABLE (label) @end (const nomodify byte) BLACK = (byte) 0 (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const signed byte*) COS = (const signed byte*) SIN+(byte) $40 (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte) GREEN = (byte) 5 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) NUM_BOBS = (byte) $10 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const nomodify byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -6909,10 +6962,8 @@ Score: 74020 .const VIC_RST8 = $80 .const VIC_DEN = $10 .const VIC_RSEL = 8 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // The colors of the C64 .const BLACK = 0 .const GREEN = 5 @@ -6923,6 +6974,7 @@ Score: 74020 .label SCREEN = $400 // The number of BOBs to render .const NUM_BOBS = $10 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label COS = SIN+$40 // The address of the sprite pointers on the current screen (screen+0x3f8). .label PLEX_SCREEN_PTR = SCREEN+$3f8 @@ -7042,13 +7094,13 @@ keyboard_key_pressed: { // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] - // [29] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] + // [29] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // ~*CIA1_PORT_B - // [30] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + // [30] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // keyboard_matrix_read::@return // } diff --git a/src/test/ref/complex/prebob/vogel-sprites.sym b/src/test/ref/complex/prebob/vogel-sprites.sym index 374fe080b..c0810435d 100644 --- a/src/test/ref/complex/prebob/vogel-sprites.sym +++ b/src/test/ref/complex/prebob/vogel-sprites.sym @@ -5,13 +5,27 @@ (label) @end (const nomodify byte) BLACK = (byte) 0 (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const signed byte*) COS = (const signed byte*) SIN+(byte) $40 (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte) GREEN = (byte) 5 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) NUM_BOBS = (byte) $10 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const nomodify byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } diff --git a/src/test/ref/complex/splines/truetype-splines.asm b/src/test/ref/complex/splines/truetype-splines.asm index f1130fa55..6eb5cae93 100644 --- a/src/test/ref/complex/splines/truetype-splines.asm +++ b/src/test/ref/complex/splines/truetype-splines.asm @@ -8,10 +8,8 @@ .const VIC_DEN = $10 .const VIC_RSEL = 8 .label D018 = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .const WHITE = 1 .label BITMAP_SCREEN = $5c00 .label BITMAP_GRAPHICS = $6000 @@ -22,6 +20,7 @@ .const OFFSET_STRUCT_SPLINEVECTOR16_Y = 2 .const OFFSET_STRUCT_SEGMENT_TO = 1 .const OFFSET_STRUCT_SEGMENT_VIA = 5 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 .label COS = SIN+$40 main: { .const vicSelectGfxBank1_toDd001_return = 3^(>BITMAP_SCREEN)/$40 @@ -33,12 +32,12 @@ main: { jsr bitmap_init // bitmap_clear(BLACK, WHITE) jsr bitmap_clear - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = toDd00(gfx) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = toDd00(gfx) lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // *D018 = toD018(BITMAP_SCREEN, BITMAP_GRAPHICS) lda #toD0181_return sta D018 diff --git a/src/test/ref/complex/splines/truetype-splines.cfg b/src/test/ref/complex/splines/truetype-splines.cfg index ac7e2afd5..84884d1b2 100644 --- a/src/test/ref/complex/splines/truetype-splines.cfg +++ b/src/test/ref/complex/splines/truetype-splines.cfg @@ -22,13 +22,13 @@ main::@9: scope:[main] from main::@8 [9] call bitmap_clear to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main::@9 - [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 [11] phi() to:main::vicSelectGfxBank1_@1 main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001 - [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 + [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 to:main::toD0181 main::toD0181: scope:[main] from main::vicSelectGfxBank1_@1 [13] phi() diff --git a/src/test/ref/complex/splines/truetype-splines.log b/src/test/ref/complex/splines/truetype-splines.log index cc99823a9..1333079a0 100644 --- a/src/test/ref/complex/splines/truetype-splines.log +++ b/src/test/ref/complex/splines/truetype-splines.log @@ -363,6 +363,12 @@ Replacing struct member reference (struct SplineVector16) spline_8segB::i.y with Replacing struct member reference (struct SplineVector16) spline_8segB::j.y with member unwinding reference (signed word) spline_8segB::j_y Replacing struct member reference (struct SplineVector16) spline_8segB::p.x with member unwinding reference (signed word) spline_8segB::p_x Replacing struct member reference (struct SplineVector16) spline_8segB::p.y with member unwinding reference (signed word) spline_8segB::p_y +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Replacing struct member reference (struct SplineVector16) show_letter::to.x with member unwinding reference (signed word) show_letter::to_x Replacing struct member reference (struct SplineVector16) show_letter::to.y with member unwinding reference (signed word) show_letter::to_y Replacing struct member reference (struct SplineVector16) show_letter::to.x with member unwinding reference (signed word) show_letter::to_x @@ -1141,7 +1147,7 @@ main::vicSelectGfxBank1: scope:[main] from main::@13 (byte*) bitmap_gfx#39 ← phi( main::@13/(byte*) bitmap_gfx#40 ) (byte*) bitmap_screen#38 ← phi( main::@13/(byte*) bitmap_screen#39 ) (byte*) main::vicSelectGfxBank1_gfx#1 ← phi( main::@13/(byte*) main::vicSelectGfxBank1_gfx#0 ) - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 (byte*) main::vicSelectGfxBank1_toDd001_gfx#0 ← (byte*) main::vicSelectGfxBank1_gfx#1 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 @@ -1164,7 +1170,7 @@ main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001_@ (byte*) bitmap_screen#33 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte*) bitmap_screen#35 ) (byte) main::vicSelectGfxBank1_toDd001_return#3 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte) main::vicSelectGfxBank1_toDd001_return#1 ) (byte~) main::vicSelectGfxBank1_$0 ← (byte) main::vicSelectGfxBank1_toDd001_return#3 - *((const nomodify byte*) CIA2_PORT_A) ← (byte~) main::vicSelectGfxBank1_$0 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte~) main::vicSelectGfxBank1_$0 to:main::@9 main::@9: scope:[main] from main::vicSelectGfxBank1_@1 (byte*) bitmap_gfx#32 ← phi( main::vicSelectGfxBank1_@1/(byte*) bitmap_gfx#34 ) @@ -1580,13 +1586,28 @@ SYMBOL TABLE SSA (const nomodify byte*) BITMAP_GRAPHICS = (byte*)(number) $6000 (const nomodify byte*) BITMAP_SCREEN = (byte*)(number) $5c00 (const nomodify byte) BLACK = (byte) 0 -(const nomodify byte*) CIA2_PORT_A = (byte*)(number) $dd00 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const signed byte*) COS = (const signed byte*) SIN+(number) $40 (const nomodify byte*) D011 = (byte*)(number) $d011 (const nomodify byte*) D018 = (byte*)(number) $d018 (const byte) LINE_TO = (byte) 2 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) MOVE_TO = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_SEGMENT_TO = (byte) 1 (const byte) OFFSET_STRUCT_SEGMENT_TYPE = (byte) 0 (const byte) OFFSET_STRUCT_SEGMENT_VIA = (byte) 5 @@ -2753,7 +2774,7 @@ Adding number conversion cast (unumber) $1ff in *((const byte*) mulf_sqr2_hi+(nu Adding number conversion cast (unumber) 1 in (byte) mulf_init::dir#1 ← (number) 1 Adding number conversion cast (snumber) 0 in (bool~) mulf16s::$1 ← (signed word) mulf16s::a#5 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) mulf16s::$3 ← (signed word) mulf16s::b#5 < (number) 0 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 Adding number conversion cast (unumber) $40 in (number~) main::vicSelectGfxBank1_toDd001_$1 ← (byte~) main::vicSelectGfxBank1_toDd001_$0 / (number) $40 Adding number conversion cast (unumber) main::vicSelectGfxBank1_toDd001_$1 in (number~) main::vicSelectGfxBank1_toDd001_$1 ← (byte~) main::vicSelectGfxBank1_toDd001_$0 / (unumber)(number) $40 Adding number conversion cast (unumber) 3 in (number~) main::vicSelectGfxBank1_toDd001_$2 ← (number) 3 ^ (unumber~) main::vicSelectGfxBank1_toDd001_$1 @@ -2807,14 +2828,13 @@ Inlining cast (byte) memset::c#1 ← (unumber)(number) 0 Inlining cast (word) sgn_u16::return#2 ← (unumber)(number) -1 Inlining cast (word) sgn_u16::return#3 ← (unumber)(number) 1 Inlining cast (byte) mulf_init::dir#1 ← (unumber)(number) 1 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 Inlining cast *((const nomodify byte*) D011) ← (unumber)(const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(unumber)(number) 3 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53272 -Simplifying constant pointer cast (byte*) 56576 -Simplifying constant pointer cast (byte*) 56578 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (word*) 248 Simplifying constant pointer cast (word*) 250 Simplifying constant pointer cast (dword*) 252 @@ -3407,6 +3427,7 @@ Simplifying constant evaluating to zero (byte) 0*(const byte) SIZEOF_STRUCT_SPLI Successful SSA optimization PassNSimplifyConstantZero Simplifying expression containing zero (signed word*)SPLINE_8SEG in [26] *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) spline_8segB::$31) ← (signed word)(signed word~) spline_8segB::$23 Simplifying expression containing zero (signed word*)SPLINE_8SEG in [40] *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (const byte) spline_8segB::$32) ← (signed word)(signed word~) spline_8segB::$19 +Simplifying expression containing zero (byte*)CIA2 in [272] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) main::vicSelectGfxBank1_toDd001_return#0 Simplifying expression containing zero (signed word*)(struct SplineVector16*)letter_c+OFFSET_STRUCT_SEGMENT_TO in [314] (signed word) show_letter::to_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) show_letter::$16) Simplifying expression containing zero (signed word*)(struct SplineVector16*)letter_c+OFFSET_STRUCT_SEGMENT_VIA in [333] (signed word) show_letter::via_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) show_letter::$17) Simplifying expression containing zero (byte*)letter_c in [352] (byte) show_letter::segment_type#0 ← *((byte*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TYPE + (byte~) show_letter::$18) @@ -3423,6 +3444,7 @@ Eliminating unused variable (struct SplineVector16) rotate::return#1 and assignm Eliminating unused constant (const byte) bitmap_plot_spline_8seg::$2 Eliminating unused constant (const byte) OFFSET_STRUCT_SPLINEVECTOR16_X Eliminating unused constant (const byte) OFFSET_STRUCT_SEGMENT_TYPE +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A Eliminating unused constant (const byte*) bitmap_screen#0 Eliminating unused constant (const byte*) bitmap_gfx#0 Successful SSA optimization PassNEliminateUnusedVars @@ -3937,13 +3959,13 @@ main::@9: scope:[main] from main::@8 [9] call bitmap_clear to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main::@9 - [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 [11] phi() to:main::vicSelectGfxBank1_@1 main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001 - [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 + [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 to:main::toD0181 main::toD0181: scope:[main] from main::vicSelectGfxBank1_@1 [13] phi() @@ -4532,6 +4554,20 @@ mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4 null depth in calling loop Loop head: bitmap_plot_spline_8seg::@1 tails: bitmap_plot_spline_8seg::@2 blocks: bitmap_plot_spline_8seg::@2 bitmap_plot_spline_8seg::@1 in scope bitmap_line VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (struct SplineVector16) Segment::to (byte) Segment::type (struct SplineVector16) Segment::via @@ -5435,10 +5471,8 @@ Target platform is c64basic / MOS6502X .const VIC_DEN = $10 .const VIC_RSEL = 8 .label D018 = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .const WHITE = 1 .label BITMAP_SCREEN = $5c00 .label BITMAP_GRAPHICS = $6000 @@ -5449,6 +5483,7 @@ Target platform is c64basic / MOS6502X .const OFFSET_STRUCT_SPLINEVECTOR16_Y = 2 .const OFFSET_STRUCT_SEGMENT_TO = 1 .const OFFSET_STRUCT_SEGMENT_VIA = 5 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 .label COS = SIN+$40 // @begin __bbegin: @@ -5497,9 +5532,9 @@ main: { jmp vicSelectGfxBank1 // main::vicSelectGfxBank1 vicSelectGfxBank1: - // [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [11] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 @@ -5508,9 +5543,9 @@ main: { jmp vicSelectGfxBank1___b1 // main::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [13] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181] toD0181_from_vicSelectGfxBank1___b1: jmp toD0181 @@ -8088,8 +8123,8 @@ SIN: REGISTER UPLIFT POTENTIAL REGISTERS Equivalence Class zp[1]:306 [ bitmap_init::$4 ] has ALU potential. -Statement [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [14] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [15] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [22] if(*((const nomodify byte*) RASTER)!=(byte) $fe) goto main::@3 [ main::angle#2 main::w#4 ] ( main:2 [ main::angle#2 main::w#4 ] { } ) always clobbers reg byte a @@ -8320,8 +8355,8 @@ Removing always clobbered register reg byte y as potential for zp[1]:71 [ mulf_i Removing always clobbered register reg byte y as potential for zp[1]:74 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] Statement [334] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] { } ) always clobbers reg byte y Statement [336] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:5 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] { } ) always clobbers reg byte a -Statement [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [14] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [15] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [19] (byte) show_letter::angle#0 ← (byte) main::angle#2 [ main::angle#2 show_letter::angle#0 ] ( main:2 [ main::angle#2 show_letter::angle#0 ] { { show_letter::angle#0 = main::angle#2 } } ) always clobbers reg byte a @@ -8705,6 +8740,7 @@ Uplift Scope [main] 8,836.17: zp[1]:3 [ main::w#4 main::w#1 ] 232.3: zp[1]:2 [ m Uplift Scope [SplineVector16] Uplift Scope [SplineVector32] Uplift Scope [bitmap_clear] +Uplift Scope [MOS6526_CIA] Uplift Scope [RADIX] Uplift Scope [Segment] Uplift Scope [Segment::SegmentType] @@ -8730,6 +8766,7 @@ Uplifting [main] best 804956 combination reg byte x [ main::w#4 main::w#1 ] zp[1 Uplifting [SplineVector16] best 804956 combination Uplifting [SplineVector32] best 804956 combination Uplifting [bitmap_clear] best 804956 combination +Uplifting [MOS6526_CIA] best 804956 combination Uplifting [RADIX] best 804956 combination Uplifting [Segment] best 804956 combination Uplifting [Segment::SegmentType] best 804956 combination @@ -8904,10 +8941,8 @@ ASSEMBLER BEFORE OPTIMIZATION .const VIC_DEN = $10 .const VIC_RSEL = 8 .label D018 = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .const WHITE = 1 .label BITMAP_SCREEN = $5c00 .label BITMAP_GRAPHICS = $6000 @@ -8918,6 +8953,7 @@ ASSEMBLER BEFORE OPTIMIZATION .const OFFSET_STRUCT_SPLINEVECTOR16_Y = 2 .const OFFSET_STRUCT_SEGMENT_TO = 1 .const OFFSET_STRUCT_SEGMENT_VIA = 5 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 .label COS = SIN+$40 // @begin __bbegin: @@ -8965,9 +9001,9 @@ main: { jmp vicSelectGfxBank1 // main::vicSelectGfxBank1 vicSelectGfxBank1: - // [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [11] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 @@ -8976,9 +9012,9 @@ main: { jmp vicSelectGfxBank1___b1 // main::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [13] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181] toD0181_from_vicSelectGfxBank1___b1: jmp toD0181 @@ -11423,8 +11459,8 @@ Removing instruction __breturn: Removing instruction __b2: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [765] bne __b1 to beq -Fixing long branch [308] beq __b4 to bne +Fixing long branch [764] bne __b1 to beq +Fixing long branch [307] beq __b4 to bne FINAL SYMBOL TABLE (label) @1 @@ -11432,13 +11468,27 @@ FINAL SYMBOL TABLE (label) @end (const nomodify byte*) BITMAP_GRAPHICS = (byte*) 24576 (const nomodify byte*) BITMAP_SCREEN = (byte*) 23552 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const signed byte*) COS = (const signed byte*) SIN+(byte) $40 (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte*) D018 = (byte*) 53272 (const byte) LINE_TO = (byte) 2 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) MOVE_TO = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_SEGMENT_TO = (byte) 1 (const byte) OFFSET_STRUCT_SEGMENT_VIA = (byte) 5 (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y = (byte) 2 @@ -12029,10 +12079,8 @@ Score: 674154 .const VIC_DEN = $10 .const VIC_RSEL = 8 .label D018 = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .const WHITE = 1 .label BITMAP_SCREEN = $5c00 .label BITMAP_GRAPHICS = $6000 @@ -12043,6 +12091,7 @@ Score: 674154 .const OFFSET_STRUCT_SPLINEVECTOR16_Y = 2 .const OFFSET_STRUCT_SEGMENT_TO = 1 .const OFFSET_STRUCT_SEGMENT_VIA = 5 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 .label COS = SIN+$40 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] @@ -12073,17 +12122,17 @@ main: { // [273] phi from main::@9 to bitmap_clear [phi:main::@9->bitmap_clear] jsr bitmap_clear // main::vicSelectGfxBank1 - // *CIA2_PORT_A_DDR = %00000011 - // [10] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [11] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] // main::vicSelectGfxBank1_toDd001 // main::vicSelectGfxBank1_@1 - // *CIA2_PORT_A = toDd00(gfx) - // [12] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A = toDd00(gfx) + // [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [13] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181] // main::toD0181 // main::@7 diff --git a/src/test/ref/complex/splines/truetype-splines.sym b/src/test/ref/complex/splines/truetype-splines.sym index b5d844f7b..50660874a 100644 --- a/src/test/ref/complex/splines/truetype-splines.sym +++ b/src/test/ref/complex/splines/truetype-splines.sym @@ -3,13 +3,27 @@ (label) @end (const nomodify byte*) BITMAP_GRAPHICS = (byte*) 24576 (const nomodify byte*) BITMAP_SCREEN = (byte*) 23552 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const signed byte*) COS = (const signed byte*) SIN+(byte) $40 (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte*) D018 = (byte*) 53272 (const byte) LINE_TO = (byte) 2 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) MOVE_TO = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_SEGMENT_TO = (byte) 1 (const byte) OFFSET_STRUCT_SEGMENT_VIA = (byte) 5 (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y = (byte) 2 diff --git a/src/test/ref/complex/spritescroller/spritescroller.asm b/src/test/ref/complex/spritescroller/spritescroller.asm index 184a68b65..255ae0ef1 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.asm +++ b/src/test/ref/complex/spritescroller/spritescroller.asm @@ -24,8 +24,8 @@ .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts @@ -38,6 +38,7 @@ .label SCREEN = $400 // The high-value table .label XMOVEMENT_HI = XMOVEMENT+$100 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // The address of the sprite pointers on the current screen (screen+0x3f8). .label PLEX_SCREEN_PTR = $400+$3f8 .const toSpritePtr1_return = SPRITES/$40 @@ -138,10 +139,10 @@ main: { // asm // Enable the plex IRQ sei - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL &=0x7f // Set raster line to 0x00 lda #$7f diff --git a/src/test/ref/complex/spritescroller/spritescroller.cfg b/src/test/ref/complex/spritescroller/spritescroller.cfg index 7c371142d..3af21b095 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.cfg +++ b/src/test/ref/complex/spritescroller/spritescroller.cfg @@ -67,7 +67,7 @@ main::@11: scope:[main] from main::@5 to:main::@12 main::@12: scope:[main] from main::@11 asm { sei } - [32] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [32] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [33] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [34] *((const nomodify byte*) RASTER) ← (byte) $28 [35] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER diff --git a/src/test/ref/complex/spritescroller/spritescroller.log b/src/test/ref/complex/spritescroller/spritescroller.log index 3a06863a2..0c041ba04 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.log +++ b/src/test/ref/complex/spritescroller/spritescroller.log @@ -1,6 +1,9 @@ Resolved forward reference plex_irq to interrupt(KERNEL_MIN)(void()) plex_irq() Resolved forward reference frame_done to (volatile bool) frame_done Resolved forward reference frame_done to (volatile bool) frame_done +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call plexSetScreen (byte*) plexInit::screen Inlined call call plexFreePrepare @@ -353,7 +356,7 @@ main::@14: scope:[main] from main::@13 (byte*) scroll_text_next#22 ← phi( main::@13/(byte*) scroll_text_next#0 ) (byte*) PLEX_SCREEN_PTR#19 ← phi( main::@13/(byte*) PLEX_SCREEN_PTR#24 ) asm { sei } - *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (number) $7f *((const nomodify byte*) RASTER) ← (number) $28 *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -883,7 +886,7 @@ SYMBOL TABLE SSA (label) @end (const nomodify byte*) CHARGEN = (byte*)(number) $d000 (const nomodify byte*) CHARSET_DEFAULT = (byte*)(number) $1000 -(const nomodify byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D018 = (byte*)(number) $d018 (const byte*) FONT[(number) $800] = { fill( $800, 0) } @@ -891,6 +894,21 @@ SYMBOL TABLE SSA (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*)(number) $d019 (const nomodify void()**) KERNEL_IRQ = (void()**)(number) $314 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const nomodify byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -1735,7 +1753,7 @@ Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 53273 Simplifying constant pointer cast (byte*) 53274 -Simplifying constant pointer cast (byte*) 56333 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 Simplifying constant pointer cast (void()**) 788 Simplifying constant pointer cast (byte*) 4096 Simplifying constant pointer cast (byte*) 12288 @@ -2657,7 +2675,7 @@ main::@11: scope:[main] from main::@5 to:main::@12 main::@12: scope:[main] from main::@11 asm { sei } - [32] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [32] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [33] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [34] *((const nomodify byte*) RASTER) ← (byte) $28 [35] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -3005,6 +3023,20 @@ plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@5 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte*) PLEX_SCREEN_PTR (byte) SPRITE_0 (void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2) @@ -3423,8 +3455,8 @@ Target platform is c64basic / MOS6502X .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts @@ -3437,6 +3469,7 @@ Target platform is c64basic / MOS6502X .label SCREEN = $400 // The high-value table .label XMOVEMENT_HI = XMOVEMENT+$100 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // The address of the sprite pointers on the current screen (screen+0x3f8). .label PLEX_SCREEN_PTR = $400+$3f8 .const toSpritePtr1_return = SPRITES/$40 @@ -3634,10 +3667,10 @@ main: { // asm { sei } // Enable the plex IRQ sei - // [32] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [32] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [33] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line to 0x00 lda #$7f @@ -4797,7 +4830,7 @@ Statement [19] *((const nomodify byte*) D018) ← (const byte) main::toD0181_ret Statement [22] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff [ frame_done ] ( main:8 [ frame_done ] { } ) always clobbers reg byte a Statement [24] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE [ frame_done main::s1#2 ] ( main:8 [ frame_done main::s1#2 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::s1#2 main::s1#1 ] -Statement [32] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [32] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:8 [ y_sin_idx#10 y_sin_idx#12 ] Removing always clobbered register reg byte a as potential for zp[1]:9 [ x_movement_idx#10 x_movement_idx#12 ] Statement [33] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a @@ -4921,7 +4954,7 @@ Statement [13] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROC Statement [19] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ frame_done ] ( main:8 [ frame_done ] { } ) always clobbers reg byte a Statement [22] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff [ frame_done ] ( main:8 [ frame_done ] { } ) always clobbers reg byte a Statement [24] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE [ frame_done main::s1#2 ] ( main:8 [ frame_done main::s1#2 ] { } ) always clobbers reg byte a -Statement [32] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [32] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a Statement [33] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a Statement [34] *((const nomodify byte*) RASTER) ← (byte) $28 [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a Statement [35] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a @@ -5013,7 +5046,7 @@ Statement [13] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROC Statement [19] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ frame_done ] ( main:8 [ frame_done ] { } ) always clobbers reg byte a Statement [22] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff [ frame_done ] ( main:8 [ frame_done ] { } ) always clobbers reg byte a Statement [24] *((const nomodify byte*) SPRITES_COLS + (byte) main::s1#2) ← (const nomodify byte) WHITE [ frame_done main::s1#2 ] ( main:8 [ frame_done main::s1#2 ] { } ) always clobbers reg byte a -Statement [32] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a +Statement [32] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a Statement [33] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a Statement [34] *((const nomodify byte*) RASTER) ← (byte) $28 [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a Statement [35] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] ( main:8 [ frame_done y_sin_idx#12 x_movement_idx#12 scroll_text_next#13 ] { } ) always clobbers reg byte a @@ -5173,6 +5206,7 @@ Uplift Scope [plexInit] 3,503.5: zp[1]:15 [ plexInit::i#2 plexInit::i#1 ] Uplift Scope [plexShowSprite] 202: zp[1]:76 [ plexShowSprite::plexFreeAdd1_$0 ] 202: zp[1]:77 [ plexShowSprite::plexFreeAdd1_$1 ] 202: zp[1]:78 [ plexShowSprite::plexFreeAdd1_$2 ] 202: zp[1]:79 [ plexShowSprite::xpos_idx#0 ] 202: zp[1]:81 [ plexShowSprite::$2 ] 202: zp[1]:82 [ plexShowSprite::$3 ] 202: zp[1]:83 [ plexShowSprite::$9 ] 202: zp[1]:84 [ plexShowSprite::$5 ] 202: zp[1]:85 [ plexShowSprite::$6 ] 151.5: zp[1]:75 [ plexShowSprite::plexFreeAdd1_ypos#0 ] 101: zp[1]:80 [ plexShowSprite::$11 ] 25.25: zp[1]:74 [ plexShowSprite::plex_sprite_idx2#0 ] Uplift Scope [main] 303: zp[1]:4 [ main::s1#2 main::s1#1 ] 274.14: zp[1]:2 [ main::s#2 main::s#1 ] 202: zp[2]:49 [ main::$13 ] 168.33: zp[1]:3 [ main::x#2 main::x#1 ] 101: zp[1]:48 [ main::$12 ] Uplift Scope [plex_irq] 11: zp[1]:73 [ plex_irq::$4 ] 4.8: zp[1]:72 [ plex_irq::plexFreeNextYpos1_return#0 ] +Uplift Scope [MOS6526_CIA] Uplifting [plexSort] best 251376 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] reg byte x [ plexSort::s#2 ] zp[1]:5 [ plexSort::m#2 plexSort::m#1 ] zp[1]:52 [ plexSort::nxt_y#0 ] zp[1]:51 [ plexSort::nxt_idx#0 ] Limited combination testing to 100 combinations of 972 possible. @@ -5187,6 +5221,7 @@ Uplifting [plexShowSprite] best 224536 combination reg byte a [ plexShowSprite:: Limited combination testing to 100 combinations of 1572864 possible. Uplifting [main] best 224276 combination reg byte x [ main::s1#2 main::s1#1 ] zp[1]:2 [ main::s#2 main::s#1 ] zp[2]:49 [ main::$13 ] reg byte x [ main::x#2 main::x#1 ] reg byte y [ main::$12 ] Uplifting [plex_irq] best 224213 combination zp[1]:73 [ plex_irq::$4 ] reg byte x [ plex_irq::plexFreeNextYpos1_return#0 ] +Uplifting [MOS6526_CIA] best 224213 combination Attempting to uplift remaining variables inzp[1]:5 [ plexSort::m#2 plexSort::m#1 ] Uplifting [plexSort] best 224213 combination zp[1]:5 [ plexSort::m#2 plexSort::m#1 ] Attempting to uplift remaining variables inzp[1]:11 [ plex_move::s#2 plex_move::s#1 ] @@ -5327,8 +5362,8 @@ ASSEMBLER BEFORE OPTIMIZATION .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts @@ -5341,6 +5376,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label SCREEN = $400 // The high-value table .label XMOVEMENT_HI = XMOVEMENT+$100 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // The address of the sprite pointers on the current screen (screen+0x3f8). .label PLEX_SCREEN_PTR = $400+$3f8 .const toSpritePtr1_return = SPRITES/$40 @@ -5531,10 +5567,10 @@ main: { // asm { sei } // Enable the plex IRQ sei - // [32] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [32] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [33] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line to 0x00 lda #$7f @@ -6807,7 +6843,7 @@ Removing instruction lda #0 Removing instruction lda #8 Removing instruction ldx.z plex_show_idx Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [555] bne __b1 to beq +Fixing long branch [556] bne __b1 to beq FINAL SYMBOL TABLE (label) @1 @@ -6818,7 +6854,7 @@ FINAL SYMBOL TABLE (label) @end (const nomodify byte*) CHARGEN = (byte*) 53248 (const nomodify byte*) CHARSET_DEFAULT = (byte*) 4096 -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D018 = (byte*) 53272 (const byte*) FONT[(number) $800] = { fill( $800, 0) } @@ -6826,6 +6862,21 @@ FINAL SYMBOL TABLE (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 (const nomodify void()**) KERNEL_IRQ = (void()**) 788 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const nomodify byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -7189,8 +7240,8 @@ Score: 159127 .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts @@ -7203,6 +7254,7 @@ Score: 159127 .label SCREEN = $400 // The high-value table .label XMOVEMENT_HI = XMOVEMENT+$100 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // The address of the sprite pointers on the current screen (screen+0x3f8). .label PLEX_SCREEN_PTR = $400+$3f8 .const toSpritePtr1_return = SPRITES/$40 @@ -7365,11 +7417,11 @@ main: { // asm { sei } // Enable the plex IRQ sei - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR - // [32] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR + // [32] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL &=0x7f // [33] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line to 0x00 diff --git a/src/test/ref/complex/spritescroller/spritescroller.sym b/src/test/ref/complex/spritescroller/spritescroller.sym index 2b29f6fab..bc1b287a1 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.sym +++ b/src/test/ref/complex/spritescroller/spritescroller.sym @@ -6,7 +6,7 @@ (label) @end (const nomodify byte*) CHARGEN = (byte*) 53248 (const nomodify byte*) CHARSET_DEFAULT = (byte*) 4096 -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D018 = (byte*) 53272 (const byte*) FONT[(number) $800] = { fill( $800, 0) } @@ -14,6 +14,21 @@ (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 (const nomodify void()**) KERNEL_IRQ = (void()**) 788 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const nomodify byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } diff --git a/src/test/ref/complex/tetris/test-sprites.asm b/src/test/ref/complex/tetris/test-sprites.asm index cec2e0065..ac89685b7 100644 --- a/src/test/ref/complex/tetris/test-sprites.asm +++ b/src/test/ref/complex/tetris/test-sprites.asm @@ -27,12 +27,12 @@ .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#1 Interrupt for reading in ASM .label CIA1_INTERRUPT = $dc0d - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -55,6 +55,8 @@ .const SPRITES_FIRST_YPOS = $31 // The line of the first IRQ .const IRQ_RASTER_FIRST = SPRITES_FIRST_YPOS+$13 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label SIN_SPRITE = $2800 .const toSpritePtr1_return = PLAYFIELD_SPRITES/$40 .label render_screen_showing = 5 @@ -94,12 +96,12 @@ main: { .const toD0181_return = (>(PLAYFIELD_SCREEN_1&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f .label xpos = 3 .label ypos = 2 - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = toDd00(gfx) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = toDd00(gfx) lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // *D018 = toD018(PLAYFIELD_SCREEN_1, PLAYFIELD_CHARSET) lda #toD0181_return sta D018 @@ -202,10 +204,10 @@ sprites_irq_init: { // *PROCPORT = PROCPORT_RAM_IO lda #PROCPORT_RAM_IO sta PROCPORT - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL &=0x7f // Set raster line lda #$7f diff --git a/src/test/ref/complex/tetris/test-sprites.cfg b/src/test/ref/complex/tetris/test-sprites.cfg index 22b29d60a..deb3c58a3 100644 --- a/src/test/ref/complex/tetris/test-sprites.cfg +++ b/src/test/ref/complex/tetris/test-sprites.cfg @@ -46,13 +46,13 @@ main: scope:[main] from @4 [12] phi() to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main - [13] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [13] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 [14] phi() to:main::vicSelectGfxBank1_@1 main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001 - [15] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 + [15] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 to:main::toD0181 main::toD0181: scope:[main] from main::vicSelectGfxBank1_@1 [16] phi() @@ -129,7 +129,7 @@ sprites_irq_init: scope:[sprites_irq_init] from main::@2 asm { ldaCIA1_INTERRUPT } [51] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [52] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [53] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [53] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [54] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [55] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST [56] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER diff --git a/src/test/ref/complex/tetris/test-sprites.log b/src/test/ref/complex/tetris/test-sprites.log index 9458b9931..e27c3e469 100644 --- a/src/test/ref/complex/tetris/test-sprites.log +++ b/src/test/ref/complex/tetris/test-sprites.log @@ -1,4 +1,7 @@ Resolved forward reference sprites_irq to interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) $0 ← call toSpritePtr (const nomodify byte*) PLAYFIELD_SPRITES Inlined call (byte~) sprites_irq::$5 ← call toSpritePtr (const nomodify byte*) PLAYFIELD_SPRITES @@ -83,7 +86,7 @@ sprites_irq_init: scope:[sprites_irq_init] from main::@2 asm { ldaCIA1_INTERRUPT } *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (number) $7f *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -193,7 +196,7 @@ main: scope:[main] from @4 main::vicSelectGfxBank1: scope:[main] from main (byte) sin_idx#31 ← phi( main/(byte) sin_idx#32 ) (byte*) main::vicSelectGfxBank1_gfx#1 ← phi( main/(byte*) main::vicSelectGfxBank1_gfx#0 ) - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 (byte*) main::vicSelectGfxBank1_toDd001_gfx#0 ← (byte*) main::vicSelectGfxBank1_gfx#1 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 @@ -213,7 +216,7 @@ main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001_@ (byte) sin_idx#28 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte) sin_idx#29 ) (byte) main::vicSelectGfxBank1_toDd001_return#3 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte) main::vicSelectGfxBank1_toDd001_return#1 ) (byte~) main::vicSelectGfxBank1_$0 ← (byte) main::vicSelectGfxBank1_toDd001_return#3 - *((const nomodify byte*) CIA2_PORT_A) ← (byte~) main::vicSelectGfxBank1_$0 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte~) main::vicSelectGfxBank1_$0 to:main::@3 main::@3: scope:[main] from main::vicSelectGfxBank1_@1 (byte) sin_idx#27 ← phi( main::vicSelectGfxBank1_@1/(byte) sin_idx#28 ) @@ -376,9 +379,9 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const nomodify byte) BLACK = (byte) 0 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const nomodify byte*) CIA2_PORT_A = (byte*)(number) $dd00 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D018 = (byte*)(number) $d018 (const nomodify void()**) HARDWARE_IRQ = (void()**)(number) $fffe @@ -386,6 +389,23 @@ SYMBOL TABLE SSA (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte) IRQ_RASTER_FIRST = (byte)(const nomodify byte) SPRITES_FIRST_YPOS+(number) $13 (const nomodify byte*) IRQ_STATUS = (byte*)(number) $d019 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PLAYFIELD_CHARSET = (byte*)(number) $2800 (const nomodify byte*) PLAYFIELD_SCREEN_1 = (byte*)(number) $400 (const nomodify byte*) PLAYFIELD_SCREEN_2 = (byte*)(number) $2c00 @@ -672,7 +692,7 @@ Adding number conversion cast (unumber) 3 in (volatile byte) irq_sprite_ptr ← Adding number conversion cast (unumber) $14 in (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (number) $14 Adding number conversion cast (unumber) $15 in (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (number) $15 Adding number conversion cast (unumber) 3 in (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (number) 3 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 Adding number conversion cast (unumber) $40 in (number~) main::vicSelectGfxBank1_toDd001_$1 ← (byte~) main::vicSelectGfxBank1_toDd001_$0 / (number) $40 Adding number conversion cast (unumber) main::vicSelectGfxBank1_toDd001_$1 in (number~) main::vicSelectGfxBank1_toDd001_$1 ← (byte~) main::vicSelectGfxBank1_toDd001_$0 / (unumber)(number) $40 Adding number conversion cast (unumber) 3 in (number~) main::vicSelectGfxBank1_toDd001_$2 ← (number) 3 ^ (unumber~) main::vicSelectGfxBank1_toDd001_$1 @@ -704,7 +724,7 @@ Successful SSA optimization PassNAddNumberTypeConversions Inlining cast *((const nomodify byte*) SPRITES_ENABLE) ← (unumber)(number) $f Inlining cast *((const nomodify byte*) SPRITES_MC) ← (unumber)(number) 0 Inlining cast (volatile byte) irq_cnt ← (unumber)(number) 0 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 Inlining cast *((const nomodify byte*) SPRITES_ENABLE) ← (unumber)(number) $ff Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 0 @@ -721,9 +741,9 @@ Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 53273 Simplifying constant pointer cast (byte*) 53274 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (byte*) 56333 -Simplifying constant pointer cast (byte*) 56576 -Simplifying constant pointer cast (byte*) 56578 Simplifying constant pointer cast (void()**) 65534 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 11264 @@ -930,7 +950,10 @@ Resolved ranged comparison value [148] if(loop::s#1!=rangelast(4,7)) goto loop:: Simplifying expression containing zero SPRITES_YPOS in [40] *((const nomodify byte*) SPRITES_YPOS + (byte) 0) ← (byte) sprites_irq::ypos#0 Simplifying expression containing zero PLAYFIELD_SPRITE_PTRS_1 in [51] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1 + (byte) 0) ← (byte) sprites_irq::ptr#0 Simplifying expression containing zero PLAYFIELD_SPRITE_PTRS_2 in [57] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2 + (byte) 0) ← (byte) sprites_irq::ptr#0 +Simplifying expression containing zero (byte*)CIA2 in [97] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) main::vicSelectGfxBank1_toDd001_return#0 Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A +Successful SSA optimization PassNEliminateUnusedVars Removing unused block loop::@return Successful SSA optimization Pass2EliminateUnusedBlocks Adding number conversion cast (unumber) 4 in if((byte) sprites_init::s#1!=(number) 4) goto sprites_init::@1 @@ -1174,13 +1197,13 @@ main: scope:[main] from @4 [12] phi() to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main - [13] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [13] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 [14] phi() to:main::vicSelectGfxBank1_@1 main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001 - [15] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 + [15] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 to:main::toD0181 main::toD0181: scope:[main] from main::vicSelectGfxBank1_@1 [16] phi() @@ -1257,7 +1280,7 @@ sprites_irq_init: scope:[sprites_irq_init] from main::@2 asm { ldaCIA1_INTERRUPT } [51] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [52] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [53] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [53] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [54] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [55] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST [56] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -1361,6 +1384,20 @@ sprites_irq::@1: scope:[sprites_irq] from sprites_irq::@9 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (volatile byte) irq_cnt loadstore 0.48000000000000004 (volatile byte) irq_raster_next loadstore 0.44444444444444453 (volatile byte) irq_sprite_ptr loadstore 0.45161290322580644 @@ -1537,12 +1574,12 @@ Target platform is c64basic / MOS6502X .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#1 Interrupt for reading in ASM .label CIA1_INTERRUPT = $dc0d - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -1565,6 +1602,8 @@ Target platform is c64basic / MOS6502X .const SPRITES_FIRST_YPOS = $31 // The line of the first IRQ .const IRQ_RASTER_FIRST = SPRITES_FIRST_YPOS+$13 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label SIN_SPRITE = $2800 .const toSpritePtr1_return = PLAYFIELD_SPRITES/$40 .label render_screen_showing = $a @@ -1641,9 +1680,9 @@ main: { jmp vicSelectGfxBank1 // main::vicSelectGfxBank1 vicSelectGfxBank1: - // [13] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [13] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [14] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 @@ -1652,9 +1691,9 @@ main: { jmp vicSelectGfxBank1___b1 // main::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [15] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [15] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [16] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181] toD0181_from_vicSelectGfxBank1___b1: jmp toD0181 @@ -1849,10 +1888,10 @@ sprites_irq_init: { // [52] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [53] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [53] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [54] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line lda #$7f @@ -2175,8 +2214,8 @@ Statement [3] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RAST Statement [4] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS+(byte) $15 [ ] ( [ ] { } ) always clobbers reg byte a Statement [6] (volatile byte) irq_sprite_ptr ← (const byte) toSpritePtr1_return#0+(byte) 3 [ ] ( [ ] { } ) always clobbers reg byte a Statement [7] (volatile byte) irq_cnt ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [13] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:10 [ ] { } ) always clobbers reg byte a -Statement [15] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:10 [ ] { } ) always clobbers reg byte a +Statement [13] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:10 [ ] { } ) always clobbers reg byte a +Statement [15] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:10 [ ] { } ) always clobbers reg byte a Statement [17] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:10 [ ] { } ) always clobbers reg byte a Statement [19] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff [ ] ( main:10 [ ] { } ) always clobbers reg byte a Statement [21] (byte) main::s2#0 ← (byte) main::s#2 << (byte) 1 [ main::s#2 main::xpos#2 main::ypos#2 main::s2#0 ] ( main:10 [ main::s#2 main::xpos#2 main::ypos#2 main::s2#0 ] { } ) always clobbers reg byte a @@ -2201,7 +2240,7 @@ Statement [49] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IR Statement asm { ldaCIA1_INTERRUPT } always clobbers reg byte a Statement [51] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:10::sprites_irq_init:33 [ ] { } ) always clobbers reg byte a Statement [52] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:10::sprites_irq_init:33 [ ] { } ) always clobbers reg byte a -Statement [53] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:10::sprites_irq_init:33 [ ] { } ) always clobbers reg byte a +Statement [53] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:10::sprites_irq_init:33 [ ] { } ) always clobbers reg byte a Statement [54] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:10::sprites_irq_init:33 [ ] { } ) always clobbers reg byte a Statement [55] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST [ ] ( main:10::sprites_irq_init:33 [ ] { } ) always clobbers reg byte a Statement [56] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:10::sprites_irq_init:33 [ ] { } ) always clobbers reg byte a @@ -2239,8 +2278,8 @@ Statement [3] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RAST Statement [4] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS+(byte) $15 [ ] ( [ ] { } ) always clobbers reg byte a Statement [6] (volatile byte) irq_sprite_ptr ← (const byte) toSpritePtr1_return#0+(byte) 3 [ ] ( [ ] { } ) always clobbers reg byte a Statement [7] (volatile byte) irq_cnt ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [13] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:10 [ ] { } ) always clobbers reg byte a -Statement [15] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:10 [ ] { } ) always clobbers reg byte a +Statement [13] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:10 [ ] { } ) always clobbers reg byte a +Statement [15] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:10 [ ] { } ) always clobbers reg byte a Statement [17] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:10 [ ] { } ) always clobbers reg byte a Statement [19] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff [ ] ( main:10 [ ] { } ) always clobbers reg byte a Statement [21] (byte) main::s2#0 ← (byte) main::s#2 << (byte) 1 [ main::s#2 main::xpos#2 main::ypos#2 main::s2#0 ] ( main:10 [ main::s#2 main::xpos#2 main::ypos#2 main::s2#0 ] { } ) always clobbers reg byte a @@ -2258,7 +2297,7 @@ Statement [49] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IR Statement asm { ldaCIA1_INTERRUPT } always clobbers reg byte a Statement [51] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:10::sprites_irq_init:33 [ ] { } ) always clobbers reg byte a Statement [52] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:10::sprites_irq_init:33 [ ] { } ) always clobbers reg byte a -Statement [53] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:10::sprites_irq_init:33 [ ] { } ) always clobbers reg byte a +Statement [53] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:10::sprites_irq_init:33 [ ] { } ) always clobbers reg byte a Statement [54] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:10::sprites_irq_init:33 [ ] { } ) always clobbers reg byte a Statement [55] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST [ ] ( main:10::sprites_irq_init:33 [ ] { } ) always clobbers reg byte a Statement [56] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:10::sprites_irq_init:33 [ ] { } ) always clobbers reg byte a @@ -2320,6 +2359,7 @@ Uplift Scope [sprites_init] 2,302.3: zp[1]:8 [ sprites_init::s#2 sprites_init::s Uplift Scope [] 2,335.67: zp[1]:5 [ sin_idx#10 sin_idx#3 ] 0.48: zp[1]:12 [ irq_sprite_ypos ] 0.48: zp[1]:14 [ irq_cnt ] 0.45: zp[1]:13 [ irq_sprite_ptr ] 0.44: zp[1]:11 [ irq_raster_next ] 0.4: zp[1]:10 [ render_screen_showing ] Uplift Scope [main] 212.1: zp[1]:2 [ main::s#2 main::s#1 ] 202: zp[1]:16 [ main::$6 ] 151.5: zp[1]:15 [ main::s2#0 ] 101: zp[1]:4 [ main::ypos#2 main::ypos#1 ] 88.38: zp[1]:3 [ main::xpos#2 main::xpos#1 ] Uplift Scope [sprites_irq] 6.5: zp[1]:21 [ sprites_irq::raster_sprite_gfx_modify ] 4: zp[1]:20 [ sprites_irq::$0 ] 4: zp[1]:24 [ sprites_irq::ptr#4 ] 4: zp[1]:26 [ sprites_irq::ptr#2 ] 2.67: zp[1]:23 [ sprites_irq::ptr#3 ] 2.67: zp[1]:25 [ sprites_irq::ptr#1 ] 2.5: zp[1]:19 [ sprites_irq::ypos#0 ] 2.5: zp[1]:22 [ sprites_irq::ptr#0 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [sprites_irq_init] Uplifting [loop] best 13962 combination zp[1]:6 [ loop::s#2 loop::s#1 ] reg byte a [ loop::$1 ] reg byte x [ loop::idx#2 loop::idx#0 loop::idx#1 ] @@ -2329,6 +2369,7 @@ Uplifting [main] best 13512 combination reg byte y [ main::s#2 main::s#1 ] reg b Limited combination testing to 100 combinations of 324 possible. Uplifting [sprites_irq] best 13488 combination zp[1]:21 [ sprites_irq::raster_sprite_gfx_modify ] reg byte x [ sprites_irq::$0 ] reg byte a [ sprites_irq::ptr#4 ] reg byte a [ sprites_irq::ptr#2 ] reg byte a [ sprites_irq::ptr#3 ] zp[1]:25 [ sprites_irq::ptr#1 ] zp[1]:19 [ sprites_irq::ypos#0 ] zp[1]:22 [ sprites_irq::ptr#0 ] Limited combination testing to 100 combinations of 12288 possible. +Uplifting [MOS6526_CIA] best 13488 combination Uplifting [sprites_irq_init] best 13488 combination Attempting to uplift remaining variables inzp[1]:6 [ loop::s#2 loop::s#1 ] Uplifting [loop] best 13488 combination zp[1]:6 [ loop::s#2 loop::s#1 ] @@ -2407,12 +2448,12 @@ ASSEMBLER BEFORE OPTIMIZATION .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#1 Interrupt for reading in ASM .label CIA1_INTERRUPT = $dc0d - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -2435,6 +2476,8 @@ ASSEMBLER BEFORE OPTIMIZATION .const SPRITES_FIRST_YPOS = $31 // The line of the first IRQ .const IRQ_RASTER_FIRST = SPRITES_FIRST_YPOS+$13 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label SIN_SPRITE = $2800 .const toSpritePtr1_return = PLAYFIELD_SPRITES/$40 .label render_screen_showing = 5 @@ -2508,9 +2551,9 @@ main: { jmp vicSelectGfxBank1 // main::vicSelectGfxBank1 vicSelectGfxBank1: - // [13] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [13] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [14] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 @@ -2519,9 +2562,9 @@ main: { jmp vicSelectGfxBank1___b1 // main::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [15] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [15] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [16] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181] toD0181_from_vicSelectGfxBank1___b1: jmp toD0181 @@ -2703,10 +2746,10 @@ sprites_irq_init: { // [52] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [53] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [53] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [54] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line lda #$7f @@ -3099,9 +3142,9 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const nomodify byte) BLACK = (byte) 0 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D018 = (byte*) 53272 (const nomodify void()**) HARDWARE_IRQ = (void()**) 65534 @@ -3109,6 +3152,22 @@ FINAL SYMBOL TABLE (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte) IRQ_RASTER_FIRST = (const nomodify byte) SPRITES_FIRST_YPOS+(byte) $13 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PLAYFIELD_CHARSET = (byte*) 10240 (const nomodify byte*) PLAYFIELD_SCREEN_1 = (byte*) 1024 (const nomodify byte*) PLAYFIELD_SCREEN_2 = (byte*) 11264 @@ -3299,12 +3358,12 @@ Score: 11662 .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#1 Interrupt for reading in ASM .label CIA1_INTERRUPT = $dc0d - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -3327,6 +3386,8 @@ Score: 11662 .const SPRITES_FIRST_YPOS = $31 // The line of the first IRQ .const IRQ_RASTER_FIRST = SPRITES_FIRST_YPOS+$13 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label SIN_SPRITE = $2800 .const toSpritePtr1_return = PLAYFIELD_SPRITES/$40 .label render_screen_showing = 5 @@ -3388,17 +3449,17 @@ main: { .label xpos = 3 .label ypos = 2 // main::vicSelectGfxBank1 - // *CIA2_PORT_A_DDR = %00000011 - // [13] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [13] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [14] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] // main::vicSelectGfxBank1_toDd001 // main::vicSelectGfxBank1_@1 - // *CIA2_PORT_A = toDd00(gfx) - // [15] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A = toDd00(gfx) + // [15] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [16] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181] // main::toD0181 // main::@3 @@ -3569,11 +3630,11 @@ sprites_irq_init: { // [52] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR - // [53] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR + // [53] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL &=0x7f // [54] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line diff --git a/src/test/ref/complex/tetris/test-sprites.sym b/src/test/ref/complex/tetris/test-sprites.sym index bb7276032..bed7af45b 100644 --- a/src/test/ref/complex/tetris/test-sprites.sym +++ b/src/test/ref/complex/tetris/test-sprites.sym @@ -6,9 +6,9 @@ (label) @begin (label) @end (const nomodify byte) BLACK = (byte) 0 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D018 = (byte*) 53272 (const nomodify void()**) HARDWARE_IRQ = (void()**) 65534 @@ -16,6 +16,22 @@ (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte) IRQ_RASTER_FIRST = (const nomodify byte) SPRITES_FIRST_YPOS+(byte) $13 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PLAYFIELD_CHARSET = (byte*) 10240 (const nomodify byte*) PLAYFIELD_SCREEN_1 = (byte*) 1024 (const nomodify byte*) PLAYFIELD_SCREEN_2 = (byte*) 11264 diff --git a/src/test/ref/complex/tetris/tetris.asm b/src/test/ref/complex/tetris/tetris.asm index 5713b63fc..f6b2883c3 100644 --- a/src/test/ref/complex/tetris/tetris.asm +++ b/src/test/ref/complex/tetris/tetris.asm @@ -41,16 +41,12 @@ .const IRQ_RASTER = 1 // Color Ram .label COLS = $d800 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA#1 Interrupt Status & Control Register + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#1 Interrupt for reading in ASM .label CIA1_INTERRUPT = $dc0d - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -113,6 +109,9 @@ .const COLLISION_LEFT = 4 // Right side collision (cell beyond the right side of the playfield) .const COLLISION_RIGHT = 8 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .const toSpritePtr1_return = PLAYFIELD_SPRITES/$40 .label render_screen_showing = $26 .label score_bcd = $27 @@ -1501,11 +1500,11 @@ keyboard_event_scan: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] lda keyboard_matrix_row_bitmask,x - sta CIA1_PORT_A - // ~*CIA1_PORT_B - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // } rts @@ -1625,10 +1624,10 @@ sprites_irq_init: { // *PROCPORT = PROCPORT_RAM_IO lda #PROCPORT_RAM_IO sta PROCPORT - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL &=0x7f // Set raster line lda #$7f @@ -1696,12 +1695,12 @@ render_init: { // Initialize the screen line pointers; .label li_1 = $22 .label li_2 = $30 - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = toDd00(gfx) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = toDd00(gfx) lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // *D011 = VIC_ECM | VIC_DEN | VIC_RSEL | 3 // Enable Extended Background Color Mode lda #VIC_ECM|VIC_DEN|VIC_RSEL|3 diff --git a/src/test/ref/complex/tetris/tetris.cfg b/src/test/ref/complex/tetris/tetris.cfg index 80d105b2f..5d7d0ee31 100644 --- a/src/test/ref/complex/tetris/tetris.cfg +++ b/src/test/ref/complex/tetris/tetris.cfg @@ -985,8 +985,8 @@ keyboard_event_scan::@11: scope:[keyboard_event_scan] from keyboard_event_scan: (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_event_scan::@7 - [443] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) - [444] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [443] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) + [444] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [445] return @@ -1051,7 +1051,7 @@ sprites_irq_init: scope:[sprites_irq_init] from main::@10 asm { ldaCIA1_INTERRUPT } [475] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [476] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [477] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [477] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [478] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [479] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST [480] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -1088,13 +1088,13 @@ render_init: scope:[render_init] from main::@8 [496] phi() to:render_init::vicSelectGfxBank1 render_init::vicSelectGfxBank1: scope:[render_init] from render_init - [497] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [497] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:render_init::vicSelectGfxBank1_toDd001 render_init::vicSelectGfxBank1_toDd001: scope:[render_init] from render_init::vicSelectGfxBank1 [498] phi() to:render_init::vicSelectGfxBank1_@1 render_init::vicSelectGfxBank1_@1: scope:[render_init] from render_init::vicSelectGfxBank1_toDd001 - [499] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 + [499] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 to:render_init::@2 render_init::@2: scope:[render_init] from render_init::vicSelectGfxBank1_@1 [500] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 diff --git a/src/test/ref/complex/tetris/tetris.log b/src/test/ref/complex/tetris/tetris.log index 6eecda7bd..13f3e013f 100644 --- a/src/test/ref/complex/tetris/tetris.log +++ b/src/test/ref/complex/tetris/tetris.log @@ -6,6 +6,15 @@ Resolved forward reference COLLISION_NONE to (const nomodify byte) COLLISION_NON Resolved forward reference COLLISION_NONE to (const nomodify byte) COLLISION_NONE Resolved forward reference COLLISION_NONE to (const nomodify byte) COLLISION_NONE Setting inferred volatile on symbol affected by address-of (byte*) render_score::score_bytes ← (byte*)&(dword) score_bcd +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call vicSelectGfxBank (const nomodify byte*) PLAYFIELD_CHARSET Inlined call (byte~) render_show::$2 ← call toD018 (const nomodify byte*) PLAYFIELD_SCREEN_1 (const nomodify byte*) PLAYFIELD_CHARSET @@ -21,8 +30,8 @@ CONTROL FLOW GRAPH SSA (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_event_scan::@7 (byte) keyboard_matrix_read::rowid#1 ← phi( keyboard_event_scan::@7/(byte) keyboard_matrix_read::rowid#0 ) - *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) - (byte~) keyboard_matrix_read::$0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) + (byte~) keyboard_matrix_read::$0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) (byte) keyboard_matrix_read::row_pressed_bits#0 ← (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#0 ← (byte) keyboard_matrix_read::row_pressed_bits#0 to:keyboard_matrix_read::@return @@ -320,7 +329,7 @@ render_init: scope:[render_init] from main::@9 to:render_init::vicSelectGfxBank1 render_init::vicSelectGfxBank1: scope:[render_init] from render_init (byte*) render_init::vicSelectGfxBank1_gfx#1 ← phi( render_init/(byte*) render_init::vicSelectGfxBank1_gfx#0 ) - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 (byte*) render_init::vicSelectGfxBank1_toDd001_gfx#0 ← (byte*) render_init::vicSelectGfxBank1_gfx#1 to:render_init::vicSelectGfxBank1_toDd001 render_init::vicSelectGfxBank1_toDd001: scope:[render_init] from render_init::vicSelectGfxBank1 @@ -337,7 +346,7 @@ render_init::vicSelectGfxBank1_toDd001_@return: scope:[render_init] from render render_init::vicSelectGfxBank1_@1: scope:[render_init] from render_init::vicSelectGfxBank1_toDd001_@return (byte) render_init::vicSelectGfxBank1_toDd001_return#3 ← phi( render_init::vicSelectGfxBank1_toDd001_@return/(byte) render_init::vicSelectGfxBank1_toDd001_return#1 ) (byte~) render_init::vicSelectGfxBank1_$0 ← (byte) render_init::vicSelectGfxBank1_toDd001_return#3 - *((const nomodify byte*) CIA2_PORT_A) ← (byte~) render_init::vicSelectGfxBank1_$0 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte~) render_init::vicSelectGfxBank1_$0 to:render_init::@3 render_init::@3: scope:[render_init] from render_init::vicSelectGfxBank1_@1 *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 @@ -1052,7 +1061,7 @@ sprites_irq_init: scope:[sprites_irq_init] from main::@11 asm { ldaCIA1_INTERRUPT } *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (number) $7f *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -3240,11 +3249,9 @@ SYMBOL TABLE SSA (const nomodify byte) BLACK = (byte) 0 (const nomodify byte) BLUE = (byte) 6 (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const nomodify byte*) CIA1_PORT_A = (byte*)(number) $dc00 -(const nomodify byte*) CIA1_PORT_B = (byte*)(number) $dc01 -(const nomodify byte*) CIA2_PORT_A = (byte*)(number) $dd00 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte) COLLISION_BOTTOM = (byte) 2 (const nomodify byte) COLLISION_LEFT = (byte) 4 @@ -3278,7 +3285,25 @@ SYMBOL TABLE SSA (const nomodify byte) KEY_Z = (byte) $c (const nomodify byte) LIGHT_BLUE = (byte) $e (const nomodify byte) LIGHT_GREEN = (byte) $d +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS[] = { (byte) $30, (byte) $2b, (byte) $26, (byte) $21, (byte) $1c, (byte) $17, (byte) $12, (byte) $d, (byte) 8, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 4, (byte) 4, (byte) 4, (byte) 3, (byte) 3, (byte) 3, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 1 } +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte) ORANGE = (byte) 8 (const word*) PIECES[] = { (word)(const byte*) PIECE_T, (word)(const byte*) PIECE_S, (word)(const byte*) PIECE_Z, (word)(const byte*) PIECE_J, (word)(const byte*) PIECE_O, (word)(const byte*) PIECE_I, (word)(const byte*) PIECE_L } (const byte*) PIECES_CHARS[] = { (byte) $65, (byte) $66, (byte) $a6, (byte) $66, (byte) $65, (byte) $65, (byte) $a6 } @@ -6108,7 +6133,7 @@ Adding number conversion cast (unumber) keyboard_event_pressed::$1 in (number~) Adding number conversion cast (unumber) 0 in (bool~) keyboard_event_get::$0 ← (byte) keyboard_events_size#14 == (number) 0 Adding number conversion cast (unumber) $ff in (byte) keyboard_event_get::return#0 ← (number) $ff Adding number conversion cast (unumber) $ffff in *((const nomodify word*) SID_VOICE3_FREQ) ← (number) $ffff -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 Adding number conversion cast (unumber) $40 in (number~) render_init::vicSelectGfxBank1_toDd001_$1 ← (byte~) render_init::vicSelectGfxBank1_toDd001_$0 / (number) $40 Adding number conversion cast (unumber) render_init::vicSelectGfxBank1_toDd001_$1 in (number~) render_init::vicSelectGfxBank1_toDd001_$1 ← (byte~) render_init::vicSelectGfxBank1_toDd001_$0 / (unumber)(number) $40 Adding number conversion cast (unumber) 3 in (number~) render_init::vicSelectGfxBank1_toDd001_$2 ← (number) 3 ^ (unumber~) render_init::vicSelectGfxBank1_toDd001_$1 @@ -6288,7 +6313,7 @@ Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) keyboard_modifiers#1 ← (unumber)(number) 0 Inlining cast (byte) keyboard_event_get::return#0 ← (unumber)(number) $ff Inlining cast *((const nomodify word*) SID_VOICE3_FREQ) ← (unumber)(number) $ffff -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 Inlining cast *((const nomodify byte*) D011) ← (unumber)(const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(unumber)(number) 3 Inlining cast (byte) render_screen_show#1 ← (unumber)(number) 0 Inlining cast (byte) render_screen_render#1 ← (unumber)(number) $20 @@ -6340,11 +6365,9 @@ Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 53273 Simplifying constant pointer cast (byte*) 53274 Simplifying constant pointer cast (byte*) 55296 -Simplifying constant pointer cast (byte*) 56320 -Simplifying constant pointer cast (byte*) 56321 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (byte*) 56333 -Simplifying constant pointer cast (byte*) 56576 -Simplifying constant pointer cast (byte*) 56578 Simplifying constant pointer cast (void()**) 65534 Simplifying constant pointer cast (word*) 54286 Simplifying constant pointer cast (byte*) 54290 @@ -7880,7 +7903,9 @@ Resolved ranged next value [736] play_increase_level::b#1 ← ++ play_increase_l Resolved ranged comparison value [738] if(play_increase_level::b#1!=rangelast(0,4)) goto play_increase_level::@6 to (number) 5 Rewriting conditional comparison [287] if((byte) render_moving::ypos#2>(byte) 1) goto render_moving::@2 Rewriting conditional comparison [721] if((byte) level#21>(byte) $1d) goto play_increase_level::@1 +Simplifying expression containing zero (byte*)CIA1 in [1] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) Simplifying expression containing zero KEY_MODIFIER_LSHIFT in [57] (byte) keyboard_modifiers#2 ← (const byte) keyboard_modifiers#1 | (const nomodify byte) KEY_MODIFIER_LSHIFT +Simplifying expression containing zero (byte*)CIA2 in [112] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) render_init::vicSelectGfxBank1_toDd001_return#0 Simplifying expression containing zero PIECES_COLORS_1 in [116] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) 0) Simplifying expression containing zero PIECES_COLORS_2 in [117] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) 0) Simplifying expression containing zero render_score::score_bytes in [192] (byte) render_bcd::bcd#2 ← *((const byte*) render_score::score_bytes + (byte) 0) @@ -7899,6 +7924,7 @@ Eliminating unused constant (const byte*) render_next::screen_next_area#0 Eliminating unused constant (const byte) play_movement::render#0 Eliminating unused constant (const byte) play_move_rotate::orientation#0 Eliminating unused constant (const byte) main::render#0 +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A Eliminating unused constant (const byte*) current_piece_gfx#0 Eliminating unused constant (const byte) current_piece_char#0 Eliminating unused constant (const byte) current_xpos#0 @@ -9988,8 +10014,8 @@ keyboard_event_scan::@11: scope:[keyboard_event_scan] from keyboard_event_scan: (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_event_scan::@7 - [443] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) - [444] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [443] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) + [444] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [445] return @@ -10054,7 +10080,7 @@ sprites_irq_init: scope:[sprites_irq_init] from main::@10 asm { ldaCIA1_INTERRUPT } [475] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [476] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [477] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [477] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [478] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [479] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST [480] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -10091,13 +10117,13 @@ render_init: scope:[render_init] from main::@8 [496] phi() to:render_init::vicSelectGfxBank1 render_init::vicSelectGfxBank1: scope:[render_init] from render_init - [497] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [497] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:render_init::vicSelectGfxBank1_toDd001 render_init::vicSelectGfxBank1_toDd001: scope:[render_init] from render_init::vicSelectGfxBank1 [498] phi() to:render_init::vicSelectGfxBank1_@1 render_init::vicSelectGfxBank1_@1: scope:[render_init] from render_init::vicSelectGfxBank1_toDd001 - [499] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 + [499] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 to:render_init::@2 render_init::@2: scope:[render_init] from render_init::vicSelectGfxBank1_@1 [500] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 @@ -10265,6 +10291,20 @@ sprites_irq::@1: scope:[sprites_irq] from sprites_irq::@9 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte) current_movedown_counter (byte) current_movedown_counter#12 26666.933333333334 (byte) current_movedown_counter#14 2732.5135135135133 @@ -11470,16 +11510,12 @@ Target platform is c64basic / MOS6502X .const IRQ_RASTER = 1 // Color Ram .label COLS = $d800 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA#1 Interrupt Status & Control Register + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#1 Interrupt for reading in ASM .label CIA1_INTERRUPT = $dc0d - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -11542,6 +11578,9 @@ Target platform is c64basic / MOS6502X .const COLLISION_LEFT = 4 // Right side collision (cell beyond the right side of the playfield) .const COLLISION_RIGHT = 8 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .const toSpritePtr1_return = PLAYFIELD_SPRITES/$40 .label render_screen_showing = $70 .label score_bcd = $71 @@ -14472,12 +14511,12 @@ keyboard_matrix_read: { .label return = $d3 .label rowid = $c4 .label return_1 = $c5 - // [443] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [443] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy.z rowid lda keyboard_matrix_row_bitmask,y - sta CIA1_PORT_A - // [444] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuz1=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [444] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuz1=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff sta.z return jmp __breturn @@ -14672,10 +14711,10 @@ sprites_irq_init: { // [476] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [477] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [477] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [478] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line lda #$7f @@ -14776,9 +14815,9 @@ render_init: { jmp vicSelectGfxBank1 // render_init::vicSelectGfxBank1 vicSelectGfxBank1: - // [497] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [497] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [498] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 @@ -14787,9 +14826,9 @@ render_init: { jmp vicSelectGfxBank1___b1 // render_init::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [499] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [499] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 jmp __b2 // render_init::@2 __b2: @@ -15588,8 +15627,8 @@ Removing always clobbered register reg byte y as potential for zp[1]:87 [ keyboa Statement [439] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] { } ) always clobbers reg byte a Statement [440] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] { } ) always clobbers reg byte a Statement [441] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte y -Statement [443] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [444] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [443] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [444] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [446] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a Statement [450] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y Statement [451] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y @@ -15610,7 +15649,7 @@ Statement [473] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) I Statement asm { ldaCIA1_INTERRUPT } always clobbers reg byte a Statement [475] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a Statement [476] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [477] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [477] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a Statement [478] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a Statement [479] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a Statement [480] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a @@ -15625,8 +15664,8 @@ Removing always clobbered register reg byte a as potential for zp[1]:96 [ sprite Statement [490] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a Statement [491] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a Statement [492] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#1 ] { } ) always clobbers reg byte a -Statement [497] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [499] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [497] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [499] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a Statement [500] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a Statement [501] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a Statement [502] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a @@ -15775,8 +15814,8 @@ Statement [433] *((const byte*) keyboard_events + (byte) keyboard_events_size#10 Statement [439] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] { } ) always clobbers reg byte a reg byte y Statement [440] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] { } ) always clobbers reg byte a Statement [441] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte y -Statement [443] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [444] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [443] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [444] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [446] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a Statement [450] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y Statement [451] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y @@ -15794,7 +15833,7 @@ Statement [473] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) I Statement asm { ldaCIA1_INTERRUPT } always clobbers reg byte a Statement [475] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a Statement [476] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [477] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [477] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a Statement [478] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a Statement [479] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a Statement [480] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a @@ -15807,8 +15846,8 @@ Statement [489] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) Statement [490] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a Statement [491] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a Statement [492] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#1 ] { } ) always clobbers reg byte a -Statement [497] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [499] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [497] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [499] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a Statement [500] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a Statement [501] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a Statement [502] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a @@ -15946,8 +15985,8 @@ Statement [433] *((const byte*) keyboard_events + (byte) keyboard_events_size#10 Statement [439] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] { } ) always clobbers reg byte a reg byte y Statement [440] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] { } ) always clobbers reg byte a Statement [441] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte y -Statement [443] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [444] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [443] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [444] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [446] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a Statement [450] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y Statement [451] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y @@ -15965,7 +16004,7 @@ Statement [473] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) I Statement asm { ldaCIA1_INTERRUPT } always clobbers reg byte a Statement [475] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a Statement [476] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [477] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [477] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a Statement [478] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a Statement [479] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a Statement [480] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a @@ -15978,8 +16017,8 @@ Statement [489] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) Statement [490] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a Statement [491] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a Statement [492] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#1 ] { } ) always clobbers reg byte a -Statement [497] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [499] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [497] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [499] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a Statement [500] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a Statement [501] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a Statement [502] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a @@ -16238,6 +16277,7 @@ Uplift Scope [sprites_init] 2,302.3: zp[1]:95 [ sprites_init::s#2 sprites_init:: Uplift Scope [main] 2,002: zp[1]:125 [ main::render#1 ] 1,001: zp[1]:122 [ main::key_event#0 ] Uplift Scope [render_score] 375.38: zp[2]:5 [ render_score::screen#3 ] Uplift Scope [sprites_irq] 6.5: zp[1]:218 [ sprites_irq::raster_sprite_gfx_modify ] 4: zp[1]:217 [ sprites_irq::$0 ] 4: zp[1]:221 [ sprites_irq::ptr#4 ] 4: zp[1]:223 [ sprites_irq::ptr#2 ] 2.67: zp[1]:220 [ sprites_irq::ptr#3 ] 2.67: zp[1]:222 [ sprites_irq::ptr#1 ] 2.5: zp[1]:216 [ sprites_irq::ypos#0 ] 2.5: zp[1]:219 [ sprites_irq::ptr#0 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [sid_rnd_init] Uplift Scope [render_screen_swap] Uplift Scope [sprites_irq_init] @@ -16286,6 +16326,7 @@ Uplifting [main] best 4252860 combination reg byte a [ main::render#1 ] reg byte Uplifting [render_score] best 4252860 combination zp[2]:5 [ render_score::screen#3 ] Uplifting [sprites_irq] best 4252836 combination zp[1]:218 [ sprites_irq::raster_sprite_gfx_modify ] reg byte x [ sprites_irq::$0 ] reg byte a [ sprites_irq::ptr#4 ] reg byte a [ sprites_irq::ptr#2 ] reg byte a [ sprites_irq::ptr#3 ] zp[1]:222 [ sprites_irq::ptr#1 ] zp[1]:216 [ sprites_irq::ypos#0 ] zp[1]:219 [ sprites_irq::ptr#0 ] Limited combination testing to 100 combinations of 12288 possible. +Uplifting [MOS6526_CIA] best 4252836 combination Uplifting [sid_rnd_init] best 4252836 combination Uplifting [render_screen_swap] best 4252836 combination Uplifting [sprites_irq_init] best 4252836 combination @@ -16623,16 +16664,12 @@ ASSEMBLER BEFORE OPTIMIZATION .const IRQ_RASTER = 1 // Color Ram .label COLS = $d800 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA#1 Interrupt Status & Control Register + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#1 Interrupt for reading in ASM .label CIA1_INTERRUPT = $dc0d - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -16695,6 +16732,9 @@ ASSEMBLER BEFORE OPTIMIZATION .const COLLISION_LEFT = 4 // Right side collision (cell beyond the right side of the playfield) .const COLLISION_RIGHT = 8 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .const toSpritePtr1_return = PLAYFIELD_SPRITES/$40 .label render_screen_showing = $26 .label score_bcd = $27 @@ -19272,11 +19312,11 @@ keyboard_event_scan: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { - // [443] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // [443] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda keyboard_matrix_row_bitmask,x - sta CIA1_PORT_A - // [444] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [444] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff jmp __breturn // keyboard_matrix_read::@return @@ -19455,10 +19495,10 @@ sprites_irq_init: { // [476] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [477] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [477] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [478] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line lda #$7f @@ -19551,9 +19591,9 @@ render_init: { jmp vicSelectGfxBank1 // render_init::vicSelectGfxBank1 vicSelectGfxBank1: - // [497] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [497] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [498] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 @@ -19562,9 +19602,9 @@ render_init: { jmp vicSelectGfxBank1___b1 // render_init::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [499] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [499] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 jmp __b2 // render_init::@2 __b2: @@ -20787,11 +20827,9 @@ FINAL SYMBOL TABLE (const nomodify byte) BLACK = (byte) 0 (const nomodify byte) BLUE = (byte) 6 (const nomodify byte*) BORDERCOL = (byte*) 53280 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte) COLLISION_BOTTOM = (byte) 2 (const nomodify byte) COLLISION_LEFT = (byte) 4 @@ -20821,7 +20859,24 @@ FINAL SYMBOL TABLE (const nomodify byte) KEY_Z = (byte) $c (const nomodify byte) LIGHT_BLUE = (byte) $e (const nomodify byte) LIGHT_GREEN = (byte) $d +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS[] = { (byte) $30, (byte) $2b, (byte) $26, (byte) $21, (byte) $1c, (byte) $17, (byte) $12, (byte) $d, (byte) 8, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 4, (byte) 4, (byte) 4, (byte) 3, (byte) 3, (byte) 3, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 1 } +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte) ORANGE = (byte) 8 (const word*) PIECES[] = { (word)(const byte*) PIECE_T, (word)(const byte*) PIECE_S, (word)(const byte*) PIECE_Z, (word)(const byte*) PIECE_J, (word)(const byte*) PIECE_O, (word)(const byte*) PIECE_I, (word)(const byte*) PIECE_L } (const byte*) PIECES_CHARS[] = { (byte) $65, (byte) $66, (byte) $a6, (byte) $66, (byte) $65, (byte) $65, (byte) $a6 } @@ -21892,16 +21947,12 @@ Score: 3348927 .const IRQ_RASTER = 1 // Color Ram .label COLS = $d800 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA#1 Interrupt Status & Control Register + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#1 Interrupt for reading in ASM .label CIA1_INTERRUPT = $dc0d - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -21964,6 +22015,9 @@ Score: 3348927 .const COLLISION_LEFT = 4 // Right side collision (cell beyond the right side of the playfield) .const COLLISION_RIGHT = 8 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .const toSpritePtr1_return = PLAYFIELD_SPRITES/$40 .label render_screen_showing = $26 .label score_bcd = $27 @@ -24340,13 +24394,13 @@ keyboard_event_scan: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] - // [443] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] + // [443] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda keyboard_matrix_row_bitmask,x - sta CIA1_PORT_A - // ~*CIA1_PORT_B - // [444] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + // [444] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // keyboard_matrix_read::@return // } @@ -24522,11 +24576,11 @@ sprites_irq_init: { // [476] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR - // [477] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR + // [477] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL &=0x7f // [478] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line @@ -24623,17 +24677,17 @@ render_init: { .label li_1 = $22 .label li_2 = $30 // render_init::vicSelectGfxBank1 - // *CIA2_PORT_A_DDR = %00000011 - // [497] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [497] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [498] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001] // render_init::vicSelectGfxBank1_toDd001 // render_init::vicSelectGfxBank1_@1 - // *CIA2_PORT_A = toDd00(gfx) - // [499] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A = toDd00(gfx) + // [499] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // render_init::@2 // *D011 = VIC_ECM | VIC_DEN | VIC_RSEL | 3 // [500] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 diff --git a/src/test/ref/complex/tetris/tetris.sym b/src/test/ref/complex/tetris/tetris.sym index 677e9c60e..bb73dce86 100644 --- a/src/test/ref/complex/tetris/tetris.sym +++ b/src/test/ref/complex/tetris/tetris.sym @@ -12,11 +12,9 @@ (const nomodify byte) BLACK = (byte) 0 (const nomodify byte) BLUE = (byte) 6 (const nomodify byte*) BORDERCOL = (byte*) 53280 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte) COLLISION_BOTTOM = (byte) 2 (const nomodify byte) COLLISION_LEFT = (byte) 4 @@ -46,7 +44,24 @@ (const nomodify byte) KEY_Z = (byte) $c (const nomodify byte) LIGHT_BLUE = (byte) $e (const nomodify byte) LIGHT_GREEN = (byte) $d +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS[] = { (byte) $30, (byte) $2b, (byte) $26, (byte) $21, (byte) $1c, (byte) $17, (byte) $12, (byte) $d, (byte) 8, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 4, (byte) 4, (byte) 4, (byte) 3, (byte) 3, (byte) 3, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 1 } +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte) ORANGE = (byte) 8 (const word*) PIECES[] = { (word)(const byte*) PIECE_T, (word)(const byte*) PIECE_S, (word)(const byte*) PIECE_Z, (word)(const byte*) PIECE_J, (word)(const byte*) PIECE_O, (word)(const byte*) PIECE_I, (word)(const byte*) PIECE_L } (const byte*) PIECES_CHARS[] = { (byte) $65, (byte) $66, (byte) $a6, (byte) $66, (byte) $65, (byte) $65, (byte) $a6 } diff --git a/src/test/ref/cordic-atan2-16-ref.log b/src/test/ref/cordic-atan2-16-ref.log index 42f25a95a..ec3214122 100644 --- a/src/test/ref/cordic-atan2-16-ref.log +++ b/src/test/ref/cordic-atan2-16-ref.log @@ -1,5 +1,7 @@ Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (const nomodify byte*) SCREEN (const nomodify byte*) CHARSET @@ -544,6 +546,20 @@ SYMBOL TABLE SSA (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte*) D018 = (byte*)(number) $d018 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1825,6 +1841,20 @@ init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 20002.0 (byte~) atan2_16::$22 2.0000002E7 @@ -3194,6 +3224,7 @@ Uplift Scope [main] 2,002: zp[2]:49 [ main::angle_w#0 ] 2,002: zp[2]:51 [ main:: Uplift Scope [] 12,603: zp[2]:12 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ] Uplift Scope [print_uchar] 2,002: zp[1]:61 [ print_uchar::$0 ] 2,002: zp[1]:62 [ print_uchar::$2 ] 955: zp[1]:10 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] Uplift Scope [print_uint] 71: zp[2]:59 [ print_uint::w#0 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [RADIX] Uplifting [atan2_16] best 1158649 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:25 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:27 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:20 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:15 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:17 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:22 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] zp[2]:47 [ atan2_16::return#2 ] zp[2]:43 [ atan2_16::x#0 ] zp[2]:45 [ atan2_16::y#0 ] @@ -3208,6 +3239,7 @@ Limited combination testing to 100 combinations of 128 possible. Uplifting [] best 1136236 combination zp[2]:12 [ print_char_cursor#18 print_char_cursor#24 print_char_cursor#19 ] Uplifting [print_uchar] best 1136218 combination reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ] reg byte x [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] Uplifting [print_uint] best 1136218 combination zp[2]:59 [ print_uint::w#0 ] +Uplifting [MOS6526_CIA] best 1136218 combination Uplifting [RADIX] best 1136218 combination Attempting to uplift remaining variables inzp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Uplifting [init_font_hex] best 1136218 combination zp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ] @@ -4232,6 +4264,20 @@ FINAL SYMBOL TABLE (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/cordic-atan2-16-ref.sym b/src/test/ref/cordic-atan2-16-ref.sym index c952e5a1c..3bb9204e2 100644 --- a/src/test/ref/cordic-atan2-16-ref.sym +++ b/src/test/ref/cordic-atan2-16-ref.sym @@ -9,6 +9,20 @@ (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/cordic-atan2-16.log b/src/test/ref/cordic-atan2-16.log index 3572f27cd..4dac58eaf 100644 --- a/src/test/ref/cordic-atan2-16.log +++ b/src/test/ref/cordic-atan2-16.log @@ -1,5 +1,7 @@ Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (const nomodify byte*) SCREEN (const nomodify byte*) CHARSET @@ -390,6 +392,20 @@ SYMBOL TABLE SSA (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte*) D018 = (byte*)(number) $d018 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*)(number) $2800 (const byte) SIZEOF_WORD = (byte) 2 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) @@ -1377,6 +1393,20 @@ init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 20002.0 (byte~) atan2_16::$22 2.0000002E7 @@ -2398,6 +2428,7 @@ REGISTER UPLIFT SCOPES Uplift Scope [atan2_16] 286,666,670.58: zp[1]:15 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 206,000,008: zp[2]:16 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 173,333,338.67: zp[2]:18 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 75,248,103.76: zp[2]:11 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 26,909,340.68: zp[2]:6 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 22,737,342.67: zp[2]:8 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 20,000,002: zp[1]:45 [ atan2_16::$23 ] 20,000,002: zp[1]:46 [ atan2_16::$22 ] 17,083,335.04: zp[1]:10 [ atan2_16::i#2 atan2_16::i#1 ] 82,008.5: zp[2]:13 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] 2,002: zp[2]:38 [ atan2_16::return#2 ] 1,079.08: zp[2]:34 [ atan2_16::x#0 ] 1,025.12: zp[2]:36 [ atan2_16::y#0 ] Uplift Scope [init_font_hex] 216,668.83: zp[1]:28 [ init_font_hex::i#2 init_font_hex::i#1 ] 200,002: zp[1]:48 [ init_font_hex::$1 ] 200,002: zp[1]:49 [ init_font_hex::$2 ] 115,001.6: zp[1]:29 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 100,001: zp[1]:47 [ init_font_hex::$0 ] 20,002: zp[1]:50 [ init_font_hex::idx#3 ] 16,334.97: zp[1]:27 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 16,288.71: zp[2]:23 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 14,231.5: zp[2]:25 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 6,334.17: zp[2]:20 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 1,606.87: zp[1]:22 [ init_font_hex::c#6 init_font_hex::c#1 ] Uplift Scope [main] 2,002: zp[2]:40 [ main::angle_w#0 ] 2,002: zp[2]:42 [ main::$3 ] 2,002: zp[1]:44 [ main::ang_w#0 ] 1,668.33: zp[1]:3 [ main::x#2 main::x#1 ] 904.78: zp[2]:4 [ main::screen#2 main::screen#4 main::screen#1 ] 500.5: zp[2]:30 [ main::xw#0 ] 500.5: zp[2]:32 [ main::yw#0 ] 164.97: zp[1]:2 [ main::y#4 main::y#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [] Uplifting [atan2_16] best 1149809 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:16 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:18 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:11 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:6 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:8 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:13 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] zp[2]:38 [ atan2_16::return#2 ] zp[2]:34 [ atan2_16::x#0 ] zp[2]:36 [ atan2_16::y#0 ] @@ -2405,6 +2436,7 @@ Limited combination testing to 100 combinations of 144 possible. Uplifting [init_font_hex] best 1130809 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp[1]:29 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp[1]:47 [ init_font_hex::$0 ] zp[1]:50 [ init_font_hex::idx#3 ] zp[1]:27 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp[2]:23 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp[2]:25 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp[2]:20 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp[1]:22 [ init_font_hex::c#6 init_font_hex::c#1 ] Limited combination testing to 100 combinations of 6912 possible. Uplifting [main] best 1130209 combination zp[2]:40 [ main::angle_w#0 ] zp[2]:42 [ main::$3 ] reg byte a [ main::ang_w#0 ] zp[1]:3 [ main::x#2 main::x#1 ] zp[2]:4 [ main::screen#2 main::screen#4 main::screen#1 ] zp[2]:30 [ main::xw#0 ] zp[2]:32 [ main::yw#0 ] zp[1]:2 [ main::y#4 main::y#1 ] +Uplifting [MOS6526_CIA] best 1130209 combination Uplifting [] best 1130209 combination Attempting to uplift remaining variables inzp[1]:29 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Uplifting [init_font_hex] best 1130209 combination zp[1]:29 [ init_font_hex::idx#5 init_font_hex::idx#2 ] @@ -3205,6 +3237,20 @@ FINAL SYMBOL TABLE (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 10240 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 zp[2]:10 20002.0 diff --git a/src/test/ref/cordic-atan2-16.sym b/src/test/ref/cordic-atan2-16.sym index 4c3da8c31..46a55c2f0 100644 --- a/src/test/ref/cordic-atan2-16.sym +++ b/src/test/ref/cordic-atan2-16.sym @@ -9,6 +9,20 @@ (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 10240 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 zp[2]:10 20002.0 diff --git a/src/test/ref/cordic-atan2-clear.log b/src/test/ref/cordic-atan2-clear.log index 80d0c3d45..d2c8b7774 100644 --- a/src/test/ref/cordic-atan2-clear.log +++ b/src/test/ref/cordic-atan2-clear.log @@ -1,5 +1,7 @@ Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (const nomodify byte*) SCREEN (const nomodify byte*) CHARSET @@ -444,6 +446,20 @@ SYMBOL TABLE SSA (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte*) D018 = (byte*)(number) $d018 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) RASTER = (byte*)(number) $d012 (const nomodify byte*) SCREEN = (byte*)(number) $2800 (const byte) SIZEOF_WORD = (byte) 2 @@ -1579,6 +1595,20 @@ init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 200002.0 (byte~) atan2_16::$22 2.00000002E8 @@ -2810,6 +2840,7 @@ Uplift Scope [atan2_16] 2,866,666,670.58: zp[1]:20 [ atan2_16::shift#2 atan2_16: Uplift Scope [init_font_hex] 216,668.83: zp[1]:33 [ init_font_hex::i#2 init_font_hex::i#1 ] 200,002: zp[1]:59 [ init_font_hex::$1 ] 200,002: zp[1]:60 [ init_font_hex::$2 ] 115,001.6: zp[1]:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 100,001: zp[1]:58 [ init_font_hex::$0 ] 20,002: zp[1]:61 [ init_font_hex::idx#3 ] 16,334.97: zp[1]:32 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 16,288.71: zp[2]:28 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 14,231.5: zp[2]:30 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 6,334.17: zp[2]:25 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 1,606.87: zp[1]:27 [ init_font_hex::c#6 init_font_hex::c#1 ] Uplift Scope [init_angle_screen] 21,820.36: zp[1]:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 20,002: zp[1]:35 [ init_angle_screen::$3 ] 20,002: zp[1]:36 [ init_angle_screen::$4 ] 20,002: zp[1]:39 [ init_angle_screen::$5 ] 20,002: zp[2]:48 [ init_angle_screen::angle_w#0 ] 20,002: zp[2]:50 [ init_angle_screen::$7 ] 20,002: zp[1]:53 [ init_angle_screen::$9 ] 20,002: zp[1]:54 [ init_angle_screen::$10 ] 20,002: zp[1]:55 [ init_angle_screen::$11 ] 12,858.43: zp[1]:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 7,143.57: zp[1]:52 [ init_angle_screen::ang_w#0 ] 5,000.5: zp[2]:40 [ init_angle_screen::yw#0 ] 3,333.67: zp[2]:37 [ init_angle_screen::xw#0 ] 1,963.15: zp[1]:4 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 1,547.49: zp[2]:7 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] 1,417.33: zp[2]:5 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] Uplift Scope [main] 1,028.5: zp[2]:2 [ main::clear_char#5 main::clear_char#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [] Uplifting [atan2_16] best 1174671 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:21 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:23 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:16 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:11 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:13 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:18 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] zp[2]:46 [ atan2_16::return#2 ] zp[2]:42 [ atan2_16::x#0 ] zp[2]:44 [ atan2_16::y#0 ] @@ -2819,6 +2850,7 @@ Limited combination testing to 100 combinations of 6912 possible. Uplifting [init_angle_screen] best 1154071 combination zp[1]:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$5 ] zp[2]:48 [ init_angle_screen::angle_w#0 ] zp[2]:50 [ init_angle_screen::$7 ] zp[1]:53 [ init_angle_screen::$9 ] zp[1]:54 [ init_angle_screen::$10 ] zp[1]:55 [ init_angle_screen::$11 ] zp[1]:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp[1]:52 [ init_angle_screen::ang_w#0 ] zp[2]:40 [ init_angle_screen::yw#0 ] zp[2]:37 [ init_angle_screen::xw#0 ] zp[1]:4 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp[2]:7 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] zp[2]:5 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] Limited combination testing to 100 combinations of 65536 possible. Uplifting [main] best 1154071 combination zp[2]:2 [ main::clear_char#5 main::clear_char#1 ] +Uplifting [MOS6526_CIA] best 1154071 combination Uplifting [] best 1154071 combination Attempting to uplift remaining variables inzp[1]:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Uplifting [init_font_hex] best 1154071 combination zp[1]:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] @@ -3765,6 +3797,20 @@ FINAL SYMBOL TABLE (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte*) SCREEN = (byte*) 10240 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) diff --git a/src/test/ref/cordic-atan2-clear.sym b/src/test/ref/cordic-atan2-clear.sym index b8d002080..3d889d845 100644 --- a/src/test/ref/cordic-atan2-clear.sym +++ b/src/test/ref/cordic-atan2-clear.sym @@ -8,6 +8,20 @@ (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte*) SCREEN = (byte*) 10240 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) diff --git a/src/test/ref/cordic-atan2.log b/src/test/ref/cordic-atan2.log index 8ce1661e6..4f9cd6228 100644 --- a/src/test/ref/cordic-atan2.log +++ b/src/test/ref/cordic-atan2.log @@ -1,5 +1,7 @@ Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (const nomodify byte*) SCREEN (const nomodify byte*) CHARSET @@ -321,6 +323,20 @@ SYMBOL TABLE SSA (const nomodify byte) CORDIC_ITERATIONS_8 = (byte) 8 (const nomodify byte*) D018 = (byte*)(number) $d018 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*)(number) $2800 (byte()) atan2_8((signed byte) atan2_8::x , (signed byte) atan2_8::y) (bool~) atan2_8::$0 @@ -1134,6 +1150,20 @@ init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte()) atan2_8((signed byte) atan2_8::x , (signed byte) atan2_8::y) (signed byte~) atan2_8::$2 20002.0 (signed byte~) atan2_8::$7 20002.0 @@ -1952,6 +1982,7 @@ REGISTER UPLIFT SCOPES Uplift Scope [atan2_8] 77,787,786.56: zp[1]:9 [ atan2_8::angle#6 atan2_8::angle#12 atan2_8::angle#13 atan2_8::angle#2 atan2_8::angle#3 ] 38,618,865.74: zp[1]:6 [ atan2_8::yi#3 atan2_8::yi#7 atan2_8::yi#0 atan2_8::yi#11 atan2_8::$2 atan2_8::yi#1 atan2_8::yi#2 ] 31,405,343.67: zp[1]:7 [ atan2_8::xi#3 atan2_8::xi#7 atan2_8::xi#0 atan2_8::xi#8 atan2_8::$7 atan2_8::xi#1 atan2_8::xi#2 ] 20,000,002: zp[1]:8 [ atan2_8::i#2 atan2_8::i#1 ] 15,000,001.5: zp[1]:26 [ atan2_8::yd#0 ] 6,000,000.6: zp[1]:25 [ atan2_8::xd#0 ] 82,008.5: zp[1]:10 [ atan2_8::return#0 atan2_8::angle#11 atan2_8::angle#1 atan2_8::angle#4 atan2_8::angle#5 ] 2,002: zp[1]:23 [ atan2_8::return#2 ] 1,577.12: zp[1]:21 [ atan2_8::x#0 ] 1,464.46: zp[1]:22 [ atan2_8::y#0 ] Uplift Scope [init_font_hex] 216,668.83: zp[1]:19 [ init_font_hex::i#2 init_font_hex::i#1 ] 200,002: zp[1]:28 [ init_font_hex::$1 ] 200,002: zp[1]:29 [ init_font_hex::$2 ] 115,001.6: zp[1]:20 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 100,001: zp[1]:27 [ init_font_hex::$0 ] 20,002: zp[1]:30 [ init_font_hex::idx#3 ] 16,334.97: zp[1]:18 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 16,288.71: zp[2]:14 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 14,231.5: zp[2]:16 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 6,334.17: zp[2]:11 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 1,606.87: zp[1]:13 [ init_font_hex::c#6 init_font_hex::c#1 ] Uplift Scope [main] 2,002: zp[1]:24 [ main::angle#0 ] 1,876.88: zp[1]:3 [ main::x#2 main::x#1 ] 1,066.03: zp[2]:4 [ main::screen#2 main::screen#4 main::screen#1 ] 260.86: zp[1]:2 [ main::y#4 main::y#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [] Uplifting [atan2_8] best 278273 combination zp[1]:9 [ atan2_8::angle#6 atan2_8::angle#12 atan2_8::angle#13 atan2_8::angle#2 atan2_8::angle#3 ] reg byte x [ atan2_8::yi#3 atan2_8::yi#7 atan2_8::yi#0 atan2_8::yi#11 atan2_8::$2 atan2_8::yi#1 atan2_8::yi#2 ] zp[1]:7 [ atan2_8::xi#3 atan2_8::xi#7 atan2_8::xi#0 atan2_8::xi#8 atan2_8::$7 atan2_8::xi#1 atan2_8::xi#2 ] zp[1]:8 [ atan2_8::i#2 atan2_8::i#1 ] zp[1]:26 [ atan2_8::yd#0 ] zp[1]:25 [ atan2_8::xd#0 ] zp[1]:10 [ atan2_8::return#0 atan2_8::angle#11 atan2_8::angle#1 atan2_8::angle#4 atan2_8::angle#5 ] zp[1]:23 [ atan2_8::return#2 ] zp[1]:21 [ atan2_8::x#0 ] zp[1]:22 [ atan2_8::y#0 ] @@ -1959,6 +1990,7 @@ Limited combination testing to 100 combinations of 104976 possible. Uplifting [init_font_hex] best 259273 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp[1]:20 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp[1]:27 [ init_font_hex::$0 ] zp[1]:30 [ init_font_hex::idx#3 ] zp[1]:18 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp[2]:14 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp[2]:16 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp[2]:11 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp[1]:13 [ init_font_hex::c#6 init_font_hex::c#1 ] Limited combination testing to 100 combinations of 6912 possible. Uplifting [main] best 258673 combination reg byte a [ main::angle#0 ] zp[1]:3 [ main::x#2 main::x#1 ] zp[2]:4 [ main::screen#2 main::screen#4 main::screen#1 ] zp[1]:2 [ main::y#4 main::y#1 ] +Uplifting [MOS6526_CIA] best 258673 combination Uplifting [] best 258673 combination Attempting to uplift remaining variables inzp[1]:9 [ atan2_8::angle#6 atan2_8::angle#12 atan2_8::angle#13 atan2_8::angle#2 atan2_8::angle#3 ] Uplifting [atan2_8] best 258673 combination zp[1]:9 [ atan2_8::angle#6 atan2_8::angle#12 atan2_8::angle#13 atan2_8::angle#2 atan2_8::angle#3 ] @@ -2648,6 +2680,20 @@ FINAL SYMBOL TABLE (const nomodify byte) CORDIC_ITERATIONS_8 = (byte) 8 (const nomodify byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 10240 (byte()) atan2_8((signed byte) atan2_8::x , (signed byte) atan2_8::y) (signed byte~) atan2_8::$2 reg byte x 20002.0 diff --git a/src/test/ref/cordic-atan2.sym b/src/test/ref/cordic-atan2.sym index e1fa75e66..f0bca7eef 100644 --- a/src/test/ref/cordic-atan2.sym +++ b/src/test/ref/cordic-atan2.sym @@ -8,6 +8,20 @@ (const nomodify byte) CORDIC_ITERATIONS_8 = (byte) 8 (const nomodify byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 10240 (byte()) atan2_8((signed byte) atan2_8::x , (signed byte) atan2_8::y) (signed byte~) atan2_8::$2 reg byte x 20002.0 diff --git a/src/test/ref/danny-joystick-problem.asm b/src/test/ref/danny-joystick-problem.asm index 6004688a4..730bac77b 100644 --- a/src/test/ref/danny-joystick-problem.asm +++ b/src/test/ref/danny-joystick-problem.asm @@ -3,18 +3,19 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - // CIA#2 Port B: RS-232 - .label CIA2_PORT_B = $dd01 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .label SCREEN = $400 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 main: { - // (*CIA2_PORT_B) &= 0x7f + // (CIA2->PORT_B) &= 0x7f lda #$7f - and CIA2_PORT_B - sta CIA2_PORT_B + and CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_B + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_B // asm lda #0 - // port4Value = *CIA2_PORT_B - lda CIA2_PORT_B + // port4Value = CIA2->PORT_B + lda CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_B // *SCREEN = port4Value sta SCREEN // } diff --git a/src/test/ref/danny-joystick-problem.cfg b/src/test/ref/danny-joystick-problem.cfg index eedc4995a..3e2561408 100644 --- a/src/test/ref/danny-joystick-problem.cfg +++ b/src/test/ref/danny-joystick-problem.cfg @@ -10,9 +10,9 @@ (void()) main() main: scope:[main] from @1 - [4] *((const nomodify byte*) CIA2_PORT_B) ← *((const nomodify byte*) CIA2_PORT_B) & (byte) $7f + [4] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) & (byte) $7f asm { lda#0 } - [6] (byte) main::port4Value#0 ← *((const nomodify byte*) CIA2_PORT_B) + [6] (byte) main::port4Value#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [7] *((const nomodify byte*) SCREEN) ← (byte) main::port4Value#0 to:main::@return main::@return: scope:[main] from main diff --git a/src/test/ref/danny-joystick-problem.log b/src/test/ref/danny-joystick-problem.log index 9c3edfadc..76c7ecf39 100644 --- a/src/test/ref/danny-joystick-problem.log +++ b/src/test/ref/danny-joystick-problem.log @@ -1,3 +1,8 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -6,9 +11,9 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - *((const nomodify byte*) CIA2_PORT_B) ← *((const nomodify byte*) CIA2_PORT_B) & (number) $7f + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) & (number) $7f asm { lda#0 } - (byte) main::port4Value#0 ← *((const nomodify byte*) CIA2_PORT_B) + (byte) main::port4Value#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) *((const nomodify byte*) SCREEN) ← (byte) main::port4Value#0 to:main::@return main::@return: scope:[main] from main @@ -26,16 +31,31 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end -(const nomodify byte*) CIA2_PORT_B = (byte*)(number) $dd01 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte*) SCREEN = (byte*)(number) $400 (void()) main() (label) main::@return (byte) main::port4Value (byte) main::port4Value#0 -Adding number conversion cast (unumber) $7f in *((const nomodify byte*) CIA2_PORT_B) ← *((const nomodify byte*) CIA2_PORT_B) & (number) $7f +Adding number conversion cast (unumber) $7f in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) & (number) $7f Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant pointer cast (byte*) 56577 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $7f Successful SSA optimization PassNCastSimplification @@ -68,9 +88,9 @@ FINAL CONTROL FLOW GRAPH (void()) main() main: scope:[main] from @1 - [4] *((const nomodify byte*) CIA2_PORT_B) ← *((const nomodify byte*) CIA2_PORT_B) & (byte) $7f + [4] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) & (byte) $7f asm { lda#0 } - [6] (byte) main::port4Value#0 ← *((const nomodify byte*) CIA2_PORT_B) + [6] (byte) main::port4Value#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [7] *((const nomodify byte*) SCREEN) ← (byte) main::port4Value#0 to:main::@return main::@return: scope:[main] from main @@ -79,6 +99,20 @@ main::@return: scope:[main] from main VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) main() (byte) main::port4Value (byte) main::port4Value#0 22.0 @@ -99,9 +133,10 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels - // CIA#2 Port B: RS-232 - .label CIA2_PORT_B = $dd01 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .label SCREEN = $400 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -119,14 +154,14 @@ __bend: // main main: { .label port4Value = 2 - // [4] *((const nomodify byte*) CIA2_PORT_B) ← *((const nomodify byte*) CIA2_PORT_B) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [4] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) & (byte) $7f -- _deref_pbuc1=_deref_pbuc2_band_vbuc3 lda #$7f - and CIA2_PORT_B - sta CIA2_PORT_B + and CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_B + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_B // asm { lda#0 } lda #0 - // [6] (byte) main::port4Value#0 ← *((const nomodify byte*) CIA2_PORT_B) -- vbuz1=_deref_pbuc1 - lda CIA2_PORT_B + // [6] (byte) main::port4Value#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuz1=_deref_pbuc1 + lda CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_B sta.z port4Value // [7] *((const nomodify byte*) SCREEN) ← (byte) main::port4Value#0 -- _deref_pbuc1=vbuz1 lda.z port4Value @@ -140,15 +175,17 @@ main: { // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [4] *((const nomodify byte*) CIA2_PORT_B) ← *((const nomodify byte*) CIA2_PORT_B) & (byte) $7f [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [4] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) & (byte) $7f [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement asm { lda#0 } always clobbers reg byte a Potential registers zp[1]:2 [ main::port4Value#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES Uplift Scope [main] 22: zp[1]:2 [ main::port4Value#0 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [] Uplifting [main] best 41 combination reg byte a [ main::port4Value#0 ] +Uplifting [MOS6526_CIA] best 41 combination Uplifting [] best 41 combination ASSEMBLER BEFORE OPTIMIZATION @@ -160,9 +197,10 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels - // CIA#2 Port B: RS-232 - .label CIA2_PORT_B = $dd01 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .label SCREEN = $400 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -179,14 +217,14 @@ __bend_from___b1: __bend: // main main: { - // [4] *((const nomodify byte*) CIA2_PORT_B) ← *((const nomodify byte*) CIA2_PORT_B) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [4] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) & (byte) $7f -- _deref_pbuc1=_deref_pbuc2_band_vbuc3 lda #$7f - and CIA2_PORT_B - sta CIA2_PORT_B + and CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_B + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_B // asm { lda#0 } lda #0 - // [6] (byte) main::port4Value#0 ← *((const nomodify byte*) CIA2_PORT_B) -- vbuaa=_deref_pbuc1 - lda CIA2_PORT_B + // [6] (byte) main::port4Value#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_deref_pbuc1 + lda CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_B // [7] *((const nomodify byte*) SCREEN) ← (byte) main::port4Value#0 -- _deref_pbuc1=vbuaa sta SCREEN jmp __breturn @@ -219,7 +257,22 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const nomodify byte*) CIA2_PORT_B = (byte*) 56577 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte*) SCREEN = (byte*) 1024 (void()) main() (label) main::@return @@ -240,9 +293,10 @@ Score: 26 :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels - // CIA#2 Port B: RS-232 - .label CIA2_PORT_B = $dd01 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .label SCREEN = $400 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 @@ -251,17 +305,17 @@ Score: 26 // @end // main main: { - // (*CIA2_PORT_B) &= 0x7f - // [4] *((const nomodify byte*) CIA2_PORT_B) ← *((const nomodify byte*) CIA2_PORT_B) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // (CIA2->PORT_B) &= 0x7f + // [4] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) & (byte) $7f -- _deref_pbuc1=_deref_pbuc2_band_vbuc3 lda #$7f - and CIA2_PORT_B - sta CIA2_PORT_B + and CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_B + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_B // asm // asm { lda#0 } lda #0 - // port4Value = *CIA2_PORT_B - // [6] (byte) main::port4Value#0 ← *((const nomodify byte*) CIA2_PORT_B) -- vbuaa=_deref_pbuc1 - lda CIA2_PORT_B + // port4Value = CIA2->PORT_B + // [6] (byte) main::port4Value#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_deref_pbuc1 + lda CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_B // *SCREEN = port4Value // [7] *((const nomodify byte*) SCREEN) ← (byte) main::port4Value#0 -- _deref_pbuc1=vbuaa sta SCREEN diff --git a/src/test/ref/danny-joystick-problem.sym b/src/test/ref/danny-joystick-problem.sym index c419443ab..2b51c1bb1 100644 --- a/src/test/ref/danny-joystick-problem.sym +++ b/src/test/ref/danny-joystick-problem.sym @@ -1,7 +1,22 @@ (label) @1 (label) @begin (label) @end -(const nomodify byte*) CIA2_PORT_B = (byte*) 56577 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte*) SCREEN = (byte*) 1024 (void()) main() (label) main::@return diff --git a/src/test/ref/examples/3d/3d.log b/src/test/ref/examples/3d/3d.log index f2ec567a9..72462951d 100644 --- a/src/test/ref/examples/3d/3d.log +++ b/src/test/ref/examples/3d/3d.log @@ -89,6 +89,8 @@ Resolved forward reference COSH_LO to (byte*) COSH_LO Resolved forward reference mulf_sqr1 to (const byte*) mulf_sqr1 Resolved forward reference mulf_sqr2 to (const byte*) mulf_sqr2 Resolved forward reference PERSP_Z to (const signed byte*) PERSP_Z +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call print_schar_pos (signed byte) sx (number) 0 (number) $25 Inlined call call print_schar_pos (signed byte) sy (number) 1 (number) $25 @@ -1087,6 +1089,20 @@ SYMBOL TABLE SSA (const nomodify byte) GREEN = (byte) 5 (const nomodify byte) LIGHT_BLUE = (byte) $e (const nomodify byte) LIGHT_GREY = (byte) $f +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const signed byte*) PERSP_Z[(number) $100] = kickasm {{ { .var d = 256.0 .var z0 = 6.0 @@ -3676,6 +3692,20 @@ null depth in calling loop Loop head: debug_print::@1 tails: debug_print::@17 bl null depth in calling loop Loop head: debug_print::@1 tails: debug_print::@17 blocks: debug_print::@17 debug_print::@16 debug_print::@15 debug_print::@14 debug_print::@13 debug_print::@12 debug_print::@1 in scope print_schar_at VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) anim() (byte~) anim::$10 20002.0 (byte~) anim::$9 20002.0 @@ -6654,6 +6684,7 @@ Uplift Scope [anim] 22,061.03: zp[1]:4 [ anim::i#2 anim::i#1 ] 20,002: zp[1]:29 Uplift Scope [print_str_at] 31,254.25: zp[2]:16 [ print_str_at::str#13 print_str_at::str#15 print_str_at::str#0 ] 21,336.67: zp[2]:18 [ print_str_at::at#13 print_str_at::at#15 print_str_at::at#0 ] Uplift Scope [] 2,144.9: zp[1]:3 [ sy#10 sy#3 ] 1,145.49: zp[1]:2 [ sx#10 sx#3 ] Uplift Scope [sprites_init] 2,836.17: zp[1]:22 [ sprites_init::i#2 sprites_init::i#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [RADIX] Uplift Scope [print_cls] Uplift Scope [main] @@ -6671,6 +6702,7 @@ Uplifting [anim] best 74623 combination zp[1]:4 [ anim::i#2 anim::i#1 ] reg byte Uplifting [print_str_at] best 74623 combination zp[2]:16 [ print_str_at::str#13 print_str_at::str#15 print_str_at::str#0 ] zp[2]:18 [ print_str_at::at#13 print_str_at::at#15 print_str_at::at#0 ] Uplifting [] best 74623 combination zp[1]:3 [ sy#10 sy#3 ] zp[1]:2 [ sx#10 sx#3 ] Uplifting [sprites_init] best 74473 combination reg byte x [ sprites_init::i#2 sprites_init::i#1 ] +Uplifting [MOS6526_CIA] best 74473 combination Uplifting [RADIX] best 74473 combination Uplifting [print_cls] best 74473 combination Uplifting [main] best 74473 combination @@ -8956,6 +8988,20 @@ FINAL SYMBOL TABLE (const nomodify byte) GREEN = (byte) 5 (const nomodify byte) LIGHT_BLUE = (byte) $e (const nomodify byte) LIGHT_GREY = (byte) $f +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const signed byte*) PERSP_Z[(number) $100] = kickasm {{ { .var d = 256.0 .var z0 = 6.0 diff --git a/src/test/ref/examples/3d/3d.sym b/src/test/ref/examples/3d/3d.sym index 33662e588..7a5935a01 100644 --- a/src/test/ref/examples/3d/3d.sym +++ b/src/test/ref/examples/3d/3d.sym @@ -7,6 +7,20 @@ (const nomodify byte) GREEN = (byte) 5 (const nomodify byte) LIGHT_BLUE = (byte) $e (const nomodify byte) LIGHT_GREY = (byte) $f +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const signed byte*) PERSP_Z[(number) $100] = kickasm {{ { .var d = 256.0 .var z0 = 6.0 diff --git a/src/test/ref/examples/3d/perspective.log b/src/test/ref/examples/3d/perspective.log index 92bf82cc1..f802d785d 100644 --- a/src/test/ref/examples/3d/perspective.log +++ b/src/test/ref/examples/3d/perspective.log @@ -1,6 +1,8 @@ Resolved forward reference mulf_sqr1 to (const byte*) mulf_sqr1 Resolved forward reference mulf_sqr2 to (const byte*) mulf_sqr2 Resolved forward reference PERSP_Z to (const signed byte*) PERSP_Z +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -456,6 +458,20 @@ SYMBOL TABLE SSA (label) @3 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const signed byte*) PERSP_Z[(number) $100] = kickasm {{ { .var d = 256.0 .var z0 = 5.0 @@ -1449,6 +1465,20 @@ mulf_init::@return: scope:[mulf_init] from mulf_init::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) do_perspective((signed byte) do_perspective::x , (signed byte) do_perspective::y , (signed byte) do_perspective::z) (signed byte) do_perspective::x (signed byte) do_perspective::y @@ -2380,6 +2410,7 @@ Uplift Scope [memset] 33,336.67: zp[2]:11 [ memset::dst#2 memset::dst#1 ] Uplift Scope [print_str] 31,254.25: zp[2]:4 [ print_str::str#7 print_str::str#10 print_str::str#0 ] Uplift Scope [mulf_init] 2,102.1: zp[1]:15 [ mulf_init::i#2 mulf_init::i#1 ] 2,002: zp[1]:22 [ mulf_init::$5 ] 2,002: zp[1]:23 [ mulf_init::$6 ] 1,501.5: zp[1]:21 [ mulf_init::$2 ] 881.83: zp[2]:16 [ mulf_init::add#2 mulf_init::add#1 ] 819: zp[1]:20 [ mulf_init::val#0 ] 731.5: zp[2]:13 [ mulf_init::sqr#2 mulf_init::sqr#1 ] Uplift Scope [print_schar] 4,504.5: zp[1]:10 [ print_schar::b#6 print_schar::b#0 print_schar::b#4 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] @@ -2395,6 +2426,7 @@ Uplifting [print_str] best 4213 combination zp[2]:4 [ print_str::str#7 print_str Uplifting [mulf_init] best 3803 combination reg byte y [ mulf_init::i#2 mulf_init::i#1 ] reg byte x [ mulf_init::$5 ] reg byte x [ mulf_init::$6 ] reg byte x [ mulf_init::$2 ] zp[2]:16 [ mulf_init::add#2 mulf_init::add#1 ] zp[1]:20 [ mulf_init::val#0 ] zp[2]:13 [ mulf_init::sqr#2 mulf_init::sqr#1 ] Limited combination testing to 100 combinations of 432 possible. Uplifting [print_schar] best 3788 combination reg byte x [ print_schar::b#6 print_schar::b#0 print_schar::b#4 ] +Uplifting [MOS6526_CIA] best 3788 combination Uplifting [RADIX] best 3788 combination Uplifting [print_ln] best 3788 combination Uplifting [print_cls] best 3788 combination @@ -3243,6 +3275,20 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const signed byte*) PERSP_Z[(number) $100] = kickasm {{ { .var d = 256.0 .var z0 = 5.0 diff --git a/src/test/ref/examples/3d/perspective.sym b/src/test/ref/examples/3d/perspective.sym index 93758ff35..08c750738 100644 --- a/src/test/ref/examples/3d/perspective.sym +++ b/src/test/ref/examples/3d/perspective.sym @@ -1,6 +1,20 @@ (label) @1 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const signed byte*) PERSP_Z[(number) $100] = kickasm {{ { .var d = 256.0 .var z0 = 5.0 diff --git a/src/test/ref/examples/bresenham/bitmap-bresenham.log b/src/test/ref/examples/bresenham/bitmap-bresenham.log index 34f170711..324e91cef 100644 --- a/src/test/ref/examples/bresenham/bitmap-bresenham.log +++ b/src/test/ref/examples/bresenham/bitmap-bresenham.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -650,6 +652,20 @@ SYMBOL TABLE SSA (const nomodify byte*) BITMAP = (byte*)(number) $2000 (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 (const nomodify byte*) D011 = (byte*)(number) $d011 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*)(number) $400 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 @@ -2122,6 +2138,20 @@ bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) bitmap_clear() (byte*) bitmap_clear::bitmap (word) bitmap_clear::bitmap#0 101.0 @@ -3807,6 +3837,7 @@ Uplift Scope [lines] 300,003: zp[1]:2 [ lines::l#2 lines::l#1 ] Uplift Scope [bitmap_clear] 22,007.6: zp[2]:32 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] 21,668.83: zp[1]:34 [ bitmap_clear::x#2 bitmap_clear::x#1 ] 1,835.17: zp[1]:31 [ bitmap_clear::y#4 bitmap_clear::y#1 ] 101: zp[2]:61 [ bitmap_clear::bitmap#0 ] Uplift Scope [bitmap_init] 3,628.62: zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 2,268.93: zp[1]:36 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 2,168.83: zp[1]:35 [ bitmap_init::x#2 bitmap_init::x#1 ] 2,002: zp[1]:37 [ bitmap_init::y#2 bitmap_init::y#1 ] 2,002: zp[1]:63 [ bitmap_init::$0 ] 2,002: zp[1]:65 [ bitmap_init::$7 ] 2,002: zp[1]:66 [ bitmap_init::$8 ] 2,002: zp[1]:67 [ bitmap_init::$9 ] 500.5: zp[1]:64 [ bitmap_init::$10 ] Uplift Scope [init_screen] 3,336.67: zp[2]:29 [ init_screen::c#2 init_screen::c#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplift Scope [] @@ -3826,6 +3857,7 @@ Uplifting [bitmap_clear] best 273163 combination zp[2]:32 [ bitmap_clear::bitmap Uplifting [bitmap_init] best 272643 combination zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$0 ] zp[1]:65 [ bitmap_init::$7 ] zp[1]:66 [ bitmap_init::$8 ] zp[1]:67 [ bitmap_init::$9 ] zp[1]:64 [ bitmap_init::$10 ] Limited combination testing to 100 combinations of 34560 possible. Uplifting [init_screen] best 272643 combination zp[2]:29 [ init_screen::c#2 init_screen::c#1 ] +Uplifting [MOS6526_CIA] best 272643 combination Uplifting [main] best 272643 combination Uplifting [] best 272643 combination Attempting to uplift remaining variables inzp[1]:8 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] @@ -5100,6 +5132,20 @@ FINAL SYMBOL TABLE (const nomodify byte*) BITMAP = (byte*) 8192 (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) D011 = (byte*) 53265 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 diff --git a/src/test/ref/examples/bresenham/bitmap-bresenham.sym b/src/test/ref/examples/bresenham/bitmap-bresenham.sym index 0cbcc43a2..7f9b17f3d 100644 --- a/src/test/ref/examples/bresenham/bitmap-bresenham.sym +++ b/src/test/ref/examples/bresenham/bitmap-bresenham.sym @@ -5,6 +5,20 @@ (const nomodify byte*) BITMAP = (byte*) 8192 (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) D011 = (byte*) 53265 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 diff --git a/src/test/ref/examples/chargen/chargen-analysis.asm b/src/test/ref/examples/chargen/chargen-analysis.asm index ad3575038..73ba76977 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.asm +++ b/src/test/ref/examples/chargen/chargen-analysis.asm @@ -6,10 +6,8 @@ .label PROCPORT = 1 // The address of the CHARGEN character set .label CHARGEN = $d000 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 .const KEY_F7 = 3 .const KEY_F1 = 4 .const KEY_F3 = 5 @@ -65,6 +63,7 @@ .const KEY_2 = $3b .const KEY_SPACE = $3c .const KEY_Q = $3e + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label SCREEN = $400 main: { .label sc = 2 @@ -403,11 +402,11 @@ keyboard_key_pressed: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] lda keyboard_matrix_row_bitmask,x - sta CIA1_PORT_A - // ~*CIA1_PORT_B - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // } rts diff --git a/src/test/ref/examples/chargen/chargen-analysis.cfg b/src/test/ref/examples/chargen/chargen-analysis.cfg index 31a971610..f6a6049f4 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.cfg +++ b/src/test/ref/examples/chargen/chargen-analysis.cfg @@ -218,8 +218,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [111] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) - [112] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [111] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) + [112] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [113] return diff --git a/src/test/ref/examples/chargen/chargen-analysis.log b/src/test/ref/examples/chargen/chargen-analysis.log index 23117f6ef..5b7f2492f 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.log +++ b/src/test/ref/examples/chargen/chargen-analysis.log @@ -1,3 +1,11 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -7,8 +15,8 @@ CONTROL FLOW GRAPH SSA (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed (byte) keyboard_matrix_read::rowid#1 ← phi( keyboard_key_pressed/(byte) keyboard_matrix_read::rowid#0 ) - *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) - (byte~) keyboard_matrix_read::$0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) + (byte~) keyboard_matrix_read::$0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) (byte) keyboard_matrix_read::row_pressed_bits#0 ← (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#0 ← (byte) keyboard_matrix_read::row_pressed_bits#0 to:keyboard_matrix_read::@return @@ -410,8 +418,7 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const nomodify byte*) CHARGEN = (byte*)(number) $d000 -(const nomodify byte*) CIA1_PORT_A = (byte*)(number) $dc00 -(const nomodify byte*) CIA1_PORT_B = (byte*)(number) $dc01 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte) KEY_0 = (byte) $23 (const nomodify byte) KEY_1 = (byte) $38 (const nomodify byte) KEY_2 = (byte) $3b @@ -467,6 +474,22 @@ SYMBOL TABLE SSA (const nomodify byte) KEY_X = (byte) $17 (const nomodify byte) KEY_Y = (byte) $19 (const nomodify byte) KEY_Z = (byte) $c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte*) PROCPORT = (byte*)(number) 1 (const byte*) SCREEN = (byte*)(number) $400 (const to_nomodify byte*) keyboard_char_keycodes[] = { (const nomodify byte) KEY_AT, (const nomodify byte) KEY_A, (const nomodify byte) KEY_B, (const nomodify byte) KEY_C, (const nomodify byte) KEY_D, (const nomodify byte) KEY_E, (const nomodify byte) KEY_F, (const nomodify byte) KEY_G, (const nomodify byte) KEY_H, (const nomodify byte) KEY_I, (const nomodify byte) KEY_J, (const nomodify byte) KEY_K, (const nomodify byte) KEY_L, (const nomodify byte) KEY_M, (const nomodify byte) KEY_N, (const nomodify byte) KEY_O, (const nomodify byte) KEY_P, (const nomodify byte) KEY_Q, (const nomodify byte) KEY_R, (const nomodify byte) KEY_S, (const nomodify byte) KEY_T, (const nomodify byte) KEY_U, (const nomodify byte) KEY_V, (const nomodify byte) KEY_W, (const nomodify byte) KEY_X, (const nomodify byte) KEY_Y, (const nomodify byte) KEY_Z, (byte) $3f, (const nomodify byte) KEY_POUND, (byte) $3f, (const nomodify byte) KEY_ARROW_UP, (const nomodify byte) KEY_ARROW_LEFT, (const nomodify byte) KEY_SPACE, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (const nomodify byte) KEY_ASTERISK, (const nomodify byte) KEY_PLUS, (const nomodify byte) KEY_COMMA, (const nomodify byte) KEY_MINUS, (const nomodify byte) KEY_DOT, (const nomodify byte) KEY_SLASH, (const nomodify byte) KEY_0, (const nomodify byte) KEY_1, (const nomodify byte) KEY_2, (const nomodify byte) KEY_3, (const nomodify byte) KEY_4, (const nomodify byte) KEY_5, (const nomodify byte) KEY_6, (const nomodify byte) KEY_7, (const nomodify byte) KEY_8, (const nomodify byte) KEY_9, (const nomodify byte) KEY_COLON, (const nomodify byte) KEY_SEMICOLON, (byte) $3f, (const nomodify byte) KEY_EQUALS, (byte) $3f, (byte) $3f } @@ -839,8 +862,7 @@ Inlining cast *((const nomodify byte*) PROCPORT) ← (unumber)(number) $37 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1 Simplifying constant pointer cast (byte*) 53248 -Simplifying constant pointer cast (byte*) 56320 -Simplifying constant pointer cast (byte*) 56321 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 3 @@ -1070,7 +1092,10 @@ Resolved ranged next value [150] plot_chargen::x#1 ← ++ plot_chargen::x#2 to + Resolved ranged comparison value [152] if(plot_chargen::x#1!=rangelast(0,7)) goto plot_chargen::@4 to (number) 8 Resolved ranged next value [155] plot_chargen::y#1 ← ++ plot_chargen::y#2 to ++ Resolved ranged comparison value [157] if(plot_chargen::y#1!=rangelast(0,7)) goto plot_chargen::@3 to (number) 8 +Simplifying expression containing zero (byte*)CIA1 in [1] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) +Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const byte) main::shift#0 +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks @@ -1510,8 +1535,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [111] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) - [112] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [111] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) + [112] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [113] return @@ -1546,6 +1571,20 @@ print_str_at::@2: scope:[print_str_at] from print_str_at::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch) (byte) keyboard_get_keycode::ch (byte) keyboard_get_keycode::ch#0 11002.0 @@ -1807,10 +1846,8 @@ Target platform is c64basic / MOS6502X .label PROCPORT = 1 // The address of the CHARGEN character set .label CHARGEN = $d000 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 .const KEY_F7 = 3 .const KEY_F1 = 4 .const KEY_F3 = 5 @@ -1866,6 +1903,7 @@ Target platform is c64basic / MOS6502X .const KEY_2 = $3b .const KEY_SPACE = $3c .const KEY_Q = $3e + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label SCREEN = $400 // @begin __bbegin: @@ -2614,12 +2652,12 @@ keyboard_matrix_read: { .label return = $35 .label rowid = $31 .label return_1 = $32 - // [111] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [111] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy.z rowid lda keyboard_matrix_row_bitmask,y - sta CIA1_PORT_A - // [112] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuz1=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [112] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuz1=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff sta.z return jmp __breturn @@ -2732,8 +2770,8 @@ Statement [96] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte Statement [99] *((const nomodify byte*) PROCPORT) ← (byte) $37 [ ] ( main:2::plot_chargen:17 [ main::i#2 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } } main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } } ) always clobbers reg byte a Statement [104] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:21 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:27 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:39 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:45 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:47 [ keyboard_key_pressed::colidx#0 ] -Statement [111] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:106 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:27::keyboard_matrix_read:106 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:33::keyboard_matrix_read:106 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:39::keyboard_matrix_read:106 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:45::keyboard_matrix_read:106 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58::keyboard_matrix_read:106 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [112] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:106 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:27::keyboard_matrix_read:106 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:33::keyboard_matrix_read:106 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:39::keyboard_matrix_read:106 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:45::keyboard_matrix_read:106 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58::keyboard_matrix_read:106 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [111] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:106 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:27::keyboard_matrix_read:106 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:33::keyboard_matrix_read:106 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:39::keyboard_matrix_read:106 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:45::keyboard_matrix_read:106 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58::keyboard_matrix_read:106 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [112] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:106 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:27::keyboard_matrix_read:106 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:33::keyboard_matrix_read:106 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:39::keyboard_matrix_read:106 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:45::keyboard_matrix_read:106 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58::keyboard_matrix_read:106 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [118] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:8 [ print_str_at::str#5 print_str_at::at#5 ] { } main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] { } main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] { } main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] { } ) always clobbers reg byte a reg byte y Statement [120] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:8 [ print_str_at::str#5 print_str_at::at#5 ] { } main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] { } main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] { } main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] { } ) always clobbers reg byte a reg byte y Statement [6] if((byte*) main::sc#2<(const byte*) SCREEN+(word) $3e8) goto main::@2 [ main::sc#2 ] ( main:2 [ main::sc#2 ] { } ) always clobbers reg byte a @@ -2752,8 +2790,8 @@ Statement [91] *((byte*) plot_chargen::sc#3) ← (byte) plot_chargen::c#2 [ plot Statement [96] (byte*) plot_chargen::sc#2 ← (byte*) plot_chargen::sc#1 + (byte) $20 [ plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::sc#2 ] ( main:2::plot_chargen:17 [ main::i#2 plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::sc#2 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } } main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 plot_chargen::chargen#4 plot_chargen::y#2 plot_chargen::sc#2 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } } ) always clobbers reg byte a Statement [99] *((const nomodify byte*) PROCPORT) ← (byte) $37 [ ] ( main:2::plot_chargen:17 [ main::i#2 ] { { plot_chargen::pos#0 = plot_chargen::pos#2 main::i#2 } } main:2::plot_chargen:66 [ main::cur_pos#11 main::shift#9 main::ch#2 ] { { plot_chargen::ch#1 = plot_chargen::ch#2 main::ch#2 } { plot_chargen::shift#1 = plot_chargen::shift#2 main::shift#9 } { plot_chargen::pos#1 = plot_chargen::pos#2 main::cur_pos#11 } } ) always clobbers reg byte a Statement [104] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#6 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:21 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:27 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:33 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:39 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:45 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [111] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:106 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:27::keyboard_matrix_read:106 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:33::keyboard_matrix_read:106 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:39::keyboard_matrix_read:106 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:45::keyboard_matrix_read:106 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58::keyboard_matrix_read:106 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [112] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:106 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:27::keyboard_matrix_read:106 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:33::keyboard_matrix_read:106 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:39::keyboard_matrix_read:106 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:45::keyboard_matrix_read:106 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58::keyboard_matrix_read:106 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [111] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:106 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:27::keyboard_matrix_read:106 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:33::keyboard_matrix_read:106 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:39::keyboard_matrix_read:106 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:45::keyboard_matrix_read:106 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58::keyboard_matrix_read:106 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [112] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:21::keyboard_matrix_read:106 [ main::cur_pos#24 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:27::keyboard_matrix_read:106 [ main::cur_pos#22 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:33::keyboard_matrix_read:106 [ main::cur_pos#20 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#11 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:39::keyboard_matrix_read:106 [ main::cur_pos#18 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#12 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:45::keyboard_matrix_read:106 [ main::cur_pos#11 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#13 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58::keyboard_matrix_read:106 [ main::cur_pos#11 main::shift#9 main::ch#2 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::key#5 = keyboard_key_pressed::key#6 main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#14 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [118] if((byte) 0!=*((byte*) print_str_at::str#5)) goto print_str_at::@2 [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:8 [ print_str_at::str#5 print_str_at::at#5 ] { } main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] { } main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] { } main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] { } ) always clobbers reg byte a reg byte y Statement [120] *((byte*) print_str_at::at#5) ← *((byte*) print_str_at::str#5) [ print_str_at::str#5 print_str_at::at#5 ] ( main:2::print_str_at:8 [ print_str_at::str#5 print_str_at::at#5 ] { } main:2::print_str_at:10 [ print_str_at::str#5 print_str_at::at#5 ] { } main:2::print_str_at:12 [ print_str_at::str#5 print_str_at::at#5 ] { } main:2::print_str_at:14 [ print_str_at::str#5 print_str_at::at#5 ] { } ) always clobbers reg byte a reg byte y Potential registers zp[2]:2 [ main::sc#2 main::sc#1 ] : zp[2]:2 , @@ -2810,6 +2848,7 @@ Uplift Scope [keyboard_key_pressed] 20,002: zp[1]:48 [ keyboard_key_pressed::row Uplift Scope [keyboard_get_keycode] 11,002: zp[1]:35 [ keyboard_get_keycode::ch#0 ] 3,667.33: zp[1]:54 [ keyboard_get_keycode::return#0 ] 2,002: zp[1]:36 [ keyboard_get_keycode::return#2 ] Uplift Scope [main] 4,004: zp[1]:8 [ main::pressed#2 main::pressed#1 ] 1,751.75: zp[1]:7 [ main::ch#2 main::ch#1 ] 1,501.5: zp[1]:37 [ main::key#0 ] 368.79: zp[1]:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] 336.67: zp[2]:2 [ main::sc#2 main::sc#1 ] 252.5: zp[1]:4 [ main::i#2 main::i#1 ] 202: zp[1]:26 [ main::$15 ] 202: zp[1]:28 [ main::$18 ] 202: zp[1]:30 [ main::$21 ] 202: zp[1]:32 [ main::$24 ] 202: zp[1]:34 [ main::$27 ] 52.68: zp[1]:6 [ main::shift#9 ] Uplift Scope [print_str_at] 3,129.25: zp[2]:21 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] 2,136.67: zp[2]:23 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [] Uplifting [plot_chargen] best 726612 combination reg byte a [ plot_chargen::$8 ] reg byte x [ plot_chargen::x#2 plot_chargen::x#1 ] zp[1]:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] zp[2]:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#0 plot_chargen::sc#2 plot_chargen::sc#1 ] reg byte a [ plot_chargen::c#2 ] zp[1]:14 [ plot_chargen::y#2 plot_chargen::y#1 ] zp[2]:12 [ plot_chargen::chargen#4 plot_chargen::chargen#0 plot_chargen::chargen#1 ] zp[2]:39 [ plot_chargen::$15 ] zp[2]:41 [ plot_chargen::$0 ] zp[1]:43 [ plot_chargen::$16 ] zp[1]:44 [ plot_chargen::$17 ] zp[1]:45 [ plot_chargen::$5 ] zp[1]:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ] zp[1]:11 [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] zp[1]:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ] @@ -2821,6 +2860,7 @@ Uplifting [keyboard_get_keycode] best 725059 combination reg byte x [ keyboard_g Uplifting [main] best 723459 combination reg byte a [ main::pressed#2 main::pressed#1 ] zp[1]:7 [ main::ch#2 main::ch#1 ] reg byte a [ main::key#0 ] zp[1]:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] zp[2]:2 [ main::sc#2 main::sc#1 ] zp[1]:4 [ main::i#2 main::i#1 ] zp[1]:26 [ main::$15 ] zp[1]:28 [ main::$18 ] zp[1]:30 [ main::$21 ] zp[1]:32 [ main::$24 ] zp[1]:34 [ main::$27 ] zp[1]:6 [ main::shift#9 ] Limited combination testing to 100 combinations of 262144 possible. Uplifting [print_str_at] best 723459 combination zp[2]:21 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] zp[2]:23 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] +Uplifting [MOS6526_CIA] best 723459 combination Uplifting [] best 723459 combination Attempting to uplift remaining variables inzp[1]:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] Uplifting [plot_chargen] best 723459 combination zp[1]:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] @@ -2893,10 +2933,8 @@ ASSEMBLER BEFORE OPTIMIZATION .label PROCPORT = 1 // The address of the CHARGEN character set .label CHARGEN = $d000 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 .const KEY_F7 = 3 .const KEY_F1 = 4 .const KEY_F3 = 5 @@ -2952,6 +2990,7 @@ ASSEMBLER BEFORE OPTIMIZATION .const KEY_2 = $3b .const KEY_SPACE = $3c .const KEY_Q = $3e + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label SCREEN = $400 // @begin __bbegin: @@ -3594,11 +3633,11 @@ keyboard_key_pressed: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { - // [111] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // [111] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda keyboard_matrix_row_bitmask,x - sta CIA1_PORT_A - // [112] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [112] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff jmp __breturn // keyboard_matrix_read::@return @@ -3837,16 +3876,15 @@ Removing instruction jmp __b4 Succesful ASM optimization Pass5NextJumpElimination Removing instruction __bbegin: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [84] bcc __b2 to bcs -Fixing long branch [90] bcc __b2 to bcs +Fixing long branch [83] bcc __b2 to bcs +Fixing long branch [89] bcc __b2 to bcs FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end (const nomodify byte*) CHARGEN = (byte*) 53248 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) KEY_0 = (byte) $23 (const nomodify byte) KEY_1 = (byte) $38 (const nomodify byte) KEY_2 = (byte) $3b @@ -3902,6 +3940,21 @@ FINAL SYMBOL TABLE (const nomodify byte) KEY_X = (byte) $17 (const nomodify byte) KEY_Y = (byte) $19 (const nomodify byte) KEY_Z = (byte) $c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte*) PROCPORT = (byte*) 1 (const byte*) SCREEN = (byte*) 1024 (const to_nomodify byte*) keyboard_char_keycodes[] = { (const nomodify byte) KEY_AT, (const nomodify byte) KEY_A, (const nomodify byte) KEY_B, (const nomodify byte) KEY_C, (const nomodify byte) KEY_D, (const nomodify byte) KEY_E, (const nomodify byte) KEY_F, (const nomodify byte) KEY_G, (const nomodify byte) KEY_H, (const nomodify byte) KEY_I, (const nomodify byte) KEY_J, (const nomodify byte) KEY_K, (const nomodify byte) KEY_L, (const nomodify byte) KEY_M, (const nomodify byte) KEY_N, (const nomodify byte) KEY_O, (const nomodify byte) KEY_P, (const nomodify byte) KEY_Q, (const nomodify byte) KEY_R, (const nomodify byte) KEY_S, (const nomodify byte) KEY_T, (const nomodify byte) KEY_U, (const nomodify byte) KEY_V, (const nomodify byte) KEY_W, (const nomodify byte) KEY_X, (const nomodify byte) KEY_Y, (const nomodify byte) KEY_Z, (byte) $3f, (const nomodify byte) KEY_POUND, (byte) $3f, (const nomodify byte) KEY_ARROW_UP, (const nomodify byte) KEY_ARROW_LEFT, (const nomodify byte) KEY_SPACE, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (const nomodify byte) KEY_ASTERISK, (const nomodify byte) KEY_PLUS, (const nomodify byte) KEY_COMMA, (const nomodify byte) KEY_MINUS, (const nomodify byte) KEY_DOT, (const nomodify byte) KEY_SLASH, (const nomodify byte) KEY_0, (const nomodify byte) KEY_1, (const nomodify byte) KEY_2, (const nomodify byte) KEY_3, (const nomodify byte) KEY_4, (const nomodify byte) KEY_5, (const nomodify byte) KEY_6, (const nomodify byte) KEY_7, (const nomodify byte) KEY_8, (const nomodify byte) KEY_9, (const nomodify byte) KEY_COLON, (const nomodify byte) KEY_SEMICOLON, (byte) $3f, (const nomodify byte) KEY_EQUALS, (byte) $3f, (byte) $3f } @@ -4123,10 +4176,8 @@ Score: 558979 .label PROCPORT = 1 // The address of the CHARGEN character set .label CHARGEN = $d000 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 .const KEY_F7 = 3 .const KEY_F1 = 4 .const KEY_F3 = 5 @@ -4182,6 +4233,7 @@ Score: 558979 .const KEY_2 = $3b .const KEY_SPACE = $3c .const KEY_Q = $3e + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label SCREEN = $400 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] @@ -4755,13 +4807,13 @@ keyboard_key_pressed: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] - // [111] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] + // [111] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda keyboard_matrix_row_bitmask,x - sta CIA1_PORT_A - // ~*CIA1_PORT_B - // [112] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + // [112] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // keyboard_matrix_read::@return // } diff --git a/src/test/ref/examples/chargen/chargen-analysis.sym b/src/test/ref/examples/chargen/chargen-analysis.sym index 37a31ba4d..5cc41beae 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.sym +++ b/src/test/ref/examples/chargen/chargen-analysis.sym @@ -2,8 +2,7 @@ (label) @begin (label) @end (const nomodify byte*) CHARGEN = (byte*) 53248 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) KEY_0 = (byte) $23 (const nomodify byte) KEY_1 = (byte) $38 (const nomodify byte) KEY_2 = (byte) $3b @@ -59,6 +58,21 @@ (const nomodify byte) KEY_X = (byte) $17 (const nomodify byte) KEY_Y = (byte) $19 (const nomodify byte) KEY_Z = (byte) $c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte*) PROCPORT = (byte*) 1 (const byte*) SCREEN = (byte*) 1024 (const to_nomodify byte*) keyboard_char_keycodes[] = { (const nomodify byte) KEY_AT, (const nomodify byte) KEY_A, (const nomodify byte) KEY_B, (const nomodify byte) KEY_C, (const nomodify byte) KEY_D, (const nomodify byte) KEY_E, (const nomodify byte) KEY_F, (const nomodify byte) KEY_G, (const nomodify byte) KEY_H, (const nomodify byte) KEY_I, (const nomodify byte) KEY_J, (const nomodify byte) KEY_K, (const nomodify byte) KEY_L, (const nomodify byte) KEY_M, (const nomodify byte) KEY_N, (const nomodify byte) KEY_O, (const nomodify byte) KEY_P, (const nomodify byte) KEY_Q, (const nomodify byte) KEY_R, (const nomodify byte) KEY_S, (const nomodify byte) KEY_T, (const nomodify byte) KEY_U, (const nomodify byte) KEY_V, (const nomodify byte) KEY_W, (const nomodify byte) KEY_X, (const nomodify byte) KEY_Y, (const nomodify byte) KEY_Z, (byte) $3f, (const nomodify byte) KEY_POUND, (byte) $3f, (const nomodify byte) KEY_ARROW_UP, (const nomodify byte) KEY_ARROW_LEFT, (const nomodify byte) KEY_SPACE, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (const nomodify byte) KEY_ASTERISK, (const nomodify byte) KEY_PLUS, (const nomodify byte) KEY_COMMA, (const nomodify byte) KEY_MINUS, (const nomodify byte) KEY_DOT, (const nomodify byte) KEY_SLASH, (const nomodify byte) KEY_0, (const nomodify byte) KEY_1, (const nomodify byte) KEY_2, (const nomodify byte) KEY_3, (const nomodify byte) KEY_4, (const nomodify byte) KEY_5, (const nomodify byte) KEY_6, (const nomodify byte) KEY_7, (const nomodify byte) KEY_8, (const nomodify byte) KEY_9, (const nomodify byte) KEY_COLON, (const nomodify byte) KEY_SEMICOLON, (byte) $3f, (const nomodify byte) KEY_EQUALS, (byte) $3f, (byte) $3f } diff --git a/src/test/ref/examples/eightqueens/eightqueens.asm b/src/test/ref/examples/eightqueens/eightqueens.asm index bdf514667..ea38a4245 100644 --- a/src/test/ref/examples/eightqueens/eightqueens.asm +++ b/src/test/ref/examples/eightqueens/eightqueens.asm @@ -6,11 +6,22 @@ .pc = $801 "Basic" :BasicUpstart(__bbegin) .pc = $80d "Program" + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 + .const OFFSET_STRUCT_TIME_OF_DAY_SEC = 1 + .const OFFSET_STRUCT_TIME_OF_DAY_MIN = 2 + .const OFFSET_STRUCT_TIME_OF_DAY_HOURS = 3 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f + .const OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS = $b + .const OFFSET_STRUCT_MOS6526_CIA_TOD_MIN = $a + .const OFFSET_STRUCT_MOS6526_CIA_TOD_SEC = 9 + .const OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = 8 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c - .label printf_cursor_x = $17 - .label printf_cursor_y = $18 - .label printf_cursor_ptr = $19 + .label printf_cursor_x = $11 + .label printf_cursor_y = $12 + .label printf_cursor_ptr = $13 // The number of found solutions .label count = 2 __bbegin: @@ -30,6 +41,7 @@ __bbegin: jsr main rts main: { + .label tod_MIN = $17 // printf_cls() jsr printf_cls // printf(" - n queens problem using backtracking -") @@ -38,22 +50,375 @@ main: { lda #>str sta.z printf_str.str+1 jsr printf_str - // printf("\nNumber of queens:%u",QUEENS) + // printf("\nnumber of queens:%u",QUEENS) lda #str1 sta.z printf_str.str+1 jsr printf_str - // printf("\nNumber of queens:%u",QUEENS) + // printf("\nnumber of queens:%u",QUEENS) jsr printf_uint + // tod_init(TOD_ZERO) + lda TOD_ZERO + sta.z tod_init.tod_TENTHS + lda TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_SEC + sta.z tod_init.tod_SEC + ldx TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_MIN + ldy TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS + jsr tod_init // queens() jsr queens + // tod_read() + jsr tod_read + sta.z tod_read.return_MIN + // tod = tod_read() + lda.z tod_read.return_HOURS + // tod_str(tod) + sty.z tod_str.tod_TENTHS + stx.z tod_str.tod_SEC + ldy.z tod_MIN + tax + jsr tod_str + // printf("\ntime: %s",tod_str(tod)) + lda #str2 + sta.z printf_str.str+1 + jsr printf_str + // printf("\ntime: %s",tod_str(tod)) + jsr printf_string // } rts str: .text " - n queens problem using backtracking -" .byte 0 - str1: .text @"\nNumber of queens:" + str1: .text @"\nnumber of queens:" .byte 0 + str2: .text @"\ntime: " + .byte 0 +} +// Print a string value using a specific format +// Handles justification and min length +printf_string: { + // printf_str(str) + lda #tod_buffer + sta.z printf_str.str+1 + jsr printf_str + // } + rts +} +// Print a zero-terminated string +// Handles escape codes such as newline +// printf_str(byte* zp($d) str) +printf_str: { + .label str = $d + __b2: + // ch = *str++ + ldy #0 + lda (str),y + inc.z str + bne !+ + inc.z str+1 + !: + // if(ch==0) + cmp #0 + bne __b3 + // } + rts + __b3: + // if(ch=='\n') + cmp #'\n' + beq __b4 + // printf_char(ch) + jsr printf_char + jmp __b2 + __b4: + // printf_ln() + jsr printf_ln + jmp __b2 +} +// Print a newline +printf_ln: { + .label __0 = $13 + .label __1 = $13 + // printf_cursor_ptr - printf_cursor_x + sec + lda.z __0 + sbc.z printf_cursor_x + sta.z __0 + bcs !+ + dec.z __0+1 + !: + // printf_cursor_ptr - printf_cursor_x + PRINTF_SCREEN_WIDTH + lda #$28 + clc + adc.z __1 + sta.z __1 + bcc !+ + inc.z __1+1 + !: + // printf_cursor_ptr = printf_cursor_ptr - printf_cursor_x + PRINTF_SCREEN_WIDTH + // printf_cursor_x = 0 + lda #0 + sta.z printf_cursor_x + // printf_cursor_y++; + inc.z printf_cursor_y + // printf_scroll() + jsr printf_scroll + // } + rts +} +// Scroll the entire screen if the cursor is on the last line +printf_scroll: { + .label __4 = $13 + // if(printf_cursor_y==PRINTF_SCREEN_HEIGHT) + lda #$19 + cmp.z printf_cursor_y + bne __breturn + // memcpy(PRINTF_SCREEN_ADDRESS, PRINTF_SCREEN_ADDRESS+PRINTF_SCREEN_WIDTH, PRINTF_SCREEN_BYTES-PRINTF_SCREEN_WIDTH) + jsr memcpy + // memset(PRINTF_SCREEN_ADDRESS+PRINTF_SCREEN_BYTES-PRINTF_SCREEN_WIDTH, ' ', PRINTF_SCREEN_WIDTH) + ldx #' ' + lda #<$400+$28*$19-$28 + sta.z memset.str + lda #>$400+$28*$19-$28 + sta.z memset.str+1 + lda #<$28 + sta.z memset.num + lda #>$28 + sta.z memset.num+1 + jsr memset + // printf_cursor_ptr-PRINTF_SCREEN_WIDTH + lda.z __4 + sec + sbc #<$28 + sta.z __4 + lda.z __4+1 + sbc #>$28 + sta.z __4+1 + // printf_cursor_ptr = printf_cursor_ptr-PRINTF_SCREEN_WIDTH + // printf_cursor_y--; + dec.z printf_cursor_y + __breturn: + // } + rts +} +// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. +// memset(void* zp($21) str, byte register(X) c, word zp($f) num) +memset: { + .label end = $f + .label dst = $21 + .label num = $f + .label str = $21 + // if(num>0) + lda.z num + bne !+ + lda.z num+1 + beq __breturn + !: + // end = (char*)str + num + lda.z end + clc + adc.z str + sta.z end + lda.z end+1 + adc.z str+1 + sta.z end+1 + __b2: + // for(char* dst = str; dst!=end; dst++) + lda.z dst+1 + cmp.z end+1 + bne __b3 + lda.z dst + cmp.z end + bne __b3 + __breturn: + // } + rts + __b3: + // *dst = c + txa + ldy #0 + sta (dst),y + // for(char* dst = str; dst!=end; dst++) + inc.z dst + bne !+ + inc.z dst+1 + !: + jmp __b2 +} +// Copy block of memory (forwards) +// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. +memcpy: { + .label destination = $400 + .label source = $400+$28 + .const num = $28*$19-$28 + .label src_end = source+num + .label dst = $21 + .label src = $f + lda #destination + sta.z dst+1 + lda #source + sta.z src+1 + __b1: + // while(src!=src_end) + lda.z src+1 + cmp #>src_end + bne __b2 + lda.z src + cmp #>4 + txa + lsr + lsr + lsr + lsr + // '0'+(tod.HOURS>>4) + clc + adc #'0' + // tod_buffer[0] = '0'+(tod.HOURS>>4) + sta tod_buffer + // tod.HOURS&0x0f + txa + and #$f + // '0'+(tod.HOURS&0x0f) + clc + adc #'0' + // tod_buffer[1] = '0'+(tod.HOURS&0x0f) + sta tod_buffer+1 + // tod.MIN>>4 + tya + lsr + lsr + lsr + lsr + // '0'+(tod.MIN>>4) + clc + adc #'0' + // tod_buffer[3] = '0'+(tod.MIN>>4) + sta tod_buffer+3 + // tod.MIN&0x0f + tya + and #$f + // '0'+(tod.MIN&0x0f) + clc + adc #'0' + // tod_buffer[4] = '0'+(tod.MIN&0x0f) + sta tod_buffer+4 + // tod.SEC>>4 + lda.z tod_SEC + lsr + lsr + lsr + lsr + // '0'+(tod.SEC>>4) + clc + adc #'0' + // tod_buffer[6] = '0'+(tod.SEC>>4) + sta tod_buffer+6 + // tod.SEC&0x0f + lda #$f + and.z tod_SEC + // '0'+(tod.SEC&0x0f) + clc + adc #'0' + // tod_buffer[7] = '0'+(tod.SEC&0x0f) + sta tod_buffer+7 + // tod.TENTHS>>4 + lda.z tod_TENTHS + lsr + lsr + lsr + lsr + // '0'+(tod.TENTHS>>4) + clc + adc #'0' + // tod_buffer[9] = '0'+(tod.TENTHS>>4) + sta tod_buffer+9 + // tod.TENTHS&0x0f + lda #$f + and.z tod_TENTHS + // '0'+(tod.TENTHS&0x0f) + clc + adc #'0' + // tod_buffer[10] = '0'+(tod.TENTHS&0x0f) + sta tod_buffer+$a + // } + rts +} +// Read time of day +tod_read: { + .label return_HOURS = $18 + .label return_MIN = $17 + // hours = CIA1->TOD_HOURS + // Reading sequence is important. TOD latches on reading hours until 10ths is read. + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS + sta.z return_HOURS + // mins = CIA1->TOD_MIN + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_MIN + // secs = CIA1->TOD_SEC + ldx CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_SEC + // tenths = CIA1->TOD_10THS + ldy CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_10THS + // } + rts } // Generates all valid placements of queens on a NxN board without recursion // Works exactly like the recursive solution by generating all legal placements af a queen for a specific row taking into consideration the queens already placed on the rows below @@ -63,7 +428,7 @@ main: { // When all columns on a row is exhausted move back down to the lower level and move forward one position until we are done with the last position on the first row queens: { // The current row where the queen is moving - .label row = $12 + .label row = $c lda #<0 sta.z count sta.z count+1 @@ -88,22 +453,27 @@ queens: { jsr legal // legal(row, board[row]) // if(legal(row, board[row])) - // check if the current position on row 1-row is legal cmp #0 - bne __b4 - jmp __b2 - __b4: + beq __b2 // if(row==QUEENS) // position is legal - move up to the next row lda #8 cmp.z row - beq __b5 + beq __b4 // row++; inc.z row jmp __b2 - __b5: + __b4: + // ++count; + inc.z count + bne !+ + inc.z count+1 + bne !+ + inc.z count+2 + bne !+ + inc.z count+3 + !: // print() - // We have a complete legal board - print it! jsr print jmp __b2 __b3: @@ -123,29 +493,20 @@ queens: { // } rts } -// Print the board with a legal placement. Also increments the solution count. +// Print the board with a legal placement. print: { - .label i = $1b - .label i1 = $21 - .label j = 6 - // printf("\n#%lu:\n ",++count); - inc.z count - bne !+ - inc.z count+1 - bne !+ - inc.z count+2 - bne !+ - inc.z count+3 - !: - // printf("\n#%lu:\n ",++count) + .label i = $b + .label i1 = $15 + .label j = $16 + // printf("\n#%lu:\n ",count) lda #str sta.z printf_str.str+1 jsr printf_str - // printf("\n#%lu:\n ",++count) + // printf("\n#%lu:\n ",count) jsr printf_ulong - // printf("\n#%lu:\n ",++count) + // printf("\n#%lu:\n ",count) lda #str1 @@ -259,15 +620,15 @@ printf_uchar: { } // Print the contents of the number buffer using a specific format. // This handles minimum length, zero-filling, and left/right justification from the format -// printf_number_buffer(byte zp($d) buffer_sign, byte* zp($13) buffer_digits, byte register(X) format_min_length, byte zp($b) format_justify_left, byte zp($c) format_zero_padding, byte zp($1c) format_upper_case) +// printf_number_buffer(byte zp($1c) buffer_sign, byte* zp($d) buffer_digits, byte register(X) format_min_length, byte zp($16) format_justify_left, byte zp(6) format_zero_padding, byte zp($17) format_upper_case) printf_number_buffer: { - .label __19 = $22 - .label buffer_sign = $d - .label padding = 7 - .label format_zero_padding = $c - .label format_justify_left = $b - .label buffer_digits = $13 - .label format_upper_case = $1c + .label __19 = $21 + .label buffer_sign = $1c + .label padding = $18 + .label format_zero_padding = 6 + .label format_justify_left = $16 + .label buffer_digits = $d + .label format_upper_case = $17 // if(format.min_length) cpx #0 beq __b6 @@ -376,11 +737,11 @@ printf_number_buffer: { rts } // Print a padding char a number of times -// printf_padding(byte zp(9) pad, byte zp(8) length) +// printf_padding(byte zp($1a) pad, byte zp($19) length) printf_padding: { - .label i = $a - .label length = 8 - .label pad = 9 + .label i = $1b + .label length = $19 + .label pad = $1a lda #0 sta.z i __b1: @@ -398,222 +759,11 @@ printf_padding: { inc.z i jmp __b1 } -// Print a single char -// If the end of the screen is reached scroll it up one char and place the cursor at the -// printf_char(byte register(A) ch) -printf_char: { - // *(printf_cursor_ptr++) = ch - ldy #0 - sta (printf_cursor_ptr),y - // *(printf_cursor_ptr++) = ch; - inc.z printf_cursor_ptr - bne !+ - inc.z printf_cursor_ptr+1 - !: - // if(++printf_cursor_x==PRINTF_SCREEN_WIDTH) - inc.z printf_cursor_x - lda #$28 - cmp.z printf_cursor_x - bne __breturn - // printf_cursor_x = 0 - lda #0 - sta.z printf_cursor_x - // ++printf_cursor_y; - inc.z printf_cursor_y - // printf_scroll() - jsr printf_scroll - __breturn: - // } - rts -} -// Scroll the entire screen if the cursor is on the last line -printf_scroll: { - .label __4 = $19 - // if(printf_cursor_y==PRINTF_SCREEN_HEIGHT) - lda #$19 - cmp.z printf_cursor_y - bne __breturn - // memcpy(PRINTF_SCREEN_ADDRESS, PRINTF_SCREEN_ADDRESS+PRINTF_SCREEN_WIDTH, PRINTF_SCREEN_BYTES-PRINTF_SCREEN_WIDTH) - jsr memcpy - // memset(PRINTF_SCREEN_ADDRESS+PRINTF_SCREEN_BYTES-PRINTF_SCREEN_WIDTH, ' ', PRINTF_SCREEN_WIDTH) - ldx #' ' - lda #<$400+$28*$19-$28 - sta.z memset.str - lda #>$400+$28*$19-$28 - sta.z memset.str+1 - lda #<$28 - sta.z memset.num - lda #>$28 - sta.z memset.num+1 - jsr memset - // printf_cursor_ptr-PRINTF_SCREEN_WIDTH - lda.z __4 - sec - sbc #<$28 - sta.z __4 - lda.z __4+1 - sbc #>$28 - sta.z __4+1 - // printf_cursor_ptr = printf_cursor_ptr-PRINTF_SCREEN_WIDTH - // printf_cursor_y--; - dec.z printf_cursor_y - __breturn: - // } - rts -} -// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// memset(void* zp($22) str, byte register(X) c, word zp($15) num) -memset: { - .label end = $15 - .label dst = $22 - .label num = $15 - .label str = $22 - // if(num>0) - lda.z num - bne !+ - lda.z num+1 - beq __breturn - !: - // end = (char*)str + num - lda.z end - clc - adc.z str - sta.z end - lda.z end+1 - adc.z str+1 - sta.z end+1 - __b2: - // for(char* dst = str; dst!=end; dst++) - lda.z dst+1 - cmp.z end+1 - bne __b3 - lda.z dst - cmp.z end - bne __b3 - __breturn: - // } - rts - __b3: - // *dst = c - txa - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - inc.z dst - bne !+ - inc.z dst+1 - !: - jmp __b2 -} -// Copy block of memory (forwards) -// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. -memcpy: { - .label destination = $400 - .label source = $400+$28 - .const num = $28*$19-$28 - .label src_end = source+num - .label dst = $22 - .label src = $15 - lda #destination - sta.z dst+1 - lda #source - sta.z src+1 - __b1: - // while(src!=src_end) - lda.z src+1 - cmp #>src_end - bne __b2 - lda.z src - cmp #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -761,9 +911,9 @@ uctoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// uctoa_append(byte* zp($13) buffer, byte register(X) value, byte zp($1c) sub) +// uctoa_append(byte* zp($d) buffer, byte register(X) value, byte zp($1c) sub) uctoa_append: { - .label buffer = $13 + .label buffer = $d .label sub = $1c ldy #0 __b1: @@ -833,13 +983,13 @@ printf_ulong: { // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// ultoa(dword zp($e) value, byte* zp($22) buffer) +// ultoa(dword zp(7) value, byte* zp($21) buffer) ultoa: { .const max_digits = $a .label digit_value = $1d - .label buffer = $22 - .label digit = $d - .label value = $e + .label buffer = $21 + .label digit = $1c + .label value = 7 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -927,12 +1077,12 @@ ultoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// ultoa_append(byte* zp($22) buffer, dword zp($e) value, dword zp($1d) sub) +// ultoa_append(byte* zp($21) buffer, dword zp(7) value, dword zp($1d) sub) ultoa_append: { - .label buffer = $22 - .label value = $e + .label buffer = $21 + .label value = 7 .label sub = $1d - .label return = $e + .label return = 7 ldx #0 __b1: // while (value >= sub) @@ -980,11 +1130,11 @@ ultoa_append: { // Checks is a placement of the queen on the board is legal. // Checks the passed (row, column) against all queens placed on the board on lower rows. // If no conflict for desired position returns 1 otherwise returns 0 -// legal(byte zp($12) row, byte zp($1b) column) +// legal(byte zp($c) row, byte zp($1b) column) legal: { - .label __3 = $21 - .label row = $12 + .label row = $c .label column = $1b + .label diff1_return = $b ldy #1 __b1: // row-1 @@ -1007,43 +1157,73 @@ legal: { beq __b4 // diff(board[i],column) lda board,y - ldx.z column - jsr diff - // diff(board[i],column) - sta.z __3 - // diff(i,row) + // if(aTIMER_A_CONTROL |= 0x80 + // Set 50hz (this assumes PAL!) (bit7=1) + lda #$80 + ora CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // CIA1->TIMER_B_CONTROL &= 0x7f + // Writing TOD clock (bit7=0) + lda #$7f + and CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // CIA1->TOD_HOURS = tod.HOURS + // Reset TOD clock + // Writing sequence is important. TOD stops when hours is written and starts when 10ths is written. + sty CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS + // CIA1->TOD_MIN = tod.MIN + stx CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_MIN + // CIA1->TOD_SEC = tod.SEC + lda.z tod_SEC + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_SEC + // CIA1->TOD_10THS = tod.TENTHS + lda.z tod_TENTHS + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_10THS + // } rts } // Print an unsigned int using a specific format @@ -1084,13 +1264,13 @@ printf_uint: { // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// utoa(word zp($13) value, byte* zp($15) buffer) +// utoa(word zp($d) value, byte* zp($f) buffer) utoa: { .const max_digits = 5 - .label digit_value = $22 - .label buffer = $15 - .label digit = $12 - .label value = $13 + .label digit_value = $21 + .label buffer = $f + .label digit = $c + .label value = $d lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -1168,12 +1348,12 @@ utoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// utoa_append(byte* zp($15) buffer, word zp($13) value, word zp($22) sub) +// utoa_append(byte* zp($f) buffer, word zp($d) value, word zp($21) sub) utoa_append: { - .label buffer = $15 - .label value = $13 - .label sub = $22 - .label return = $13 + .label buffer = $f + .label value = $d + .label sub = $21 + .label return = $d ldx #0 __b1: // while (value >= sub) @@ -1238,7 +1418,12 @@ printf_cls: { RADIX_DECIMAL_VALUES: .word $2710, $3e8, $64, $a // Values of decimal digits RADIX_DECIMAL_VALUES_LONG: .dword $3b9aca00, $5f5e100, $989680, $f4240, $186a0, $2710, $3e8, $64, $a + // The buffer used by tod_str() + tod_buffer: .text "00:00:00:00" + .byte 0 // The board. board[i] holds the column position of the queen on row i. board: .fill $14, 0 // Buffer used for stringified number being printed printf_buffer: .fill SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER, 0 + // Time of Day 00:00:00:00 + TOD_ZERO: .byte 0, 0, 0, 0 diff --git a/src/test/ref/examples/eightqueens/eightqueens.cfg b/src/test/ref/examples/eightqueens/eightqueens.cfg index 0bd3b1851..37e805e82 100644 --- a/src/test/ref/examples/eightqueens/eightqueens.cfg +++ b/src/test/ref/examples/eightqueens/eightqueens.cfg @@ -31,711 +31,808 @@ main::@3: scope:[main] from main::@2 [14] call printf_uint to:main::@4 main::@4: scope:[main] from main::@3 - [15] phi() - [16] call queens + [15] (byte) tod_init::tod_TENTHS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO) + [16] (byte) tod_init::tod_SEC#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC) + [17] (byte) tod_init::tod_MIN#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN) + [18] (byte) tod_init::tod_HOURS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS) + [19] call tod_init + to:main::@5 +main::@5: scope:[main] from main::@4 + [20] phi() + [21] call queens + to:main::@6 +main::@6: scope:[main] from main::@5 + [22] phi() + [23] call tod_read + [24] (byte) tod_read::return_TENTHS#2 ← (byte) tod_read::return_TENTHS#0 + [25] (byte) tod_read::return_SEC#2 ← (byte) tod_read::return_SEC#0 + [26] (byte) tod_read::return_MIN#2 ← (byte) tod_read::return_MIN#0 + [27] (byte) tod_read::return_HOURS#2 ← (byte) tod_read::return_HOURS#0 + to:main::@7 +main::@7: scope:[main] from main::@6 + [28] (byte) main::tod_TENTHS#0 ← (byte) tod_read::return_TENTHS#2 + [29] (byte) main::tod_SEC#0 ← (byte) tod_read::return_SEC#2 + [30] (byte) main::tod_MIN#0 ← (byte) tod_read::return_MIN#2 + [31] (byte) main::tod_HOURS#0 ← (byte) tod_read::return_HOURS#2 + [32] (byte) tod_str::tod_TENTHS#0 ← (byte) main::tod_TENTHS#0 + [33] (byte) tod_str::tod_SEC#0 ← (byte) main::tod_SEC#0 + [34] (byte) tod_str::tod_MIN#0 ← (byte) main::tod_MIN#0 + [35] (byte) tod_str::tod_HOURS#0 ← (byte) main::tod_HOURS#0 + [36] call tod_str + to:main::@8 +main::@8: scope:[main] from main::@7 + [37] phi() + [38] call printf_str + to:main::@9 +main::@9: scope:[main] from main::@8 + [39] phi() + [40] call printf_string to:main::@return -main::@return: scope:[main] from main::@4 - [17] return +main::@return: scope:[main] from main::@9 + [41] return to:@return -(void()) queens() -queens: scope:[queens] from main::@4 - [18] phi() - to:queens::@1 -queens::@1: scope:[queens] from queens queens::@5 queens::@6 queens::@8 queens::@9 - [19] (dword) count#11 ← phi( queens/(dword) 0 queens::@5/(dword) count#13 queens::@6/(dword) count#11 queens::@8/(dword) count#11 queens::@9/(dword) count#11 ) - [19] (byte) queens::row#10 ← phi( queens/(byte) 1 queens::@5/(byte) queens::row#10 queens::@6/(byte) queens::row#1 queens::@8/(byte) queens::row#2 queens::@9/(byte) queens::row#10 ) - to:queens::@2 -queens::@2: scope:[queens] from queens::@1 - [20] *((const byte*) board + (byte) queens::row#10) ← ++ *((const byte*) board + (byte) queens::row#10) - [21] if(*((const byte*) board + (byte) queens::row#10)==(byte)(number) 8+(number) 1) goto queens::@3 - to:queens::@7 -queens::@7: scope:[queens] from queens::@2 - [22] (byte) legal::row#0 ← (byte) queens::row#10 - [23] (byte) legal::column#0 ← *((const byte*) board + (byte) queens::row#10) - [24] call legal - [25] (byte) legal::return#0 ← (byte) legal::return#4 - to:queens::@9 -queens::@9: scope:[queens] from queens::@7 - [26] (byte~) queens::$2 ← (byte) legal::return#0 - [27] if((byte) 0!=(byte~) queens::$2) goto queens::@4 - to:queens::@1 -queens::@4: scope:[queens] from queens::@9 - [28] if((byte) queens::row#10==(byte) 8) goto queens::@5 - to:queens::@6 -queens::@6: scope:[queens] from queens::@4 - [29] (byte) queens::row#1 ← ++ (byte) queens::row#10 - to:queens::@1 -queens::@5: scope:[queens] from queens::@4 - [30] phi() - [31] call print - to:queens::@1 -queens::@3: scope:[queens] from queens::@2 - [32] *((const byte*) board + (byte) queens::row#10) ← (byte) 0 - [33] if((byte) queens::row#10==(byte) 1) goto queens::@return - to:queens::@8 -queens::@8: scope:[queens] from queens::@3 - [34] (byte) queens::row#2 ← -- (byte) queens::row#10 - to:queens::@1 -queens::@return: scope:[queens] from queens::@3 - [35] return +(void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) +printf_string: scope:[printf_string] from main::@9 + [42] phi() + to:printf_string::@1 +printf_string::@1: scope:[printf_string] from printf_string + [43] phi() + [44] call printf_str + to:printf_string::@return +printf_string::@return: scope:[printf_string] from printf_string::@1 + [45] return to:@return -(void()) print() -print: scope:[print] from queens::@5 - [36] (dword) count#13 ← ++ (dword) count#11 - [37] call printf_str - to:print::@11 -print::@11: scope:[print] from print - [38] (dword) printf_ulong::uvalue#0 ← (dword) count#13 - [39] call printf_ulong - to:print::@12 -print::@12: scope:[print] from print::@11 - [40] phi() - [41] call printf_str - to:print::@1 -print::@1: scope:[print] from print::@12 print::@13 - [42] (byte) print::i#2 ← phi( print::@12/(byte) 1 print::@13/(byte) print::i#1 ) - [43] if((byte) print::i#2<(byte) 8+(byte) 1) goto print::@2 - to:print::@3 -print::@3: scope:[print] from print::@1 print::@7 - [44] (byte) print::i1#2 ← phi( print::@1/(byte) 1 print::@7/(byte) print::i1#1 ) - [45] if((byte) print::i1#2<(byte) 8+(byte) 1) goto print::@4 - to:print::@return -print::@return: scope:[print] from print::@3 - [46] return - to:@return -print::@4: scope:[print] from print::@3 - [47] phi() - [48] call printf_str - to:print::@14 -print::@14: scope:[print] from print::@4 - [49] (byte) printf_uchar::uvalue#1 ← (byte) print::i1#2 - [50] call printf_uchar - to:print::@5 -print::@5: scope:[print] from print::@14 print::@9 - [51] (byte) print::j#2 ← phi( print::@9/(byte) print::j#1 print::@14/(byte) 1 ) - [52] if((byte) print::j#2<(byte) 8+(byte) 1) goto print::@6 - to:print::@7 -print::@7: scope:[print] from print::@5 - [53] (byte) print::i1#1 ← ++ (byte) print::i1#2 - to:print::@3 -print::@6: scope:[print] from print::@5 - [54] if(*((const byte*) board + (byte) print::i1#2)==(byte) print::j#2) goto print::@8 - to:print::@10 -print::@10: scope:[print] from print::@6 - [55] phi() - [56] call printf_str - to:print::@9 -print::@9: scope:[print] from print::@10 print::@8 - [57] (byte) print::j#1 ← ++ (byte) print::j#2 - to:print::@5 -print::@8: scope:[print] from print::@6 - [58] phi() - [59] call printf_str - to:print::@9 -print::@2: scope:[print] from print::@1 - [60] (byte) printf_uchar::uvalue#0 ← (byte) print::i#2 - [61] call printf_uchar - to:print::@13 -print::@13: scope:[print] from print::@2 - [62] (byte) print::i#1 ← ++ (byte) print::i#2 - to:print::@1 - -(void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) -printf_uchar: scope:[printf_uchar] from print::@14 print::@2 - [63] (byte) printf_uchar::uvalue#2 ← phi( print::@14/(byte) printf_uchar::uvalue#1 print::@2/(byte) printf_uchar::uvalue#0 ) - to:printf_uchar::@1 -printf_uchar::@1: scope:[printf_uchar] from printf_uchar - [64] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 - [65] (byte) uctoa::value#1 ← (byte) printf_uchar::uvalue#2 - [66] call uctoa - to:printf_uchar::@2 -printf_uchar::@2: scope:[printf_uchar] from printf_uchar::@1 - [67] (byte) printf_number_buffer::buffer_sign#2 ← *((byte*)&(struct printf_buffer_number) printf_buffer) - [68] call printf_number_buffer - to:printf_uchar::@return -printf_uchar::@return: scope:[printf_uchar] from printf_uchar::@2 - [69] return - to:@return - -(void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) -printf_number_buffer: scope:[printf_number_buffer] from printf_uchar::@2 printf_uint::@2 printf_ulong::@2 - [70] (byte) printf_number_buffer::format_upper_case#10 ← phi( printf_uchar::@2/(byte) 0 printf_uint::@2/(const byte) printf_uint::format_upper_case#0 printf_ulong::@2/(const byte) printf_ulong::format_upper_case#0 ) - [70] (byte) printf_number_buffer::buffer_sign#10 ← phi( printf_uchar::@2/(byte) printf_number_buffer::buffer_sign#2 printf_uint::@2/(byte) printf_number_buffer::buffer_sign#1 printf_ulong::@2/(byte) printf_number_buffer::buffer_sign#0 ) - [70] (byte*) printf_number_buffer::buffer_digits#10 ← phi( printf_uchar::@2/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS printf_uint::@2/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS printf_ulong::@2/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) - [70] (byte) printf_number_buffer::format_zero_padding#10 ← phi( printf_uchar::@2/(byte) 0 printf_uint::@2/(const byte) printf_uint::format_zero_padding#0 printf_ulong::@2/(const byte) printf_ulong::format_zero_padding#0 ) - [70] (byte) printf_number_buffer::format_justify_left#10 ← phi( printf_uchar::@2/(byte) 0 printf_uint::@2/(const byte) printf_uint::format_justify_left#0 printf_ulong::@2/(const byte) printf_ulong::format_justify_left#0 ) - [70] (byte) printf_number_buffer::format_min_length#3 ← phi( printf_uchar::@2/(byte) 0 printf_uint::@2/(const byte) printf_uint::format_min_length#0 printf_ulong::@2/(const byte) printf_ulong::format_min_length#0 ) - [71] if((byte) 0==(byte) printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 - to:printf_number_buffer::@6 -printf_number_buffer::@6: scope:[printf_number_buffer] from printf_number_buffer - [72] (byte*) strlen::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 - [73] call strlen - [74] (word) strlen::return#2 ← (word) strlen::len#2 - to:printf_number_buffer::@14 -printf_number_buffer::@14: scope:[printf_number_buffer] from printf_number_buffer::@6 - [75] (word~) printf_number_buffer::$19 ← (word) strlen::return#2 - [76] (signed byte) printf_number_buffer::len#0 ← (signed byte)(word~) printf_number_buffer::$19 - [77] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 - to:printf_number_buffer::@7 -printf_number_buffer::@7: scope:[printf_number_buffer] from printf_number_buffer::@14 - [78] (signed byte) printf_number_buffer::len#1 ← ++ (signed byte) printf_number_buffer::len#0 - to:printf_number_buffer::@13 -printf_number_buffer::@13: scope:[printf_number_buffer] from printf_number_buffer::@14 printf_number_buffer::@7 - [79] (signed byte) printf_number_buffer::len#2 ← phi( printf_number_buffer::@14/(signed byte) printf_number_buffer::len#0 printf_number_buffer::@7/(signed byte) printf_number_buffer::len#1 ) - [80] (signed byte) printf_number_buffer::padding#1 ← (signed byte)(byte) printf_number_buffer::format_min_length#3 - (signed byte) printf_number_buffer::len#2 - [81] if((signed byte) printf_number_buffer::padding#1>=(signed byte) 0) goto printf_number_buffer::@21 - to:printf_number_buffer::@1 -printf_number_buffer::@21: scope:[printf_number_buffer] from printf_number_buffer::@13 - [82] phi() - to:printf_number_buffer::@1 -printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer printf_number_buffer::@13 printf_number_buffer::@21 - [83] (signed byte) printf_number_buffer::padding#10 ← phi( printf_number_buffer/(signed byte) 0 printf_number_buffer::@21/(signed byte) printf_number_buffer::padding#1 printf_number_buffer::@13/(signed byte) 0 ) - [84] if((byte) 0!=(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 - to:printf_number_buffer::@17 -printf_number_buffer::@17: scope:[printf_number_buffer] from printf_number_buffer::@1 - [85] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 - to:printf_number_buffer::@16 -printf_number_buffer::@16: scope:[printf_number_buffer] from printf_number_buffer::@17 - [86] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@8 - to:printf_number_buffer::@2 -printf_number_buffer::@8: scope:[printf_number_buffer] from printf_number_buffer::@16 - [87] (byte) printf_padding::length#0 ← (byte)(signed byte) printf_number_buffer::padding#10 - [88] call printf_padding - to:printf_number_buffer::@2 -printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@16 printf_number_buffer::@17 printf_number_buffer::@8 - [89] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 - to:printf_number_buffer::@9 -printf_number_buffer::@9: scope:[printf_number_buffer] from printf_number_buffer::@2 - [90] (byte) printf_char::ch#2 ← (byte) printf_number_buffer::buffer_sign#10 - [91] call printf_char - to:printf_number_buffer::@3 -printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@2 printf_number_buffer::@9 - [92] if((byte) 0==(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 - to:printf_number_buffer::@18 -printf_number_buffer::@18: scope:[printf_number_buffer] from printf_number_buffer::@3 - [93] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@10 - to:printf_number_buffer::@4 -printf_number_buffer::@10: scope:[printf_number_buffer] from printf_number_buffer::@18 - [94] (byte) printf_padding::length#1 ← (byte)(signed byte) printf_number_buffer::padding#10 - [95] call printf_padding - to:printf_number_buffer::@4 -printf_number_buffer::@4: scope:[printf_number_buffer] from printf_number_buffer::@10 printf_number_buffer::@18 printf_number_buffer::@3 - [96] if((byte) 0==(byte) printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 - to:printf_number_buffer::@11 -printf_number_buffer::@11: scope:[printf_number_buffer] from printf_number_buffer::@4 - [97] (byte*) strupr::str#0 ← (byte*) printf_number_buffer::buffer_digits#10 - [98] call strupr - to:printf_number_buffer::@5 -printf_number_buffer::@5: scope:[printf_number_buffer] from printf_number_buffer::@11 printf_number_buffer::@4 - [99] (byte*) printf_str::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 - [100] call printf_str - to:printf_number_buffer::@15 -printf_number_buffer::@15: scope:[printf_number_buffer] from printf_number_buffer::@5 - [101] if((byte) 0==(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return - to:printf_number_buffer::@20 -printf_number_buffer::@20: scope:[printf_number_buffer] from printf_number_buffer::@15 - [102] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return - to:printf_number_buffer::@19 -printf_number_buffer::@19: scope:[printf_number_buffer] from printf_number_buffer::@20 - [103] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@12 - to:printf_number_buffer::@return -printf_number_buffer::@12: scope:[printf_number_buffer] from printf_number_buffer::@19 - [104] (byte) printf_padding::length#2 ← (byte)(signed byte) printf_number_buffer::padding#10 - [105] call printf_padding - to:printf_number_buffer::@return -printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@12 printf_number_buffer::@15 printf_number_buffer::@19 printf_number_buffer::@20 - [106] return - to:@return - -(void()) printf_padding((byte) printf_padding::pad , (byte) printf_padding::length) -printf_padding: scope:[printf_padding] from printf_number_buffer::@10 printf_number_buffer::@12 printf_number_buffer::@8 - [107] (byte) printf_padding::pad#5 ← phi( printf_number_buffer::@10/(byte) '0' printf_number_buffer::@12/(byte) ' ' printf_number_buffer::@8/(byte) ' ' ) - [107] (byte) printf_padding::length#4 ← phi( printf_number_buffer::@10/(byte) printf_padding::length#1 printf_number_buffer::@12/(byte) printf_padding::length#2 printf_number_buffer::@8/(byte) printf_padding::length#0 ) - to:printf_padding::@1 -printf_padding::@1: scope:[printf_padding] from printf_padding printf_padding::@3 - [108] (byte) printf_padding::i#2 ← phi( printf_padding/(byte) 0 printf_padding::@3/(byte) printf_padding::i#1 ) - [109] if((byte) printf_padding::i#2<(byte) printf_padding::length#4) goto printf_padding::@2 - to:printf_padding::@return -printf_padding::@return: scope:[printf_padding] from printf_padding::@1 - [110] return - to:@return -printf_padding::@2: scope:[printf_padding] from printf_padding::@1 - [111] (byte) printf_char::ch#0 ← (byte) printf_padding::pad#5 - [112] call printf_char - to:printf_padding::@3 -printf_padding::@3: scope:[printf_padding] from printf_padding::@2 - [113] (byte) printf_padding::i#1 ← ++ (byte) printf_padding::i#2 - to:printf_padding::@1 - -(void()) printf_char((byte) printf_char::ch) -printf_char: scope:[printf_char] from printf_number_buffer::@9 printf_padding::@2 printf_str::@5 - [114] (byte) printf_char::ch#3 ← phi( printf_number_buffer::@9/(byte) printf_char::ch#2 printf_padding::@2/(byte) printf_char::ch#0 printf_str::@5/(byte) printf_char::ch#1 ) - [115] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#3 - [116] (byte*) printf_cursor_ptr ← ++ (byte*) printf_cursor_ptr - [117] (byte) printf_cursor_x ← ++ (byte) printf_cursor_x - [118] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return - to:printf_char::@1 -printf_char::@1: scope:[printf_char] from printf_char - [119] (byte) printf_cursor_x ← (byte) 0 - [120] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y - [121] call printf_scroll - to:printf_char::@return -printf_char::@return: scope:[printf_char] from printf_char printf_char::@1 - [122] return - to:@return - -(void()) printf_scroll() -printf_scroll: scope:[printf_scroll] from printf_char::@1 printf_ln - [123] if((byte) printf_cursor_y!=(byte) $19) goto printf_scroll::@return - to:printf_scroll::@1 -printf_scroll::@1: scope:[printf_scroll] from printf_scroll - [124] phi() - [125] call memcpy - to:printf_scroll::@2 -printf_scroll::@2: scope:[printf_scroll] from printf_scroll::@1 - [126] phi() - [127] call memset - to:printf_scroll::@3 -printf_scroll::@3: scope:[printf_scroll] from printf_scroll::@2 - [128] (byte*~) printf_scroll::$4 ← (byte*) printf_cursor_ptr - (byte) $28 - [129] (byte*) printf_cursor_ptr ← (byte*~) printf_scroll::$4 - [130] (byte) printf_cursor_y ← -- (byte) printf_cursor_y - to:printf_scroll::@return -printf_scroll::@return: scope:[printf_scroll] from printf_scroll printf_scroll::@3 - [131] return - to:@return - -(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) -memset: scope:[memset] from printf_cls printf_scroll::@2 - [132] (byte) memset::c#4 ← phi( printf_cls/(byte) ' ' printf_scroll::@2/(byte) ' ' ) - [132] (void*) memset::str#3 ← phi( printf_cls/(void*) 1024 printf_scroll::@2/(void*)(number) $400+(number) $28*(number) $19-(number) $28 ) - [132] (word) memset::num#2 ← phi( printf_cls/(word)(number) $28*(number) $19 printf_scroll::@2/(byte) $28 ) - [133] if((word) memset::num#2<=(byte) 0) goto memset::@return - to:memset::@1 -memset::@1: scope:[memset] from memset - [134] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 - [135] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 - to:memset::@2 -memset::@2: scope:[memset] from memset::@1 memset::@3 - [136] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) - [137] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 - to:memset::@return -memset::@return: scope:[memset] from memset memset::@2 - [138] return - to:@return -memset::@3: scope:[memset] from memset::@2 - [139] *((byte*) memset::dst#2) ← (byte) memset::c#4 - [140] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@2 - -(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) -memcpy: scope:[memcpy] from printf_scroll::@1 - [141] phi() - to:memcpy::@1 -memcpy::@1: scope:[memcpy] from memcpy memcpy::@2 - [142] (byte*) memcpy::dst#2 ← phi( memcpy/(byte*)(const void*) memcpy::destination#0 memcpy::@2/(byte*) memcpy::dst#1 ) - [142] (byte*) memcpy::src#2 ← phi( memcpy/(byte*)(const void*) memcpy::source#0 memcpy::@2/(byte*) memcpy::src#1 ) - [143] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 - to:memcpy::@return -memcpy::@return: scope:[memcpy] from memcpy::@1 - [144] return - to:@return -memcpy::@2: scope:[memcpy] from memcpy::@1 - [145] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) - [146] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 - [147] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2 - to:memcpy::@1 - (void()) printf_str((byte*) printf_str::str) -printf_str: scope:[printf_str] from main::@1 main::@2 print print::@10 print::@12 print::@4 print::@8 printf_number_buffer::@5 - [148] (byte*) printf_str::str#11 ← phi( main::@1/(const byte*) main::str main::@2/(const byte*) main::str1 print/(const byte*) print::str print::@10/(const byte*) print::str4 print::@12/(const byte*) print::str1 print::@4/(const byte*) print::str2 print::@8/(const byte*) print::str3 printf_number_buffer::@5/(byte*) printf_str::str#1 ) +printf_str: scope:[printf_str] from main::@1 main::@2 main::@8 print print::@10 print::@12 print::@4 print::@8 printf_number_buffer::@5 printf_string::@1 + [46] (byte*) printf_str::str#13 ← phi( main::@1/(const byte*) main::str main::@2/(const byte*) main::str1 main::@8/(const byte*) main::str2 print/(const byte*) print::str print::@10/(const byte*) print::str4 print::@12/(const byte*) print::str1 print::@4/(const byte*) print::str2 print::@8/(const byte*) print::str3 printf_number_buffer::@5/(byte*) printf_str::str#1 printf_string::@1/(const byte*) tod_buffer ) to:printf_str::@1 printf_str::@1: scope:[printf_str] from printf_str printf_str::@4 printf_str::@5 - [149] (byte*) printf_str::str#10 ← phi( printf_str/(byte*) printf_str::str#11 printf_str::@4/(byte*) printf_str::str#0 printf_str::@5/(byte*) printf_str::str#0 ) + [47] (byte*) printf_str::str#11 ← phi( printf_str/(byte*) printf_str::str#13 printf_str::@4/(byte*) printf_str::str#0 printf_str::@5/(byte*) printf_str::str#0 ) to:printf_str::@2 printf_str::@2: scope:[printf_str] from printf_str::@1 - [150] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#10) - [151] (byte*) printf_str::str#0 ← ++ (byte*) printf_str::str#10 - [152] if((byte) printf_str::ch#0!=(byte) 0) goto printf_str::@3 + [48] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#11) + [49] (byte*) printf_str::str#0 ← ++ (byte*) printf_str::str#11 + [50] if((byte) printf_str::ch#0!=(byte) 0) goto printf_str::@3 to:printf_str::@return printf_str::@return: scope:[printf_str] from printf_str::@2 - [153] return + [51] return to:@return printf_str::@3: scope:[printf_str] from printf_str::@2 - [154] if((byte) printf_str::ch#0==(byte) ' + [52] if((byte) printf_str::ch#0==(byte) ' ') goto printf_str::@4 to:printf_str::@5 printf_str::@5: scope:[printf_str] from printf_str::@3 - [155] (byte) printf_char::ch#1 ← (byte) printf_str::ch#0 - [156] call printf_char + [53] (byte) printf_char::ch#1 ← (byte) printf_str::ch#0 + [54] call printf_char to:printf_str::@1 printf_str::@4: scope:[printf_str] from printf_str::@3 - [157] phi() - [158] call printf_ln + [55] phi() + [56] call printf_ln to:printf_str::@1 (void()) printf_ln() printf_ln: scope:[printf_ln] from printf_str::@4 - [159] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x - [160] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28 - [161] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1 - [162] (byte) printf_cursor_x ← (byte) 0 - [163] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y - [164] call printf_scroll + [57] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x + [58] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28 + [59] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1 + [60] (byte) printf_cursor_x ← (byte) 0 + [61] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y + [62] call printf_scroll to:printf_ln::@return printf_ln::@return: scope:[printf_ln] from printf_ln - [165] return + [63] return to:@return +(void()) printf_scroll() +printf_scroll: scope:[printf_scroll] from printf_char::@1 printf_ln + [64] if((byte) printf_cursor_y!=(byte) $19) goto printf_scroll::@return + to:printf_scroll::@1 +printf_scroll::@1: scope:[printf_scroll] from printf_scroll + [65] phi() + [66] call memcpy + to:printf_scroll::@2 +printf_scroll::@2: scope:[printf_scroll] from printf_scroll::@1 + [67] phi() + [68] call memset + to:printf_scroll::@3 +printf_scroll::@3: scope:[printf_scroll] from printf_scroll::@2 + [69] (byte*~) printf_scroll::$4 ← (byte*) printf_cursor_ptr - (byte) $28 + [70] (byte*) printf_cursor_ptr ← (byte*~) printf_scroll::$4 + [71] (byte) printf_cursor_y ← -- (byte) printf_cursor_y + to:printf_scroll::@return +printf_scroll::@return: scope:[printf_scroll] from printf_scroll printf_scroll::@3 + [72] return + to:@return + +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +memset: scope:[memset] from printf_cls printf_scroll::@2 + [73] (byte) memset::c#4 ← phi( printf_cls/(byte) ' ' printf_scroll::@2/(byte) ' ' ) + [73] (void*) memset::str#3 ← phi( printf_cls/(void*) 1024 printf_scroll::@2/(void*)(number) $400+(number) $28*(number) $19-(number) $28 ) + [73] (word) memset::num#2 ← phi( printf_cls/(word)(number) $28*(number) $19 printf_scroll::@2/(byte) $28 ) + [74] if((word) memset::num#2<=(byte) 0) goto memset::@return + to:memset::@1 +memset::@1: scope:[memset] from memset + [75] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 + [76] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + to:memset::@2 +memset::@2: scope:[memset] from memset::@1 memset::@3 + [77] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) + [78] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 + to:memset::@return +memset::@return: scope:[memset] from memset memset::@2 + [79] return + to:@return +memset::@3: scope:[memset] from memset::@2 + [80] *((byte*) memset::dst#2) ← (byte) memset::c#4 + [81] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + to:memset::@2 + +(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) +memcpy: scope:[memcpy] from printf_scroll::@1 + [82] phi() + to:memcpy::@1 +memcpy::@1: scope:[memcpy] from memcpy memcpy::@2 + [83] (byte*) memcpy::dst#2 ← phi( memcpy/(byte*)(const void*) memcpy::destination#0 memcpy::@2/(byte*) memcpy::dst#1 ) + [83] (byte*) memcpy::src#2 ← phi( memcpy/(byte*)(const void*) memcpy::source#0 memcpy::@2/(byte*) memcpy::src#1 ) + [84] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 + to:memcpy::@return +memcpy::@return: scope:[memcpy] from memcpy::@1 + [85] return + to:@return +memcpy::@2: scope:[memcpy] from memcpy::@1 + [86] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) + [87] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 + [88] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2 + to:memcpy::@1 + +(void()) printf_char((byte) printf_char::ch) +printf_char: scope:[printf_char] from printf_number_buffer::@9 printf_padding::@2 printf_str::@5 + [89] (byte) printf_char::ch#3 ← phi( printf_number_buffer::@9/(byte) printf_char::ch#2 printf_padding::@2/(byte) printf_char::ch#0 printf_str::@5/(byte) printf_char::ch#1 ) + [90] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#3 + [91] (byte*) printf_cursor_ptr ← ++ (byte*) printf_cursor_ptr + [92] (byte) printf_cursor_x ← ++ (byte) printf_cursor_x + [93] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return + to:printf_char::@1 +printf_char::@1: scope:[printf_char] from printf_char + [94] (byte) printf_cursor_x ← (byte) 0 + [95] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y + [96] call printf_scroll + to:printf_char::@return +printf_char::@return: scope:[printf_char] from printf_char printf_char::@1 + [97] return + to:@return + +(byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) +tod_str: scope:[tod_str] from main::@7 + [98] (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#0 >> (byte) 4 + [99] (byte~) tod_str::$1 ← (byte) '0' + (byte~) tod_str::$0 + [100] *((const byte*) tod_buffer) ← (byte~) tod_str::$1 + [101] (byte~) tod_str::$2 ← (byte) tod_str::tod_HOURS#0 & (byte) $f + [102] (byte~) tod_str::$3 ← (byte) '0' + (byte~) tod_str::$2 + [103] *((const byte*) tod_buffer+(byte) 1) ← (byte~) tod_str::$3 + [104] (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#0 >> (byte) 4 + [105] (byte~) tod_str::$5 ← (byte) '0' + (byte~) tod_str::$4 + [106] *((const byte*) tod_buffer+(byte) 3) ← (byte~) tod_str::$5 + [107] (byte~) tod_str::$6 ← (byte) tod_str::tod_MIN#0 & (byte) $f + [108] (byte~) tod_str::$7 ← (byte) '0' + (byte~) tod_str::$6 + [109] *((const byte*) tod_buffer+(byte) 4) ← (byte~) tod_str::$7 + [110] (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#0 >> (byte) 4 + [111] (byte~) tod_str::$9 ← (byte) '0' + (byte~) tod_str::$8 + [112] *((const byte*) tod_buffer+(byte) 6) ← (byte~) tod_str::$9 + [113] (byte~) tod_str::$10 ← (byte) tod_str::tod_SEC#0 & (byte) $f + [114] (byte~) tod_str::$11 ← (byte) '0' + (byte~) tod_str::$10 + [115] *((const byte*) tod_buffer+(byte) 7) ← (byte~) tod_str::$11 + [116] (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#0 >> (byte) 4 + [117] (byte~) tod_str::$13 ← (byte) '0' + (byte~) tod_str::$12 + [118] *((const byte*) tod_buffer+(byte) 9) ← (byte~) tod_str::$13 + [119] (byte~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#0 & (byte) $f + [120] (byte~) tod_str::$15 ← (byte) '0' + (byte~) tod_str::$14 + [121] *((const byte*) tod_buffer+(byte) $a) ← (byte~) tod_str::$15 + to:tod_str::@return +tod_str::@return: scope:[tod_str] from tod_str + [122] return + to:@return + +(struct TIME_OF_DAY()) tod_read() +tod_read: scope:[tod_read] from main::@6 + [123] (byte) tod_read::return_HOURS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) + [124] (byte) tod_read::return_MIN#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) + [125] (byte) tod_read::return_SEC#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) + [126] (byte) tod_read::return_TENTHS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) + to:tod_read::@return +tod_read::@return: scope:[tod_read] from tod_read + [127] return + to:@return + +(void()) queens() +queens: scope:[queens] from main::@5 + [128] phi() + to:queens::@1 +queens::@1: scope:[queens] from queens queens::@4 queens::@7 queens::@8 queens::@9 + [129] (dword) count#14 ← phi( queens/(dword) 0 queens::@4/(dword) count#22 queens::@7/(dword) count#14 queens::@8/(dword) count#14 queens::@9/(dword) count#14 ) + [129] (byte) queens::row#10 ← phi( queens/(byte) 1 queens::@4/(byte) queens::row#10 queens::@7/(byte) queens::row#1 queens::@8/(byte) queens::row#2 queens::@9/(byte) queens::row#10 ) + to:queens::@2 +queens::@2: scope:[queens] from queens::@1 + [130] *((const byte*) board + (byte) queens::row#10) ← ++ *((const byte*) board + (byte) queens::row#10) + [131] if(*((const byte*) board + (byte) queens::row#10)==(byte)(number) 8+(number) 1) goto queens::@3 + to:queens::@5 +queens::@5: scope:[queens] from queens::@2 + [132] (byte) legal::row#0 ← (byte) queens::row#10 + [133] (byte) legal::column#0 ← *((const byte*) board + (byte) queens::row#10) + [134] call legal + [135] (byte) legal::return#0 ← (byte) legal::return#4 + to:queens::@9 +queens::@9: scope:[queens] from queens::@5 + [136] (byte~) queens::$2 ← (byte) legal::return#0 + [137] if((byte) 0==(byte~) queens::$2) goto queens::@1 + to:queens::@6 +queens::@6: scope:[queens] from queens::@9 + [138] if((byte) queens::row#10==(byte) 8) goto queens::@4 + to:queens::@7 +queens::@7: scope:[queens] from queens::@6 + [139] (byte) queens::row#1 ← ++ (byte) queens::row#10 + to:queens::@1 +queens::@4: scope:[queens] from queens::@6 + [140] (dword) count#22 ← ++ (dword) count#14 + [141] call print + to:queens::@1 +queens::@3: scope:[queens] from queens::@2 + [142] *((const byte*) board + (byte) queens::row#10) ← (byte) 0 + [143] if((byte) queens::row#10==(byte) 1) goto queens::@return + to:queens::@8 +queens::@8: scope:[queens] from queens::@3 + [144] (byte) queens::row#2 ← -- (byte) queens::row#10 + to:queens::@1 +queens::@return: scope:[queens] from queens::@3 + [145] return + to:@return + +(void()) print() +print: scope:[print] from queens::@4 + [146] phi() + [147] call printf_str + to:print::@11 +print::@11: scope:[print] from print + [148] (dword) printf_ulong::uvalue#0 ← (dword) count#22 + [149] call printf_ulong + to:print::@12 +print::@12: scope:[print] from print::@11 + [150] phi() + [151] call printf_str + to:print::@1 +print::@1: scope:[print] from print::@12 print::@13 + [152] (byte) print::i#2 ← phi( print::@12/(byte) 1 print::@13/(byte) print::i#1 ) + [153] if((byte) print::i#2<(byte) 8+(byte) 1) goto print::@2 + to:print::@3 +print::@3: scope:[print] from print::@1 print::@7 + [154] (byte) print::i1#2 ← phi( print::@1/(byte) 1 print::@7/(byte) print::i1#1 ) + [155] if((byte) print::i1#2<(byte) 8+(byte) 1) goto print::@4 + to:print::@return +print::@return: scope:[print] from print::@3 + [156] return + to:@return +print::@4: scope:[print] from print::@3 + [157] phi() + [158] call printf_str + to:print::@14 +print::@14: scope:[print] from print::@4 + [159] (byte) printf_uchar::uvalue#1 ← (byte) print::i1#2 + [160] call printf_uchar + to:print::@5 +print::@5: scope:[print] from print::@14 print::@9 + [161] (byte) print::j#2 ← phi( print::@9/(byte) print::j#1 print::@14/(byte) 1 ) + [162] if((byte) print::j#2<(byte) 8+(byte) 1) goto print::@6 + to:print::@7 +print::@7: scope:[print] from print::@5 + [163] (byte) print::i1#1 ← ++ (byte) print::i1#2 + to:print::@3 +print::@6: scope:[print] from print::@5 + [164] if(*((const byte*) board + (byte) print::i1#2)==(byte) print::j#2) goto print::@8 + to:print::@10 +print::@10: scope:[print] from print::@6 + [165] phi() + [166] call printf_str + to:print::@9 +print::@9: scope:[print] from print::@10 print::@8 + [167] (byte) print::j#1 ← ++ (byte) print::j#2 + to:print::@5 +print::@8: scope:[print] from print::@6 + [168] phi() + [169] call printf_str + to:print::@9 +print::@2: scope:[print] from print::@1 + [170] (byte) printf_uchar::uvalue#0 ← (byte) print::i#2 + [171] call printf_uchar + to:print::@13 +print::@13: scope:[print] from print::@2 + [172] (byte) print::i#1 ← ++ (byte) print::i#2 + to:print::@1 + +(void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) +printf_uchar: scope:[printf_uchar] from print::@14 print::@2 + [173] (byte) printf_uchar::uvalue#2 ← phi( print::@14/(byte) printf_uchar::uvalue#1 print::@2/(byte) printf_uchar::uvalue#0 ) + to:printf_uchar::@1 +printf_uchar::@1: scope:[printf_uchar] from printf_uchar + [174] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 + [175] (byte) uctoa::value#1 ← (byte) printf_uchar::uvalue#2 + [176] call uctoa + to:printf_uchar::@2 +printf_uchar::@2: scope:[printf_uchar] from printf_uchar::@1 + [177] (byte) printf_number_buffer::buffer_sign#2 ← *((byte*)&(struct printf_buffer_number) printf_buffer) + [178] call printf_number_buffer + to:printf_uchar::@return +printf_uchar::@return: scope:[printf_uchar] from printf_uchar::@2 + [179] return + to:@return + +(void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) +printf_number_buffer: scope:[printf_number_buffer] from printf_uchar::@2 printf_uint::@2 printf_ulong::@2 + [180] (byte) printf_number_buffer::format_upper_case#10 ← phi( printf_uchar::@2/(byte) 0 printf_uint::@2/(const byte) printf_uint::format_upper_case#0 printf_ulong::@2/(const byte) printf_ulong::format_upper_case#0 ) + [180] (byte) printf_number_buffer::buffer_sign#10 ← phi( printf_uchar::@2/(byte) printf_number_buffer::buffer_sign#2 printf_uint::@2/(byte) printf_number_buffer::buffer_sign#1 printf_ulong::@2/(byte) printf_number_buffer::buffer_sign#0 ) + [180] (byte*) printf_number_buffer::buffer_digits#10 ← phi( printf_uchar::@2/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS printf_uint::@2/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS printf_ulong::@2/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) + [180] (byte) printf_number_buffer::format_zero_padding#10 ← phi( printf_uchar::@2/(byte) 0 printf_uint::@2/(const byte) printf_uint::format_zero_padding#0 printf_ulong::@2/(const byte) printf_ulong::format_zero_padding#0 ) + [180] (byte) printf_number_buffer::format_justify_left#10 ← phi( printf_uchar::@2/(byte) 0 printf_uint::@2/(const byte) printf_uint::format_justify_left#0 printf_ulong::@2/(const byte) printf_ulong::format_justify_left#0 ) + [180] (byte) printf_number_buffer::format_min_length#3 ← phi( printf_uchar::@2/(byte) 0 printf_uint::@2/(const byte) printf_uint::format_min_length#0 printf_ulong::@2/(const byte) printf_ulong::format_min_length#0 ) + [181] if((byte) 0==(byte) printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 + to:printf_number_buffer::@6 +printf_number_buffer::@6: scope:[printf_number_buffer] from printf_number_buffer + [182] (byte*) strlen::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 + [183] call strlen + [184] (word) strlen::return#2 ← (word) strlen::len#2 + to:printf_number_buffer::@14 +printf_number_buffer::@14: scope:[printf_number_buffer] from printf_number_buffer::@6 + [185] (word~) printf_number_buffer::$19 ← (word) strlen::return#2 + [186] (signed byte) printf_number_buffer::len#0 ← (signed byte)(word~) printf_number_buffer::$19 + [187] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 + to:printf_number_buffer::@7 +printf_number_buffer::@7: scope:[printf_number_buffer] from printf_number_buffer::@14 + [188] (signed byte) printf_number_buffer::len#1 ← ++ (signed byte) printf_number_buffer::len#0 + to:printf_number_buffer::@13 +printf_number_buffer::@13: scope:[printf_number_buffer] from printf_number_buffer::@14 printf_number_buffer::@7 + [189] (signed byte) printf_number_buffer::len#2 ← phi( printf_number_buffer::@14/(signed byte) printf_number_buffer::len#0 printf_number_buffer::@7/(signed byte) printf_number_buffer::len#1 ) + [190] (signed byte) printf_number_buffer::padding#1 ← (signed byte)(byte) printf_number_buffer::format_min_length#3 - (signed byte) printf_number_buffer::len#2 + [191] if((signed byte) printf_number_buffer::padding#1>=(signed byte) 0) goto printf_number_buffer::@21 + to:printf_number_buffer::@1 +printf_number_buffer::@21: scope:[printf_number_buffer] from printf_number_buffer::@13 + [192] phi() + to:printf_number_buffer::@1 +printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer printf_number_buffer::@13 printf_number_buffer::@21 + [193] (signed byte) printf_number_buffer::padding#10 ← phi( printf_number_buffer/(signed byte) 0 printf_number_buffer::@21/(signed byte) printf_number_buffer::padding#1 printf_number_buffer::@13/(signed byte) 0 ) + [194] if((byte) 0!=(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 + to:printf_number_buffer::@17 +printf_number_buffer::@17: scope:[printf_number_buffer] from printf_number_buffer::@1 + [195] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 + to:printf_number_buffer::@16 +printf_number_buffer::@16: scope:[printf_number_buffer] from printf_number_buffer::@17 + [196] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@8 + to:printf_number_buffer::@2 +printf_number_buffer::@8: scope:[printf_number_buffer] from printf_number_buffer::@16 + [197] (byte) printf_padding::length#0 ← (byte)(signed byte) printf_number_buffer::padding#10 + [198] call printf_padding + to:printf_number_buffer::@2 +printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@16 printf_number_buffer::@17 printf_number_buffer::@8 + [199] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 + to:printf_number_buffer::@9 +printf_number_buffer::@9: scope:[printf_number_buffer] from printf_number_buffer::@2 + [200] (byte) printf_char::ch#2 ← (byte) printf_number_buffer::buffer_sign#10 + [201] call printf_char + to:printf_number_buffer::@3 +printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@2 printf_number_buffer::@9 + [202] if((byte) 0==(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 + to:printf_number_buffer::@18 +printf_number_buffer::@18: scope:[printf_number_buffer] from printf_number_buffer::@3 + [203] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@10 + to:printf_number_buffer::@4 +printf_number_buffer::@10: scope:[printf_number_buffer] from printf_number_buffer::@18 + [204] (byte) printf_padding::length#1 ← (byte)(signed byte) printf_number_buffer::padding#10 + [205] call printf_padding + to:printf_number_buffer::@4 +printf_number_buffer::@4: scope:[printf_number_buffer] from printf_number_buffer::@10 printf_number_buffer::@18 printf_number_buffer::@3 + [206] if((byte) 0==(byte) printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 + to:printf_number_buffer::@11 +printf_number_buffer::@11: scope:[printf_number_buffer] from printf_number_buffer::@4 + [207] (byte*) strupr::str#0 ← (byte*) printf_number_buffer::buffer_digits#10 + [208] call strupr + to:printf_number_buffer::@5 +printf_number_buffer::@5: scope:[printf_number_buffer] from printf_number_buffer::@11 printf_number_buffer::@4 + [209] (byte*) printf_str::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 + [210] call printf_str + to:printf_number_buffer::@15 +printf_number_buffer::@15: scope:[printf_number_buffer] from printf_number_buffer::@5 + [211] if((byte) 0==(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return + to:printf_number_buffer::@20 +printf_number_buffer::@20: scope:[printf_number_buffer] from printf_number_buffer::@15 + [212] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return + to:printf_number_buffer::@19 +printf_number_buffer::@19: scope:[printf_number_buffer] from printf_number_buffer::@20 + [213] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@12 + to:printf_number_buffer::@return +printf_number_buffer::@12: scope:[printf_number_buffer] from printf_number_buffer::@19 + [214] (byte) printf_padding::length#2 ← (byte)(signed byte) printf_number_buffer::padding#10 + [215] call printf_padding + to:printf_number_buffer::@return +printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@12 printf_number_buffer::@15 printf_number_buffer::@19 printf_number_buffer::@20 + [216] return + to:@return + +(void()) printf_padding((byte) printf_padding::pad , (byte) printf_padding::length) +printf_padding: scope:[printf_padding] from printf_number_buffer::@10 printf_number_buffer::@12 printf_number_buffer::@8 + [217] (byte) printf_padding::pad#7 ← phi( printf_number_buffer::@10/(byte) '0' printf_number_buffer::@12/(byte) ' ' printf_number_buffer::@8/(byte) ' ' ) + [217] (byte) printf_padding::length#6 ← phi( printf_number_buffer::@10/(byte) printf_padding::length#1 printf_number_buffer::@12/(byte) printf_padding::length#2 printf_number_buffer::@8/(byte) printf_padding::length#0 ) + to:printf_padding::@1 +printf_padding::@1: scope:[printf_padding] from printf_padding printf_padding::@3 + [218] (byte) printf_padding::i#2 ← phi( printf_padding/(byte) 0 printf_padding::@3/(byte) printf_padding::i#1 ) + [219] if((byte) printf_padding::i#2<(byte) printf_padding::length#6) goto printf_padding::@2 + to:printf_padding::@return +printf_padding::@return: scope:[printf_padding] from printf_padding::@1 + [220] return + to:@return +printf_padding::@2: scope:[printf_padding] from printf_padding::@1 + [221] (byte) printf_char::ch#0 ← (byte) printf_padding::pad#7 + [222] call printf_char + to:printf_padding::@3 +printf_padding::@3: scope:[printf_padding] from printf_padding::@2 + [223] (byte) printf_padding::i#1 ← ++ (byte) printf_padding::i#2 + to:printf_padding::@1 + (byte*()) strupr((byte*) strupr::str) strupr: scope:[strupr] from printf_number_buffer::@11 - [166] phi() + [224] phi() to:strupr::@1 strupr::@1: scope:[strupr] from strupr strupr::@3 - [167] (byte*) strupr::src#2 ← phi( strupr/(byte*) strupr::str#0 strupr::@3/(byte*) strupr::src#1 ) - [168] if((byte) 0!=*((byte*) strupr::src#2)) goto strupr::@2 + [225] (byte*) strupr::src#2 ← phi( strupr/(byte*) strupr::str#0 strupr::@3/(byte*) strupr::src#1 ) + [226] if((byte) 0!=*((byte*) strupr::src#2)) goto strupr::@2 to:strupr::@return strupr::@return: scope:[strupr] from strupr::@1 - [169] return + [227] return to:@return strupr::@2: scope:[strupr] from strupr::@1 - [170] (byte) toupper::ch#0 ← *((byte*) strupr::src#2) - [171] call toupper - [172] (byte) toupper::return#3 ← (byte) toupper::return#2 + [228] (byte) toupper::ch#0 ← *((byte*) strupr::src#2) + [229] call toupper + [230] (byte) toupper::return#3 ← (byte) toupper::return#2 to:strupr::@3 strupr::@3: scope:[strupr] from strupr::@2 - [173] (byte~) strupr::$0 ← (byte) toupper::return#3 - [174] *((byte*) strupr::src#2) ← (byte~) strupr::$0 - [175] (byte*) strupr::src#1 ← ++ (byte*) strupr::src#2 + [231] (byte~) strupr::$0 ← (byte) toupper::return#3 + [232] *((byte*) strupr::src#2) ← (byte~) strupr::$0 + [233] (byte*) strupr::src#1 ← ++ (byte*) strupr::src#2 to:strupr::@1 (byte()) toupper((byte) toupper::ch) toupper: scope:[toupper] from strupr::@2 - [176] if((byte) toupper::ch#0<(byte) 'a') goto toupper::@return + [234] if((byte) toupper::ch#0<(byte) 'a') goto toupper::@return to:toupper::@2 toupper::@2: scope:[toupper] from toupper - [177] if((byte) toupper::ch#0<=(byte) 'z') goto toupper::@1 + [235] if((byte) toupper::ch#0<=(byte) 'z') goto toupper::@1 to:toupper::@return toupper::@1: scope:[toupper] from toupper::@2 - [178] (byte) toupper::return#0 ← (byte) toupper::ch#0 + (byte) 'A'-(byte) 'a' + [236] (byte) toupper::return#0 ← (byte) toupper::ch#0 + (byte) 'A'-(byte) 'a' to:toupper::@return toupper::@return: scope:[toupper] from toupper toupper::@1 toupper::@2 - [179] (byte) toupper::return#2 ← phi( toupper::@1/(byte) toupper::return#0 toupper/(byte) toupper::ch#0 toupper::@2/(byte) toupper::ch#0 ) - [180] return + [237] (byte) toupper::return#2 ← phi( toupper::@1/(byte) toupper::return#0 toupper/(byte) toupper::ch#0 toupper::@2/(byte) toupper::ch#0 ) + [238] return to:@return (word()) strlen((byte*) strlen::str) strlen: scope:[strlen] from printf_number_buffer::@6 - [181] phi() + [239] phi() to:strlen::@1 strlen::@1: scope:[strlen] from strlen strlen::@2 - [182] (word) strlen::len#2 ← phi( strlen/(word) 0 strlen::@2/(word) strlen::len#1 ) - [182] (byte*) strlen::str#2 ← phi( strlen/(byte*) strlen::str#1 strlen::@2/(byte*) strlen::str#0 ) - [183] if((byte) 0!=*((byte*) strlen::str#2)) goto strlen::@2 + [240] (word) strlen::len#2 ← phi( strlen/(word) 0 strlen::@2/(word) strlen::len#1 ) + [240] (byte*) strlen::str#3 ← phi( strlen/(byte*) strlen::str#1 strlen::@2/(byte*) strlen::str#0 ) + [241] if((byte) 0!=*((byte*) strlen::str#3)) goto strlen::@2 to:strlen::@return strlen::@return: scope:[strlen] from strlen::@1 - [184] return + [242] return to:@return strlen::@2: scope:[strlen] from strlen::@1 - [185] (word) strlen::len#1 ← ++ (word) strlen::len#2 - [186] (byte*) strlen::str#0 ← ++ (byte*) strlen::str#2 + [243] (word) strlen::len#1 ← ++ (word) strlen::len#2 + [244] (byte*) strlen::str#0 ← ++ (byte*) strlen::str#3 to:strlen::@1 (void()) uctoa((byte) uctoa::value , (byte*) uctoa::buffer , (byte) uctoa::radix) uctoa: scope:[uctoa] from printf_uchar::@1 - [187] phi() + [245] phi() to:uctoa::@1 uctoa::@1: scope:[uctoa] from uctoa uctoa::@4 - [188] (byte*) uctoa::buffer#11 ← phi( uctoa::@4/(byte*) uctoa::buffer#14 uctoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) - [188] (byte) uctoa::started#2 ← phi( uctoa::@4/(byte) uctoa::started#4 uctoa/(byte) 0 ) - [188] (byte) uctoa::value#2 ← phi( uctoa::@4/(byte) uctoa::value#6 uctoa/(byte) uctoa::value#1 ) - [188] (byte) uctoa::digit#2 ← phi( uctoa::@4/(byte) uctoa::digit#1 uctoa/(byte) 0 ) - [189] if((byte) uctoa::digit#2<(byte) 2-(byte) 1) goto uctoa::@2 + [246] (byte*) uctoa::buffer#11 ← phi( uctoa::@4/(byte*) uctoa::buffer#14 uctoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) + [246] (byte) uctoa::started#2 ← phi( uctoa::@4/(byte) uctoa::started#4 uctoa/(byte) 0 ) + [246] (byte) uctoa::value#2 ← phi( uctoa::@4/(byte) uctoa::value#6 uctoa/(byte) uctoa::value#1 ) + [246] (byte) uctoa::digit#2 ← phi( uctoa::@4/(byte) uctoa::digit#1 uctoa/(byte) 0 ) + [247] if((byte) uctoa::digit#2<(byte) 2-(byte) 1) goto uctoa::@2 to:uctoa::@3 uctoa::@3: scope:[uctoa] from uctoa::@1 - [190] *((byte*) uctoa::buffer#11) ← *((const byte*) DIGITS + (byte) uctoa::value#2) - [191] (byte*) uctoa::buffer#3 ← ++ (byte*) uctoa::buffer#11 - [192] *((byte*) uctoa::buffer#3) ← (byte) 0 + [248] *((byte*) uctoa::buffer#11) ← *((const byte*) DIGITS + (byte) uctoa::value#2) + [249] (byte*) uctoa::buffer#3 ← ++ (byte*) uctoa::buffer#11 + [250] *((byte*) uctoa::buffer#3) ← (byte) 0 to:uctoa::@return uctoa::@return: scope:[uctoa] from uctoa::@3 - [193] return + [251] return to:@return uctoa::@2: scope:[uctoa] from uctoa::@1 - [194] (byte) uctoa::digit_value#0 ← *((const byte*) RADIX_HEXADECIMAL_VALUES_CHAR + (byte) uctoa::digit#2) - [195] if((byte) 0!=(byte) uctoa::started#2) goto uctoa::@5 + [252] (byte) uctoa::digit_value#0 ← *((const byte*) RADIX_HEXADECIMAL_VALUES_CHAR + (byte) uctoa::digit#2) + [253] if((byte) 0!=(byte) uctoa::started#2) goto uctoa::@5 to:uctoa::@7 uctoa::@7: scope:[uctoa] from uctoa::@2 - [196] if((byte) uctoa::value#2>=(byte) uctoa::digit_value#0) goto uctoa::@5 + [254] if((byte) uctoa::value#2>=(byte) uctoa::digit_value#0) goto uctoa::@5 to:uctoa::@4 uctoa::@4: scope:[uctoa] from uctoa::@6 uctoa::@7 - [197] (byte*) uctoa::buffer#14 ← phi( uctoa::@7/(byte*) uctoa::buffer#11 uctoa::@6/(byte*) uctoa::buffer#4 ) - [197] (byte) uctoa::started#4 ← phi( uctoa::@7/(byte) uctoa::started#2 uctoa::@6/(byte) 1 ) - [197] (byte) uctoa::value#6 ← phi( uctoa::@7/(byte) uctoa::value#2 uctoa::@6/(byte) uctoa::value#0 ) - [198] (byte) uctoa::digit#1 ← ++ (byte) uctoa::digit#2 + [255] (byte*) uctoa::buffer#14 ← phi( uctoa::@7/(byte*) uctoa::buffer#11 uctoa::@6/(byte*) uctoa::buffer#4 ) + [255] (byte) uctoa::started#4 ← phi( uctoa::@7/(byte) uctoa::started#2 uctoa::@6/(byte) 1 ) + [255] (byte) uctoa::value#6 ← phi( uctoa::@7/(byte) uctoa::value#2 uctoa::@6/(byte) uctoa::value#0 ) + [256] (byte) uctoa::digit#1 ← ++ (byte) uctoa::digit#2 to:uctoa::@1 uctoa::@5: scope:[uctoa] from uctoa::@2 uctoa::@7 - [199] (byte*) uctoa_append::buffer#0 ← (byte*) uctoa::buffer#11 - [200] (byte) uctoa_append::value#0 ← (byte) uctoa::value#2 - [201] (byte) uctoa_append::sub#0 ← (byte) uctoa::digit_value#0 - [202] call uctoa_append - [203] (byte) uctoa_append::return#0 ← (byte) uctoa_append::value#2 + [257] (byte*) uctoa_append::buffer#0 ← (byte*) uctoa::buffer#11 + [258] (byte) uctoa_append::value#0 ← (byte) uctoa::value#2 + [259] (byte) uctoa_append::sub#0 ← (byte) uctoa::digit_value#0 + [260] call uctoa_append + [261] (byte) uctoa_append::return#0 ← (byte) uctoa_append::value#2 to:uctoa::@6 uctoa::@6: scope:[uctoa] from uctoa::@5 - [204] (byte) uctoa::value#0 ← (byte) uctoa_append::return#0 - [205] (byte*) uctoa::buffer#4 ← ++ (byte*) uctoa::buffer#11 + [262] (byte) uctoa::value#0 ← (byte) uctoa_append::return#0 + [263] (byte*) uctoa::buffer#4 ← ++ (byte*) uctoa::buffer#11 to:uctoa::@4 (byte()) uctoa_append((byte*) uctoa_append::buffer , (byte) uctoa_append::value , (byte) uctoa_append::sub) uctoa_append: scope:[uctoa_append] from uctoa::@5 - [206] phi() + [264] phi() to:uctoa_append::@1 uctoa_append::@1: scope:[uctoa_append] from uctoa_append uctoa_append::@2 - [207] (byte) uctoa_append::digit#2 ← phi( uctoa_append/(byte) 0 uctoa_append::@2/(byte) uctoa_append::digit#1 ) - [207] (byte) uctoa_append::value#2 ← phi( uctoa_append/(byte) uctoa_append::value#0 uctoa_append::@2/(byte) uctoa_append::value#1 ) - [208] if((byte) uctoa_append::value#2>=(byte) uctoa_append::sub#0) goto uctoa_append::@2 + [265] (byte) uctoa_append::digit#2 ← phi( uctoa_append/(byte) 0 uctoa_append::@2/(byte) uctoa_append::digit#1 ) + [265] (byte) uctoa_append::value#2 ← phi( uctoa_append/(byte) uctoa_append::value#0 uctoa_append::@2/(byte) uctoa_append::value#1 ) + [266] if((byte) uctoa_append::value#2>=(byte) uctoa_append::sub#0) goto uctoa_append::@2 to:uctoa_append::@3 uctoa_append::@3: scope:[uctoa_append] from uctoa_append::@1 - [209] *((byte*) uctoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) uctoa_append::digit#2) + [267] *((byte*) uctoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) uctoa_append::digit#2) to:uctoa_append::@return uctoa_append::@return: scope:[uctoa_append] from uctoa_append::@3 - [210] return + [268] return to:@return uctoa_append::@2: scope:[uctoa_append] from uctoa_append::@1 - [211] (byte) uctoa_append::digit#1 ← ++ (byte) uctoa_append::digit#2 - [212] (byte) uctoa_append::value#1 ← (byte) uctoa_append::value#2 - (byte) uctoa_append::sub#0 + [269] (byte) uctoa_append::digit#1 ← ++ (byte) uctoa_append::digit#2 + [270] (byte) uctoa_append::value#1 ← (byte) uctoa_append::value#2 - (byte) uctoa_append::sub#0 to:uctoa_append::@1 (void()) printf_ulong((dword) printf_ulong::uvalue , (byte) printf_ulong::format_min_length , (byte) printf_ulong::format_justify_left , (byte) printf_ulong::format_sign_always , (byte) printf_ulong::format_zero_padding , (byte) printf_ulong::format_upper_case , (byte) printf_ulong::format_radix) printf_ulong: scope:[printf_ulong] from print::@11 - [213] phi() + [271] phi() to:printf_ulong::@1 printf_ulong::@1: scope:[printf_ulong] from printf_ulong - [214] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 - [215] (dword) ultoa::value#1 ← (dword) printf_ulong::uvalue#0 - [216] call ultoa + [272] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 + [273] (dword) ultoa::value#1 ← (dword) printf_ulong::uvalue#0 + [274] call ultoa to:printf_ulong::@2 printf_ulong::@2: scope:[printf_ulong] from printf_ulong::@1 - [217] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) - [218] call printf_number_buffer + [275] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) + [276] call printf_number_buffer to:printf_ulong::@return printf_ulong::@return: scope:[printf_ulong] from printf_ulong::@2 - [219] return + [277] return to:@return (void()) ultoa((dword) ultoa::value , (byte*) ultoa::buffer , (byte) ultoa::radix) ultoa: scope:[ultoa] from printf_ulong::@1 - [220] phi() + [278] phi() to:ultoa::@1 ultoa::@1: scope:[ultoa] from ultoa ultoa::@4 - [221] (byte*) ultoa::buffer#11 ← phi( ultoa::@4/(byte*) ultoa::buffer#14 ultoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) - [221] (byte) ultoa::started#2 ← phi( ultoa::@4/(byte) ultoa::started#4 ultoa/(byte) 0 ) - [221] (dword) ultoa::value#2 ← phi( ultoa::@4/(dword) ultoa::value#6 ultoa/(dword) ultoa::value#1 ) - [221] (byte) ultoa::digit#2 ← phi( ultoa::@4/(byte) ultoa::digit#1 ultoa/(byte) 0 ) - [222] if((byte) ultoa::digit#2<(const byte) ultoa::max_digits#1-(byte) 1) goto ultoa::@2 + [279] (byte*) ultoa::buffer#11 ← phi( ultoa::@4/(byte*) ultoa::buffer#14 ultoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) + [279] (byte) ultoa::started#2 ← phi( ultoa::@4/(byte) ultoa::started#4 ultoa/(byte) 0 ) + [279] (dword) ultoa::value#2 ← phi( ultoa::@4/(dword) ultoa::value#6 ultoa/(dword) ultoa::value#1 ) + [279] (byte) ultoa::digit#2 ← phi( ultoa::@4/(byte) ultoa::digit#1 ultoa/(byte) 0 ) + [280] if((byte) ultoa::digit#2<(const byte) ultoa::max_digits#1-(byte) 1) goto ultoa::@2 to:ultoa::@3 ultoa::@3: scope:[ultoa] from ultoa::@1 - [223] (byte~) ultoa::$11 ← (byte)(dword) ultoa::value#2 - [224] *((byte*) ultoa::buffer#11) ← *((const byte*) DIGITS + (byte~) ultoa::$11) - [225] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 - [226] *((byte*) ultoa::buffer#3) ← (byte) 0 + [281] (byte~) ultoa::$11 ← (byte)(dword) ultoa::value#2 + [282] *((byte*) ultoa::buffer#11) ← *((const byte*) DIGITS + (byte~) ultoa::$11) + [283] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 + [284] *((byte*) ultoa::buffer#3) ← (byte) 0 to:ultoa::@return ultoa::@return: scope:[ultoa] from ultoa::@3 - [227] return + [285] return to:@return ultoa::@2: scope:[ultoa] from ultoa::@1 - [228] (byte~) ultoa::$10 ← (byte) ultoa::digit#2 << (byte) 2 - [229] (dword) ultoa::digit_value#0 ← *((const dword*) RADIX_DECIMAL_VALUES_LONG + (byte~) ultoa::$10) - [230] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 + [286] (byte~) ultoa::$10 ← (byte) ultoa::digit#2 << (byte) 2 + [287] (dword) ultoa::digit_value#0 ← *((const dword*) RADIX_DECIMAL_VALUES_LONG + (byte~) ultoa::$10) + [288] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 to:ultoa::@7 ultoa::@7: scope:[ultoa] from ultoa::@2 - [231] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 + [289] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 to:ultoa::@4 ultoa::@4: scope:[ultoa] from ultoa::@6 ultoa::@7 - [232] (byte*) ultoa::buffer#14 ← phi( ultoa::@7/(byte*) ultoa::buffer#11 ultoa::@6/(byte*) ultoa::buffer#4 ) - [232] (byte) ultoa::started#4 ← phi( ultoa::@7/(byte) ultoa::started#2 ultoa::@6/(byte) 1 ) - [232] (dword) ultoa::value#6 ← phi( ultoa::@7/(dword) ultoa::value#2 ultoa::@6/(dword) ultoa::value#0 ) - [233] (byte) ultoa::digit#1 ← ++ (byte) ultoa::digit#2 + [290] (byte*) ultoa::buffer#14 ← phi( ultoa::@7/(byte*) ultoa::buffer#11 ultoa::@6/(byte*) ultoa::buffer#4 ) + [290] (byte) ultoa::started#4 ← phi( ultoa::@7/(byte) ultoa::started#2 ultoa::@6/(byte) 1 ) + [290] (dword) ultoa::value#6 ← phi( ultoa::@7/(dword) ultoa::value#2 ultoa::@6/(dword) ultoa::value#0 ) + [291] (byte) ultoa::digit#1 ← ++ (byte) ultoa::digit#2 to:ultoa::@1 ultoa::@5: scope:[ultoa] from ultoa::@2 ultoa::@7 - [234] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 - [235] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 - [236] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 - [237] call ultoa_append - [238] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 + [292] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 + [293] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 + [294] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 + [295] call ultoa_append + [296] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 to:ultoa::@6 ultoa::@6: scope:[ultoa] from ultoa::@5 - [239] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 - [240] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#11 + [297] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 + [298] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#11 to:ultoa::@4 (dword()) ultoa_append((byte*) ultoa_append::buffer , (dword) ultoa_append::value , (dword) ultoa_append::sub) ultoa_append: scope:[ultoa_append] from ultoa::@5 - [241] phi() + [299] phi() to:ultoa_append::@1 ultoa_append::@1: scope:[ultoa_append] from ultoa_append ultoa_append::@2 - [242] (byte) ultoa_append::digit#2 ← phi( ultoa_append/(byte) 0 ultoa_append::@2/(byte) ultoa_append::digit#1 ) - [242] (dword) ultoa_append::value#2 ← phi( ultoa_append/(dword) ultoa_append::value#0 ultoa_append::@2/(dword) ultoa_append::value#1 ) - [243] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 + [300] (byte) ultoa_append::digit#2 ← phi( ultoa_append/(byte) 0 ultoa_append::@2/(byte) ultoa_append::digit#1 ) + [300] (dword) ultoa_append::value#2 ← phi( ultoa_append/(dword) ultoa_append::value#0 ultoa_append::@2/(dword) ultoa_append::value#1 ) + [301] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 to:ultoa_append::@3 ultoa_append::@3: scope:[ultoa_append] from ultoa_append::@1 - [244] *((byte*) ultoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) ultoa_append::digit#2) + [302] *((byte*) ultoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) ultoa_append::digit#2) to:ultoa_append::@return ultoa_append::@return: scope:[ultoa_append] from ultoa_append::@3 - [245] return + [303] return to:@return ultoa_append::@2: scope:[ultoa_append] from ultoa_append::@1 - [246] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 - [247] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 + [304] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 + [305] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 to:ultoa_append::@1 (byte()) legal((byte) legal::row , (byte) legal::column) -legal: scope:[legal] from queens::@7 - [248] phi() +legal: scope:[legal] from queens::@5 + [306] phi() to:legal::@1 legal::@1: scope:[legal] from legal legal::@3 - [249] (byte) legal::i#2 ← phi( legal/(byte) 1 legal::@3/(byte) legal::i#1 ) - [250] (byte~) legal::$0 ← (byte) legal::row#0 - (byte) 1 - [251] if((byte) legal::i#2<=(byte~) legal::$0) goto legal::@2 + [307] (byte) legal::i#10 ← phi( legal/(byte) 1 legal::@3/(byte) legal::i#1 ) + [308] (byte~) legal::$0 ← (byte) legal::row#0 - (byte) 1 + [309] if((byte) legal::i#10<=(byte~) legal::$0) goto legal::@2 to:legal::@return -legal::@return: scope:[legal] from legal::@1 legal::@2 legal::@6 - [252] (byte) legal::return#4 ← phi( legal::@1/(byte) 1 legal::@2/(byte) 0 legal::@6/(byte) 0 ) - [253] return +legal::@return: scope:[legal] from legal::@1 legal::@2 legal::@5 + [310] (byte) legal::return#4 ← phi( legal::@1/(byte) 1 legal::@2/(byte) 0 legal::@5/(byte) 0 ) + [311] return to:@return legal::@2: scope:[legal] from legal::@1 - [254] if(*((const byte*) board + (byte) legal::i#2)==(byte) legal::column#0) goto legal::@return + [312] if(*((const byte*) board + (byte) legal::i#10)==(byte) legal::column#0) goto legal::@return to:legal::@4 legal::@4: scope:[legal] from legal::@2 - [255] (byte) diff::a#0 ← *((const byte*) board + (byte) legal::i#2) - [256] (byte) diff::b#0 ← (byte) legal::column#0 - [257] call diff - [258] (byte) diff::return#0 ← (byte) diff::return#4 + [313] (byte) legal::diff1_a#0 ← *((const byte*) board + (byte) legal::i#10) + to:legal::diff1 +legal::diff1: scope:[legal] from legal::@4 + [314] if((byte) legal::diff1_a#0<(byte) legal::column#0) goto legal::diff1_@1 + to:legal::diff1_@3 +legal::diff1_@3: scope:[legal] from legal::diff1 + [315] (byte) legal::diff1_return#1 ← (byte) legal::diff1_a#0 - (byte) legal::column#0 + to:legal::diff1_@return +legal::diff1_@return: scope:[legal] from legal::diff1_@1 legal::diff1_@3 + [316] (byte) legal::diff1_return#2 ← phi( legal::diff1_@1/(byte) legal::diff1_return#0 legal::diff1_@3/(byte) legal::diff1_return#1 ) + to:legal::diff2 +legal::diff2: scope:[legal] from legal::diff1_@return + [317] if((byte) legal::i#10<(byte) legal::row#0) goto legal::diff2_@1 + to:legal::diff2_@3 +legal::diff2_@3: scope:[legal] from legal::diff2 + [318] (byte) legal::diff2_return#1 ← (byte) legal::i#10 - (byte) legal::row#0 + to:legal::diff2_@return +legal::diff2_@return: scope:[legal] from legal::diff2_@1 legal::diff2_@3 + [319] (byte) legal::diff2_return#2 ← phi( legal::diff2_@1/(byte) legal::diff2_return#0 legal::diff2_@3/(byte) legal::diff2_return#1 ) to:legal::@5 -legal::@5: scope:[legal] from legal::@4 - [259] (byte~) legal::$3 ← (byte) diff::return#0 - [260] (byte) diff::a#1 ← (byte) legal::i#2 - [261] (byte) diff::b#1 ← (byte) legal::row#0 - [262] call diff - [263] (byte) diff::return#1 ← (byte) diff::return#4 - to:legal::@6 -legal::@6: scope:[legal] from legal::@5 - [264] (byte~) legal::$4 ← (byte) diff::return#1 - [265] if((byte~) legal::$3!=(byte~) legal::$4) goto legal::@3 +legal::@5: scope:[legal] from legal::diff2_@return + [320] if((byte) legal::diff1_return#2!=(byte) legal::diff2_return#2) goto legal::@3 to:legal::@return -legal::@3: scope:[legal] from legal::@6 - [266] (byte) legal::i#1 ← ++ (byte) legal::i#2 +legal::@3: scope:[legal] from legal::@5 + [321] (byte) legal::i#1 ← ++ (byte) legal::i#10 to:legal::@1 +legal::diff2_@1: scope:[legal] from legal::diff2 + [322] (byte) legal::diff2_return#0 ← (byte) legal::row#0 - (byte) legal::i#10 + to:legal::diff2_@return +legal::diff1_@1: scope:[legal] from legal::diff1 + [323] (byte) legal::diff1_return#0 ← (byte) legal::column#0 - (byte) legal::diff1_a#0 + to:legal::diff1_@return -(byte()) diff((byte) diff::a , (byte) diff::b) -diff: scope:[diff] from legal::@4 legal::@5 - [267] (byte) diff::b#2 ← phi( legal::@4/(byte) diff::b#0 legal::@5/(byte) diff::b#1 ) - [267] (byte) diff::a#2 ← phi( legal::@4/(byte) diff::a#0 legal::@5/(byte) diff::a#1 ) - [268] if((byte) diff::a#2<(byte) diff::b#2) goto diff::@1 - to:diff::@2 -diff::@2: scope:[diff] from diff - [269] (byte) diff::return#3 ← (byte) diff::a#2 - (byte) diff::b#2 - to:diff::@return -diff::@return: scope:[diff] from diff::@1 diff::@2 - [270] (byte) diff::return#4 ← phi( diff::@1/(byte) diff::return#2 diff::@2/(byte) diff::return#3 ) - [271] return +(void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) +tod_init: scope:[tod_init] from main::@4 + [324] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (byte) $80 + [325] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (byte) $7f + [326] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) ← (byte) tod_init::tod_HOURS#0 + [327] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) ← (byte) tod_init::tod_MIN#0 + [328] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) ← (byte) tod_init::tod_SEC#0 + [329] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) ← (byte) tod_init::tod_TENTHS#0 + to:tod_init::@return +tod_init::@return: scope:[tod_init] from tod_init + [330] return to:@return -diff::@1: scope:[diff] from diff - [272] (byte) diff::return#2 ← (byte) diff::b#2 - (byte) diff::a#2 - to:diff::@return (void()) printf_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix) printf_uint: scope:[printf_uint] from main::@3 - [273] phi() + [331] phi() to:printf_uint::@1 printf_uint::@1: scope:[printf_uint] from printf_uint - [274] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 - [275] call utoa + [332] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 + [333] call utoa to:printf_uint::@2 printf_uint::@2: scope:[printf_uint] from printf_uint::@1 - [276] (byte) printf_number_buffer::buffer_sign#1 ← *((byte*)&(struct printf_buffer_number) printf_buffer) - [277] call printf_number_buffer + [334] (byte) printf_number_buffer::buffer_sign#1 ← *((byte*)&(struct printf_buffer_number) printf_buffer) + [335] call printf_number_buffer to:printf_uint::@return printf_uint::@return: scope:[printf_uint] from printf_uint::@2 - [278] return + [336] return to:@return (void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix) utoa: scope:[utoa] from printf_uint::@1 - [279] phi() + [337] phi() to:utoa::@1 utoa::@1: scope:[utoa] from utoa utoa::@4 - [280] (byte*) utoa::buffer#11 ← phi( utoa::@4/(byte*) utoa::buffer#14 utoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) - [280] (byte) utoa::started#2 ← phi( utoa::@4/(byte) utoa::started#4 utoa/(byte) 0 ) - [280] (word) utoa::value#2 ← phi( utoa::@4/(word) utoa::value#6 utoa/(const word) printf_uint::uvalue#0 ) - [280] (byte) utoa::digit#2 ← phi( utoa::@4/(byte) utoa::digit#1 utoa/(byte) 0 ) - [281] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 + [338] (byte*) utoa::buffer#11 ← phi( utoa::@4/(byte*) utoa::buffer#14 utoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) + [338] (byte) utoa::started#2 ← phi( utoa::@4/(byte) utoa::started#4 utoa/(byte) 0 ) + [338] (word) utoa::value#2 ← phi( utoa::@4/(word) utoa::value#6 utoa/(const word) printf_uint::uvalue#0 ) + [338] (byte) utoa::digit#2 ← phi( utoa::@4/(byte) utoa::digit#1 utoa/(byte) 0 ) + [339] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 to:utoa::@3 utoa::@3: scope:[utoa] from utoa::@1 - [282] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 - [283] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) - [284] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 - [285] *((byte*) utoa::buffer#3) ← (byte) 0 + [340] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 + [341] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) + [342] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 + [343] *((byte*) utoa::buffer#3) ← (byte) 0 to:utoa::@return utoa::@return: scope:[utoa] from utoa::@3 - [286] return + [344] return to:@return utoa::@2: scope:[utoa] from utoa::@1 - [287] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 - [288] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) - [289] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 + [345] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 + [346] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) + [347] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 to:utoa::@7 utoa::@7: scope:[utoa] from utoa::@2 - [290] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 + [348] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 to:utoa::@4 utoa::@4: scope:[utoa] from utoa::@6 utoa::@7 - [291] (byte*) utoa::buffer#14 ← phi( utoa::@7/(byte*) utoa::buffer#11 utoa::@6/(byte*) utoa::buffer#4 ) - [291] (byte) utoa::started#4 ← phi( utoa::@7/(byte) utoa::started#2 utoa::@6/(byte) 1 ) - [291] (word) utoa::value#6 ← phi( utoa::@7/(word) utoa::value#2 utoa::@6/(word) utoa::value#0 ) - [292] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 + [349] (byte*) utoa::buffer#14 ← phi( utoa::@7/(byte*) utoa::buffer#11 utoa::@6/(byte*) utoa::buffer#4 ) + [349] (byte) utoa::started#4 ← phi( utoa::@7/(byte) utoa::started#2 utoa::@6/(byte) 1 ) + [349] (word) utoa::value#6 ← phi( utoa::@7/(word) utoa::value#2 utoa::@6/(word) utoa::value#0 ) + [350] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 to:utoa::@1 utoa::@5: scope:[utoa] from utoa::@2 utoa::@7 - [293] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 - [294] (word) utoa_append::value#0 ← (word) utoa::value#2 - [295] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 - [296] call utoa_append - [297] (word) utoa_append::return#0 ← (word) utoa_append::value#2 + [351] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 + [352] (word) utoa_append::value#0 ← (word) utoa::value#2 + [353] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 + [354] call utoa_append + [355] (word) utoa_append::return#0 ← (word) utoa_append::value#2 to:utoa::@6 utoa::@6: scope:[utoa] from utoa::@5 - [298] (word) utoa::value#0 ← (word) utoa_append::return#0 - [299] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 + [356] (word) utoa::value#0 ← (word) utoa_append::return#0 + [357] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 to:utoa::@4 (word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub) utoa_append: scope:[utoa_append] from utoa::@5 - [300] phi() + [358] phi() to:utoa_append::@1 utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2 - [301] (byte) utoa_append::digit#2 ← phi( utoa_append/(byte) 0 utoa_append::@2/(byte) utoa_append::digit#1 ) - [301] (word) utoa_append::value#2 ← phi( utoa_append/(word) utoa_append::value#0 utoa_append::@2/(word) utoa_append::value#1 ) - [302] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 + [359] (byte) utoa_append::digit#2 ← phi( utoa_append/(byte) 0 utoa_append::@2/(byte) utoa_append::digit#1 ) + [359] (word) utoa_append::value#2 ← phi( utoa_append/(word) utoa_append::value#0 utoa_append::@2/(word) utoa_append::value#1 ) + [360] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 to:utoa_append::@3 utoa_append::@3: scope:[utoa_append] from utoa_append::@1 - [303] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) + [361] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) to:utoa_append::@return utoa_append::@return: scope:[utoa_append] from utoa_append::@3 - [304] return + [362] return to:@return utoa_append::@2: scope:[utoa_append] from utoa_append::@1 - [305] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 - [306] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 + [363] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 + [364] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 to:utoa_append::@1 (void()) printf_cls() printf_cls: scope:[printf_cls] from main - [307] phi() - [308] call memset + [365] phi() + [366] call memset to:printf_cls::@1 printf_cls::@1: scope:[printf_cls] from printf_cls - [309] (byte*) printf_cursor_ptr ← (byte*) 1024 - [310] (byte) printf_cursor_x ← (byte) 0 - [311] (byte) printf_cursor_y ← (byte) 0 + [367] (byte*) printf_cursor_ptr ← (byte*) 1024 + [368] (byte) printf_cursor_x ← (byte) 0 + [369] (byte) printf_cursor_y ← (byte) 0 to:printf_cls::@return printf_cls::@return: scope:[printf_cls] from printf_cls::@1 - [312] return + [370] return to:@return diff --git a/src/test/ref/examples/eightqueens/eightqueens.log b/src/test/ref/examples/eightqueens/eightqueens.log index 1146b722f..3c485bb3f 100644 --- a/src/test/ref/examples/eightqueens/eightqueens.log +++ b/src/test/ref/examples/eightqueens/eightqueens.log @@ -3,6 +3,7 @@ Fixing struct type size struct printf_buffer_number to 12 Fixing struct type SIZE_OF struct printf_buffer_number to 12 Fixing struct type SIZE_OF struct printf_buffer_number to 12 Added struct type cast to parameter value list call printf_uint (number) 8 (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) DECIMAL } +Added struct type cast to parameter value list call printf_string (byte*~) main::$6 (struct printf_format_string){ (byte) 0, (byte) 0 } Added struct type cast to parameter value list call printf_ulong (dword) count (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) DECIMAL } Added struct type cast to parameter value list call printf_uchar (byte) print::i (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) HEXADECIMAL } Added struct type cast to parameter value list call printf_uchar (byte) print::i1 (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) HEXADECIMAL } @@ -61,6 +62,36 @@ Converted struct value to member variables (struct printf_format_number) printf_ Created struct value member variable (byte) printf_string::format_min_length Created struct value member variable (byte) printf_string::format_justify_left Converted struct value to member variables (struct printf_format_string) printf_string::format +Created struct value member variable (byte) tod_init::tod_TENTHS +Created struct value member variable (byte) tod_init::tod_SEC +Created struct value member variable (byte) tod_init::tod_MIN +Created struct value member variable (byte) tod_init::tod_HOURS +Converted struct value to member variables (struct TIME_OF_DAY) tod_init::tod +Created struct value member variable (byte) tod_read::return_TENTHS +Created struct value member variable (byte) tod_read::return_SEC +Created struct value member variable (byte) tod_read::return_MIN +Created struct value member variable (byte) tod_read::return_HOURS +Converted struct value to member variables (struct TIME_OF_DAY) tod_read::return +Created struct value member variable (byte) tod_read::tod_TENTHS +Created struct value member variable (byte) tod_read::tod_SEC +Created struct value member variable (byte) tod_read::tod_MIN +Created struct value member variable (byte) tod_read::tod_HOURS +Converted struct value to member variables (struct TIME_OF_DAY) tod_read::tod +Created struct value member variable (byte) tod_str::tod_TENTHS +Created struct value member variable (byte) tod_str::tod_SEC +Created struct value member variable (byte) tod_str::tod_MIN +Created struct value member variable (byte) tod_str::tod_HOURS +Converted struct value to member variables (struct TIME_OF_DAY) tod_str::tod +Created struct value member variable (byte) main::tod_TENTHS +Created struct value member variable (byte) main::tod_SEC +Created struct value member variable (byte) main::tod_MIN +Created struct value member variable (byte) main::tod_HOURS +Converted struct value to member variables (struct TIME_OF_DAY) main::tod +Created struct value member variable (byte~) main::$5_TENTHS +Created struct value member variable (byte~) main::$5_SEC +Created struct value member variable (byte~) main::$5_MIN +Created struct value member variable (byte~) main::$5_HOURS +Converted struct value to member variables (struct TIME_OF_DAY~) main::$5 Converted procedure struct value parameter to member unwinding (void()) printf_slong((signed dword) printf_slong::value , (byte) printf_slong::format_min_length , (byte) printf_slong::format_justify_left , (byte) printf_slong::format_sign_always , (byte) printf_slong::format_zero_padding , (byte) printf_slong::format_upper_case , (byte) printf_slong::format_radix) Converted procedure struct value parameter to member unwinding (void()) printf_ulong((dword) printf_ulong::uvalue , (byte) printf_ulong::format_min_length , (byte) printf_ulong::format_justify_left , (byte) printf_ulong::format_sign_always , (byte) printf_ulong::format_zero_padding , (byte) printf_ulong::format_upper_case , (byte) printf_ulong::format_radix) Converted procedure struct value parameter to member unwinding (void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) @@ -69,13 +100,40 @@ Converted procedure struct value parameter to member unwinding (void()) printf_s Converted procedure struct value parameter to member unwinding (void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) Converted procedure struct value parameter to member unwinding (void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) Converted procedure struct value parameter to member unwinding (void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) +Converted procedure struct value parameter to member unwinding (void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) +Converted procedure struct value parameter to member unwinding (byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) Converted call struct value parameter to member unwinding (void~) printf_slong::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_slong::format_min_length (byte) printf_slong::format_justify_left (byte) printf_slong::format_sign_always (byte) printf_slong::format_zero_padding (byte) printf_slong::format_upper_case (byte) printf_slong::format_radix Converted call struct value parameter to member unwinding (void~) printf_ulong::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_ulong::format_min_length (byte) printf_ulong::format_justify_left (byte) printf_ulong::format_sign_always (byte) printf_ulong::format_zero_padding (byte) printf_ulong::format_upper_case (byte) printf_ulong::format_radix Converted call struct value parameter to member unwinding (void~) printf_sint::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_sint::format_min_length (byte) printf_sint::format_justify_left (byte) printf_sint::format_sign_always (byte) printf_sint::format_zero_padding (byte) printf_sint::format_upper_case (byte) printf_sint::format_radix Converted call struct value parameter to member unwinding (void~) printf_uint::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uint::format_min_length (byte) printf_uint::format_justify_left (byte) printf_uint::format_sign_always (byte) printf_uint::format_zero_padding (byte) printf_uint::format_upper_case (byte) printf_uint::format_radix Converted call struct value parameter to member unwinding (void~) printf_schar::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_schar::format_min_length (byte) printf_schar::format_justify_left (byte) printf_schar::format_sign_always (byte) printf_schar::format_zero_padding (byte) printf_schar::format_upper_case (byte) printf_schar::format_radix Converted call struct value parameter to member unwinding (void~) printf_uchar::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uchar::format_min_length (byte) printf_uchar::format_justify_left (byte) printf_uchar::format_sign_always (byte) printf_uchar::format_zero_padding (byte) printf_uchar::format_upper_case (byte) printf_uchar::format_radix +Unwinding value copy (struct TIME_OF_DAY) tod_read::tod ← (struct TIME_OF_DAY){ (byte) tod_read::tenths, (byte) tod_read::secs, (byte) tod_read::mins, (byte) tod_read::hours } +Adding value simple copy (byte) tod_read::tod_TENTHS ← (byte) tod_read::tenths +Adding value simple copy (byte) tod_read::tod_SEC ← (byte) tod_read::secs +Adding value simple copy (byte) tod_read::tod_MIN ← (byte) tod_read::mins +Adding value simple copy (byte) tod_read::tod_HOURS ← (byte) tod_read::hours +Unwinding value copy (struct TIME_OF_DAY) tod_read::return ← (struct TIME_OF_DAY) tod_read::tod +Adding value simple copy (byte) tod_read::return_TENTHS ← (byte) tod_read::tod_TENTHS +Adding value simple copy (byte) tod_read::return_SEC ← (byte) tod_read::tod_SEC +Adding value simple copy (byte) tod_read::return_MIN ← (byte) tod_read::tod_MIN +Adding value simple copy (byte) tod_read::return_HOURS ← (byte) tod_read::tod_HOURS +Unwinding value copy (struct TIME_OF_DAY) tod_read::return ← (struct TIME_OF_DAY) tod_read::return +Adding value simple copy (byte) tod_read::return_TENTHS ← (byte) tod_read::return_TENTHS +Adding value simple copy (byte) tod_read::return_SEC ← (byte) tod_read::return_SEC +Adding value simple copy (byte) tod_read::return_MIN ← (byte) tod_read::return_MIN +Adding value simple copy (byte) tod_read::return_HOURS ← (byte) tod_read::return_HOURS +Converted procedure struct return value to member unwinding return { (byte) tod_read::return_TENTHS, (byte) tod_read::return_SEC, (byte) tod_read::return_MIN, (byte) tod_read::return_HOURS } Converted call struct value parameter to member unwinding call printf_uint (number) 8 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL +Converted call struct value parameter to member unwinding (void~) main::$3 ← call tod_init *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_TENTHS) *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC) *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN) *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS) +Converted procedure call LValue to member unwinding { (byte~) main::$5_TENTHS, (byte~) main::$5_SEC, (byte~) main::$5_MIN, (byte~) main::$5_HOURS } ← call tod_read +Unwinding value copy (struct TIME_OF_DAY) main::tod ← (struct TIME_OF_DAY~) main::$5 +Adding value simple copy (byte) main::tod_TENTHS ← (byte~) main::$5_TENTHS +Adding value simple copy (byte) main::tod_SEC ← (byte~) main::$5_SEC +Adding value simple copy (byte) main::tod_MIN ← (byte~) main::$5_MIN +Adding value simple copy (byte) main::tod_HOURS ← (byte~) main::$5_HOURS +Converted call struct value parameter to member unwinding (byte*~) main::$6 ← call tod_str (byte) main::tod_TENTHS (byte) main::tod_SEC (byte) main::tod_MIN (byte) main::tod_HOURS +Converted call struct value parameter to member unwinding call printf_string (byte*~) main::$6 (byte) 0 (byte) 0 Converted call struct value parameter to member unwinding call printf_ulong (dword) count (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL Converted call struct value parameter to member unwinding call printf_uchar (byte) print::i (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) HEXADECIMAL Converted call struct value parameter to member unwinding call printf_uchar (byte) print::i1 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) HEXADECIMAL @@ -127,13 +185,46 @@ Replacing struct member reference (struct printf_format_string) printf_string::f Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.HOURS with member unwinding reference (byte) tod_init::tod_HOURS +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_HOURS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) +Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.MIN with member unwinding reference (byte) tod_init::tod_MIN +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_MIN with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) +Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.SEC with member unwinding reference (byte) tod_init::tod_SEC +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_SEC with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) +Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.TENTHS with member unwinding reference (byte) tod_init::tod_TENTHS +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_10THS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_HOURS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_MIN with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_SEC with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_10THS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) +Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.HOURS with member unwinding reference (byte) tod_str::tod_HOURS +Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.HOURS with member unwinding reference (byte) tod_str::tod_HOURS +Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.MIN with member unwinding reference (byte) tod_str::tod_MIN +Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.MIN with member unwinding reference (byte) tod_str::tod_MIN +Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.SEC with member unwinding reference (byte) tod_str::tod_SEC +Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.SEC with member unwinding reference (byte) tod_str::tod_SEC +Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.TENTHS with member unwinding reference (byte) tod_str::tod_TENTHS +Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.TENTHS with member unwinding reference (byte) tod_str::tod_TENTHS +Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx +Inlined call (byte~) legal::$3 ← call diff *((const byte*) board + (byte) legal::i) (byte) legal::column +Inlined call (byte~) legal::$4 ← call diff (byte) legal::i (byte) legal::row Eliminating unused variable with no statement (void~) main::$1 Eliminating unused variable with no statement (void~) main::$2 +Eliminating unused variable with no statement (struct TIME_OF_DAY~) main::$5 +Eliminating unused variable with no statement (void~) main::$7 Eliminating unused variable with no statement (void~) print::$0 Eliminating unused variable with no statement (void~) print::$2 Eliminating unused variable with no statement (void~) print::$4 Eliminating unused variable with no statement (void~) print::$7 Eliminating unused variable with no statement (void~) print::$8 +Unwinding list assignment { (byte~) main::$5_TENTHS, (byte~) main::$5_SEC, (byte~) main::$5_MIN, (byte~) main::$5_HOURS } ← { (byte) tod_read::return_TENTHS, (byte) tod_read::return_SEC, (byte) tod_read::return_MIN, (byte) tod_read::return_HOURS } +Unwinding list assignment { (byte) tod_read::return_TENTHS#2, (byte) tod_read::return_SEC#2, (byte) tod_read::return_MIN#2, (byte) tod_read::return_HOURS#2 } ← { (byte) tod_read::return_TENTHS#1, (byte) tod_read::return_SEC#1, (byte) tod_read::return_MIN#1, (byte) tod_read::return_HOURS#1 } CONTROL FLOW GRAPH SSA @begin: scope:[] from @@ -281,29 +372,29 @@ strupr::@return: scope:[strupr] from strupr::@3 to:@return (word()) strlen((byte*) strlen::str) -strlen: scope:[strlen] from printf_number_buffer::@6 - (byte*) strlen::str#4 ← phi( printf_number_buffer::@6/(byte*) strlen::str#1 ) +strlen: scope:[strlen] from printf_number_buffer::@6 printf_string::@3 + (byte*) strlen::str#5 ← phi( printf_number_buffer::@6/(byte*) strlen::str#1 printf_string::@3/(byte*) strlen::str#2 ) (word) strlen::len#0 ← (word) 0 to:strlen::@1 strlen::@1: scope:[strlen] from strlen strlen::@2 (word) strlen::len#4 ← phi( strlen/(word) strlen::len#0 strlen::@2/(word) strlen::len#1 ) - (byte*) strlen::str#2 ← phi( strlen/(byte*) strlen::str#4 strlen::@2/(byte*) strlen::str#0 ) - (bool~) strlen::$0 ← (number) 0 != *((byte*) strlen::str#2) + (byte*) strlen::str#3 ← phi( strlen/(byte*) strlen::str#5 strlen::@2/(byte*) strlen::str#0 ) + (bool~) strlen::$0 ← (number) 0 != *((byte*) strlen::str#3) if((bool~) strlen::$0) goto strlen::@2 to:strlen::@3 strlen::@2: scope:[strlen] from strlen::@1 - (byte*) strlen::str#3 ← phi( strlen::@1/(byte*) strlen::str#2 ) + (byte*) strlen::str#4 ← phi( strlen::@1/(byte*) strlen::str#3 ) (word) strlen::len#2 ← phi( strlen::@1/(word) strlen::len#4 ) (word) strlen::len#1 ← ++ (word) strlen::len#2 - (byte*) strlen::str#0 ← ++ (byte*) strlen::str#3 + (byte*) strlen::str#0 ← ++ (byte*) strlen::str#4 to:strlen::@1 strlen::@3: scope:[strlen] from strlen::@1 (word) strlen::len#3 ← phi( strlen::@1/(word) strlen::len#4 ) (word) strlen::return#0 ← (word) strlen::len#3 to:strlen::@return strlen::@return: scope:[strlen] from strlen::@3 - (word) strlen::return#3 ← phi( strlen::@3/(word) strlen::return#0 ) - (word) strlen::return#1 ← (word) strlen::return#3 + (word) strlen::return#4 ← phi( strlen::@3/(word) strlen::return#0 ) + (word) strlen::return#1 ← (word) strlen::return#4 return to:@return @@ -931,28 +1022,28 @@ printf_scroll::@return: scope:[printf_scroll] from printf_scroll printf_scroll: to:@return (void()) printf_padding((byte) printf_padding::pad , (byte) printf_padding::length) -printf_padding: scope:[printf_padding] from printf_number_buffer::@10 printf_number_buffer::@12 printf_number_buffer::@8 - (byte) printf_padding::pad#5 ← phi( printf_number_buffer::@10/(byte) printf_padding::pad#1 printf_number_buffer::@12/(byte) printf_padding::pad#2 printf_number_buffer::@8/(byte) printf_padding::pad#0 ) - (byte) printf_padding::length#4 ← phi( printf_number_buffer::@10/(byte) printf_padding::length#1 printf_number_buffer::@12/(byte) printf_padding::length#2 printf_number_buffer::@8/(byte) printf_padding::length#0 ) +printf_padding: scope:[printf_padding] from printf_number_buffer::@10 printf_number_buffer::@12 printf_number_buffer::@8 printf_string::@5 printf_string::@6 + (byte) printf_padding::pad#7 ← phi( printf_number_buffer::@10/(byte) printf_padding::pad#1 printf_number_buffer::@12/(byte) printf_padding::pad#2 printf_number_buffer::@8/(byte) printf_padding::pad#0 printf_string::@5/(byte) printf_padding::pad#3 printf_string::@6/(byte) printf_padding::pad#4 ) + (byte) printf_padding::length#6 ← phi( printf_number_buffer::@10/(byte) printf_padding::length#1 printf_number_buffer::@12/(byte) printf_padding::length#2 printf_number_buffer::@8/(byte) printf_padding::length#0 printf_string::@5/(byte) printf_padding::length#3 printf_string::@6/(byte) printf_padding::length#4 ) (byte) printf_padding::i#0 ← (byte) 0 to:printf_padding::@1 printf_padding::@1: scope:[printf_padding] from printf_padding printf_padding::@3 - (byte) printf_padding::pad#4 ← phi( printf_padding/(byte) printf_padding::pad#5 printf_padding::@3/(byte) printf_padding::pad#6 ) - (byte) printf_padding::length#3 ← phi( printf_padding/(byte) printf_padding::length#4 printf_padding::@3/(byte) printf_padding::length#5 ) + (byte) printf_padding::pad#6 ← phi( printf_padding/(byte) printf_padding::pad#7 printf_padding::@3/(byte) printf_padding::pad#8 ) + (byte) printf_padding::length#5 ← phi( printf_padding/(byte) printf_padding::length#6 printf_padding::@3/(byte) printf_padding::length#7 ) (byte) printf_padding::i#2 ← phi( printf_padding/(byte) printf_padding::i#0 printf_padding::@3/(byte) printf_padding::i#1 ) - (bool~) printf_padding::$0 ← (byte) printf_padding::i#2 < (byte) printf_padding::length#3 + (bool~) printf_padding::$0 ← (byte) printf_padding::i#2 < (byte) printf_padding::length#5 if((bool~) printf_padding::$0) goto printf_padding::@2 to:printf_padding::@return printf_padding::@2: scope:[printf_padding] from printf_padding::@1 - (byte) printf_padding::length#6 ← phi( printf_padding::@1/(byte) printf_padding::length#3 ) + (byte) printf_padding::length#8 ← phi( printf_padding::@1/(byte) printf_padding::length#5 ) (byte) printf_padding::i#4 ← phi( printf_padding::@1/(byte) printf_padding::i#2 ) - (byte) printf_padding::pad#3 ← phi( printf_padding::@1/(byte) printf_padding::pad#4 ) - (byte) printf_char::ch#0 ← (byte) printf_padding::pad#3 + (byte) printf_padding::pad#5 ← phi( printf_padding::@1/(byte) printf_padding::pad#6 ) + (byte) printf_char::ch#0 ← (byte) printf_padding::pad#5 call printf_char to:printf_padding::@3 printf_padding::@3: scope:[printf_padding] from printf_padding::@2 - (byte) printf_padding::pad#6 ← phi( printf_padding::@2/(byte) printf_padding::pad#3 ) - (byte) printf_padding::length#5 ← phi( printf_padding::@2/(byte) printf_padding::length#6 ) + (byte) printf_padding::pad#8 ← phi( printf_padding::@2/(byte) printf_padding::pad#5 ) + (byte) printf_padding::length#7 ← phi( printf_padding::@2/(byte) printf_padding::length#8 ) (byte) printf_padding::i#3 ← phi( printf_padding::@2/(byte) printf_padding::i#4 ) (byte) printf_padding::i#1 ← ++ (byte) printf_padding::i#3 to:printf_padding::@1 @@ -961,43 +1052,43 @@ printf_padding::@return: scope:[printf_padding] from printf_padding::@1 to:@return (void()) printf_str((byte*) printf_str::str) -printf_str: scope:[printf_str] from main::@1 main::@2 print print::@11 print::@13 print::@5 print::@9 printf_number_buffer::@5 - (byte*) printf_str::str#11 ← phi( main::@1/(byte*) printf_str::str#2 main::@2/(byte*) printf_str::str#3 print/(byte*) printf_str::str#4 print::@11/(byte*) printf_str::str#8 print::@13/(byte*) printf_str::str#5 print::@5/(byte*) printf_str::str#6 print::@9/(byte*) printf_str::str#7 printf_number_buffer::@5/(byte*) printf_str::str#1 ) +printf_str: scope:[printf_str] from main::@1 main::@2 main::@8 print print::@11 print::@13 print::@5 print::@9 printf_number_buffer::@5 printf_string::@2 + (byte*) printf_str::str#13 ← phi( main::@1/(byte*) printf_str::str#3 main::@2/(byte*) printf_str::str#4 main::@8/(byte*) printf_str::str#5 print/(byte*) printf_str::str#6 print::@11/(byte*) printf_str::str#10 print::@13/(byte*) printf_str::str#7 print::@5/(byte*) printf_str::str#8 print::@9/(byte*) printf_str::str#9 printf_number_buffer::@5/(byte*) printf_str::str#1 printf_string::@2/(byte*) printf_str::str#2 ) to:printf_str::@1 printf_str::@1: scope:[printf_str] from printf_str printf_str::@6 printf_str::@7 - (byte*) printf_str::str#10 ← phi( printf_str/(byte*) printf_str::str#11 printf_str::@6/(byte*) printf_str::str#12 printf_str::@7/(byte*) printf_str::str#13 ) + (byte*) printf_str::str#12 ← phi( printf_str/(byte*) printf_str::str#13 printf_str::@6/(byte*) printf_str::str#14 printf_str::@7/(byte*) printf_str::str#15 ) if(true) goto printf_str::@2 to:printf_str::@return printf_str::@2: scope:[printf_str] from printf_str::@1 - (byte*) printf_str::str#9 ← phi( printf_str::@1/(byte*) printf_str::str#10 ) - (byte) printf_str::ch#0 ← *((byte*) printf_str::str#9) - (byte*) printf_str::str#0 ← ++ (byte*) printf_str::str#9 + (byte*) printf_str::str#11 ← phi( printf_str::@1/(byte*) printf_str::str#12 ) + (byte) printf_str::ch#0 ← *((byte*) printf_str::str#11) + (byte*) printf_str::str#0 ← ++ (byte*) printf_str::str#11 (bool~) printf_str::$0 ← (byte) printf_str::ch#0 == (number) 0 (bool~) printf_str::$1 ← ! (bool~) printf_str::$0 if((bool~) printf_str::$1) goto printf_str::@3 to:printf_str::@return printf_str::@3: scope:[printf_str] from printf_str::@2 - (byte*) printf_str::str#16 ← phi( printf_str::@2/(byte*) printf_str::str#0 ) + (byte*) printf_str::str#18 ← phi( printf_str::@2/(byte*) printf_str::str#0 ) (byte) printf_str::ch#1 ← phi( printf_str::@2/(byte) printf_str::ch#0 ) (bool~) printf_str::$2 ← (byte) printf_str::ch#1 == (byte) ' ' if((bool~) printf_str::$2) goto printf_str::@4 to:printf_str::@5 printf_str::@4: scope:[printf_str] from printf_str::@3 - (byte*) printf_str::str#14 ← phi( printf_str::@3/(byte*) printf_str::str#16 ) + (byte*) printf_str::str#16 ← phi( printf_str::@3/(byte*) printf_str::str#18 ) call printf_ln to:printf_str::@6 printf_str::@6: scope:[printf_str] from printf_str::@4 - (byte*) printf_str::str#12 ← phi( printf_str::@4/(byte*) printf_str::str#14 ) + (byte*) printf_str::str#14 ← phi( printf_str::@4/(byte*) printf_str::str#16 ) to:printf_str::@1 printf_str::@5: scope:[printf_str] from printf_str::@3 - (byte*) printf_str::str#15 ← phi( printf_str::@3/(byte*) printf_str::str#16 ) + (byte*) printf_str::str#17 ← phi( printf_str::@3/(byte*) printf_str::str#18 ) (byte) printf_str::ch#2 ← phi( printf_str::@3/(byte) printf_str::ch#1 ) (byte) printf_char::ch#1 ← (byte) printf_str::ch#2 call printf_char to:printf_str::@7 printf_str::@7: scope:[printf_str] from printf_str::@5 - (byte*) printf_str::str#13 ← phi( printf_str::@5/(byte*) printf_str::str#15 ) + (byte*) printf_str::str#15 ← phi( printf_str::@5/(byte*) printf_str::str#17 ) to:printf_str::@1 printf_str::@return: scope:[printf_str] from printf_str::@1 printf_str::@2 return @@ -1260,8 +1351,8 @@ printf_number_buffer::@15: scope:[printf_number_buffer] from printf_number_buff (byte) printf_number_buffer::format_justify_left#9 ← phi( printf_number_buffer::@6/(byte) printf_number_buffer::format_justify_left#13 ) (byte) printf_number_buffer::format_min_length#5 ← phi( printf_number_buffer::@6/(byte) printf_number_buffer::format_min_length#7 ) (byte) printf_number_buffer::buffer_sign#3 ← phi( printf_number_buffer::@6/(byte) printf_number_buffer::buffer_sign#6 ) - (word) strlen::return#4 ← phi( printf_number_buffer::@6/(word) strlen::return#2 ) - (word~) printf_number_buffer::$19 ← (word) strlen::return#4 + (word) strlen::return#5 ← phi( printf_number_buffer::@6/(word) strlen::return#2 ) + (word~) printf_number_buffer::$19 ← (word) strlen::return#5 (signed byte) printf_number_buffer::len#0 ← (signed byte)(word~) printf_number_buffer::$19 (bool~) printf_number_buffer::$29 ← (number) 0 != (byte) printf_number_buffer::buffer_sign#3 (bool~) printf_number_buffer::$20 ← ! (bool~) printf_number_buffer::$29 @@ -1429,27 +1520,197 @@ printf_number_buffer::@21: scope:[printf_number_buffer] from printf_number_buff printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@19 printf_number_buffer::@21 return to:@return + +(void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) +printf_string: scope:[printf_string] from main::@9 + (byte*) printf_string::str#3 ← phi( main::@9/(byte*) printf_string::str#0 ) + (byte) printf_string::format_justify_left#3 ← phi( main::@9/(byte) printf_string::format_justify_left#0 ) + (byte) printf_string::format_min_length#1 ← phi( main::@9/(byte) printf_string::format_min_length#0 ) + (signed byte) printf_string::padding#0 ← (signed byte) 0 + (bool~) printf_string::$14 ← (number) 0 != (byte) printf_string::format_min_length#1 + (bool~) printf_string::$0 ← ! (bool~) printf_string::$14 + if((bool~) printf_string::$0) goto printf_string::@1 + to:printf_string::@3 +printf_string::@1: scope:[printf_string] from printf_string printf_string::@4 printf_string::@7 + (byte*) printf_string::str#4 ← phi( printf_string/(byte*) printf_string::str#3 printf_string::@4/(byte*) printf_string::str#6 printf_string::@7/(byte*) printf_string::str#7 ) + (signed byte) printf_string::padding#3 ← phi( printf_string/(signed byte) printf_string::padding#0 printf_string::@4/(signed byte) printf_string::padding#2 printf_string::@7/(signed byte) printf_string::padding#1 ) + (byte) printf_string::format_justify_left#1 ← phi( printf_string/(byte) printf_string::format_justify_left#3 printf_string::@4/(byte) printf_string::format_justify_left#4 printf_string::@7/(byte) printf_string::format_justify_left#5 ) + (bool~) printf_string::$15 ← (number) 0 != (byte) printf_string::format_justify_left#1 + (bool~) printf_string::$1 ← ! (bool~) printf_string::$15 + (bool~) printf_string::$2 ← (bool~) printf_string::$1 && (signed byte) printf_string::padding#3 + (bool~) printf_string::$3 ← ! (bool~) printf_string::$2 + if((bool~) printf_string::$3) goto printf_string::@2 + to:printf_string::@5 +printf_string::@3: scope:[printf_string] from printf_string + (byte) printf_string::format_justify_left#7 ← phi( printf_string/(byte) printf_string::format_justify_left#3 ) + (byte) printf_string::format_min_length#3 ← phi( printf_string/(byte) printf_string::format_min_length#1 ) + (byte*) printf_string::str#1 ← phi( printf_string/(byte*) printf_string::str#3 ) + (byte*) strlen::str#2 ← (byte*) printf_string::str#1 + call strlen + (word) strlen::return#3 ← (word) strlen::return#1 + to:printf_string::@7 +printf_string::@7: scope:[printf_string] from printf_string::@3 + (byte*) printf_string::str#7 ← phi( printf_string::@3/(byte*) printf_string::str#1 ) + (byte) printf_string::format_justify_left#5 ← phi( printf_string::@3/(byte) printf_string::format_justify_left#7 ) + (byte) printf_string::format_min_length#2 ← phi( printf_string::@3/(byte) printf_string::format_min_length#3 ) + (word) strlen::return#6 ← phi( printf_string::@3/(word) strlen::return#3 ) + (word~) printf_string::$9 ← (word) strlen::return#6 + (signed byte) printf_string::len#0 ← (signed byte)(word~) printf_string::$9 + (signed byte~) printf_string::$13 ← (signed byte)(byte) printf_string::format_min_length#2 + (signed byte~) printf_string::$10 ← (signed byte~) printf_string::$13 - (signed byte) printf_string::len#0 + (signed byte) printf_string::padding#1 ← (signed byte~) printf_string::$10 + (bool~) printf_string::$11 ← (signed byte) printf_string::padding#1 < (number) 0 + (bool~) printf_string::$12 ← ! (bool~) printf_string::$11 + if((bool~) printf_string::$12) goto printf_string::@1 + to:printf_string::@4 +printf_string::@4: scope:[printf_string] from printf_string::@7 + (byte*) printf_string::str#6 ← phi( printf_string::@7/(byte*) printf_string::str#7 ) + (byte) printf_string::format_justify_left#4 ← phi( printf_string::@7/(byte) printf_string::format_justify_left#5 ) + (signed byte) printf_string::padding#2 ← (number) 0 + to:printf_string::@1 +printf_string::@2: scope:[printf_string] from printf_string::@1 printf_string::@9 + (signed byte) printf_string::padding#7 ← phi( printf_string::@1/(signed byte) printf_string::padding#3 printf_string::@9/(signed byte) printf_string::padding#8 ) + (byte) printf_string::format_justify_left#6 ← phi( printf_string::@1/(byte) printf_string::format_justify_left#1 printf_string::@9/(byte) printf_string::format_justify_left#8 ) + (byte*) printf_string::str#2 ← phi( printf_string::@1/(byte*) printf_string::str#4 printf_string::@9/(byte*) printf_string::str#5 ) + (byte*) printf_str::str#2 ← (byte*) printf_string::str#2 + call printf_str + to:printf_string::@8 +printf_string::@8: scope:[printf_string] from printf_string::@2 + (signed byte) printf_string::padding#4 ← phi( printf_string::@2/(signed byte) printf_string::padding#7 ) + (byte) printf_string::format_justify_left#2 ← phi( printf_string::@2/(byte) printf_string::format_justify_left#6 ) + (bool~) printf_string::$6 ← (byte) printf_string::format_justify_left#2 && (signed byte) printf_string::padding#4 + (bool~) printf_string::$7 ← ! (bool~) printf_string::$6 + if((bool~) printf_string::$7) goto printf_string::@return + to:printf_string::@6 +printf_string::@5: scope:[printf_string] from printf_string::@1 + (byte) printf_string::format_justify_left#9 ← phi( printf_string::@1/(byte) printf_string::format_justify_left#1 ) + (byte*) printf_string::str#8 ← phi( printf_string::@1/(byte*) printf_string::str#4 ) + (signed byte) printf_string::padding#5 ← phi( printf_string::@1/(signed byte) printf_string::padding#3 ) + (byte) printf_padding::pad#3 ← (byte) ' ' + (byte) printf_padding::length#3 ← (byte)(signed byte) printf_string::padding#5 + call printf_padding + to:printf_string::@9 +printf_string::@9: scope:[printf_string] from printf_string::@5 + (signed byte) printf_string::padding#8 ← phi( printf_string::@5/(signed byte) printf_string::padding#5 ) + (byte) printf_string::format_justify_left#8 ← phi( printf_string::@5/(byte) printf_string::format_justify_left#9 ) + (byte*) printf_string::str#5 ← phi( printf_string::@5/(byte*) printf_string::str#8 ) + to:printf_string::@2 +printf_string::@6: scope:[printf_string] from printf_string::@8 + (signed byte) printf_string::padding#6 ← phi( printf_string::@8/(signed byte) printf_string::padding#4 ) + (byte) printf_padding::pad#4 ← (byte) ' ' + (byte) printf_padding::length#4 ← (byte)(signed byte) printf_string::padding#6 + call printf_padding + to:printf_string::@10 +printf_string::@10: scope:[printf_string] from printf_string::@6 + to:printf_string::@return +printf_string::@return: scope:[printf_string] from printf_string::@10 printf_string::@8 + return + to:@return + +(void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) +tod_init: scope:[tod_init] from main::@4 + (byte) tod_init::tod_TENTHS#1 ← phi( main::@4/(byte) tod_init::tod_TENTHS#0 ) + (byte) tod_init::tod_SEC#1 ← phi( main::@4/(byte) tod_init::tod_SEC#0 ) + (byte) tod_init::tod_MIN#1 ← phi( main::@4/(byte) tod_init::tod_MIN#0 ) + (byte) tod_init::tod_HOURS#1 ← phi( main::@4/(byte) tod_init::tod_HOURS#0 ) + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (number) $80 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (number) $7f + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) ← (byte) tod_init::tod_HOURS#1 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) ← (byte) tod_init::tod_MIN#1 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) ← (byte) tod_init::tod_SEC#1 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) ← (byte) tod_init::tod_TENTHS#1 + to:tod_init::@return +tod_init::@return: scope:[tod_init] from tod_init + return + to:@return + +(struct TIME_OF_DAY()) tod_read() +tod_read: scope:[tod_read] from main::@6 + (byte) tod_read::hours#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) + (byte) tod_read::mins#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) + (byte) tod_read::secs#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) + (byte) tod_read::tenths#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) + (byte) tod_read::tod_TENTHS#0 ← (byte) tod_read::tenths#0 + (byte) tod_read::tod_SEC#0 ← (byte) tod_read::secs#0 + (byte) tod_read::tod_MIN#0 ← (byte) tod_read::mins#0 + (byte) tod_read::tod_HOURS#0 ← (byte) tod_read::hours#0 + (byte) tod_read::return_TENTHS#0 ← (byte) tod_read::tod_TENTHS#0 + (byte) tod_read::return_SEC#0 ← (byte) tod_read::tod_SEC#0 + (byte) tod_read::return_MIN#0 ← (byte) tod_read::tod_MIN#0 + (byte) tod_read::return_HOURS#0 ← (byte) tod_read::tod_HOURS#0 + (struct TIME_OF_DAY) tod_read::return#0 ← struct-unwound {(byte) tod_read::return_TENTHS#0, (byte) tod_read::return_SEC#0, (byte) tod_read::return_MIN#0, (byte) tod_read::return_HOURS#0} + to:tod_read::@return +tod_read::@return: scope:[tod_read] from tod_read + (byte) tod_read::return_HOURS#3 ← phi( tod_read/(byte) tod_read::return_HOURS#0 ) + (byte) tod_read::return_MIN#3 ← phi( tod_read/(byte) tod_read::return_MIN#0 ) + (byte) tod_read::return_SEC#3 ← phi( tod_read/(byte) tod_read::return_SEC#0 ) + (byte) tod_read::return_TENTHS#3 ← phi( tod_read/(byte) tod_read::return_TENTHS#0 ) + (byte) tod_read::return_TENTHS#1 ← (byte) tod_read::return_TENTHS#3 + (byte) tod_read::return_SEC#1 ← (byte) tod_read::return_SEC#3 + (byte) tod_read::return_MIN#1 ← (byte) tod_read::return_MIN#3 + (byte) tod_read::return_HOURS#1 ← (byte) tod_read::return_HOURS#3 + (struct TIME_OF_DAY) tod_read::return#1 ← struct-unwound {(byte) tod_read::return_TENTHS#1, (byte) tod_read::return_SEC#1, (byte) tod_read::return_MIN#1, (byte) tod_read::return_HOURS#1} + return + to:@return + +(byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) +tod_str: scope:[tod_str] from main::@7 + (byte) tod_str::tod_TENTHS#1 ← phi( main::@7/(byte) tod_str::tod_TENTHS#0 ) + (byte) tod_str::tod_SEC#1 ← phi( main::@7/(byte) tod_str::tod_SEC#0 ) + (byte) tod_str::tod_MIN#1 ← phi( main::@7/(byte) tod_str::tod_MIN#0 ) + (byte) tod_str::tod_HOURS#1 ← phi( main::@7/(byte) tod_str::tod_HOURS#0 ) + (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#1 >> (number) 4 + (byte~) tod_str::$1 ← (byte) '0' + (byte~) tod_str::$0 + *((const byte*) tod_buffer + (number) 0) ← (byte~) tod_str::$1 + (number~) tod_str::$2 ← (byte) tod_str::tod_HOURS#1 & (number) $f + (number~) tod_str::$3 ← (byte) '0' + (number~) tod_str::$2 + *((const byte*) tod_buffer + (number) 1) ← (number~) tod_str::$3 + (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#1 >> (number) 4 + (byte~) tod_str::$5 ← (byte) '0' + (byte~) tod_str::$4 + *((const byte*) tod_buffer + (number) 3) ← (byte~) tod_str::$5 + (number~) tod_str::$6 ← (byte) tod_str::tod_MIN#1 & (number) $f + (number~) tod_str::$7 ← (byte) '0' + (number~) tod_str::$6 + *((const byte*) tod_buffer + (number) 4) ← (number~) tod_str::$7 + (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#1 >> (number) 4 + (byte~) tod_str::$9 ← (byte) '0' + (byte~) tod_str::$8 + *((const byte*) tod_buffer + (number) 6) ← (byte~) tod_str::$9 + (number~) tod_str::$10 ← (byte) tod_str::tod_SEC#1 & (number) $f + (number~) tod_str::$11 ← (byte) '0' + (number~) tod_str::$10 + *((const byte*) tod_buffer + (number) 7) ← (number~) tod_str::$11 + (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#1 >> (number) 4 + (byte~) tod_str::$13 ← (byte) '0' + (byte~) tod_str::$12 + *((const byte*) tod_buffer + (number) 9) ← (byte~) tod_str::$13 + (number~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#1 & (number) $f + (number~) tod_str::$15 ← (byte) '0' + (number~) tod_str::$14 + *((const byte*) tod_buffer + (number) $a) ← (number~) tod_str::$15 + (byte*) tod_str::return#0 ← (const byte*) tod_buffer + to:tod_str::@return +tod_str::@return: scope:[tod_str] from tod_str + (byte*) tod_str::return#3 ← phi( tod_str/(byte*) tod_str::return#0 ) + (byte*) tod_str::return#1 ← (byte*) tod_str::return#3 + return + to:@return @2: scope:[] from @1 (dword) count#0 ← (dword) 0 to:@3 (void()) main() main: scope:[main] from @3 - (dword) count#40 ← phi( @3/(dword) count#21 ) + (dword) count#33 ← phi( @3/(dword) count#18 ) call printf_cls to:main::@1 main::@1: scope:[main] from main - (dword) count#35 ← phi( main/(dword) count#40 ) - (byte*) printf_str::str#2 ← (const byte*) main::str + (dword) count#32 ← phi( main/(dword) count#33 ) + (byte*) printf_str::str#3 ← (const byte*) main::str call printf_str to:main::@2 main::@2: scope:[main] from main::@1 - (dword) count#31 ← phi( main::@1/(dword) count#35 ) - (byte*) printf_str::str#3 ← (const byte*) main::str1 + (dword) count#30 ← phi( main::@1/(dword) count#32 ) + (byte*) printf_str::str#4 ← (const byte*) main::str1 call printf_str to:main::@3 main::@3: scope:[main] from main::@2 - (dword) count#22 ← phi( main::@2/(dword) count#31 ) + (dword) count#27 ← phi( main::@2/(dword) count#30 ) (word) printf_uint::uvalue#0 ← (number) 8 (byte) printf_uint::format_min_length#0 ← (byte) 0 (byte) printf_uint::format_justify_left#0 ← (byte) 0 @@ -1460,95 +1721,148 @@ main::@3: scope:[main] from main::@2 call printf_uint to:main::@4 main::@4: scope:[main] from main::@3 - (dword) count#16 ← phi( main::@3/(dword) count#22 ) - call queens + (dword) count#19 ← phi( main::@3/(dword) count#27 ) + (byte) tod_init::tod_TENTHS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_TENTHS) + (byte) tod_init::tod_SEC#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC) + (byte) tod_init::tod_MIN#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN) + (byte) tod_init::tod_HOURS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS) + call tod_init to:main::@5 main::@5: scope:[main] from main::@4 - (dword) count#8 ← phi( main::@4/(dword) count#4 ) - (dword) count#1 ← (dword) count#8 + (dword) count#12 ← phi( main::@4/(dword) count#19 ) + call queens + to:main::@6 +main::@6: scope:[main] from main::@5 + (dword) count#6 ← phi( main::@5/(dword) count#4 ) + (dword) count#1 ← (dword) count#6 + call tod_read + (byte) tod_read::return_TENTHS#2 ← (byte) tod_read::return_TENTHS#1 + (byte) tod_read::return_SEC#2 ← (byte) tod_read::return_SEC#1 + (byte) tod_read::return_MIN#2 ← (byte) tod_read::return_MIN#1 + (byte) tod_read::return_HOURS#2 ← (byte) tod_read::return_HOURS#1 + to:main::@7 +main::@7: scope:[main] from main::@6 + (dword) count#31 ← phi( main::@6/(dword) count#1 ) + (byte) tod_read::return_HOURS#4 ← phi( main::@6/(byte) tod_read::return_HOURS#2 ) + (byte) tod_read::return_MIN#4 ← phi( main::@6/(byte) tod_read::return_MIN#2 ) + (byte) tod_read::return_SEC#4 ← phi( main::@6/(byte) tod_read::return_SEC#2 ) + (byte) tod_read::return_TENTHS#4 ← phi( main::@6/(byte) tod_read::return_TENTHS#2 ) + (byte~) main::$5_TENTHS ← (byte) tod_read::return_TENTHS#4 + (byte~) main::$5_SEC ← (byte) tod_read::return_SEC#4 + (byte~) main::$5_MIN ← (byte) tod_read::return_MIN#4 + (byte~) main::$5_HOURS ← (byte) tod_read::return_HOURS#4 + (byte) main::tod_TENTHS#0 ← (byte~) main::$5_TENTHS + (byte) main::tod_SEC#0 ← (byte~) main::$5_SEC + (byte) main::tod_MIN#0 ← (byte~) main::$5_MIN + (byte) main::tod_HOURS#0 ← (byte~) main::$5_HOURS + (byte) tod_str::tod_TENTHS#0 ← (byte) main::tod_TENTHS#0 + (byte) tod_str::tod_SEC#0 ← (byte) main::tod_SEC#0 + (byte) tod_str::tod_MIN#0 ← (byte) main::tod_MIN#0 + (byte) tod_str::tod_HOURS#0 ← (byte) main::tod_HOURS#0 + call tod_str + (byte*) tod_str::return#2 ← (byte*) tod_str::return#1 + to:main::@8 +main::@8: scope:[main] from main::@7 + (dword) count#28 ← phi( main::@7/(dword) count#31 ) + (byte*) tod_str::return#4 ← phi( main::@7/(byte*) tod_str::return#2 ) + (byte*~) main::$6 ← (byte*) tod_str::return#4 + (byte*) printf_str::str#5 ← (const byte*) main::str2 + call printf_str + to:main::@9 +main::@9: scope:[main] from main::@8 + (dword) count#20 ← phi( main::@8/(dword) count#28 ) + (byte*) printf_string::str#0 ← (byte*~) main::$6 + (byte) printf_string::format_min_length#0 ← (byte) 0 + (byte) printf_string::format_justify_left#0 ← (byte) 0 + call printf_string + to:main::@10 +main::@10: scope:[main] from main::@9 + (dword) count#13 ← phi( main::@9/(dword) count#20 ) to:main::@return -main::@return: scope:[main] from main::@5 - (dword) count#9 ← phi( main::@5/(dword) count#1 ) - (dword) count#2 ← (dword) count#9 +main::@return: scope:[main] from main::@10 + (dword) count#7 ← phi( main::@10/(dword) count#13 ) + (dword) count#2 ← (dword) count#7 return to:@return (void()) queens() -queens: scope:[queens] from main::@4 - (dword) count#23 ← phi( main::@4/(dword) count#16 ) +queens: scope:[queens] from main::@5 + (dword) count#21 ← phi( main::@5/(dword) count#12 ) (byte) queens::row#0 ← (byte) 1 to:queens::@1 -queens::@1: scope:[queens] from queens queens::@10 queens::@6 queens::@8 queens::@9 - (dword) count#18 ← phi( queens/(dword) count#23 queens::@10/(dword) count#3 queens::@6/(dword) count#24 queens::@8/(dword) count#25 queens::@9/(dword) count#26 ) - (byte) queens::row#9 ← phi( queens/(byte) queens::row#0 queens::@10/(byte) queens::row#11 queens::@6/(byte) queens::row#1 queens::@8/(byte) queens::row#2 queens::@9/(byte) queens::row#10 ) - if(true) goto queens::@2 +queens::@1: scope:[queens] from queens queens::@10 queens::@7 queens::@8 queens::@9 + (dword) count#15 ← phi( queens/(dword) count#21 queens::@10/(dword) count#22 queens::@7/(dword) count#23 queens::@8/(dword) count#24 queens::@9/(dword) count#25 ) + (byte) queens::row#9 ← phi( queens/(byte) queens::row#0 queens::@10/(byte) queens::row#11 queens::@7/(byte) queens::row#1 queens::@8/(byte) queens::row#2 queens::@9/(byte) queens::row#10 ) + (bool~) queens::$7 ← (number) 0 != (number) 1 + if((bool~) queens::$7) goto queens::@2 to:queens::@return queens::@2: scope:[queens] from queens::@1 - (dword) count#27 ← phi( queens::@1/(dword) count#18 ) + (dword) count#26 ← phi( queens::@1/(dword) count#15 ) (byte) queens::row#3 ← phi( queens::@1/(byte) queens::row#9 ) *((const byte*) board + (byte) queens::row#3) ← ++ *((const byte*) board + (byte) queens::row#3) (bool~) queens::$1 ← *((const byte*) board + (byte) queens::row#3) == (number) 8+(number) 1 if((bool~) queens::$1) goto queens::@3 - to:queens::@7 + to:queens::@5 queens::@3: scope:[queens] from queens::@2 - (dword) count#19 ← phi( queens::@2/(dword) count#27 ) + (dword) count#16 ← phi( queens::@2/(dword) count#26 ) (byte) queens::row#4 ← phi( queens::@2/(byte) queens::row#3 ) *((const byte*) board + (byte) queens::row#4) ← (number) 0 - (bool~) queens::$5 ← (byte) queens::row#4 == (number) 1 - if((bool~) queens::$5) goto queens::@return + (bool~) queens::$6 ← (byte) queens::row#4 == (number) 1 + if((bool~) queens::$6) goto queens::@return to:queens::@8 -queens::@7: scope:[queens] from queens::@2 - (dword) count#32 ← phi( queens::@2/(dword) count#27 ) +queens::@5: scope:[queens] from queens::@2 + (dword) count#29 ← phi( queens::@2/(dword) count#26 ) (byte) queens::row#5 ← phi( queens::@2/(byte) queens::row#3 ) (byte) legal::row#0 ← (byte) queens::row#5 (byte) legal::column#0 ← *((const byte*) board + (byte) queens::row#5) call legal (byte) legal::return#0 ← (byte) legal::return#4 to:queens::@9 -queens::@9: scope:[queens] from queens::@7 - (dword) count#26 ← phi( queens::@7/(dword) count#32 ) - (byte) queens::row#10 ← phi( queens::@7/(byte) queens::row#5 ) - (byte) legal::return#5 ← phi( queens::@7/(byte) legal::return#0 ) +queens::@9: scope:[queens] from queens::@5 + (dword) count#25 ← phi( queens::@5/(dword) count#29 ) + (byte) queens::row#10 ← phi( queens::@5/(byte) queens::row#5 ) + (byte) legal::return#5 ← phi( queens::@5/(byte) legal::return#0 ) (byte~) queens::$2 ← (byte) legal::return#5 - (bool~) queens::$6 ← (number) 0 != (byte~) queens::$2 - if((bool~) queens::$6) goto queens::@4 - to:queens::@1 -queens::@4: scope:[queens] from queens::@9 - (dword) count#28 ← phi( queens::@9/(dword) count#26 ) - (byte) queens::row#6 ← phi( queens::@9/(byte) queens::row#10 ) - (bool~) queens::$3 ← (byte) queens::row#6 == (number) 8 - if((bool~) queens::$3) goto queens::@5 + (bool~) queens::$8 ← (number) 0 != (byte~) queens::$2 + (bool~) queens::$3 ← ! (bool~) queens::$8 + if((bool~) queens::$3) goto queens::@1 to:queens::@6 -queens::@5: scope:[queens] from queens::@4 - (byte) queens::row#12 ← phi( queens::@4/(byte) queens::row#6 ) - (dword) count#17 ← phi( queens::@4/(dword) count#28 ) +queens::@6: scope:[queens] from queens::@9 + (dword) count#14 ← phi( queens::@9/(dword) count#25 ) + (byte) queens::row#6 ← phi( queens::@9/(byte) queens::row#10 ) + (bool~) queens::$4 ← (byte) queens::row#6 == (number) 8 + if((bool~) queens::$4) goto queens::@4 + to:queens::@7 +queens::@4: scope:[queens] from queens::@6 + (byte) queens::row#12 ← phi( queens::@6/(byte) queens::row#6 ) + (dword) count#8 ← phi( queens::@6/(dword) count#14 ) + (dword) count#3 ← ++ (dword) count#8 call print to:queens::@10 -queens::@10: scope:[queens] from queens::@5 - (byte) queens::row#11 ← phi( queens::@5/(byte) queens::row#12 ) - (dword) count#10 ← phi( queens::@5/(dword) count#6 ) - (dword) count#3 ← (dword) count#10 +queens::@10: scope:[queens] from queens::@4 + (dword) count#22 ← phi( queens::@4/(dword) count#3 ) + (byte) queens::row#11 ← phi( queens::@4/(byte) queens::row#12 ) to:queens::@1 -queens::@6: scope:[queens] from queens::@4 - (dword) count#24 ← phi( queens::@4/(dword) count#28 ) - (byte) queens::row#7 ← phi( queens::@4/(byte) queens::row#6 ) +queens::@7: scope:[queens] from queens::@6 + (dword) count#23 ← phi( queens::@6/(dword) count#14 ) + (byte) queens::row#7 ← phi( queens::@6/(byte) queens::row#6 ) (byte) queens::row#1 ← ++ (byte) queens::row#7 to:queens::@1 queens::@8: scope:[queens] from queens::@3 - (dword) count#25 ← phi( queens::@3/(dword) count#19 ) + (dword) count#24 ← phi( queens::@3/(dword) count#16 ) (byte) queens::row#8 ← phi( queens::@3/(byte) queens::row#4 ) (byte) queens::row#2 ← -- (byte) queens::row#8 to:queens::@1 queens::@return: scope:[queens] from queens::@1 queens::@3 - (dword) count#11 ← phi( queens::@1/(dword) count#18 queens::@3/(dword) count#19 ) - (dword) count#4 ← (dword) count#11 + (dword) count#9 ← phi( queens::@1/(dword) count#15 queens::@3/(dword) count#16 ) + (dword) count#4 ← (dword) count#9 return to:@return (byte()) legal((byte) legal::row , (byte) legal::column) -legal: scope:[legal] from queens::@7 - (byte) legal::column#4 ← phi( queens::@7/(byte) legal::column#0 ) - (byte) legal::row#3 ← phi( queens::@7/(byte) legal::row#0 ) +legal: scope:[legal] from queens::@5 + (byte) legal::column#4 ← phi( queens::@5/(byte) legal::column#0 ) + (byte) legal::row#3 ← phi( queens::@5/(byte) legal::row#0 ) (byte) legal::i#0 ← (byte) 1 to:legal::@1 legal::@1: scope:[legal] from legal legal::@5 @@ -1560,7 +1874,7 @@ legal::@1: scope:[legal] from legal legal::@5 if((bool~) legal::$1) goto legal::@2 to:legal::@3 legal::@2: scope:[legal] from legal::@1 - (byte) legal::row#6 ← phi( legal::@1/(byte) legal::row#1 ) + (byte) legal::row#14 ← phi( legal::@1/(byte) legal::row#1 ) (byte) legal::column#1 ← phi( legal::@1/(byte) legal::column#3 ) (byte) legal::i#3 ← phi( legal::@1/(byte) legal::i#2 ) (bool~) legal::$2 ← *((const byte*) board + (byte) legal::i#3) == (byte) legal::column#1 @@ -1573,31 +1887,95 @@ legal::@4: scope:[legal] from legal::@2 (byte) legal::return#2 ← (number) 0 to:legal::@return legal::@6: scope:[legal] from legal::@2 - (byte) legal::row#5 ← phi( legal::@2/(byte) legal::row#6 ) + (byte) legal::row#11 ← phi( legal::@2/(byte) legal::row#14 ) (byte) legal::column#2 ← phi( legal::@2/(byte) legal::column#1 ) (byte) legal::i#4 ← phi( legal::@2/(byte) legal::i#3 ) - (byte) diff::a#0 ← *((const byte*) board + (byte) legal::i#4) - (byte) diff::b#0 ← (byte) legal::column#2 - call diff - (byte) diff::return#0 ← (byte) diff::return#4 + (byte) legal::diff1_a#0 ← *((const byte*) board + (byte) legal::i#4) + (byte) legal::diff1_b#0 ← (byte) legal::column#2 + to:legal::diff1 +legal::diff1: scope:[legal] from legal::@6 + (byte) legal::column#15 ← phi( legal::@6/(byte) legal::column#2 ) + (byte) legal::row#9 ← phi( legal::@6/(byte) legal::row#11 ) + (byte) legal::i#12 ← phi( legal::@6/(byte) legal::i#4 ) + (byte) legal::diff1_b#1 ← phi( legal::@6/(byte) legal::diff1_b#0 ) + (byte) legal::diff1_a#1 ← phi( legal::@6/(byte) legal::diff1_a#0 ) + (bool~) legal::diff1_$0 ← (byte) legal::diff1_a#1 < (byte) legal::diff1_b#1 + if((bool~) legal::diff1_$0) goto legal::diff1_@1 + to:legal::diff1_@3 +legal::diff1_@1: scope:[legal] from legal::diff1 + (byte) legal::column#13 ← phi( legal::diff1/(byte) legal::column#15 ) + (byte) legal::row#6 ← phi( legal::diff1/(byte) legal::row#9 ) + (byte) legal::i#9 ← phi( legal::diff1/(byte) legal::i#12 ) + (byte) legal::diff1_a#2 ← phi( legal::diff1/(byte) legal::diff1_a#1 ) + (byte) legal::diff1_b#2 ← phi( legal::diff1/(byte) legal::diff1_b#1 ) + (byte~) legal::diff1_$2 ← (byte) legal::diff1_b#2 - (byte) legal::diff1_a#2 + (byte) legal::diff1_return#0 ← (byte~) legal::diff1_$2 + to:legal::diff1_@return +legal::diff1_@3: scope:[legal] from legal::diff1 + (byte) legal::column#14 ← phi( legal::diff1/(byte) legal::column#15 ) + (byte) legal::row#7 ← phi( legal::diff1/(byte) legal::row#9 ) + (byte) legal::i#10 ← phi( legal::diff1/(byte) legal::i#12 ) + (byte) legal::diff1_b#3 ← phi( legal::diff1/(byte) legal::diff1_b#1 ) + (byte) legal::diff1_a#3 ← phi( legal::diff1/(byte) legal::diff1_a#1 ) + (byte~) legal::diff1_$1 ← (byte) legal::diff1_a#3 - (byte) legal::diff1_b#3 + (byte) legal::diff1_return#1 ← (byte~) legal::diff1_$1 + to:legal::diff1_@return +legal::diff1_@return: scope:[legal] from legal::diff1_@1 legal::diff1_@3 + (byte) legal::column#12 ← phi( legal::diff1_@1/(byte) legal::column#13 legal::diff1_@3/(byte) legal::column#14 ) + (byte) legal::row#5 ← phi( legal::diff1_@1/(byte) legal::row#6 legal::diff1_@3/(byte) legal::row#7 ) + (byte) legal::i#7 ← phi( legal::diff1_@1/(byte) legal::i#9 legal::diff1_@3/(byte) legal::i#10 ) + (byte) legal::diff1_return#3 ← phi( legal::diff1_@1/(byte) legal::diff1_return#0 legal::diff1_@3/(byte) legal::diff1_return#1 ) + (byte) legal::diff1_return#2 ← (byte) legal::diff1_return#3 to:legal::@8 -legal::@8: scope:[legal] from legal::@6 - (byte) legal::column#7 ← phi( legal::@6/(byte) legal::column#2 ) - (byte) legal::row#2 ← phi( legal::@6/(byte) legal::row#5 ) - (byte) legal::i#5 ← phi( legal::@6/(byte) legal::i#4 ) - (byte) diff::return#5 ← phi( legal::@6/(byte) diff::return#0 ) - (byte~) legal::$3 ← (byte) diff::return#5 - (byte) diff::a#1 ← (byte) legal::i#5 - (byte) diff::b#1 ← (byte) legal::row#2 - call diff - (byte) diff::return#1 ← (byte) diff::return#4 +legal::@8: scope:[legal] from legal::diff1_@return + (byte) legal::column#11 ← phi( legal::diff1_@return/(byte) legal::column#12 ) + (byte) legal::row#2 ← phi( legal::diff1_@return/(byte) legal::row#5 ) + (byte) legal::i#5 ← phi( legal::diff1_@return/(byte) legal::i#7 ) + (byte) legal::diff1_return#4 ← phi( legal::diff1_@return/(byte) legal::diff1_return#2 ) + (byte~) legal::$3 ← (byte) legal::diff1_return#4 + (byte) legal::diff2_a#0 ← (byte) legal::i#5 + (byte) legal::diff2_b#0 ← (byte) legal::row#2 + to:legal::diff2 +legal::diff2: scope:[legal] from legal::@8 + (byte) legal::column#10 ← phi( legal::@8/(byte) legal::column#11 ) + (byte) legal::row#15 ← phi( legal::@8/(byte) legal::row#2 ) + (byte) legal::i#15 ← phi( legal::@8/(byte) legal::i#5 ) + (byte) legal::diff2_b#1 ← phi( legal::@8/(byte) legal::diff2_b#0 ) + (byte) legal::diff2_a#1 ← phi( legal::@8/(byte) legal::diff2_a#0 ) + (bool~) legal::diff2_$0 ← (byte) legal::diff2_a#1 < (byte) legal::diff2_b#1 + if((bool~) legal::diff2_$0) goto legal::diff2_@1 + to:legal::diff2_@3 +legal::diff2_@1: scope:[legal] from legal::diff2 + (byte) legal::column#8 ← phi( legal::diff2/(byte) legal::column#10 ) + (byte) legal::row#12 ← phi( legal::diff2/(byte) legal::row#15 ) + (byte) legal::i#13 ← phi( legal::diff2/(byte) legal::i#15 ) + (byte) legal::diff2_a#2 ← phi( legal::diff2/(byte) legal::diff2_a#1 ) + (byte) legal::diff2_b#2 ← phi( legal::diff2/(byte) legal::diff2_b#1 ) + (byte~) legal::diff2_$2 ← (byte) legal::diff2_b#2 - (byte) legal::diff2_a#2 + (byte) legal::diff2_return#0 ← (byte~) legal::diff2_$2 + to:legal::diff2_@return +legal::diff2_@3: scope:[legal] from legal::diff2 + (byte) legal::column#9 ← phi( legal::diff2/(byte) legal::column#10 ) + (byte) legal::row#13 ← phi( legal::diff2/(byte) legal::row#15 ) + (byte) legal::i#14 ← phi( legal::diff2/(byte) legal::i#15 ) + (byte) legal::diff2_b#3 ← phi( legal::diff2/(byte) legal::diff2_b#1 ) + (byte) legal::diff2_a#3 ← phi( legal::diff2/(byte) legal::diff2_a#1 ) + (byte~) legal::diff2_$1 ← (byte) legal::diff2_a#3 - (byte) legal::diff2_b#3 + (byte) legal::diff2_return#1 ← (byte~) legal::diff2_$1 + to:legal::diff2_@return +legal::diff2_@return: scope:[legal] from legal::diff2_@1 legal::diff2_@3 + (byte) legal::column#7 ← phi( legal::diff2_@1/(byte) legal::column#8 legal::diff2_@3/(byte) legal::column#9 ) + (byte) legal::row#10 ← phi( legal::diff2_@1/(byte) legal::row#12 legal::diff2_@3/(byte) legal::row#13 ) + (byte) legal::i#11 ← phi( legal::diff2_@1/(byte) legal::i#13 legal::diff2_@3/(byte) legal::i#14 ) + (byte) legal::diff2_return#3 ← phi( legal::diff2_@1/(byte) legal::diff2_return#0 legal::diff2_@3/(byte) legal::diff2_return#1 ) + (byte) legal::diff2_return#2 ← (byte) legal::diff2_return#3 to:legal::@9 -legal::@9: scope:[legal] from legal::@8 - (byte) legal::column#6 ← phi( legal::@8/(byte) legal::column#7 ) - (byte) legal::row#7 ← phi( legal::@8/(byte) legal::row#2 ) - (byte) legal::i#7 ← phi( legal::@8/(byte) legal::i#5 ) - (byte) diff::return#6 ← phi( legal::@8/(byte) diff::return#1 ) - (byte~) legal::$4 ← (byte) diff::return#6 +legal::@9: scope:[legal] from legal::diff2_@return + (byte) legal::column#6 ← phi( legal::diff2_@return/(byte) legal::column#7 ) + (byte) legal::row#8 ← phi( legal::diff2_@return/(byte) legal::row#10 ) + (byte) legal::i#8 ← phi( legal::diff2_@return/(byte) legal::i#11 ) + (byte) legal::diff2_return#4 ← phi( legal::diff2_@return/(byte) legal::diff2_return#2 ) + (byte~) legal::$4 ← (byte) legal::diff2_return#4 (bool~) legal::$5 ← (byte~) legal::$3 == (byte~) legal::$4 (bool~) legal::$6 ← ! (bool~) legal::$5 if((bool~) legal::$6) goto legal::@5 @@ -1612,46 +1990,20 @@ legal::@return: scope:[legal] from legal::@3 legal::@4 legal::@7 to:@return legal::@5: scope:[legal] from legal::@9 (byte) legal::column#5 ← phi( legal::@9/(byte) legal::column#6 ) - (byte) legal::row#4 ← phi( legal::@9/(byte) legal::row#7 ) - (byte) legal::i#6 ← phi( legal::@9/(byte) legal::i#7 ) + (byte) legal::row#4 ← phi( legal::@9/(byte) legal::row#8 ) + (byte) legal::i#6 ← phi( legal::@9/(byte) legal::i#8 ) (byte) legal::i#1 ← ++ (byte) legal::i#6 to:legal::@1 -(byte()) diff((byte) diff::a , (byte) diff::b) -diff: scope:[diff] from legal::@6 legal::@8 - (byte) diff::b#2 ← phi( legal::@6/(byte) diff::b#0 legal::@8/(byte) diff::b#1 ) - (byte) diff::a#2 ← phi( legal::@6/(byte) diff::a#0 legal::@8/(byte) diff::a#1 ) - (bool~) diff::$0 ← (byte) diff::a#2 < (byte) diff::b#2 - if((bool~) diff::$0) goto diff::@1 - to:diff::@2 -diff::@1: scope:[diff] from diff - (byte) diff::a#3 ← phi( diff/(byte) diff::a#2 ) - (byte) diff::b#3 ← phi( diff/(byte) diff::b#2 ) - (byte~) diff::$2 ← (byte) diff::b#3 - (byte) diff::a#3 - (byte) diff::return#2 ← (byte~) diff::$2 - to:diff::@return -diff::@2: scope:[diff] from diff - (byte) diff::b#4 ← phi( diff/(byte) diff::b#2 ) - (byte) diff::a#4 ← phi( diff/(byte) diff::a#2 ) - (byte~) diff::$1 ← (byte) diff::a#4 - (byte) diff::b#4 - (byte) diff::return#3 ← (byte~) diff::$1 - to:diff::@return -diff::@return: scope:[diff] from diff::@1 diff::@2 - (byte) diff::return#7 ← phi( diff::@1/(byte) diff::return#2 diff::@2/(byte) diff::return#3 ) - (byte) diff::return#4 ← (byte) diff::return#7 - return - to:@return - (void()) print() -print: scope:[print] from queens::@5 - (dword) count#12 ← phi( queens::@5/(dword) count#17 ) - (dword) count#5 ← ++ (dword) count#12 - (byte*) printf_str::str#4 ← (const byte*) print::str +print: scope:[print] from queens::@4 + (dword) count#17 ← phi( queens::@4/(dword) count#3 ) + (byte*) printf_str::str#6 ← (const byte*) print::str call printf_str to:print::@12 print::@12: scope:[print] from print - (dword) count#13 ← phi( print/(dword) count#5 ) - (dword) printf_ulong::uvalue#0 ← (dword) count#13 + (dword) count#10 ← phi( print/(dword) count#17 ) + (dword) printf_ulong::uvalue#0 ← (dword) count#10 (byte) printf_ulong::format_min_length#0 ← (byte) 0 (byte) printf_ulong::format_justify_left#0 ← (byte) 0 (byte) printf_ulong::format_sign_always#0 ← (byte) 0 @@ -1661,22 +2013,18 @@ print::@12: scope:[print] from print call printf_ulong to:print::@13 print::@13: scope:[print] from print::@12 - (dword) count#41 ← phi( print::@12/(dword) count#13 ) - (byte*) printf_str::str#5 ← (const byte*) print::str1 + (byte*) printf_str::str#7 ← (const byte*) print::str1 call printf_str to:print::@14 print::@14: scope:[print] from print::@13 - (dword) count#36 ← phi( print::@13/(dword) count#41 ) (byte) print::i#0 ← (byte) 1 to:print::@1 print::@1: scope:[print] from print::@14 print::@15 - (dword) count#33 ← phi( print::@14/(dword) count#36 print::@15/(dword) count#37 ) (byte) print::i#2 ← phi( print::@14/(byte) print::i#0 print::@15/(byte) print::i#1 ) (bool~) print::$1 ← (byte) print::i#2 <= (number) 8 if((bool~) print::$1) goto print::@2 to:print::@3 print::@2: scope:[print] from print::@1 - (dword) count#42 ← phi( print::@1/(dword) count#33 ) (byte) print::i#3 ← phi( print::@1/(byte) print::i#2 ) (byte) printf_uchar::uvalue#0 ← (byte) print::i#3 (byte) printf_uchar::format_min_length#0 ← (byte) 0 @@ -1688,28 +2036,23 @@ print::@2: scope:[print] from print::@1 call printf_uchar to:print::@15 print::@15: scope:[print] from print::@2 - (dword) count#37 ← phi( print::@2/(dword) count#42 ) (byte) print::i#4 ← phi( print::@2/(byte) print::i#3 ) (byte) print::i#1 ← ++ (byte) print::i#4 to:print::@1 print::@3: scope:[print] from print::@1 - (dword) count#29 ← phi( print::@1/(dword) count#33 ) (byte) print::i1#0 ← (byte) 1 to:print::@4 print::@4: scope:[print] from print::@3 print::@8 - (dword) count#20 ← phi( print::@3/(dword) count#29 print::@8/(dword) count#30 ) (byte) print::i1#2 ← phi( print::@3/(byte) print::i1#0 print::@8/(byte) print::i1#1 ) (bool~) print::$3 ← (byte) print::i1#2 <= (number) 8 if((bool~) print::$3) goto print::@5 to:print::@return print::@5: scope:[print] from print::@4 - (dword) count#46 ← phi( print::@4/(dword) count#20 ) (byte) print::i1#6 ← phi( print::@4/(byte) print::i1#2 ) - (byte*) printf_str::str#6 ← (const byte*) print::str2 + (byte*) printf_str::str#8 ← (const byte*) print::str2 call printf_str to:print::@16 print::@16: scope:[print] from print::@5 - (dword) count#43 ← phi( print::@5/(dword) count#46 ) (byte) print::i1#3 ← phi( print::@5/(byte) print::i1#6 ) (byte) printf_uchar::uvalue#1 ← (byte) print::i1#3 (byte) printf_uchar::format_min_length#1 ← (byte) 0 @@ -1721,71 +2064,60 @@ print::@16: scope:[print] from print::@5 call printf_uchar to:print::@17 print::@17: scope:[print] from print::@16 - (dword) count#39 ← phi( print::@16/(dword) count#43 ) (byte) print::i1#9 ← phi( print::@16/(byte) print::i1#3 ) (byte) print::j#0 ← (byte) 1 to:print::@6 print::@6: scope:[print] from print::@10 print::@17 - (dword) count#34 ← phi( print::@10/(dword) count#38 print::@17/(dword) count#39 ) (byte) print::i1#7 ← phi( print::@10/(byte) print::i1#8 print::@17/(byte) print::i1#9 ) (byte) print::j#2 ← phi( print::@10/(byte) print::j#1 print::@17/(byte) print::j#0 ) (bool~) print::$5 ← (byte) print::j#2 <= (number) 8 if((bool~) print::$5) goto print::@7 to:print::@8 print::@7: scope:[print] from print::@6 - (dword) count#49 ← phi( print::@6/(dword) count#34 ) (byte) print::j#3 ← phi( print::@6/(byte) print::j#2 ) (byte) print::i1#4 ← phi( print::@6/(byte) print::i1#7 ) (bool~) print::$6 ← *((const byte*) board + (byte) print::i1#4) == (byte) print::j#3 if((bool~) print::$6) goto print::@9 to:print::@11 print::@8: scope:[print] from print::@6 - (dword) count#30 ← phi( print::@6/(dword) count#34 ) (byte) print::i1#5 ← phi( print::@6/(byte) print::i1#7 ) (byte) print::i1#1 ← ++ (byte) print::i1#5 to:print::@4 print::@9: scope:[print] from print::@7 - (dword) count#47 ← phi( print::@7/(dword) count#49 ) (byte) print::i1#12 ← phi( print::@7/(byte) print::i1#4 ) (byte) print::j#7 ← phi( print::@7/(byte) print::j#3 ) - (byte*) printf_str::str#7 ← (const byte*) print::str3 + (byte*) printf_str::str#9 ← (const byte*) print::str3 call printf_str to:print::@18 print::@18: scope:[print] from print::@9 - (dword) count#44 ← phi( print::@9/(dword) count#47 ) (byte) print::i1#10 ← phi( print::@9/(byte) print::i1#12 ) (byte) print::j#5 ← phi( print::@9/(byte) print::j#7 ) to:print::@10 print::@11: scope:[print] from print::@7 - (dword) count#48 ← phi( print::@7/(dword) count#49 ) (byte) print::i1#13 ← phi( print::@7/(byte) print::i1#4 ) (byte) print::j#8 ← phi( print::@7/(byte) print::j#3 ) - (byte*) printf_str::str#8 ← (const byte*) print::str4 + (byte*) printf_str::str#10 ← (const byte*) print::str4 call printf_str to:print::@19 print::@19: scope:[print] from print::@11 - (dword) count#45 ← phi( print::@11/(dword) count#48 ) (byte) print::i1#11 ← phi( print::@11/(byte) print::i1#13 ) (byte) print::j#6 ← phi( print::@11/(byte) print::j#8 ) to:print::@10 print::@10: scope:[print] from print::@18 print::@19 - (dword) count#38 ← phi( print::@18/(dword) count#44 print::@19/(dword) count#45 ) (byte) print::i1#8 ← phi( print::@18/(byte) print::i1#10 print::@19/(byte) print::i1#11 ) (byte) print::j#4 ← phi( print::@18/(byte) print::j#5 print::@19/(byte) print::j#6 ) (byte) print::j#1 ← ++ (byte) print::j#4 to:print::@6 print::@return: scope:[print] from print::@4 - (dword) count#14 ← phi( print::@4/(dword) count#20 ) - (dword) count#6 ← (dword) count#14 return to:@return @3: scope:[] from @2 - (dword) count#21 ← phi( @2/(dword) count#0 ) + (dword) count#18 ← phi( @2/(dword) count#0 ) call main to:@4 @4: scope:[] from @3 - (dword) count#15 ← phi( @3/(dword) count#2 ) - (dword) count#7 ← (dword) count#15 + (dword) count#11 ← phi( @3/(dword) count#2 ) + (dword) count#5 ← (dword) count#11 to:@end @end: scope:[] from @4 @@ -1797,12 +2129,37 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte) BINARY = (number) 2 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const byte) DECIMAL = (number) $a (const byte*) DIGITS[] = (byte*) "0123456789abcdef"z (const byte) HEXADECIMAL = (number) $10 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) OCTAL = (number) 8 +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = (byte) 8 +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS = (byte) $b +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN = (byte) $a +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC = (byte) 9 (const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = (byte) 1 (const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN = (byte) 0 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS = (byte) 3 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN = (byte) 2 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC = (byte) 1 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_TENTHS = (byte) 0 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1821,6 +2178,11 @@ SYMBOL TABLE SSA (const dword*) RADIX_OCTAL_VALUES_LONG[] = { (dword) $40000000, (dword) $8000000, (dword) $1000000, (dword) $200000, (dword) $40000, (dword) $8000, (dword) $1000, (dword) $200, (dword) $40, (dword) 8 } (const byte) SIZEOF_DWORD = (byte) 4 (const byte) SIZEOF_WORD = (byte) 2 +(byte) TIME_OF_DAY::HOURS +(byte) TIME_OF_DAY::MIN +(byte) TIME_OF_DAY::SEC +(byte) TIME_OF_DAY::TENTHS +(struct TIME_OF_DAY) TOD_ZERO loadstore = { TENTHS: (byte) 0, SEC: (byte) 0, MIN: (byte) 0, HOURS: (byte) 0 } (const byte*) board[(number) $14] = { fill( $14, 0) } (dword) count (dword) count#0 @@ -1851,56 +2213,12 @@ SYMBOL TABLE SSA (dword) count#31 (dword) count#32 (dword) count#33 -(dword) count#34 -(dword) count#35 -(dword) count#36 -(dword) count#37 -(dword) count#38 -(dword) count#39 (dword) count#4 -(dword) count#40 -(dword) count#41 -(dword) count#42 -(dword) count#43 -(dword) count#44 -(dword) count#45 -(dword) count#46 -(dword) count#47 -(dword) count#48 -(dword) count#49 (dword) count#5 (dword) count#6 (dword) count#7 (dword) count#8 (dword) count#9 -(byte()) diff((byte) diff::a , (byte) diff::b) -(bool~) diff::$0 -(byte~) diff::$1 -(byte~) diff::$2 -(label) diff::@1 -(label) diff::@2 -(label) diff::@return -(byte) diff::a -(byte) diff::a#0 -(byte) diff::a#1 -(byte) diff::a#2 -(byte) diff::a#3 -(byte) diff::a#4 -(byte) diff::b -(byte) diff::b#0 -(byte) diff::b#1 -(byte) diff::b#2 -(byte) diff::b#3 -(byte) diff::b#4 -(byte) diff::return -(byte) diff::return#0 -(byte) diff::return#1 -(byte) diff::return#2 -(byte) diff::return#3 -(byte) diff::return#4 -(byte) diff::return#5 -(byte) diff::return#6 -(byte) diff::return#7 (byte()) legal((byte) legal::row , (byte) legal::column) (number~) legal::$0 (bool~) legal::$1 @@ -1922,21 +2240,83 @@ SYMBOL TABLE SSA (byte) legal::column (byte) legal::column#0 (byte) legal::column#1 +(byte) legal::column#10 +(byte) legal::column#11 +(byte) legal::column#12 +(byte) legal::column#13 +(byte) legal::column#14 +(byte) legal::column#15 (byte) legal::column#2 (byte) legal::column#3 (byte) legal::column#4 (byte) legal::column#5 (byte) legal::column#6 (byte) legal::column#7 +(byte) legal::column#8 +(byte) legal::column#9 +(label) legal::diff1 +(bool~) legal::diff1_$0 +(byte~) legal::diff1_$1 +(byte~) legal::diff1_$2 +(label) legal::diff1_@1 +(label) legal::diff1_@3 +(label) legal::diff1_@return +(byte) legal::diff1_a +(byte) legal::diff1_a#0 +(byte) legal::diff1_a#1 +(byte) legal::diff1_a#2 +(byte) legal::diff1_a#3 +(byte) legal::diff1_b +(byte) legal::diff1_b#0 +(byte) legal::diff1_b#1 +(byte) legal::diff1_b#2 +(byte) legal::diff1_b#3 +(byte) legal::diff1_return +(byte) legal::diff1_return#0 +(byte) legal::diff1_return#1 +(byte) legal::diff1_return#2 +(byte) legal::diff1_return#3 +(byte) legal::diff1_return#4 +(label) legal::diff2 +(bool~) legal::diff2_$0 +(byte~) legal::diff2_$1 +(byte~) legal::diff2_$2 +(label) legal::diff2_@1 +(label) legal::diff2_@3 +(label) legal::diff2_@return +(byte) legal::diff2_a +(byte) legal::diff2_a#0 +(byte) legal::diff2_a#1 +(byte) legal::diff2_a#2 +(byte) legal::diff2_a#3 +(byte) legal::diff2_b +(byte) legal::diff2_b#0 +(byte) legal::diff2_b#1 +(byte) legal::diff2_b#2 +(byte) legal::diff2_b#3 +(byte) legal::diff2_return +(byte) legal::diff2_return#0 +(byte) legal::diff2_return#1 +(byte) legal::diff2_return#2 +(byte) legal::diff2_return#3 +(byte) legal::diff2_return#4 (byte) legal::i (byte) legal::i#0 (byte) legal::i#1 +(byte) legal::i#10 +(byte) legal::i#11 +(byte) legal::i#12 +(byte) legal::i#13 +(byte) legal::i#14 +(byte) legal::i#15 (byte) legal::i#2 (byte) legal::i#3 (byte) legal::i#4 (byte) legal::i#5 (byte) legal::i#6 (byte) legal::i#7 +(byte) legal::i#8 +(byte) legal::i#9 (byte) legal::return (byte) legal::return#0 (byte) legal::return#1 @@ -1948,22 +2328,50 @@ SYMBOL TABLE SSA (byte) legal::row (byte) legal::row#0 (byte) legal::row#1 +(byte) legal::row#10 +(byte) legal::row#11 +(byte) legal::row#12 +(byte) legal::row#13 +(byte) legal::row#14 +(byte) legal::row#15 (byte) legal::row#2 (byte) legal::row#3 (byte) legal::row#4 (byte) legal::row#5 (byte) legal::row#6 (byte) legal::row#7 +(byte) legal::row#8 +(byte) legal::row#9 (void()) main() +(byte~) main::$5_HOURS +(byte~) main::$5_MIN +(byte~) main::$5_SEC +(byte~) main::$5_TENTHS +(byte*~) main::$6 (label) main::@1 +(label) main::@10 (label) main::@2 (label) main::@3 (label) main::@4 (label) main::@5 +(label) main::@6 +(label) main::@7 +(label) main::@8 +(label) main::@9 (label) main::@return (const byte*) main::str[(byte) $29] = (byte*) " - n queens problem using backtracking -" (const byte*) main::str1[(byte) $13] = (byte*) " -Number of queens:" +number of queens:" +(const byte*) main::str2[(byte) 8] = (byte*) " +time: " +(byte) main::tod_HOURS +(byte) main::tod_HOURS#0 +(byte) main::tod_MIN +(byte) main::tod_MIN#0 +(byte) main::tod_SEC +(byte) main::tod_SEC#0 +(byte) main::tod_TENTHS +(byte) main::tod_TENTHS#0 (void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) (byte*~) memcpy::$0 (bool~) memcpy::$1 @@ -2365,6 +2773,8 @@ Number of queens:" (byte) printf_padding::length#4 (byte) printf_padding::length#5 (byte) printf_padding::length#6 +(byte) printf_padding::length#7 +(byte) printf_padding::length#8 (byte) printf_padding::pad (byte) printf_padding::pad#0 (byte) printf_padding::pad#1 @@ -2373,6 +2783,8 @@ Number of queens:" (byte) printf_padding::pad#4 (byte) printf_padding::pad#5 (byte) printf_padding::pad#6 +(byte) printf_padding::pad#7 +(byte) printf_padding::pad#8 (void()) printf_scroll() (bool~) printf_scroll::$0 (bool~) printf_scroll::$1 @@ -2407,6 +2819,8 @@ Number of queens:" (byte*) printf_str::str#14 (byte*) printf_str::str#15 (byte*) printf_str::str#16 +(byte*) printf_str::str#17 +(byte*) printf_str::str#18 (byte*) printf_str::str#2 (byte*) printf_str::str#3 (byte*) printf_str::str#4 @@ -2415,6 +2829,70 @@ Number of queens:" (byte*) printf_str::str#7 (byte*) printf_str::str#8 (byte*) printf_str::str#9 +(void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) +(bool~) printf_string::$0 +(bool~) printf_string::$1 +(signed byte~) printf_string::$10 +(bool~) printf_string::$11 +(bool~) printf_string::$12 +(signed byte~) printf_string::$13 +(bool~) printf_string::$14 +(bool~) printf_string::$15 +(bool~) printf_string::$2 +(bool~) printf_string::$3 +(bool~) printf_string::$6 +(bool~) printf_string::$7 +(word~) printf_string::$9 +(label) printf_string::@1 +(label) printf_string::@10 +(label) printf_string::@2 +(label) printf_string::@3 +(label) printf_string::@4 +(label) printf_string::@5 +(label) printf_string::@6 +(label) printf_string::@7 +(label) printf_string::@8 +(label) printf_string::@9 +(label) printf_string::@return +(struct printf_format_string) printf_string::format +(byte) printf_string::format_justify_left +(byte) printf_string::format_justify_left#0 +(byte) printf_string::format_justify_left#1 +(byte) printf_string::format_justify_left#2 +(byte) printf_string::format_justify_left#3 +(byte) printf_string::format_justify_left#4 +(byte) printf_string::format_justify_left#5 +(byte) printf_string::format_justify_left#6 +(byte) printf_string::format_justify_left#7 +(byte) printf_string::format_justify_left#8 +(byte) printf_string::format_justify_left#9 +(byte) printf_string::format_min_length +(byte) printf_string::format_min_length#0 +(byte) printf_string::format_min_length#1 +(byte) printf_string::format_min_length#2 +(byte) printf_string::format_min_length#3 +(signed byte) printf_string::len +(signed byte) printf_string::len#0 +(signed byte) printf_string::padding +(signed byte) printf_string::padding#0 +(signed byte) printf_string::padding#1 +(signed byte) printf_string::padding#2 +(signed byte) printf_string::padding#3 +(signed byte) printf_string::padding#4 +(signed byte) printf_string::padding#5 +(signed byte) printf_string::padding#6 +(signed byte) printf_string::padding#7 +(signed byte) printf_string::padding#8 +(byte*) printf_string::str +(byte*) printf_string::str#0 +(byte*) printf_string::str#1 +(byte*) printf_string::str#2 +(byte*) printf_string::str#3 +(byte*) printf_string::str#4 +(byte*) printf_string::str#5 +(byte*) printf_string::str#6 +(byte*) printf_string::str#7 +(byte*) printf_string::str#8 (void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) (number~) printf_uchar::$0 (byte~) printf_uchar::$1 @@ -2606,8 +3084,10 @@ Number of queens:" (bool~) queens::$1 (byte~) queens::$2 (bool~) queens::$3 -(bool~) queens::$5 +(bool~) queens::$4 (bool~) queens::$6 +(bool~) queens::$7 +(bool~) queens::$8 (label) queens::@1 (label) queens::@10 (label) queens::@2 @@ -2651,12 +3131,15 @@ Number of queens:" (word) strlen::return#2 (word) strlen::return#3 (word) strlen::return#4 +(word) strlen::return#5 +(word) strlen::return#6 (byte*) strlen::str (byte*) strlen::str#0 (byte*) strlen::str#1 (byte*) strlen::str#2 (byte*) strlen::str#3 (byte*) strlen::str#4 +(byte*) strlen::str#5 (byte*()) strupr((byte*) strupr::str) (byte~) strupr::$0 (bool~) strupr::$1 @@ -2683,6 +3166,104 @@ Number of queens:" (byte*) strupr::str#3 (byte*) strupr::str#4 (byte*) strupr::str#5 +(const byte*) tod_buffer[] = (byte*) "00:00:00:00" +(void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) +(label) tod_init::@return +(struct TIME_OF_DAY) tod_init::tod +(byte) tod_init::tod_HOURS +(byte) tod_init::tod_HOURS#0 +(byte) tod_init::tod_HOURS#1 +(byte) tod_init::tod_MIN +(byte) tod_init::tod_MIN#0 +(byte) tod_init::tod_MIN#1 +(byte) tod_init::tod_SEC +(byte) tod_init::tod_SEC#0 +(byte) tod_init::tod_SEC#1 +(byte) tod_init::tod_TENTHS +(byte) tod_init::tod_TENTHS#0 +(byte) tod_init::tod_TENTHS#1 +(struct TIME_OF_DAY()) tod_read() +(label) tod_read::@return +(byte) tod_read::hours +(byte) tod_read::hours#0 +(byte) tod_read::mins +(byte) tod_read::mins#0 +(struct TIME_OF_DAY) tod_read::return +(struct TIME_OF_DAY) tod_read::return#0 +(struct TIME_OF_DAY) tod_read::return#1 +(byte) tod_read::return_HOURS +(byte) tod_read::return_HOURS#0 +(byte) tod_read::return_HOURS#1 +(byte) tod_read::return_HOURS#2 +(byte) tod_read::return_HOURS#3 +(byte) tod_read::return_HOURS#4 +(byte) tod_read::return_MIN +(byte) tod_read::return_MIN#0 +(byte) tod_read::return_MIN#1 +(byte) tod_read::return_MIN#2 +(byte) tod_read::return_MIN#3 +(byte) tod_read::return_MIN#4 +(byte) tod_read::return_SEC +(byte) tod_read::return_SEC#0 +(byte) tod_read::return_SEC#1 +(byte) tod_read::return_SEC#2 +(byte) tod_read::return_SEC#3 +(byte) tod_read::return_SEC#4 +(byte) tod_read::return_TENTHS +(byte) tod_read::return_TENTHS#0 +(byte) tod_read::return_TENTHS#1 +(byte) tod_read::return_TENTHS#2 +(byte) tod_read::return_TENTHS#3 +(byte) tod_read::return_TENTHS#4 +(byte) tod_read::secs +(byte) tod_read::secs#0 +(byte) tod_read::tenths +(byte) tod_read::tenths#0 +(byte) tod_read::tod_HOURS +(byte) tod_read::tod_HOURS#0 +(byte) tod_read::tod_MIN +(byte) tod_read::tod_MIN#0 +(byte) tod_read::tod_SEC +(byte) tod_read::tod_SEC#0 +(byte) tod_read::tod_TENTHS +(byte) tod_read::tod_TENTHS#0 +(byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) +(byte~) tod_str::$0 +(byte~) tod_str::$1 +(number~) tod_str::$10 +(number~) tod_str::$11 +(byte~) tod_str::$12 +(byte~) tod_str::$13 +(number~) tod_str::$14 +(number~) tod_str::$15 +(number~) tod_str::$2 +(number~) tod_str::$3 +(byte~) tod_str::$4 +(byte~) tod_str::$5 +(number~) tod_str::$6 +(number~) tod_str::$7 +(byte~) tod_str::$8 +(byte~) tod_str::$9 +(label) tod_str::@return +(byte*) tod_str::return +(byte*) tod_str::return#0 +(byte*) tod_str::return#1 +(byte*) tod_str::return#2 +(byte*) tod_str::return#3 +(byte*) tod_str::return#4 +(struct TIME_OF_DAY) tod_str::tod +(byte) tod_str::tod_HOURS +(byte) tod_str::tod_HOURS#0 +(byte) tod_str::tod_HOURS#1 +(byte) tod_str::tod_MIN +(byte) tod_str::tod_MIN#0 +(byte) tod_str::tod_MIN#1 +(byte) tod_str::tod_SEC +(byte) tod_str::tod_SEC#0 +(byte) tod_str::tod_SEC#1 +(byte) tod_str::tod_TENTHS +(byte) tod_str::tod_TENTHS#0 +(byte) tod_str::tod_TENTHS#1 (byte()) toupper((byte) toupper::ch) (bool~) toupper::$0 (bool~) toupper::$1 @@ -3161,7 +3742,7 @@ Number of queens:" Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#2 > (number) 0 Adding number conversion cast (unumber) 0 in (bool~) strupr::$1 ← (number) 0 != *((byte*) strupr::src#2) -Adding number conversion cast (unumber) 0 in (bool~) strlen::$0 ← (number) 0 != *((byte*) strlen::str#2) +Adding number conversion cast (unumber) 0 in (bool~) strlen::$0 ← (number) 0 != *((byte*) strlen::str#3) Adding number conversion cast (unumber) 3 in (byte) uctoa::max_digits#1 ← (number) 3 Adding number conversion cast (unumber) 2 in (byte) uctoa::max_digits#2 ← (number) 2 Adding number conversion cast (unumber) 3 in (byte) uctoa::max_digits#3 ← (number) 3 @@ -3261,12 +3842,42 @@ Adding number conversion cast (snumber) 0 in (signed byte) printf_number_buffer: Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$30 ← (number) 0 != (byte) printf_number_buffer::buffer_sign#4 Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$31 ← (number) 0 != (byte) printf_number_buffer::format_upper_case#3 Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$32 ← (number) 0 != (byte) printf_number_buffer::format_zero_padding#5 +Adding number conversion cast (unumber) 0 in (bool~) printf_string::$14 ← (number) 0 != (byte) printf_string::format_min_length#1 +Adding number conversion cast (unumber) 0 in (bool~) printf_string::$15 ← (number) 0 != (byte) printf_string::format_justify_left#1 +Adding number conversion cast (snumber) 0 in (bool~) printf_string::$11 ← (signed byte) printf_string::padding#1 < (number) 0 +Adding number conversion cast (snumber) 0 in (signed byte) printf_string::padding#2 ← (number) 0 +Adding number conversion cast (unumber) $80 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (number) $80 +Adding number conversion cast (unumber) $7f in *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (number) $7f +Adding number conversion cast (unumber) 4 in (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#1 >> (number) 4 +Adding number conversion cast (unumber) 0 in *((const byte*) tod_buffer + (number) 0) ← (byte~) tod_str::$1 +Adding number conversion cast (unumber) $f in (number~) tod_str::$2 ← (byte) tod_str::tod_HOURS#1 & (number) $f +Adding number conversion cast (unumber) tod_str::$2 in (number~) tod_str::$2 ← (byte) tod_str::tod_HOURS#1 & (unumber)(number) $f +Adding number conversion cast (unumber) tod_str::$3 in (number~) tod_str::$3 ← (byte) '0' + (unumber~) tod_str::$2 +Adding number conversion cast (unumber) 1 in *((const byte*) tod_buffer + (number) 1) ← (unumber~) tod_str::$3 +Adding number conversion cast (unumber) 4 in (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#1 >> (number) 4 +Adding number conversion cast (unumber) 3 in *((const byte*) tod_buffer + (number) 3) ← (byte~) tod_str::$5 +Adding number conversion cast (unumber) $f in (number~) tod_str::$6 ← (byte) tod_str::tod_MIN#1 & (number) $f +Adding number conversion cast (unumber) tod_str::$6 in (number~) tod_str::$6 ← (byte) tod_str::tod_MIN#1 & (unumber)(number) $f +Adding number conversion cast (unumber) tod_str::$7 in (number~) tod_str::$7 ← (byte) '0' + (unumber~) tod_str::$6 +Adding number conversion cast (unumber) 4 in *((const byte*) tod_buffer + (number) 4) ← (unumber~) tod_str::$7 +Adding number conversion cast (unumber) 4 in (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#1 >> (number) 4 +Adding number conversion cast (unumber) 6 in *((const byte*) tod_buffer + (number) 6) ← (byte~) tod_str::$9 +Adding number conversion cast (unumber) $f in (number~) tod_str::$10 ← (byte) tod_str::tod_SEC#1 & (number) $f +Adding number conversion cast (unumber) tod_str::$10 in (number~) tod_str::$10 ← (byte) tod_str::tod_SEC#1 & (unumber)(number) $f +Adding number conversion cast (unumber) tod_str::$11 in (number~) tod_str::$11 ← (byte) '0' + (unumber~) tod_str::$10 +Adding number conversion cast (unumber) 7 in *((const byte*) tod_buffer + (number) 7) ← (unumber~) tod_str::$11 +Adding number conversion cast (unumber) 4 in (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#1 >> (number) 4 +Adding number conversion cast (unumber) 9 in *((const byte*) tod_buffer + (number) 9) ← (byte~) tod_str::$13 +Adding number conversion cast (unumber) $f in (number~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#1 & (number) $f +Adding number conversion cast (unumber) tod_str::$14 in (number~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#1 & (unumber)(number) $f +Adding number conversion cast (unumber) tod_str::$15 in (number~) tod_str::$15 ← (byte) '0' + (unumber~) tod_str::$14 +Adding number conversion cast (unumber) $a in *((const byte*) tod_buffer + (number) $a) ← (unumber~) tod_str::$15 Adding number conversion cast (unumber) 8 in (word) printf_uint::uvalue#0 ← (number) 8 Adding number conversion cast (unumber) 8+1 in (bool~) queens::$1 ← *((const byte*) board + (byte) queens::row#3) == (number) 8+(number) 1 Adding number conversion cast (unumber) 0 in *((const byte*) board + (byte) queens::row#4) ← (number) 0 -Adding number conversion cast (unumber) 1 in (bool~) queens::$5 ← (byte) queens::row#4 == (number) 1 -Adding number conversion cast (unumber) 0 in (bool~) queens::$6 ← (number) 0 != (byte~) queens::$2 -Adding number conversion cast (unumber) 8 in (bool~) queens::$3 ← (byte) queens::row#6 == (number) 8 +Adding number conversion cast (unumber) 1 in (bool~) queens::$6 ← (byte) queens::row#4 == (number) 1 +Adding number conversion cast (unumber) 0 in (bool~) queens::$8 ← (number) 0 != (byte~) queens::$2 +Adding number conversion cast (unumber) 8 in (bool~) queens::$4 ← (byte) queens::row#6 == (number) 8 Adding number conversion cast (unumber) 1 in (number~) legal::$0 ← (byte) legal::row#1 - (number) 1 Adding number conversion cast (unumber) legal::$0 in (number~) legal::$0 ← (byte) legal::row#1 - (unumber)(number) 1 Adding number conversion cast (unumber) 1 in (byte) legal::return#1 ← (number) 1 @@ -3316,12 +3927,14 @@ Inlining cast (unumber~) printf_ulong::$0 ← (unumber)(number) 0 Inlining cast (unumber~) printf_uint::$0 ← (unumber)(number) 0 Inlining cast (unumber~) printf_uchar::$0 ← (unumber)(number) 0 Inlining cast (signed byte) printf_number_buffer::padding#2 ← (snumber)(number) 0 +Inlining cast (signed byte) printf_string::padding#2 ← (snumber)(number) 0 Inlining cast (word) printf_uint::uvalue#0 ← (unumber)(number) 8 Inlining cast *((const byte*) board + (byte) queens::row#4) ← (unumber)(number) 0 Inlining cast (byte) legal::return#1 ← (unumber)(number) 1 Inlining cast (byte) legal::return#2 ← (unumber)(number) 0 Inlining cast (byte) legal::return#3 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -3379,6 +3992,28 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast $80 +Simplifying constant integer cast $7f +Simplifying constant integer cast 4 +Simplifying constant integer cast 0 +Simplifying constant integer cast $f +Simplifying constant integer cast 1 +Simplifying constant integer cast 4 +Simplifying constant integer cast 3 +Simplifying constant integer cast $f +Simplifying constant integer cast 4 +Simplifying constant integer cast 4 +Simplifying constant integer cast 6 +Simplifying constant integer cast $f +Simplifying constant integer cast 7 +Simplifying constant integer cast 4 +Simplifying constant integer cast 9 +Simplifying constant integer cast $f +Simplifying constant integer cast $a Simplifying constant integer cast 8 Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -3444,6 +4079,28 @@ Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 0 +Finalized unsigned number type (byte) $80 +Finalized unsigned number type (byte) $7f +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $f +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 3 +Finalized unsigned number type (byte) $f +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 6 +Finalized unsigned number type (byte) $f +Finalized unsigned number type (byte) 7 +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 9 +Finalized unsigned number type (byte) $f +Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 @@ -3466,6 +4123,14 @@ Inferred type updated to byte in (unumber~) printf_uint::$0 ← (byte) 0 Inferred type updated to byte for (unumber~) printf_uint::$2 Inferred type updated to byte in (unumber~) printf_uchar::$0 ← (byte) 0 Inferred type updated to byte for (unumber~) printf_uchar::$2 +Inferred type updated to byte in (unumber~) tod_str::$2 ← (byte) tod_str::tod_HOURS#1 & (byte) $f +Inferred type updated to byte in (unumber~) tod_str::$3 ← (byte) '0' + (byte~) tod_str::$2 +Inferred type updated to byte in (unumber~) tod_str::$6 ← (byte) tod_str::tod_MIN#1 & (byte) $f +Inferred type updated to byte in (unumber~) tod_str::$7 ← (byte) '0' + (byte~) tod_str::$6 +Inferred type updated to byte in (unumber~) tod_str::$10 ← (byte) tod_str::tod_SEC#1 & (byte) $f +Inferred type updated to byte in (unumber~) tod_str::$11 ← (byte) '0' + (byte~) tod_str::$10 +Inferred type updated to byte in (unumber~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#1 & (byte) $f +Inferred type updated to byte in (unumber~) tod_str::$15 ← (byte) '0' + (byte~) tod_str::$14 Inferred type updated to byte in (unumber~) legal::$0 ← (byte) legal::row#1 - (byte) 1 Inversing boolean not [33] (bool~) memset::$1 ← (word) memset::num#2 <= (byte) 0 from [32] (bool~) memset::$0 ← (word) memset::num#2 > (byte) 0 Inversing boolean not [341] (bool~) printf_char::$1 ← (byte) printf_cursor_x != (byte) $28 from [340] (bool~) printf_char::$0 ← (byte) printf_cursor_x == (byte) $28 @@ -3479,7 +4144,11 @@ Inversing boolean not [503] (bool~) printf_number_buffer::$23 ← (signed byte) Inversing boolean not [511] (bool~) printf_number_buffer::$7 ← (byte) 0 == (byte) printf_number_buffer::buffer_sign#4 from [510] (bool~) printf_number_buffer::$30 ← (byte) 0 != (byte) printf_number_buffer::buffer_sign#4 Inversing boolean not [528] (bool~) printf_number_buffer::$12 ← (byte) 0 == (byte) printf_number_buffer::format_upper_case#3 from [527] (bool~) printf_number_buffer::$31 ← (byte) 0 != (byte) printf_number_buffer::format_upper_case#3 Inversing boolean not [540] (bool~) printf_number_buffer::$14 ← (byte) 0 == (byte) printf_number_buffer::format_zero_padding#5 from [539] (bool~) printf_number_buffer::$32 ← (byte) 0 != (byte) printf_number_buffer::format_zero_padding#5 -Inversing boolean not [640] (bool~) legal::$6 ← (byte~) legal::$3 != (byte~) legal::$4 from [639] (bool~) legal::$5 ← (byte~) legal::$3 == (byte~) legal::$4 +Inversing boolean not [558] (bool~) printf_string::$0 ← (byte) 0 == (byte) printf_string::format_min_length#1 from [557] (bool~) printf_string::$14 ← (byte) 0 != (byte) printf_string::format_min_length#1 +Inversing boolean not [562] (bool~) printf_string::$1 ← (byte) 0 == (byte) printf_string::format_justify_left#1 from [561] (bool~) printf_string::$15 ← (byte) 0 != (byte) printf_string::format_justify_left#1 +Inversing boolean not [577] (bool~) printf_string::$12 ← (signed byte) printf_string::padding#1 >= (signed byte) 0 from [576] (bool~) printf_string::$11 ← (signed byte) printf_string::padding#1 < (signed byte) 0 +Inversing boolean not [737] (bool~) queens::$3 ← (byte) 0 == (byte~) queens::$2 from [736] (bool~) queens::$8 ← (byte) 0 != (byte~) queens::$2 +Inversing boolean not [796] (bool~) legal::$6 ← (byte~) legal::$3 != (byte~) legal::$4 from [795] (bool~) legal::$5 ← (byte~) legal::$3 == (byte~) legal::$4 Successful SSA optimization Pass2UnaryNotSimplification Alias candidate removed (volatile)printf_cursor_ptr = printf_ln::$1 printf_scroll::$4 Alias toupper::ch#1 = toupper::ch#2 toupper::ch#3 toupper::return#1 @@ -3503,8 +4172,8 @@ Alias strupr::src#0 = strupr::str#1 Alias strupr::src#2 = strupr::src#3 strupr::src#4 Alias strupr::str#2 = strupr::str#5 strupr::str#3 strupr::str#4 strupr::return#0 strupr::return#3 strupr::return#1 Alias toupper::return#3 = toupper::return#5 -Alias strlen::len#2 = strlen::len#4 strlen::len#3 strlen::return#0 strlen::return#3 strlen::return#1 -Alias strlen::str#2 = strlen::str#3 +Alias strlen::len#2 = strlen::len#4 strlen::len#3 strlen::return#0 strlen::return#4 strlen::return#1 +Alias strlen::str#3 = strlen::str#4 Alias uctoa::value#10 = uctoa::value#8 uctoa::value#12 uctoa::value#13 uctoa::value#9 uctoa::value#14 uctoa::value#15 uctoa::value#11 Alias uctoa::buffer#10 = uctoa::buffer#17 uctoa::buffer#21 uctoa::buffer#16 uctoa::buffer#18 uctoa::buffer#13 uctoa::buffer#19 uctoa::buffer#20 uctoa::buffer#6 Alias uctoa::radix#1 = uctoa::radix#2 uctoa::radix#3 uctoa::radix#4 @@ -3553,12 +4222,12 @@ Alias ultoa_append::digit#2 = ultoa_append::digit#4 ultoa_append::digit#3 Alias ultoa_append::value#2 = ultoa_append::value#3 ultoa_append::value#4 ultoa_append::return#1 ultoa_append::return#4 ultoa_append::return#2 Alias ultoa_append::sub#1 = ultoa_append::sub#2 Alias ultoa_append::buffer#1 = ultoa_append::buffer#4 ultoa_append::buffer#2 -Alias printf_padding::pad#3 = printf_padding::pad#4 printf_padding::pad#6 +Alias printf_padding::pad#5 = printf_padding::pad#6 printf_padding::pad#8 Alias printf_padding::i#2 = printf_padding::i#4 printf_padding::i#3 -Alias printf_padding::length#3 = printf_padding::length#6 printf_padding::length#5 -Alias printf_str::str#10 = printf_str::str#9 +Alias printf_padding::length#5 = printf_padding::length#8 printf_padding::length#7 +Alias printf_str::str#11 = printf_str::str#12 Alias printf_str::ch#0 = printf_str::ch#1 printf_str::ch#2 -Alias printf_str::str#0 = printf_str::str#16 printf_str::str#14 printf_str::str#12 printf_str::str#15 printf_str::str#13 +Alias printf_str::str#0 = printf_str::str#18 printf_str::str#16 printf_str::str#14 printf_str::str#17 printf_str::str#15 Alias printf_ulong::uvalue#2 = printf_ulong::uvalue#4 printf_ulong::uvalue#3 Alias printf_ulong::format_radix#3 = printf_ulong::format_radix#5 printf_ulong::format_radix#4 Alias printf_ulong::format_min_length#3 = printf_ulong::format_min_length#5 printf_ulong::format_min_length#4 @@ -3604,7 +4273,7 @@ Alias printf_number_buffer::format_min_length#3 = printf_number_buffer::format_m Alias printf_number_buffer::format_justify_left#10 = printf_number_buffer::format_justify_left#13 printf_number_buffer::format_justify_left#5 printf_number_buffer::format_justify_left#9 Alias printf_number_buffer::format_zero_padding#12 = printf_number_buffer::format_zero_padding#18 printf_number_buffer::format_zero_padding#6 printf_number_buffer::format_zero_padding#13 Alias printf_number_buffer::format_upper_case#12 = printf_number_buffer::format_upper_case#18 printf_number_buffer::format_upper_case#16 printf_number_buffer::format_upper_case#17 -Alias strlen::return#2 = strlen::return#4 +Alias strlen::return#2 = strlen::return#5 Alias printf_number_buffer::padding#1 = printf_number_buffer::$21 Alias printf_number_buffer::len#0 = printf_number_buffer::len#3 Alias printf_number_buffer::format_justify_left#6 = printf_number_buffer::format_justify_left#7 @@ -3636,34 +4305,62 @@ Alias printf_number_buffer::buffer_digits#5 = printf_number_buffer::buffer_digit Alias printf_number_buffer::format_zero_padding#16 = printf_number_buffer::format_zero_padding#21 printf_number_buffer::format_zero_padding#17 Alias printf_number_buffer::format_justify_left#11 = printf_number_buffer::format_justify_left#16 printf_number_buffer::format_justify_left#12 Alias printf_number_buffer::padding#14 = printf_number_buffer::padding#17 printf_number_buffer::padding#15 -Alias count#16 = count#35 count#40 count#31 count#22 -Alias count#1 = count#8 count#9 count#2 +Alias printf_string::str#1 = printf_string::str#3 printf_string::str#7 printf_string::str#6 +Alias printf_string::format_min_length#1 = printf_string::format_min_length#3 printf_string::format_min_length#2 +Alias printf_string::format_justify_left#3 = printf_string::format_justify_left#7 printf_string::format_justify_left#5 printf_string::format_justify_left#4 +Alias strlen::return#3 = strlen::return#6 +Alias printf_string::padding#1 = printf_string::$10 +Alias printf_string::format_justify_left#2 = printf_string::format_justify_left#6 +Alias printf_string::padding#4 = printf_string::padding#7 printf_string::padding#6 +Alias printf_string::padding#3 = printf_string::padding#5 printf_string::padding#8 +Alias printf_string::str#4 = printf_string::str#8 printf_string::str#5 +Alias printf_string::format_justify_left#1 = printf_string::format_justify_left#9 printf_string::format_justify_left#8 +Alias tod_read::return_TENTHS#0 = tod_read::tod_TENTHS#0 tod_read::tenths#0 tod_read::return_TENTHS#3 tod_read::return_TENTHS#1 +Alias tod_read::return_SEC#0 = tod_read::tod_SEC#0 tod_read::secs#0 tod_read::return_SEC#3 tod_read::return_SEC#1 +Alias tod_read::return_MIN#0 = tod_read::tod_MIN#0 tod_read::mins#0 tod_read::return_MIN#3 tod_read::return_MIN#1 +Alias tod_read::return_HOURS#0 = tod_read::tod_HOURS#0 tod_read::hours#0 tod_read::return_HOURS#3 tod_read::return_HOURS#1 +Alias tod_str::return#0 = tod_str::return#3 tod_str::return#1 +Alias count#12 = count#32 count#33 count#30 count#27 count#19 +Alias count#1 = count#6 count#31 count#28 count#20 count#13 count#7 count#2 +Alias tod_read::return_TENTHS#2 = tod_read::return_TENTHS#4 +Alias tod_read::return_SEC#2 = tod_read::return_SEC#4 +Alias tod_read::return_MIN#2 = tod_read::return_MIN#4 +Alias tod_read::return_HOURS#2 = tod_read::return_HOURS#4 +Alias main::tod_TENTHS#0 = main::$5_TENTHS +Alias main::tod_SEC#0 = main::$5_SEC +Alias main::tod_MIN#0 = main::$5_MIN +Alias main::tod_HOURS#0 = main::$5_HOURS +Alias tod_str::return#2 = tod_str::return#4 +Alias printf_string::str#0 = main::$6 Alias queens::row#10 = queens::row#3 queens::row#9 queens::row#4 queens::row#5 queens::row#6 queens::row#12 queens::row#11 queens::row#7 queens::row#8 -Alias count#17 = count#27 count#18 count#19 count#32 count#26 count#28 count#24 count#25 +Alias count#14 = count#26 count#15 count#16 count#29 count#25 count#8 count#23 count#24 Alias legal::return#0 = legal::return#5 -Alias count#10 = count#3 -Alias count#11 = count#4 -Alias legal::i#2 = legal::i#3 legal::i#4 legal::i#5 legal::i#7 legal::i#6 -Alias legal::column#1 = legal::column#3 legal::column#2 legal::column#7 legal::column#6 legal::column#5 -Alias legal::row#1 = legal::row#6 legal::row#5 legal::row#2 legal::row#7 legal::row#4 -Alias diff::return#0 = diff::return#5 -Alias diff::return#1 = diff::return#6 +Alias count#22 = count#3 +Alias count#4 = count#9 +Alias legal::i#10 = legal::i#3 legal::i#2 legal::i#4 legal::i#12 legal::i#9 +Alias legal::column#1 = legal::column#3 legal::column#2 legal::diff1_b#0 legal::diff1_b#1 legal::column#15 legal::diff1_b#2 legal::column#13 legal::diff1_b#3 legal::column#14 +Alias legal::row#1 = legal::row#14 legal::row#11 legal::row#9 legal::row#6 legal::row#7 +Alias legal::diff1_a#0 = legal::diff1_a#1 legal::diff1_a#2 legal::diff1_a#3 +Alias legal::diff1_return#0 = legal::diff1_$2 +Alias legal::diff1_return#1 = legal::diff1_$1 +Alias legal::diff1_return#2 = legal::diff1_return#3 legal::diff1_return#4 legal::$3 +Alias legal::i#13 = legal::i#5 legal::i#7 legal::diff2_a#0 legal::diff2_a#1 legal::i#15 legal::diff2_a#2 legal::diff2_a#3 legal::i#14 +Alias legal::row#12 = legal::row#2 legal::row#5 legal::diff2_b#0 legal::diff2_b#1 legal::row#15 legal::diff2_b#2 legal::diff2_b#3 legal::row#13 +Alias legal::column#10 = legal::column#11 legal::column#12 legal::column#8 legal::column#9 +Alias legal::diff2_return#0 = legal::diff2_$2 +Alias legal::diff2_return#1 = legal::diff2_$1 +Alias legal::diff2_return#2 = legal::diff2_return#3 legal::diff2_return#4 legal::$4 +Alias legal::i#11 = legal::i#8 legal::i#6 +Alias legal::row#10 = legal::row#8 legal::row#4 +Alias legal::column#5 = legal::column#6 legal::column#7 Alias legal::return#4 = legal::return#6 -Alias diff::b#2 = diff::b#3 diff::b#4 -Alias diff::a#2 = diff::a#3 diff::a#4 -Alias diff::return#2 = diff::$2 -Alias diff::return#3 = diff::$1 -Alias diff::return#4 = diff::return#7 -Alias count#13 = count#5 count#41 count#36 +Alias count#10 = count#17 Alias print::i#2 = print::i#3 print::i#4 -Alias count#29 = count#42 count#33 count#37 Alias print::i1#2 = print::i1#6 print::i1#3 print::i1#9 -Alias count#14 = count#46 count#20 count#43 count#39 count#6 Alias print::i1#10 = print::i1#4 print::i1#7 print::i1#5 print::i1#12 print::i1#13 print::i1#11 Alias print::j#2 = print::j#3 print::j#7 print::j#5 print::j#8 print::j#6 -Alias count#30 = count#49 count#34 count#47 count#44 count#48 count#45 -Alias count#0 = count#21 -Alias count#15 = count#7 +Alias count#0 = count#18 +Alias count#11 = count#5 Successful SSA optimization Pass2AliasElimination Alias candidate removed (volatile)printf_cursor_ptr = printf_ln::$1 printf_scroll::$4 Alias uctoa::value#10 = uctoa::value#7 @@ -3714,10 +4411,15 @@ Alias printf_number_buffer::padding#10 = printf_number_buffer::padding#12 printf Alias printf_number_buffer::format_upper_case#10 = printf_number_buffer::format_upper_case#11 printf_number_buffer::format_upper_case#4 printf_number_buffer::format_upper_case#3 Alias printf_number_buffer::buffer_digits#10 = printf_number_buffer::buffer_digits#11 printf_number_buffer::buffer_digits#14 printf_number_buffer::buffer_digits#5 printf_number_buffer::buffer_digits#4 Alias printf_number_buffer::format_justify_left#11 = printf_number_buffer::format_justify_left#17 printf_number_buffer::format_justify_left#20 printf_number_buffer::format_justify_left#14 printf_number_buffer::format_justify_left#4 -Alias count#11 = count#17 +Alias printf_string::format_justify_left#1 = printf_string::format_justify_left#3 printf_string::format_justify_left#2 +Alias printf_string::str#1 = printf_string::str#4 printf_string::str#2 +Alias printf_string::padding#3 = printf_string::padding#4 +Alias count#14 = count#4 +Alias legal::i#10 = legal::i#13 legal::i#11 +Alias legal::row#1 = legal::row#12 legal::row#10 +Alias legal::column#1 = legal::column#10 legal::column#5 Alias print::j#2 = print::j#4 Alias print::i1#10 = print::i1#8 -Alias count#30 = count#38 Successful SSA optimization Pass2AliasElimination Alias candidate removed (volatile)printf_cursor_ptr = printf_ln::$1 printf_scroll::$4 Alias printf_number_buffer::format_justify_left#10 = printf_number_buffer::format_justify_left#11 @@ -3738,7 +4440,6 @@ Identical Phi Values (void*) memset::str#5 (void*) memset::str#3 Identical Phi Values (byte) memset::c#2 (byte) memset::c#4 Identical Phi Values (byte*) strupr::src#0 (byte*) strupr::str#0 Identical Phi Values (byte*) strupr::str#2 (byte*) strupr::src#0 -Identical Phi Values (byte*) strlen::str#4 (byte*) strlen::str#1 Identical Phi Values (byte) uctoa::radix#1 (byte) uctoa::radix#0 Identical Phi Values (byte) uctoa::value#10 (byte) uctoa::value#1 Identical Phi Values (byte*) uctoa::buffer#10 (byte*) uctoa::buffer#5 @@ -3769,8 +4470,8 @@ Identical Phi Values (dword) ultoa_append::sub#3 (dword) ultoa_append::sub#0 Identical Phi Values (byte*) ultoa_append::buffer#3 (byte*) ultoa_append::buffer#0 Identical Phi Values (dword) ultoa_append::sub#1 (dword) ultoa_append::sub#3 Identical Phi Values (byte*) ultoa_append::buffer#1 (byte*) ultoa_append::buffer#3 -Identical Phi Values (byte) printf_padding::length#3 (byte) printf_padding::length#4 -Identical Phi Values (byte) printf_padding::pad#3 (byte) printf_padding::pad#5 +Identical Phi Values (byte) printf_padding::length#5 (byte) printf_padding::length#6 +Identical Phi Values (byte) printf_padding::pad#5 (byte) printf_padding::pad#7 Identical Phi Values (byte) printf_ulong::format_sign_always#1 (byte) printf_ulong::format_sign_always#0 Identical Phi Values (dword) printf_ulong::uvalue#1 (dword) printf_ulong::uvalue#0 Identical Phi Values (byte) printf_ulong::format_radix#1 (byte) printf_ulong::format_radix#0 @@ -3785,28 +4486,35 @@ Identical Phi Values (byte) printf_uint::format_min_length#1 (byte) printf_uint: Identical Phi Values (byte) printf_uint::format_justify_left#1 (byte) printf_uint::format_justify_left#0 Identical Phi Values (byte) printf_uint::format_zero_padding#1 (byte) printf_uint::format_zero_padding#0 Identical Phi Values (byte) printf_uint::format_upper_case#1 (byte) printf_uint::format_upper_case#0 -Identical Phi Values (dword) count#16 (dword) count#0 -Identical Phi Values (dword) count#1 (dword) count#11 -Identical Phi Values (dword) count#23 (dword) count#16 -Identical Phi Values (dword) count#10 (dword) count#14 +Identical Phi Values (byte) printf_string::format_min_length#1 (byte) printf_string::format_min_length#0 +Identical Phi Values (byte) printf_string::format_justify_left#1 (byte) printf_string::format_justify_left#0 +Identical Phi Values (byte*) printf_string::str#1 (byte*) printf_string::str#0 +Identical Phi Values (byte) tod_init::tod_HOURS#1 (byte) tod_init::tod_HOURS#0 +Identical Phi Values (byte) tod_init::tod_MIN#1 (byte) tod_init::tod_MIN#0 +Identical Phi Values (byte) tod_init::tod_SEC#1 (byte) tod_init::tod_SEC#0 +Identical Phi Values (byte) tod_init::tod_TENTHS#1 (byte) tod_init::tod_TENTHS#0 +Identical Phi Values (byte) tod_str::tod_HOURS#1 (byte) tod_str::tod_HOURS#0 +Identical Phi Values (byte) tod_str::tod_MIN#1 (byte) tod_str::tod_MIN#0 +Identical Phi Values (byte) tod_str::tod_SEC#1 (byte) tod_str::tod_SEC#0 +Identical Phi Values (byte) tod_str::tod_TENTHS#1 (byte) tod_str::tod_TENTHS#0 +Identical Phi Values (dword) count#12 (dword) count#0 +Identical Phi Values (dword) count#1 (dword) count#14 +Identical Phi Values (dword) count#21 (dword) count#12 Identical Phi Values (byte) legal::row#3 (byte) legal::row#0 Identical Phi Values (byte) legal::column#4 (byte) legal::column#0 Identical Phi Values (byte) legal::row#1 (byte) legal::row#3 Identical Phi Values (byte) legal::column#1 (byte) legal::column#4 -Identical Phi Values (dword) count#12 (dword) count#11 -Identical Phi Values (dword) count#29 (dword) count#13 +Identical Phi Values (dword) count#10 (dword) count#22 Identical Phi Values (byte) print::i1#10 (byte) print::i1#2 -Identical Phi Values (dword) count#30 (dword) count#14 -Identical Phi Values (dword) count#15 (dword) count#1 +Identical Phi Values (dword) count#11 (dword) count#1 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (void*) memset::return#0 (void*) memset::str#3 -Identical Phi Values (dword) count#14 (dword) count#13 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) memcpy::$1 [15] if((byte*) memcpy::src#2!=(byte*) memcpy::src_end#0) goto memcpy::@2 Simple Condition (bool~) memset::$1 [22] if((word) memset::num#2<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$3 [29] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@4 Simple Condition (bool~) strupr::$1 [36] if((byte) 0!=*((byte*) strupr::src#2)) goto strupr::@2 -Simple Condition (bool~) strlen::$0 [48] if((byte) 0!=*((byte*) strlen::str#2)) goto strlen::@2 +Simple Condition (bool~) strlen::$0 [48] if((byte) 0!=*((byte*) strlen::str#3)) goto strlen::@2 Simple Condition (bool~) uctoa::$0 [56] if((byte) uctoa::radix#0==(const byte) DECIMAL) goto uctoa::@1 Simple Condition (bool~) uctoa::$1 [60] if((byte) uctoa::radix#0==(const byte) HEXADECIMAL) goto uctoa::@2 Simple Condition (bool~) uctoa::$2 [64] if((byte) uctoa::radix#0==(const byte) OCTAL) goto uctoa::@3 @@ -3827,7 +4535,7 @@ Simple Condition (bool~) ultoa::$5 [209] if((byte) ultoa::digit#2<(byte~) ultoa: Simple Condition (bool~) ultoa_append::$0 [234] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 Simple Condition (bool~) printf_char::$1 [256] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return Simple Condition (bool~) printf_scroll::$1 [269] if((byte) printf_cursor_y!=(byte) $19) goto printf_scroll::@return -Simple Condition (bool~) printf_padding::$0 [288] if((byte) printf_padding::i#2<(byte) printf_padding::length#4) goto printf_padding::@2 +Simple Condition (bool~) printf_padding::$0 [288] if((byte) printf_padding::i#2<(byte) printf_padding::length#6) goto printf_padding::@2 Simple Condition (bool~) printf_str::$1 [299] if((byte) printf_str::ch#0!=(byte) 0) goto printf_str::@3 Simple Condition (bool~) printf_str::$2 [301] if((byte) printf_str::ch#0==(byte) ' ') goto printf_str::@4 @@ -3839,18 +4547,22 @@ Simple Condition (bool~) printf_number_buffer::$20 [386] if((byte) 0==(byte) pri Simple Condition (bool~) printf_number_buffer::$23 [391] if((signed byte) printf_number_buffer::padding#1>=(signed byte) 0) goto printf_number_buffer::@1 Simple Condition (bool~) printf_number_buffer::$7 [395] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 Simple Condition (bool~) printf_number_buffer::$12 [405] if((byte) 0==(byte) printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 -Simple Condition (bool~) queens::$1 [447] if(*((const byte*) board + (byte) queens::row#10)==(byte)(number) 8+(number) 1) goto queens::@3 -Simple Condition (bool~) queens::$5 [450] if((byte) queens::row#10==(byte) 1) goto queens::@return -Simple Condition (bool~) queens::$6 [457] if((byte) 0!=(byte~) queens::$2) goto queens::@4 -Simple Condition (bool~) queens::$3 [459] if((byte) queens::row#10==(byte) 8) goto queens::@5 -Simple Condition (bool~) legal::$1 [470] if((byte) legal::i#2<=(byte~) legal::$0) goto legal::@2 -Simple Condition (bool~) legal::$2 [472] if(*((const byte*) board + (byte) legal::i#2)==(byte) legal::column#0) goto legal::@4 -Simple Condition (bool~) legal::$6 [486] if((byte~) legal::$3!=(byte~) legal::$4) goto legal::@5 -Simple Condition (bool~) diff::$0 [493] if((byte) diff::a#2<(byte) diff::b#2) goto diff::@1 -Simple Condition (bool~) print::$1 [515] if((byte) print::i#2<=(byte) 8) goto print::@2 -Simple Condition (bool~) print::$3 [528] if((byte) print::i1#2<=(byte) 8) goto print::@5 -Simple Condition (bool~) print::$5 [542] if((byte) print::j#2<=(byte) 8) goto print::@7 -Simple Condition (bool~) print::$6 [544] if(*((const byte*) board + (byte) print::i1#2)==(byte) print::j#2) goto print::@9 +Simple Condition (bool~) printf_string::$0 [426] if((byte) 0==(byte) printf_string::format_min_length#0) goto printf_string::@1 +Simple Condition (bool~) printf_string::$12 [440] if((signed byte) printf_string::padding#1>=(signed byte) 0) goto printf_string::@1 +Simple Condition (bool~) queens::$7 [544] if((number) 0!=(number) 1) goto queens::@2 +Simple Condition (bool~) queens::$1 [547] if(*((const byte*) board + (byte) queens::row#10)==(byte)(number) 8+(number) 1) goto queens::@3 +Simple Condition (bool~) queens::$6 [550] if((byte) queens::row#10==(byte) 1) goto queens::@return +Simple Condition (bool~) queens::$3 [557] if((byte) 0==(byte~) queens::$2) goto queens::@1 +Simple Condition (bool~) queens::$4 [559] if((byte) queens::row#10==(byte) 8) goto queens::@4 +Simple Condition (bool~) legal::$1 [570] if((byte) legal::i#10<=(byte~) legal::$0) goto legal::@2 +Simple Condition (bool~) legal::$2 [572] if(*((const byte*) board + (byte) legal::i#10)==(byte) legal::column#0) goto legal::@4 +Simple Condition (bool~) legal::diff1_$0 [577] if((byte) legal::diff1_a#0<(byte) legal::column#0) goto legal::diff1_@1 +Simple Condition (bool~) legal::diff2_$0 [582] if((byte) legal::i#10<(byte) legal::row#0) goto legal::diff2_@1 +Simple Condition (bool~) legal::$6 [587] if((byte) legal::diff1_return#2!=(byte) legal::diff2_return#2) goto legal::@5 +Simple Condition (bool~) print::$1 [608] if((byte) print::i#2<=(byte) 8) goto print::@2 +Simple Condition (bool~) print::$3 [621] if((byte) print::i1#2<=(byte) 8) goto print::@5 +Simple Condition (bool~) print::$5 [635] if((byte) print::j#2<=(byte) 8) goto print::@7 +Simple Condition (bool~) print::$6 [637] if(*((const byte*) board + (byte) print::i1#2)==(byte) print::j#2) goto print::@9 Successful SSA optimization Pass2ConditionalJumpSimplification Rewriting && if()-condition to two if()s [3] (bool~) toupper::$2 ← (bool~) toupper::$0 && (bool~) toupper::$1 Rewriting ! if()-condition to reversed if() [89] (bool~) uctoa::$8 ← ! (bool~) uctoa::$7 @@ -3867,15 +4579,22 @@ Rewriting && if()-condition to two if()s [399] (bool~) printf_number_buffer::$9 Rewriting ! if()-condition to reversed if() [414] (bool~) printf_number_buffer::$17 ← ! (bool~) printf_number_buffer::$16 Rewriting && if()-condition to two if()s [413] (bool~) printf_number_buffer::$16 ← (bool~) printf_number_buffer::$15 && (signed byte) printf_number_buffer::padding#10 Rewriting && if()-condition to two if()s [412] (bool~) printf_number_buffer::$15 ← (byte) printf_number_buffer::format_justify_left#10 && (bool~) printf_number_buffer::$14 +Rewriting ! if()-condition to reversed if() [430] (bool~) printf_string::$3 ← ! (bool~) printf_string::$2 +Rewriting && if()-condition to two if()s [429] (bool~) printf_string::$2 ← (bool~) printf_string::$1 && (signed byte) printf_string::padding#3 +Rewriting ! if()-condition to reversed if() [445] (bool~) printf_string::$7 ← ! (bool~) printf_string::$6 +Rewriting && if()-condition to two if()s [444] (bool~) printf_string::$6 ← (byte) printf_string::format_justify_left#0 && (signed byte) printf_string::padding#3 Successful SSA optimization Pass2ConditionalAndOrRewriting Warning! Adding boolean cast to non-boolean condition (byte) uctoa::started#2 Warning! Adding boolean cast to non-boolean condition (byte) utoa::started#2 Warning! Adding boolean cast to non-boolean condition (byte) ultoa::started#2 Warning! Adding boolean cast to non-boolean condition (byte) printf_number_buffer::format_zero_padding#10 Warning! Adding boolean cast to non-boolean condition (byte) printf_number_buffer::format_justify_left#10 +Warning! Adding boolean cast to non-boolean condition (byte) printf_string::format_justify_left#0 Warning! Adding boolean cast to non-boolean condition (signed byte) printf_number_buffer::padding#10 Warning! Adding boolean cast to non-boolean condition (signed byte) printf_number_buffer::padding#10 Warning! Adding boolean cast to non-boolean condition (signed byte) printf_number_buffer::padding#10 +Warning! Adding boolean cast to non-boolean condition (signed byte) printf_string::padding#3 +Warning! Adding boolean cast to non-boolean condition (signed byte) printf_string::padding#3 Constant right-side identified [244] (word) memset::num#0 ← (unumber)(number) $28*(number) $19 Constant right-side identified [272] (word) memcpy::num#0 ← (unumber)(number) $28*(number) $19-(number) $28 Successful SSA optimization Pass2ConstantRValueConsolidation @@ -3949,9 +4668,14 @@ Constant (const signed byte) printf_number_buffer::padding#2 = 0 Constant (const byte) printf_padding::pad#0 = ' ' Constant (const byte) printf_padding::pad#1 = '0' Constant (const byte) printf_padding::pad#2 = ' ' +Constant (const signed byte) printf_string::padding#0 = 0 +Constant (const signed byte) printf_string::padding#2 = 0 +Constant (const byte) printf_padding::pad#3 = ' ' +Constant (const byte) printf_padding::pad#4 = ' ' +Constant (const byte*) tod_str::return#0 = tod_buffer Constant (const dword) count#0 = 0 -Constant (const byte*) printf_str::str#2 = main::str -Constant (const byte*) printf_str::str#3 = main::str1 +Constant (const byte*) printf_str::str#3 = main::str +Constant (const byte*) printf_str::str#4 = main::str1 Constant (const word) printf_uint::uvalue#0 = 8 Constant (const byte) printf_uint::format_min_length#0 = 0 Constant (const byte) printf_uint::format_justify_left#0 = 0 @@ -3959,19 +4683,22 @@ Constant (const byte) printf_uint::format_sign_always#0 = 0 Constant (const byte) printf_uint::format_zero_padding#0 = 0 Constant (const byte) printf_uint::format_upper_case#0 = 0 Constant (const byte) printf_uint::format_radix#0 = DECIMAL +Constant (const byte*) printf_str::str#5 = main::str2 +Constant (const byte) printf_string::format_min_length#0 = 0 +Constant (const byte) printf_string::format_justify_left#0 = 0 Constant (const byte) queens::row#0 = 1 Constant (const byte) legal::i#0 = 1 Constant (const byte) legal::return#1 = 1 Constant (const byte) legal::return#2 = 0 Constant (const byte) legal::return#3 = 0 -Constant (const byte*) printf_str::str#4 = print::str +Constant (const byte*) printf_str::str#6 = print::str Constant (const byte) printf_ulong::format_min_length#0 = 0 Constant (const byte) printf_ulong::format_justify_left#0 = 0 Constant (const byte) printf_ulong::format_sign_always#0 = 0 Constant (const byte) printf_ulong::format_zero_padding#0 = 0 Constant (const byte) printf_ulong::format_upper_case#0 = 0 Constant (const byte) printf_ulong::format_radix#0 = DECIMAL -Constant (const byte*) printf_str::str#5 = print::str1 +Constant (const byte*) printf_str::str#7 = print::str1 Constant (const byte) print::i#0 = 1 Constant (const byte) printf_uchar::format_min_length#0 = 0 Constant (const byte) printf_uchar::format_justify_left#0 = 0 @@ -3980,7 +4707,7 @@ Constant (const byte) printf_uchar::format_zero_padding#0 = 0 Constant (const byte) printf_uchar::format_upper_case#0 = 0 Constant (const byte) printf_uchar::format_radix#0 = HEXADECIMAL Constant (const byte) print::i1#0 = 1 -Constant (const byte*) printf_str::str#6 = print::str2 +Constant (const byte*) printf_str::str#8 = print::str2 Constant (const byte) printf_uchar::format_min_length#1 = 0 Constant (const byte) printf_uchar::format_justify_left#1 = 0 Constant (const byte) printf_uchar::format_sign_always#1 = 0 @@ -3988,8 +4715,8 @@ Constant (const byte) printf_uchar::format_zero_padding#1 = 0 Constant (const byte) printf_uchar::format_upper_case#1 = 0 Constant (const byte) printf_uchar::format_radix#1 = HEXADECIMAL Constant (const byte) print::j#0 = 1 -Constant (const byte*) printf_str::str#7 = print::str3 -Constant (const byte*) printf_str::str#8 = print::str4 +Constant (const byte*) printf_str::str#9 = print::str3 +Constant (const byte*) printf_str::str#10 = print::str4 Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) memcpy::src#0 = (byte*)memcpy::source#0 Constant (const byte*) memcpy::dst#0 = (byte*)memcpy::destination#0 @@ -4010,6 +4737,13 @@ Constant (const byte) printf_number_buffer::format_sign_always#1 = printf_uint:: Constant (const byte) printf_number_buffer::format_zero_padding#1 = printf_uint::format_zero_padding#0 Constant (const byte) printf_number_buffer::format_upper_case#1 = printf_uint::format_upper_case#0 Constant (const byte) printf_number_buffer::format_radix#1 = printf_uint::format_radix#0 +Constant (const signed byte) printf_string::$13 = (signed byte)printf_string::format_min_length#0 +Constant (const byte*) tod_str::return#2 = tod_str::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant (const byte*) printf_string::str#0 = tod_str::return#2 +Successful SSA optimization Pass2ConstantIdentification +Constant (const byte*) strlen::str#2 = printf_string::str#0 +Constant (const byte*) printf_str::str#2 = printf_string::str#0 Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [117] if((const byte) utoa::radix#0==(const byte) DECIMAL) goto utoa::@1 if() condition always false - eliminating [121] if((const byte) utoa::radix#0==(const byte) HEXADECIMAL) goto utoa::@2 @@ -4022,23 +4756,31 @@ if() condition always false - eliminating [192] if((const byte) ultoa::radix#0== if() condition always true - replacing block destination [295] if(true) goto printf_str::@2 if() condition always false - eliminating [308] if((byte) 0!=(const byte) printf_ulong::format_sign_always#0) goto printf_ulong::@1 if() condition always false - eliminating [329] if((byte) 0!=(const byte) printf_uint::format_sign_always#0) goto printf_uint::@1 -if() condition always true - replacing block destination [444] if(true) goto queens::@2 +if() condition always true - replacing block destination [426] if((byte) 0==(const byte) printf_string::format_min_length#0) goto printf_string::@1 +if() condition always true - replacing block destination [544] if((number) 0!=(number) 1) goto queens::@2 Successful SSA optimization Pass2ConstantIfs -Rewriting conditional comparison [515] if((byte) print::i#2<=(byte) 8) goto print::@2 -Rewriting conditional comparison [528] if((byte) print::i1#2<=(byte) 8) goto print::@5 -Rewriting conditional comparison [542] if((byte) print::j#2<=(byte) 8) goto print::@7 +Rewriting conditional comparison [608] if((byte) print::i#2<=(byte) 8) goto print::@2 +Rewriting conditional comparison [621] if((byte) print::i1#2<=(byte) 8) goto print::@5 +Rewriting conditional comparison [635] if((byte) print::j#2<=(byte) 8) goto print::@7 +Simplifying constant evaluating to zero (signed byte)(const byte) printf_string::format_min_length#0 in +Successful SSA optimization PassNSimplifyConstantZero Simplifying expression containing zero (byte*)&printf_buffer in [312] *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) ← (byte~) printf_ulong::$2 Simplifying expression containing zero (byte*)&printf_buffer in [317] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) Simplifying expression containing zero (byte*)&printf_buffer in [333] *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) ← (byte~) printf_uint::$2 Simplifying expression containing zero (byte*)&printf_buffer in [338] (byte) printf_number_buffer::buffer_sign#1 ← *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) Simplifying expression containing zero (byte*)&printf_buffer in [354] *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) ← (byte~) printf_uchar::$2 Simplifying expression containing zero (byte*)&printf_buffer in [359] (byte) printf_number_buffer::buffer_sign#2 ← *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) +Simplifying expression containing zero printf_string::len#0 in [438] (signed byte) printf_string::padding#1 ← (const signed byte) printf_string::$13 - (signed byte) printf_string::len#0 +Simplifying expression containing zero tod_buffer in [472] *((const byte*) tod_buffer + (byte) 0) ← (byte~) tod_str::$1 +Simplifying expression containing zero (byte*)&TOD_ZERO in [511] (byte) tod_init::tod_TENTHS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_TENTHS) Successful SSA optimization PassNSimplifyExpressionWithZero -Eliminating unused variable (void*) memset::return#2 and assignment [151] (void*) memset::return#2 ← (void*) memset::str#3 -Eliminating unused variable (void*) memset::return#3 and assignment [175] (void*) memset::return#3 ← (void*) memset::str#3 -Eliminating unused variable (byte) printf_number_buffer::format_sign_always#2 and assignment [220] (byte) printf_number_buffer::format_sign_always#2 ← (byte) printf_uchar::format_sign_always#2 -Eliminating unused variable (byte) printf_number_buffer::format_radix#2 and assignment [223] (byte) printf_number_buffer::format_radix#2 ← (byte) printf_uchar::format_radix#2 -Eliminating unused variable (byte*) strupr::return#2 and assignment [260] (byte*) strupr::return#2 ← (byte*) strupr::str#0 +Eliminating unused variable (void*) memset::return#2 and assignment [152] (void*) memset::return#2 ← (void*) memset::str#3 +Eliminating unused variable (void*) memset::return#3 and assignment [176] (void*) memset::return#3 ← (void*) memset::str#3 +Eliminating unused variable (byte) printf_number_buffer::format_sign_always#2 and assignment [221] (byte) printf_number_buffer::format_sign_always#2 ← (byte) printf_uchar::format_sign_always#2 +Eliminating unused variable (byte) printf_number_buffer::format_radix#2 and assignment [224] (byte) printf_number_buffer::format_radix#2 ← (byte) printf_uchar::format_radix#2 +Eliminating unused variable (byte*) strupr::return#2 and assignment [261] (byte*) strupr::return#2 ← (byte*) strupr::str#0 +Eliminating unused variable (struct TIME_OF_DAY) tod_read::return#0 and assignment [293] (struct TIME_OF_DAY) tod_read::return#0 ← struct-unwound {(byte) tod_read::return_TENTHS#0, (byte) tod_read::return_SEC#0, (byte) tod_read::return_MIN#0, (byte) tod_read::return_HOURS#0} +Eliminating unused variable (struct TIME_OF_DAY) tod_read::return#1 and assignment [294] (struct TIME_OF_DAY) tod_read::return#1 ← struct-unwound {(byte) tod_read::return_TENTHS#0, (byte) tod_read::return_SEC#0, (byte) tod_read::return_MIN#0, (byte) tod_read::return_HOURS#0} Eliminating unused constant (const void*) memcpy::return#2 Eliminating unused constant (const byte) uctoa::max_digits#0 Eliminating unused constant (const byte*) uctoa::digit_values#0 @@ -4052,7 +4794,10 @@ Eliminating unused constant (const byte) printf_number_buffer::format_sign_alway Eliminating unused constant (const byte) printf_number_buffer::format_radix#0 Eliminating unused constant (const byte) printf_number_buffer::format_sign_always#1 Eliminating unused constant (const byte) printf_number_buffer::format_radix#1 +Eliminating unused constant (const byte) printf_string::format_min_length#0 +Eliminating unused constant (const signed byte) printf_string::$13 Eliminating unused constant (const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN +Eliminating unused constant (const byte) OFFSET_STRUCT_TIME_OF_DAY_TENTHS Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const byte) printf_ulong::format_sign_always#0 Eliminating unused constant (const byte) printf_ulong::format_radix#0 @@ -4065,6 +4810,10 @@ Eliminating variable (byte*) utoa::buffer#2 from unused block utoa::@9 Eliminating variable (byte*) ultoa::buffer#0 from unused block ultoa::@9 Eliminating variable (byte*) ultoa::buffer#1 from unused block ultoa::@9 Eliminating variable (byte*) ultoa::buffer#2 from unused block ultoa::@9 +Eliminating variable (word) strlen::return#3 from unused block printf_string::@3 +Eliminating variable (word~) printf_string::$9 from unused block printf_string::@7 +Eliminating variable (signed byte) printf_string::len#0 from unused block printf_string::@7 +Eliminating variable (signed byte) printf_string::padding#1 from unused block printf_string::@7 Removing unused block utoa::@6 Removing PHI-reference to removed block (utoa::@2) in block utoa::@5 Removing PHI-reference to removed block (utoa::@2) in block utoa::@5 @@ -4095,12 +4844,19 @@ Removing PHI-reference to removed block (printf_ulong::@1) in block printf_ulong Removing unused block printf_ulong::@1 Removing PHI-reference to removed block (printf_uint::@1) in block printf_uint::@3 Removing unused block printf_uint::@1 +Removing PHI-reference to removed block (printf_string::@3) in block strlen +Removing unused block printf_string::@3 +Removing PHI-reference to removed block (printf_string::@7) in block printf_string::@1 +Removing unused block printf_string::@7 +Removing PHI-reference to removed block (printf_string::@4) in block printf_string::@1 +Removing unused block printf_string::@4 Successful SSA optimization Pass2EliminateUnusedBlocks Adding number conversion cast (unumber) 0 in (bool~) uctoa::$11 ← (number) 0 != (byte) uctoa::started#2 Adding number conversion cast (unumber) 0 in (bool~) utoa::$12 ← (number) 0 != (byte) utoa::started#2 Adding number conversion cast (unumber) 0 in (bool~) ultoa::$12 ← (number) 0 != (byte) ultoa::started#2 Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$33 ← (number) 0 != (byte) printf_number_buffer::format_zero_padding#10 Adding number conversion cast (unumber) 0 in (bool~) printf_number_buffer::$34 ← (number) 0 != (byte) printf_number_buffer::format_justify_left#10 +Adding number conversion cast (unumber) 0 in (bool~) printf_string::$16 ← (number) 0 != (const byte) printf_string::format_justify_left#0 Adding number conversion cast (unumber) 8+1 in if((byte) print::i#2<(byte) 8+(number) 1) goto print::@2 Adding number conversion cast (unumber) 1 in if((byte) print::i#2<(unumber)(byte) 8+(number) 1) goto print::@2 Adding number conversion cast (unumber) 8+1 in if((byte) print::i1#2<(byte) 8+(number) 1) goto print::@5 @@ -4110,12 +4866,15 @@ Adding number conversion cast (unumber) 1 in if((byte) print::j#2<(unumber)(byte Adding number conversion cast (snumber) 0 in (bool~) printf_number_buffer::$35 ← (number) 0 != (signed byte) printf_number_buffer::padding#10 Adding number conversion cast (snumber) 0 in (bool~) printf_number_buffer::$36 ← (number) 0 != (signed byte) printf_number_buffer::padding#10 Adding number conversion cast (snumber) 0 in (bool~) printf_number_buffer::$37 ← (number) 0 != (signed byte) printf_number_buffer::padding#10 +Adding number conversion cast (snumber) 0 in (bool~) printf_string::$17 ← (number) 0 != (signed byte) printf_string::padding#3 +Adding number conversion cast (snumber) 0 in (bool~) printf_string::$18 ← (number) 0 != (signed byte) printf_string::padding#3 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Simplifying constant integer cast (byte) 8+(unumber)(number) 1 Simplifying constant integer cast 1 Simplifying constant integer cast (byte) 8+(unumber)(number) 1 @@ -4125,61 +4884,87 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 0 +Finalized signed number type (signed byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias candidate removed (volatile)printf_cursor_ptr = printf_ln::$1 printf_scroll::$4 +Identical Phi Values (byte*) strlen::str#5 (byte*) strlen::str#1 Identical Phi Values (byte) utoa::max_digits#7 (const byte) utoa::max_digits#1 Identical Phi Values (word*) utoa::digit_values#8 (const word*) utoa::digit_values#1 Identical Phi Values (byte) ultoa::max_digits#7 (const byte) ultoa::max_digits#1 Identical Phi Values (dword*) ultoa::digit_values#8 (const dword*) ultoa::digit_values#1 Identical Phi Values (byte~) printf_ulong::$2 (const byte) printf_ulong::$0 Identical Phi Values (byte~) printf_uint::$2 (const byte) printf_uint::$0 +Identical Phi Values (signed byte) printf_string::padding#3 (const signed byte) printf_string::padding#0 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) toupper::$0 [2] if((byte) toupper::ch#0>=(byte) 'a') goto toupper::@3 -Simple Condition (bool~) uctoa::$11 [56] if((byte) 0!=(byte) uctoa::started#2) goto uctoa::@14 -Simple Condition (bool~) utoa::$12 [84] if((byte) 0!=(byte) utoa::started#2) goto utoa::@14 -Simple Condition (bool~) ultoa::$12 [113] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@14 -Simple Condition (bool~) printf_number_buffer::$1 [213] if((byte) 0==(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@23 -Simple Condition (bool~) printf_number_buffer::$33 [229] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@24 -Simple Condition (bool~) printf_number_buffer::$34 [239] if((byte) 0!=(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@26 -Simple Condition (bool~) toupper::$1 [315] if((byte) toupper::ch#0<=(byte) 'z') goto toupper::@1 -Simple Condition (bool~) uctoa::$6 [316] if((byte) uctoa::value#2>=(byte) uctoa::digit_value#0) goto uctoa::@14 -Simple Condition (bool~) utoa::$6 [317] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@14 -Simple Condition (bool~) ultoa::$6 [318] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@14 -Simple Condition (bool~) printf_number_buffer::$35 [320] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@8 -Simple Condition (bool~) printf_number_buffer::$2 [321] if((byte) 0==(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@22 -Simple Condition (bool~) printf_number_buffer::$36 [323] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@10 -Simple Condition (bool~) printf_number_buffer::$37 [325] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@12 -Simple Condition (bool~) printf_number_buffer::$14 [326] if((byte) 0==(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@25 +Simple Condition (bool~) uctoa::$11 [57] if((byte) 0!=(byte) uctoa::started#2) goto uctoa::@14 +Simple Condition (bool~) utoa::$12 [85] if((byte) 0!=(byte) utoa::started#2) goto utoa::@14 +Simple Condition (bool~) ultoa::$12 [114] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@14 +Simple Condition (bool~) printf_number_buffer::$1 [214] if((byte) 0==(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@23 +Simple Condition (bool~) printf_number_buffer::$33 [230] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@24 +Simple Condition (bool~) printf_number_buffer::$34 [240] if((byte) 0!=(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@26 +Simple Condition (bool~) printf_string::$1 [248] if((byte) 0==(const byte) printf_string::format_justify_left#0) goto printf_string::@11 +Simple Condition (bool~) printf_string::$16 [251] if((byte) 0!=(const byte) printf_string::format_justify_left#0) goto printf_string::@12 +Simple Condition (bool~) toupper::$1 [378] if((byte) toupper::ch#0<=(byte) 'z') goto toupper::@1 +Simple Condition (bool~) uctoa::$6 [379] if((byte) uctoa::value#2>=(byte) uctoa::digit_value#0) goto uctoa::@14 +Simple Condition (bool~) utoa::$6 [380] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@14 +Simple Condition (bool~) ultoa::$6 [381] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@14 +Simple Condition (bool~) printf_number_buffer::$35 [383] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@8 +Simple Condition (bool~) printf_number_buffer::$2 [384] if((byte) 0==(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@22 +Simple Condition (bool~) printf_number_buffer::$36 [386] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@10 +Simple Condition (bool~) printf_number_buffer::$37 [388] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@12 +Simple Condition (bool~) printf_number_buffer::$14 [389] if((byte) 0==(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@25 +Simple Condition (bool~) printf_string::$17 [391] if((signed byte) 0!=(const signed byte) printf_string::padding#0) goto printf_string::@5 +Simple Condition (bool~) printf_string::$18 [393] if((signed byte) 0!=(const signed byte) printf_string::padding#0) goto printf_string::@6 Successful SSA optimization Pass2ConditionalJumpSimplification Negating conditional jump and destination [2] if((byte) toupper::ch#0<(byte) 'a') goto toupper::@2 -Negating conditional jump and destination [213] if((byte) 0!=(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 -Negating conditional jump and destination [229] if((byte) 0==(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 -Negating conditional jump and destination [239] if((byte) 0==(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return -Negating conditional jump and destination [321] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 -Negating conditional jump and destination [326] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return +Negating conditional jump and destination [214] if((byte) 0!=(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 +Negating conditional jump and destination [230] if((byte) 0==(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 +Negating conditional jump and destination [240] if((byte) 0==(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return +Negating conditional jump and destination [248] if((byte) 0!=(const byte) printf_string::format_justify_left#0) goto printf_string::@2 +Negating conditional jump and destination [251] if((byte) 0==(const byte) printf_string::format_justify_left#0) goto printf_string::@return +Negating conditional jump and destination [384] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 +Negating conditional jump and destination [389] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return Successful SSA optimization Pass2ConditionalJumpSequenceImprovement Constant right-side identified [6] (byte*) memcpy::src_end#0 ← (const byte*) memcpy::$2 + (const word) memcpy::num#0 -Constant right-side identified [42] (byte*) uctoa::buffer#0 ← ++ (const byte*) uctoa::buffer#5 -Constant right-side identified [78] (byte~) utoa::$4 ← (const byte) utoa::max_digits#1 - (byte) 1 -Constant right-side identified [107] (byte~) ultoa::$4 ← (const byte) ultoa::max_digits#1 - (byte) 1 +Constant right-side identified [43] (byte*) uctoa::buffer#0 ← ++ (const byte*) uctoa::buffer#5 +Constant right-side identified [79] (byte~) utoa::$4 ← (const byte) utoa::max_digits#1 - (byte) 1 +Constant right-side identified [108] (byte~) ultoa::$4 ← (const byte) ultoa::max_digits#1 - (byte) 1 +Constant right-side identified [252] (byte) printf_padding::length#3 ← (byte)(const signed byte) printf_string::padding#0 +Constant right-side identified [254] (byte) printf_padding::length#4 ← (byte)(const signed byte) printf_string::padding#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) memcpy::src_end#0 = memcpy::$2+memcpy::num#0 Constant (const byte*) uctoa::buffer#0 = ++uctoa::buffer#5 Constant (const byte) utoa::$4 = utoa::max_digits#1-1 Constant (const byte) ultoa::$4 = ultoa::max_digits#1-1 +Constant (const byte) printf_padding::length#3 = (byte)printf_string::padding#0 +Constant (const byte) printf_padding::length#4 = (byte)printf_string::padding#0 Successful SSA optimization Pass2ConstantIdentification +if() condition always false - eliminating [248] if((byte) 0!=(const byte) printf_string::format_justify_left#0) goto printf_string::@2 +if() condition always true - replacing block destination [251] if((byte) 0==(const byte) printf_string::format_justify_left#0) goto printf_string::@return +if() condition always false - eliminating [391] if((signed byte) 0!=(const signed byte) printf_string::padding#0) goto printf_string::@5 +if() condition always false - eliminating [393] if((signed byte) 0!=(const signed byte) printf_string::padding#0) goto printf_string::@6 +Successful SSA optimization Pass2ConstantIfs +Simplifying constant evaluating to zero (byte)(const signed byte) printf_string::padding#0 in +Simplifying constant evaluating to zero (byte)(const signed byte) printf_string::padding#0 in +Successful SSA optimization PassNSimplifyConstantZero +Eliminating unused constant (const byte*) strlen::str#2 Eliminating unused constant (const byte) utoa::max_digits#2 Eliminating unused constant (const word*) utoa::digit_values#2 Eliminating unused constant (const byte) utoa::max_digits#3 @@ -4194,6 +4979,9 @@ Eliminating unused constant (const byte) ultoa::max_digits#4 Eliminating unused constant (const dword*) ultoa::digit_values#4 Eliminating unused constant (const byte) printf_ulong::$1 Eliminating unused constant (const byte) printf_uint::$1 +Eliminating unused constant (const signed byte) printf_string::padding#0 +Eliminating unused constant (const signed byte) printf_string::padding#2 +Eliminating unused constant (const byte) printf_string::format_justify_left#0 Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const word*) RADIX_BINARY_VALUES Eliminating unused constant (const word*) RADIX_OCTAL_VALUES @@ -4202,11 +4990,26 @@ Eliminating unused constant (const dword*) RADIX_BINARY_VALUES_LONG Eliminating unused constant (const dword*) RADIX_OCTAL_VALUES_LONG Eliminating unused constant (const dword*) RADIX_HEXADECIMAL_VALUES_LONG Successful SSA optimization PassNEliminateUnusedVars +Removing PHI-reference to removed block (printf_string::@5) in block printf_padding +Removing PHI-reference to removed block (printf_string::@5) in block printf_padding +Removing unused block printf_string::@5 +Removing unused block printf_string::@9 +Removing PHI-reference to removed block (printf_string::@6) in block printf_padding +Removing PHI-reference to removed block (printf_string::@6) in block printf_padding +Removing unused block printf_string::@6 +Removing unused block printf_string::@10 +Removing unused block printf_string::@12 +Successful SSA optimization Pass2EliminateUnusedBlocks Alias candidate removed (volatile)printf_cursor_ptr = printf_ln::$1 printf_scroll::$4 Constant right-side identified [40] (byte*) uctoa::buffer#1 ← ++ (const byte*) uctoa::buffer#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) uctoa::buffer#1 = ++uctoa::buffer#0 Successful SSA optimization Pass2ConstantIdentification +Eliminating unused constant (const byte) printf_padding::pad#3 +Eliminating unused constant (const byte) printf_padding::pad#4 +Eliminating unused constant (const byte) printf_padding::length#3 +Eliminating unused constant (const byte) printf_padding::length#4 +Successful SSA optimization PassNEliminateUnusedVars Alias candidate removed (volatile)printf_cursor_ptr = printf_ln::$1 printf_scroll::$4 Constant right-side identified [41] (byte*) uctoa::buffer#2 ← ++ (const byte*) uctoa::buffer#1 Successful SSA optimization Pass2ConstantRValueConsolidation @@ -4260,13 +5063,15 @@ Inlining constant with var siblings (const byte) printf_padding::i#0 Inlining constant with var siblings (const byte) printf_padding::pad#0 Inlining constant with var siblings (const byte) printf_padding::pad#1 Inlining constant with var siblings (const byte) printf_padding::pad#2 -Inlining constant with var siblings (const byte*) printf_str::str#2 Inlining constant with var siblings (const byte*) printf_str::str#3 Inlining constant with var siblings (const byte*) printf_str::str#4 Inlining constant with var siblings (const byte*) printf_str::str#5 Inlining constant with var siblings (const byte*) printf_str::str#6 Inlining constant with var siblings (const byte*) printf_str::str#7 Inlining constant with var siblings (const byte*) printf_str::str#8 +Inlining constant with var siblings (const byte*) printf_str::str#9 +Inlining constant with var siblings (const byte*) printf_str::str#10 +Inlining constant with var siblings (const byte*) printf_str::str#2 Inlining constant with var siblings (const byte) printf_uchar::format_min_length#0 Inlining constant with var siblings (const byte) printf_uchar::format_justify_left#0 Inlining constant with var siblings (const byte) printf_uchar::format_sign_always#0 @@ -4313,8 +5118,11 @@ Constant inlined printf_uchar::format_justify_left#1 = (byte) 0 Constant inlined memset::num#1 = (byte) $28 Constant inlined memset::num#0 = (word)(number) $28*(number) $19 Constant inlined strlen::len#0 = (word) 0 +Constant inlined printf_str::str#10 = (const byte*) print::str4 Constant inlined memcpy::$2 = (byte*)(const void*) memcpy::source#0 Constant inlined utoa::$4 = (const byte) utoa::max_digits#1-(byte) 1 +Constant inlined tod_str::return#2 = (const byte*) tod_buffer +Constant inlined tod_str::return#0 = (const byte*) tod_buffer Constant inlined printf_number_buffer::padding#2 = (signed byte) 0 Constant inlined uctoa::digit#0 = (byte) 0 Constant inlined print::j#0 = (byte) 1 @@ -4350,6 +5158,7 @@ Constant inlined memcpy::src#0 = (byte*)(const void*) memcpy::source#0 Constant inlined uctoa::max_digits#1 = (byte) 3 Constant inlined ultoa::buffer#5 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS Constant inlined printf_number_buffer::format_upper_case#1 = (const byte) printf_uint::format_upper_case#0 +Constant inlined printf_string::str#0 = (const byte*) tod_buffer Constant inlined ultoa::started#0 = (byte) 0 Constant inlined legal::i#0 = (byte) 1 Constant inlined printf_number_buffer::format_upper_case#0 = (const byte) printf_ulong::format_upper_case#0 @@ -4379,19 +5188,28 @@ Constant inlined utoa::started#0 = (byte) 0 Constant inlined print::i#0 = (byte) 1 Constant inlined ultoa::$4 = (const byte) ultoa::max_digits#1-(byte) 1 Constant inlined uctoa::buffer#5 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Constant inlined printf_str::str#6 = (const byte*) print::str2 -Constant inlined printf_str::str#5 = (const byte*) print::str1 -Constant inlined printf_str::str#8 = (const byte*) print::str4 -Constant inlined printf_str::str#7 = (const byte*) print::str3 +Constant inlined printf_str::str#6 = (const byte*) print::str +Constant inlined printf_str::str#5 = (const byte*) main::str2 +Constant inlined printf_str::str#8 = (const byte*) print::str2 +Constant inlined printf_str::str#7 = (const byte*) print::str1 Constant inlined printf_uchar::format_radix#1 = (const byte) HEXADECIMAL +Constant inlined printf_str::str#9 = (const byte*) print::str3 Constant inlined printf_uchar::format_radix#0 = (const byte) HEXADECIMAL Constant inlined ultoa_append::digit#0 = (byte) 0 Constant inlined ultoa::digit_values#1 = (const dword*) RADIX_DECIMAL_VALUES_LONG -Constant inlined printf_str::str#2 = (const byte*) main::str -Constant inlined printf_str::str#4 = (const byte*) print::str +Constant inlined printf_str::str#2 = (const byte*) tod_buffer +Constant inlined printf_str::str#4 = (const byte*) main::str1 Constant inlined utoa::value#1 = (const word) printf_uint::uvalue#0 -Constant inlined printf_str::str#3 = (const byte*) main::str1 +Constant inlined printf_str::str#3 = (const byte*) main::str Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(tod_buffer+1) +Consolidated array index constant in *(tod_buffer+3) +Consolidated array index constant in *(tod_buffer+4) +Consolidated array index constant in *(tod_buffer+6) +Consolidated array index constant in *(tod_buffer+7) +Consolidated array index constant in *(tod_buffer+9) +Consolidated array index constant in *(tod_buffer+$a) +Successful SSA optimization Pass2ConstantAdditionElimination Simplifying constant integer increment ++(byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS Simplifying constant integer increment ++(byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS Simplifying constant integer increment ++(byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1 @@ -4496,10 +5314,26 @@ Adding NOP phi() at start of main Adding NOP phi() at start of main::@1 Adding NOP phi() at start of main::@2 Adding NOP phi() at start of main::@3 -Adding NOP phi() at start of main::@4 Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of main::@6 +Adding NOP phi() at start of main::@8 +Adding NOP phi() at start of main::@9 +Adding NOP phi() at start of main::@10 +Adding NOP phi() at start of printf_string +Adding NOP phi() at start of printf_string::@1 +Adding NOP phi() at start of printf_string::@11 +Adding NOP phi() at start of printf_string::@2 +Adding NOP phi() at start of printf_string::@8 +Adding NOP phi() at start of printf_str::@4 +Adding NOP phi() at start of printf_ln::@1 +Adding NOP phi() at start of printf_scroll::@1 +Adding NOP phi() at start of printf_scroll::@2 +Adding NOP phi() at start of memset::@1 +Adding NOP phi() at start of memcpy +Adding NOP phi() at start of memcpy::@3 +Adding NOP phi() at start of printf_char::@2 Adding NOP phi() at start of queens -Adding NOP phi() at start of queens::@5 +Adding NOP phi() at start of print Adding NOP phi() at start of print::@13 Adding NOP phi() at start of print::@14 Adding NOP phi() at start of print::@3 @@ -4517,14 +5351,6 @@ Adding NOP phi() at start of printf_number_buffer::@20 Adding NOP phi() at start of printf_number_buffer::@21 Adding NOP phi() at start of printf_number_buffer::@18 Adding NOP phi() at start of printf_number_buffer::@16 -Adding NOP phi() at start of printf_char::@2 -Adding NOP phi() at start of printf_scroll::@1 -Adding NOP phi() at start of printf_scroll::@2 -Adding NOP phi() at start of memset::@1 -Adding NOP phi() at start of memcpy -Adding NOP phi() at start of memcpy::@3 -Adding NOP phi() at start of printf_str::@4 -Adding NOP phi() at start of printf_ln::@1 Adding NOP phi() at start of strupr::@3 Adding NOP phi() at start of strlen::@3 Adding NOP phi() at start of uctoa @@ -4537,6 +5363,7 @@ Adding NOP phi() at start of ultoa Adding NOP phi() at start of ultoa::@1 Adding NOP phi() at start of legal Adding NOP phi() at start of legal::@3 +Adding NOP phi() at start of legal::@8 Adding NOP phi() at start of legal::@7 Adding NOP phi() at start of legal::@4 Adding NOP phi() at start of printf_uint @@ -4548,117 +5375,124 @@ Adding NOP phi() at start of utoa::@5 Adding NOP phi() at start of printf_cls CALL GRAPH Calls in [] to main:6 -Calls in [main] to printf_cls:10 printf_str:12 printf_str:14 printf_uint:16 queens:18 -Calls in [queens] to legal:27 print:38 -Calls in [print] to printf_str:48 printf_ulong:50 printf_str:52 printf_str:61 printf_uchar:64 printf_str:72 printf_str:77 printf_uchar:81 -Calls in [printf_uchar] to uctoa:88 printf_number_buffer:91 -Calls in [printf_number_buffer] to strlen:97 printf_char:115 strupr:121 printf_str:125 printf_padding:132 printf_padding:136 printf_padding:140 -Calls in [printf_padding] to printf_char:150 -Calls in [printf_char] to printf_scroll:160 -Calls in [printf_scroll] to memcpy:165 memset:167 -Calls in [printf_str] to printf_char:203 printf_ln:206 -Calls in [printf_ln] to printf_scroll:213 -Calls in [strupr] to toupper:222 -Calls in [uctoa] to uctoa_append:269 -Calls in [printf_ulong] to ultoa:288 printf_number_buffer:291 -Calls in [ultoa] to ultoa_append:320 -Calls in [legal] to diff:347 diff:354 -Calls in [printf_uint] to utoa:373 printf_number_buffer:376 -Calls in [utoa] to utoa_append:405 -Calls in [printf_cls] to memset:421 +Calls in [main] to printf_cls:10 printf_str:12 printf_str:14 printf_uint:16 tod_init:21 queens:23 tod_read:25 tod_str:38 printf_str:40 printf_string:42 +Calls in [printf_string] to printf_str:49 +Calls in [printf_str] to printf_char:62 printf_ln:65 +Calls in [printf_ln] to printf_scroll:72 +Calls in [printf_scroll] to memcpy:77 memset:79 +Calls in [printf_char] to printf_scroll:112 +Calls in [queens] to legal:151 print:160 +Calls in [print] to printf_str:172 printf_ulong:174 printf_str:176 printf_str:185 printf_uchar:188 printf_str:196 printf_str:201 printf_uchar:205 +Calls in [printf_uchar] to uctoa:212 printf_number_buffer:215 +Calls in [printf_number_buffer] to strlen:221 printf_char:239 strupr:245 printf_str:249 printf_padding:256 printf_padding:260 printf_padding:264 +Calls in [printf_padding] to printf_char:274 +Calls in [strupr] to toupper:283 +Calls in [uctoa] to uctoa_append:330 +Calls in [printf_ulong] to ultoa:349 printf_number_buffer:352 +Calls in [ultoa] to ultoa_append:381 +Calls in [printf_uint] to utoa:433 printf_number_buffer:436 +Calls in [utoa] to utoa_append:465 +Calls in [printf_cls] to memset:481 -Created 62 initial phi equivalence classes -Coalesced (already) [31] queens::row#16 ← queens::row#10 -Coalesced (already) [32] count#53 ← count#11 -Coalesced [35] queens::row#14 ← queens::row#1 -Coalesced (already) [36] count#51 ← count#11 -Coalesced (already) [39] queens::row#13 ← queens::row#10 -Coalesced [40] count#50 ← count#13 -Coalesced [44] queens::row#15 ← queens::row#2 -Coalesced (already) [45] count#52 ← count#11 -Coalesced [63] printf_uchar::uvalue#6 ← printf_uchar::uvalue#1 -Coalesced [69] print::i1#14 ← print::i1#1 -Coalesced [75] print::j#9 ← print::j#1 -Coalesced [80] printf_uchar::uvalue#7 ← printf_uchar::uvalue#0 -Coalesced [83] print::i#5 ← print::i#1 -Coalesced [90] printf_number_buffer::buffer_sign#14 ← printf_number_buffer::buffer_sign#2 -Coalesced [103] printf_number_buffer::len#5 ← printf_number_buffer::len#1 -Coalesced [114] printf_char::ch#4 ← printf_char::ch#2 -Coalesced [124] printf_str::str#17 ← printf_str::str#1 -Coalesced [131] printf_padding::length#8 ← printf_padding::length#2 -Coalesced [135] printf_padding::length#7 ← printf_padding::length#1 -Coalesced [139] printf_padding::length#9 ← printf_padding::length#0 -Coalesced [142] printf_number_buffer::padding#18 ← printf_number_buffer::padding#1 -Coalesced [143] printf_number_buffer::len#4 ← printf_number_buffer::len#0 -Coalesced [149] printf_char::ch#5 ← printf_char::ch#0 -Coalesced [152] printf_padding::i#5 ← printf_padding::i#1 -Coalesced [182] memset::dst#5 ← memset::dst#1 -Coalesced [191] memcpy::src#4 ← memcpy::src#1 -Coalesced [192] memcpy::dst#4 ← memcpy::dst#1 -Coalesced [194] printf_str::str#18 ← printf_str::str#11 -Coalesced [202] printf_char::ch#6 ← printf_char::ch#1 -Coalesced [204] printf_str::str#20 ← printf_str::str#0 -Coalesced (already) [207] printf_str::str#19 ← printf_str::str#0 -Coalesced [216] strupr::src#5 ← strupr::str#0 -Coalesced [227] strupr::src#6 ← strupr::src#1 -Coalesced [230] toupper::return#7 ← toupper::ch#0 -Coalesced [234] toupper::return#6 ← toupper::return#0 -Coalesced [235] strlen::str#5 ← strlen::str#1 -Coalesced [242] strlen::str#6 ← strlen::str#0 -Coalesced [243] strlen::len#5 ← strlen::len#1 -Coalesced [247] uctoa::value#17 ← uctoa::value#1 -Coalesced [257] uctoa::value#18 ← uctoa::value#2 -Coalesced [258] uctoa::started#6 ← uctoa::started#2 -Coalesced [259] uctoa::buffer#23 ← uctoa::buffer#11 -Coalesced [262] uctoa::digit#7 ← uctoa::digit#1 -Coalesced (already) [263] uctoa::value#16 ← uctoa::value#6 -Coalesced (already) [264] uctoa::started#5 ← uctoa::started#4 -Coalesced (already) [265] uctoa::buffer#22 ← uctoa::buffer#14 -Coalesced [273] uctoa::value#19 ← uctoa::value#0 -Coalesced [274] uctoa::buffer#24 ← uctoa::buffer#4 -Coalesced [275] uctoa_append::value#6 ← uctoa_append::value#0 -Coalesced [282] uctoa_append::value#7 ← uctoa_append::value#1 -Coalesced [283] uctoa_append::digit#5 ← uctoa_append::digit#1 -Coalesced [290] printf_number_buffer::buffer_sign#16 ← printf_number_buffer::buffer_sign#0 -Coalesced [296] ultoa::value#17 ← ultoa::value#1 -Coalesced [308] ultoa::value#18 ← ultoa::value#2 -Coalesced [309] ultoa::started#6 ← ultoa::started#2 -Coalesced [310] ultoa::buffer#23 ← ultoa::buffer#11 -Coalesced [313] ultoa::digit#7 ← ultoa::digit#1 -Coalesced (already) [314] ultoa::value#16 ← ultoa::value#6 -Coalesced (already) [315] ultoa::started#5 ← ultoa::started#4 -Coalesced (already) [316] ultoa::buffer#22 ← ultoa::buffer#14 -Coalesced [324] ultoa::value#19 ← ultoa::value#0 -Coalesced [325] ultoa::buffer#24 ← ultoa::buffer#4 -Coalesced [326] ultoa_append::value#6 ← ultoa_append::value#0 -Coalesced [333] ultoa_append::value#7 ← ultoa_append::value#1 -Coalesced [334] ultoa_append::digit#5 ← ultoa_append::digit#1 -Coalesced [345] diff::a#5 ← diff::a#0 -Coalesced [346] diff::b#5 ← diff::b#0 -Coalesced [352] diff::a#6 ← diff::a#1 -Coalesced [353] diff::b#6 ← diff::b#1 -Coalesced [360] legal::i#8 ← legal::i#1 -Coalesced [365] diff::return#9 ← diff::return#3 -Coalesced [369] diff::return#8 ← diff::return#2 -Coalesced [375] printf_number_buffer::buffer_sign#15 ← printf_number_buffer::buffer_sign#1 -Coalesced [393] utoa::value#17 ← utoa::value#2 -Coalesced [394] utoa::started#6 ← utoa::started#2 -Coalesced [395] utoa::buffer#23 ← utoa::buffer#11 -Coalesced [398] utoa::digit#7 ← utoa::digit#1 -Coalesced (already) [399] utoa::value#16 ← utoa::value#6 -Coalesced (already) [400] utoa::started#5 ← utoa::started#4 -Coalesced (already) [401] utoa::buffer#22 ← utoa::buffer#14 -Coalesced [409] utoa::value#18 ← utoa::value#0 -Coalesced [410] utoa::buffer#24 ← utoa::buffer#4 -Coalesced [411] utoa_append::value#6 ← utoa_append::value#0 -Coalesced [418] utoa_append::value#7 ← utoa_append::value#1 -Coalesced [419] utoa_append::digit#5 ← utoa_append::digit#1 -Coalesced down to 52 phi equivalence classes +Created 61 initial phi equivalence classes +Coalesced [53] printf_str::str#20 ← printf_str::str#13 +Coalesced [61] printf_char::ch#6 ← printf_char::ch#1 +Coalesced [63] printf_str::str#22 ← printf_str::str#0 +Coalesced (already) [66] printf_str::str#21 ← printf_str::str#0 +Coalesced [94] memset::dst#5 ← memset::dst#1 +Coalesced [103] memcpy::src#4 ← memcpy::src#1 +Coalesced [104] memcpy::dst#4 ← memcpy::dst#1 +Coalesced [157] queens::row#14 ← queens::row#1 +Coalesced (already) [158] count#35 ← count#14 +Coalesced (already) [161] queens::row#13 ← queens::row#10 +Coalesced [162] count#34 ← count#22 +Coalesced (already) [163] queens::row#16 ← queens::row#10 +Coalesced (already) [164] count#37 ← count#14 +Coalesced [168] queens::row#15 ← queens::row#2 +Coalesced (already) [169] count#36 ← count#14 +Coalesced [187] printf_uchar::uvalue#6 ← printf_uchar::uvalue#1 +Coalesced [193] print::i1#14 ← print::i1#1 +Coalesced [199] print::j#9 ← print::j#1 +Coalesced [204] printf_uchar::uvalue#7 ← printf_uchar::uvalue#0 +Coalesced [207] print::i#5 ← print::i#1 +Coalesced [214] printf_number_buffer::buffer_sign#14 ← printf_number_buffer::buffer_sign#2 +Coalesced [227] printf_number_buffer::len#5 ← printf_number_buffer::len#1 +Coalesced [238] printf_char::ch#4 ← printf_char::ch#2 +Coalesced [248] printf_str::str#19 ← printf_str::str#1 +Coalesced [255] printf_padding::length#10 ← printf_padding::length#2 +Coalesced [259] printf_padding::length#9 ← printf_padding::length#1 +Coalesced [263] printf_padding::length#11 ← printf_padding::length#0 +Coalesced [266] printf_number_buffer::padding#18 ← printf_number_buffer::padding#1 +Coalesced [267] printf_number_buffer::len#4 ← printf_number_buffer::len#0 +Coalesced [273] printf_char::ch#5 ← printf_char::ch#0 +Coalesced [276] printf_padding::i#5 ← printf_padding::i#1 +Coalesced [277] strupr::src#5 ← strupr::str#0 +Coalesced [288] strupr::src#6 ← strupr::src#1 +Coalesced [291] toupper::return#7 ← toupper::ch#0 +Coalesced [295] toupper::return#6 ← toupper::return#0 +Coalesced [296] strlen::str#6 ← strlen::str#1 +Coalesced [303] strlen::str#7 ← strlen::str#0 +Coalesced [304] strlen::len#5 ← strlen::len#1 +Coalesced [308] uctoa::value#17 ← uctoa::value#1 +Coalesced [318] uctoa::value#18 ← uctoa::value#2 +Coalesced [319] uctoa::started#6 ← uctoa::started#2 +Coalesced [320] uctoa::buffer#23 ← uctoa::buffer#11 +Coalesced [323] uctoa::digit#7 ← uctoa::digit#1 +Coalesced (already) [324] uctoa::value#16 ← uctoa::value#6 +Coalesced (already) [325] uctoa::started#5 ← uctoa::started#4 +Coalesced (already) [326] uctoa::buffer#22 ← uctoa::buffer#14 +Coalesced [334] uctoa::value#19 ← uctoa::value#0 +Coalesced [335] uctoa::buffer#24 ← uctoa::buffer#4 +Coalesced [336] uctoa_append::value#6 ← uctoa_append::value#0 +Coalesced [343] uctoa_append::value#7 ← uctoa_append::value#1 +Coalesced [344] uctoa_append::digit#5 ← uctoa_append::digit#1 +Coalesced [351] printf_number_buffer::buffer_sign#16 ← printf_number_buffer::buffer_sign#0 +Coalesced [357] ultoa::value#17 ← ultoa::value#1 +Coalesced [369] ultoa::value#18 ← ultoa::value#2 +Coalesced [370] ultoa::started#6 ← ultoa::started#2 +Coalesced [371] ultoa::buffer#23 ← ultoa::buffer#11 +Coalesced [374] ultoa::digit#7 ← ultoa::digit#1 +Coalesced (already) [375] ultoa::value#16 ← ultoa::value#6 +Coalesced (already) [376] ultoa::started#5 ← ultoa::started#4 +Coalesced (already) [377] ultoa::buffer#22 ← ultoa::buffer#14 +Coalesced [385] ultoa::value#19 ← ultoa::value#0 +Coalesced [386] ultoa::buffer#24 ← ultoa::buffer#4 +Coalesced [387] ultoa_append::value#6 ← ultoa_append::value#0 +Coalesced [394] ultoa_append::value#7 ← ultoa_append::value#1 +Coalesced [395] ultoa_append::digit#5 ← ultoa_append::digit#1 +Coalesced [407] legal::diff1_return#6 ← legal::diff1_return#1 +Coalesced [412] legal::diff2_return#6 ← legal::diff2_return#1 +Coalesced [417] legal::i#16 ← legal::i#1 +Coalesced [419] legal::diff2_return#5 ← legal::diff2_return#0 +Coalesced [421] legal::diff1_return#5 ← legal::diff1_return#0 +Coalesced [435] printf_number_buffer::buffer_sign#15 ← printf_number_buffer::buffer_sign#1 +Coalesced [453] utoa::value#17 ← utoa::value#2 +Coalesced [454] utoa::started#6 ← utoa::started#2 +Coalesced [455] utoa::buffer#23 ← utoa::buffer#11 +Coalesced [458] utoa::digit#7 ← utoa::digit#1 +Coalesced (already) [459] utoa::value#16 ← utoa::value#6 +Coalesced (already) [460] utoa::started#5 ← utoa::started#4 +Coalesced (already) [461] utoa::buffer#22 ← utoa::buffer#14 +Coalesced [469] utoa::value#18 ← utoa::value#0 +Coalesced [470] utoa::buffer#24 ← utoa::buffer#4 +Coalesced [471] utoa_append::value#6 ← utoa_append::value#0 +Coalesced [478] utoa_append::value#7 ← utoa_append::value#1 +Coalesced [479] utoa_append::digit#5 ← utoa_append::digit#1 +Coalesced down to 51 phi equivalence classes Culled Empty Block (label) @2 Culled Empty Block (label) @4 -Culled Empty Block (label) main::@5 -Culled Empty Block (label) queens::@11 +Culled Empty Block (label) main::@10 +Culled Empty Block (label) printf_string::@1 +Culled Empty Block (label) printf_string::@11 +Culled Empty Block (label) printf_string::@8 +Culled Empty Block (label) printf_str::@7 +Culled Empty Block (label) printf_str::@6 +Culled Empty Block (label) printf_ln::@1 +Culled Empty Block (label) memset::@1 +Culled Empty Block (label) memcpy::@3 +Culled Empty Block (label) printf_char::@2 Culled Empty Block (label) queens::@10 +Culled Empty Block (label) queens::@11 Culled Empty Block (label) print::@14 Culled Empty Block (label) print::@3 Culled Empty Block (label) print::@17 @@ -4673,12 +5507,6 @@ Culled Empty Block (label) printf_number_buffer::@21 Culled Empty Block (label) printf_number_buffer::@18 Culled Empty Block (label) printf_number_buffer::@16 Culled Empty Block (label) printf_number_buffer::@28 -Culled Empty Block (label) printf_char::@2 -Culled Empty Block (label) memset::@1 -Culled Empty Block (label) memcpy::@3 -Culled Empty Block (label) printf_str::@7 -Culled Empty Block (label) printf_str::@6 -Culled Empty Block (label) printf_ln::@1 Culled Empty Block (label) strupr::@3 Culled Empty Block (label) toupper::@2 Culled Empty Block (label) strlen::@3 @@ -4692,6 +5520,7 @@ Culled Empty Block (label) ultoa::@1 Culled Empty Block (label) ultoa::@5 Culled Empty Block (label) ultoa::@17 Culled Empty Block (label) legal::@3 +Culled Empty Block (label) legal::@8 Culled Empty Block (label) legal::@7 Culled Empty Block (label) legal::@4 Culled Empty Block (label) printf_uint::@2 @@ -4740,10 +5569,10 @@ Renumbering block printf_number_buffer::@24 to printf_number_buffer::@18 Renumbering block printf_number_buffer::@25 to printf_number_buffer::@19 Renumbering block printf_number_buffer::@26 to printf_number_buffer::@20 Renumbering block printf_number_buffer::@27 to printf_number_buffer::@21 +Renumbering block printf_string::@2 to printf_string::@1 Renumbering block legal::@5 to legal::@3 Renumbering block legal::@6 to legal::@4 -Renumbering block legal::@8 to legal::@5 -Renumbering block legal::@9 to legal::@6 +Renumbering block legal::@9 to legal::@5 Renumbering block print::@4 to print::@3 Renumbering block print::@5 to print::@4 Renumbering block print::@6 to print::@5 @@ -4763,18 +5592,23 @@ Adding NOP phi() at start of main Adding NOP phi() at start of main::@1 Adding NOP phi() at start of main::@2 Adding NOP phi() at start of main::@3 -Adding NOP phi() at start of main::@4 +Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of main::@6 +Adding NOP phi() at start of main::@8 +Adding NOP phi() at start of main::@9 +Adding NOP phi() at start of printf_string +Adding NOP phi() at start of printf_string::@1 +Adding NOP phi() at start of printf_str::@4 +Adding NOP phi() at start of printf_scroll::@1 +Adding NOP phi() at start of printf_scroll::@2 +Adding NOP phi() at start of memcpy Adding NOP phi() at start of queens -Adding NOP phi() at start of queens::@5 +Adding NOP phi() at start of print Adding NOP phi() at start of print::@12 Adding NOP phi() at start of print::@4 Adding NOP phi() at start of print::@10 Adding NOP phi() at start of print::@8 Adding NOP phi() at start of printf_number_buffer::@21 -Adding NOP phi() at start of printf_scroll::@1 -Adding NOP phi() at start of printf_scroll::@2 -Adding NOP phi() at start of memcpy -Adding NOP phi() at start of printf_str::@4 Adding NOP phi() at start of strupr Adding NOP phi() at start of strlen Adding NOP phi() at start of uctoa @@ -4822,739 +5656,827 @@ main::@3: scope:[main] from main::@2 [14] call printf_uint to:main::@4 main::@4: scope:[main] from main::@3 - [15] phi() - [16] call queens + [15] (byte) tod_init::tod_TENTHS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO) + [16] (byte) tod_init::tod_SEC#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC) + [17] (byte) tod_init::tod_MIN#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN) + [18] (byte) tod_init::tod_HOURS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS) + [19] call tod_init + to:main::@5 +main::@5: scope:[main] from main::@4 + [20] phi() + [21] call queens + to:main::@6 +main::@6: scope:[main] from main::@5 + [22] phi() + [23] call tod_read + [24] (byte) tod_read::return_TENTHS#2 ← (byte) tod_read::return_TENTHS#0 + [25] (byte) tod_read::return_SEC#2 ← (byte) tod_read::return_SEC#0 + [26] (byte) tod_read::return_MIN#2 ← (byte) tod_read::return_MIN#0 + [27] (byte) tod_read::return_HOURS#2 ← (byte) tod_read::return_HOURS#0 + to:main::@7 +main::@7: scope:[main] from main::@6 + [28] (byte) main::tod_TENTHS#0 ← (byte) tod_read::return_TENTHS#2 + [29] (byte) main::tod_SEC#0 ← (byte) tod_read::return_SEC#2 + [30] (byte) main::tod_MIN#0 ← (byte) tod_read::return_MIN#2 + [31] (byte) main::tod_HOURS#0 ← (byte) tod_read::return_HOURS#2 + [32] (byte) tod_str::tod_TENTHS#0 ← (byte) main::tod_TENTHS#0 + [33] (byte) tod_str::tod_SEC#0 ← (byte) main::tod_SEC#0 + [34] (byte) tod_str::tod_MIN#0 ← (byte) main::tod_MIN#0 + [35] (byte) tod_str::tod_HOURS#0 ← (byte) main::tod_HOURS#0 + [36] call tod_str + to:main::@8 +main::@8: scope:[main] from main::@7 + [37] phi() + [38] call printf_str + to:main::@9 +main::@9: scope:[main] from main::@8 + [39] phi() + [40] call printf_string to:main::@return -main::@return: scope:[main] from main::@4 - [17] return +main::@return: scope:[main] from main::@9 + [41] return to:@return -(void()) queens() -queens: scope:[queens] from main::@4 - [18] phi() - to:queens::@1 -queens::@1: scope:[queens] from queens queens::@5 queens::@6 queens::@8 queens::@9 - [19] (dword) count#11 ← phi( queens/(dword) 0 queens::@5/(dword) count#13 queens::@6/(dword) count#11 queens::@8/(dword) count#11 queens::@9/(dword) count#11 ) - [19] (byte) queens::row#10 ← phi( queens/(byte) 1 queens::@5/(byte) queens::row#10 queens::@6/(byte) queens::row#1 queens::@8/(byte) queens::row#2 queens::@9/(byte) queens::row#10 ) - to:queens::@2 -queens::@2: scope:[queens] from queens::@1 - [20] *((const byte*) board + (byte) queens::row#10) ← ++ *((const byte*) board + (byte) queens::row#10) - [21] if(*((const byte*) board + (byte) queens::row#10)==(byte)(number) 8+(number) 1) goto queens::@3 - to:queens::@7 -queens::@7: scope:[queens] from queens::@2 - [22] (byte) legal::row#0 ← (byte) queens::row#10 - [23] (byte) legal::column#0 ← *((const byte*) board + (byte) queens::row#10) - [24] call legal - [25] (byte) legal::return#0 ← (byte) legal::return#4 - to:queens::@9 -queens::@9: scope:[queens] from queens::@7 - [26] (byte~) queens::$2 ← (byte) legal::return#0 - [27] if((byte) 0!=(byte~) queens::$2) goto queens::@4 - to:queens::@1 -queens::@4: scope:[queens] from queens::@9 - [28] if((byte) queens::row#10==(byte) 8) goto queens::@5 - to:queens::@6 -queens::@6: scope:[queens] from queens::@4 - [29] (byte) queens::row#1 ← ++ (byte) queens::row#10 - to:queens::@1 -queens::@5: scope:[queens] from queens::@4 - [30] phi() - [31] call print - to:queens::@1 -queens::@3: scope:[queens] from queens::@2 - [32] *((const byte*) board + (byte) queens::row#10) ← (byte) 0 - [33] if((byte) queens::row#10==(byte) 1) goto queens::@return - to:queens::@8 -queens::@8: scope:[queens] from queens::@3 - [34] (byte) queens::row#2 ← -- (byte) queens::row#10 - to:queens::@1 -queens::@return: scope:[queens] from queens::@3 - [35] return +(void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) +printf_string: scope:[printf_string] from main::@9 + [42] phi() + to:printf_string::@1 +printf_string::@1: scope:[printf_string] from printf_string + [43] phi() + [44] call printf_str + to:printf_string::@return +printf_string::@return: scope:[printf_string] from printf_string::@1 + [45] return to:@return -(void()) print() -print: scope:[print] from queens::@5 - [36] (dword) count#13 ← ++ (dword) count#11 - [37] call printf_str - to:print::@11 -print::@11: scope:[print] from print - [38] (dword) printf_ulong::uvalue#0 ← (dword) count#13 - [39] call printf_ulong - to:print::@12 -print::@12: scope:[print] from print::@11 - [40] phi() - [41] call printf_str - to:print::@1 -print::@1: scope:[print] from print::@12 print::@13 - [42] (byte) print::i#2 ← phi( print::@12/(byte) 1 print::@13/(byte) print::i#1 ) - [43] if((byte) print::i#2<(byte) 8+(byte) 1) goto print::@2 - to:print::@3 -print::@3: scope:[print] from print::@1 print::@7 - [44] (byte) print::i1#2 ← phi( print::@1/(byte) 1 print::@7/(byte) print::i1#1 ) - [45] if((byte) print::i1#2<(byte) 8+(byte) 1) goto print::@4 - to:print::@return -print::@return: scope:[print] from print::@3 - [46] return - to:@return -print::@4: scope:[print] from print::@3 - [47] phi() - [48] call printf_str - to:print::@14 -print::@14: scope:[print] from print::@4 - [49] (byte) printf_uchar::uvalue#1 ← (byte) print::i1#2 - [50] call printf_uchar - to:print::@5 -print::@5: scope:[print] from print::@14 print::@9 - [51] (byte) print::j#2 ← phi( print::@9/(byte) print::j#1 print::@14/(byte) 1 ) - [52] if((byte) print::j#2<(byte) 8+(byte) 1) goto print::@6 - to:print::@7 -print::@7: scope:[print] from print::@5 - [53] (byte) print::i1#1 ← ++ (byte) print::i1#2 - to:print::@3 -print::@6: scope:[print] from print::@5 - [54] if(*((const byte*) board + (byte) print::i1#2)==(byte) print::j#2) goto print::@8 - to:print::@10 -print::@10: scope:[print] from print::@6 - [55] phi() - [56] call printf_str - to:print::@9 -print::@9: scope:[print] from print::@10 print::@8 - [57] (byte) print::j#1 ← ++ (byte) print::j#2 - to:print::@5 -print::@8: scope:[print] from print::@6 - [58] phi() - [59] call printf_str - to:print::@9 -print::@2: scope:[print] from print::@1 - [60] (byte) printf_uchar::uvalue#0 ← (byte) print::i#2 - [61] call printf_uchar - to:print::@13 -print::@13: scope:[print] from print::@2 - [62] (byte) print::i#1 ← ++ (byte) print::i#2 - to:print::@1 - -(void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) -printf_uchar: scope:[printf_uchar] from print::@14 print::@2 - [63] (byte) printf_uchar::uvalue#2 ← phi( print::@14/(byte) printf_uchar::uvalue#1 print::@2/(byte) printf_uchar::uvalue#0 ) - to:printf_uchar::@1 -printf_uchar::@1: scope:[printf_uchar] from printf_uchar - [64] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 - [65] (byte) uctoa::value#1 ← (byte) printf_uchar::uvalue#2 - [66] call uctoa - to:printf_uchar::@2 -printf_uchar::@2: scope:[printf_uchar] from printf_uchar::@1 - [67] (byte) printf_number_buffer::buffer_sign#2 ← *((byte*)&(struct printf_buffer_number) printf_buffer) - [68] call printf_number_buffer - to:printf_uchar::@return -printf_uchar::@return: scope:[printf_uchar] from printf_uchar::@2 - [69] return - to:@return - -(void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) -printf_number_buffer: scope:[printf_number_buffer] from printf_uchar::@2 printf_uint::@2 printf_ulong::@2 - [70] (byte) printf_number_buffer::format_upper_case#10 ← phi( printf_uchar::@2/(byte) 0 printf_uint::@2/(const byte) printf_uint::format_upper_case#0 printf_ulong::@2/(const byte) printf_ulong::format_upper_case#0 ) - [70] (byte) printf_number_buffer::buffer_sign#10 ← phi( printf_uchar::@2/(byte) printf_number_buffer::buffer_sign#2 printf_uint::@2/(byte) printf_number_buffer::buffer_sign#1 printf_ulong::@2/(byte) printf_number_buffer::buffer_sign#0 ) - [70] (byte*) printf_number_buffer::buffer_digits#10 ← phi( printf_uchar::@2/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS printf_uint::@2/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS printf_ulong::@2/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) - [70] (byte) printf_number_buffer::format_zero_padding#10 ← phi( printf_uchar::@2/(byte) 0 printf_uint::@2/(const byte) printf_uint::format_zero_padding#0 printf_ulong::@2/(const byte) printf_ulong::format_zero_padding#0 ) - [70] (byte) printf_number_buffer::format_justify_left#10 ← phi( printf_uchar::@2/(byte) 0 printf_uint::@2/(const byte) printf_uint::format_justify_left#0 printf_ulong::@2/(const byte) printf_ulong::format_justify_left#0 ) - [70] (byte) printf_number_buffer::format_min_length#3 ← phi( printf_uchar::@2/(byte) 0 printf_uint::@2/(const byte) printf_uint::format_min_length#0 printf_ulong::@2/(const byte) printf_ulong::format_min_length#0 ) - [71] if((byte) 0==(byte) printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 - to:printf_number_buffer::@6 -printf_number_buffer::@6: scope:[printf_number_buffer] from printf_number_buffer - [72] (byte*) strlen::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 - [73] call strlen - [74] (word) strlen::return#2 ← (word) strlen::len#2 - to:printf_number_buffer::@14 -printf_number_buffer::@14: scope:[printf_number_buffer] from printf_number_buffer::@6 - [75] (word~) printf_number_buffer::$19 ← (word) strlen::return#2 - [76] (signed byte) printf_number_buffer::len#0 ← (signed byte)(word~) printf_number_buffer::$19 - [77] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 - to:printf_number_buffer::@7 -printf_number_buffer::@7: scope:[printf_number_buffer] from printf_number_buffer::@14 - [78] (signed byte) printf_number_buffer::len#1 ← ++ (signed byte) printf_number_buffer::len#0 - to:printf_number_buffer::@13 -printf_number_buffer::@13: scope:[printf_number_buffer] from printf_number_buffer::@14 printf_number_buffer::@7 - [79] (signed byte) printf_number_buffer::len#2 ← phi( printf_number_buffer::@14/(signed byte) printf_number_buffer::len#0 printf_number_buffer::@7/(signed byte) printf_number_buffer::len#1 ) - [80] (signed byte) printf_number_buffer::padding#1 ← (signed byte)(byte) printf_number_buffer::format_min_length#3 - (signed byte) printf_number_buffer::len#2 - [81] if((signed byte) printf_number_buffer::padding#1>=(signed byte) 0) goto printf_number_buffer::@21 - to:printf_number_buffer::@1 -printf_number_buffer::@21: scope:[printf_number_buffer] from printf_number_buffer::@13 - [82] phi() - to:printf_number_buffer::@1 -printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer printf_number_buffer::@13 printf_number_buffer::@21 - [83] (signed byte) printf_number_buffer::padding#10 ← phi( printf_number_buffer/(signed byte) 0 printf_number_buffer::@21/(signed byte) printf_number_buffer::padding#1 printf_number_buffer::@13/(signed byte) 0 ) - [84] if((byte) 0!=(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 - to:printf_number_buffer::@17 -printf_number_buffer::@17: scope:[printf_number_buffer] from printf_number_buffer::@1 - [85] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 - to:printf_number_buffer::@16 -printf_number_buffer::@16: scope:[printf_number_buffer] from printf_number_buffer::@17 - [86] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@8 - to:printf_number_buffer::@2 -printf_number_buffer::@8: scope:[printf_number_buffer] from printf_number_buffer::@16 - [87] (byte) printf_padding::length#0 ← (byte)(signed byte) printf_number_buffer::padding#10 - [88] call printf_padding - to:printf_number_buffer::@2 -printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@16 printf_number_buffer::@17 printf_number_buffer::@8 - [89] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 - to:printf_number_buffer::@9 -printf_number_buffer::@9: scope:[printf_number_buffer] from printf_number_buffer::@2 - [90] (byte) printf_char::ch#2 ← (byte) printf_number_buffer::buffer_sign#10 - [91] call printf_char - to:printf_number_buffer::@3 -printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@2 printf_number_buffer::@9 - [92] if((byte) 0==(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 - to:printf_number_buffer::@18 -printf_number_buffer::@18: scope:[printf_number_buffer] from printf_number_buffer::@3 - [93] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@10 - to:printf_number_buffer::@4 -printf_number_buffer::@10: scope:[printf_number_buffer] from printf_number_buffer::@18 - [94] (byte) printf_padding::length#1 ← (byte)(signed byte) printf_number_buffer::padding#10 - [95] call printf_padding - to:printf_number_buffer::@4 -printf_number_buffer::@4: scope:[printf_number_buffer] from printf_number_buffer::@10 printf_number_buffer::@18 printf_number_buffer::@3 - [96] if((byte) 0==(byte) printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 - to:printf_number_buffer::@11 -printf_number_buffer::@11: scope:[printf_number_buffer] from printf_number_buffer::@4 - [97] (byte*) strupr::str#0 ← (byte*) printf_number_buffer::buffer_digits#10 - [98] call strupr - to:printf_number_buffer::@5 -printf_number_buffer::@5: scope:[printf_number_buffer] from printf_number_buffer::@11 printf_number_buffer::@4 - [99] (byte*) printf_str::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 - [100] call printf_str - to:printf_number_buffer::@15 -printf_number_buffer::@15: scope:[printf_number_buffer] from printf_number_buffer::@5 - [101] if((byte) 0==(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return - to:printf_number_buffer::@20 -printf_number_buffer::@20: scope:[printf_number_buffer] from printf_number_buffer::@15 - [102] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return - to:printf_number_buffer::@19 -printf_number_buffer::@19: scope:[printf_number_buffer] from printf_number_buffer::@20 - [103] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@12 - to:printf_number_buffer::@return -printf_number_buffer::@12: scope:[printf_number_buffer] from printf_number_buffer::@19 - [104] (byte) printf_padding::length#2 ← (byte)(signed byte) printf_number_buffer::padding#10 - [105] call printf_padding - to:printf_number_buffer::@return -printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@12 printf_number_buffer::@15 printf_number_buffer::@19 printf_number_buffer::@20 - [106] return - to:@return - -(void()) printf_padding((byte) printf_padding::pad , (byte) printf_padding::length) -printf_padding: scope:[printf_padding] from printf_number_buffer::@10 printf_number_buffer::@12 printf_number_buffer::@8 - [107] (byte) printf_padding::pad#5 ← phi( printf_number_buffer::@10/(byte) '0' printf_number_buffer::@12/(byte) ' ' printf_number_buffer::@8/(byte) ' ' ) - [107] (byte) printf_padding::length#4 ← phi( printf_number_buffer::@10/(byte) printf_padding::length#1 printf_number_buffer::@12/(byte) printf_padding::length#2 printf_number_buffer::@8/(byte) printf_padding::length#0 ) - to:printf_padding::@1 -printf_padding::@1: scope:[printf_padding] from printf_padding printf_padding::@3 - [108] (byte) printf_padding::i#2 ← phi( printf_padding/(byte) 0 printf_padding::@3/(byte) printf_padding::i#1 ) - [109] if((byte) printf_padding::i#2<(byte) printf_padding::length#4) goto printf_padding::@2 - to:printf_padding::@return -printf_padding::@return: scope:[printf_padding] from printf_padding::@1 - [110] return - to:@return -printf_padding::@2: scope:[printf_padding] from printf_padding::@1 - [111] (byte) printf_char::ch#0 ← (byte) printf_padding::pad#5 - [112] call printf_char - to:printf_padding::@3 -printf_padding::@3: scope:[printf_padding] from printf_padding::@2 - [113] (byte) printf_padding::i#1 ← ++ (byte) printf_padding::i#2 - to:printf_padding::@1 - -(void()) printf_char((byte) printf_char::ch) -printf_char: scope:[printf_char] from printf_number_buffer::@9 printf_padding::@2 printf_str::@5 - [114] (byte) printf_char::ch#3 ← phi( printf_number_buffer::@9/(byte) printf_char::ch#2 printf_padding::@2/(byte) printf_char::ch#0 printf_str::@5/(byte) printf_char::ch#1 ) - [115] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#3 - [116] (byte*) printf_cursor_ptr ← ++ (byte*) printf_cursor_ptr - [117] (byte) printf_cursor_x ← ++ (byte) printf_cursor_x - [118] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return - to:printf_char::@1 -printf_char::@1: scope:[printf_char] from printf_char - [119] (byte) printf_cursor_x ← (byte) 0 - [120] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y - [121] call printf_scroll - to:printf_char::@return -printf_char::@return: scope:[printf_char] from printf_char printf_char::@1 - [122] return - to:@return - -(void()) printf_scroll() -printf_scroll: scope:[printf_scroll] from printf_char::@1 printf_ln - [123] if((byte) printf_cursor_y!=(byte) $19) goto printf_scroll::@return - to:printf_scroll::@1 -printf_scroll::@1: scope:[printf_scroll] from printf_scroll - [124] phi() - [125] call memcpy - to:printf_scroll::@2 -printf_scroll::@2: scope:[printf_scroll] from printf_scroll::@1 - [126] phi() - [127] call memset - to:printf_scroll::@3 -printf_scroll::@3: scope:[printf_scroll] from printf_scroll::@2 - [128] (byte*~) printf_scroll::$4 ← (byte*) printf_cursor_ptr - (byte) $28 - [129] (byte*) printf_cursor_ptr ← (byte*~) printf_scroll::$4 - [130] (byte) printf_cursor_y ← -- (byte) printf_cursor_y - to:printf_scroll::@return -printf_scroll::@return: scope:[printf_scroll] from printf_scroll printf_scroll::@3 - [131] return - to:@return - -(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) -memset: scope:[memset] from printf_cls printf_scroll::@2 - [132] (byte) memset::c#4 ← phi( printf_cls/(byte) ' ' printf_scroll::@2/(byte) ' ' ) - [132] (void*) memset::str#3 ← phi( printf_cls/(void*) 1024 printf_scroll::@2/(void*)(number) $400+(number) $28*(number) $19-(number) $28 ) - [132] (word) memset::num#2 ← phi( printf_cls/(word)(number) $28*(number) $19 printf_scroll::@2/(byte) $28 ) - [133] if((word) memset::num#2<=(byte) 0) goto memset::@return - to:memset::@1 -memset::@1: scope:[memset] from memset - [134] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 - [135] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 - to:memset::@2 -memset::@2: scope:[memset] from memset::@1 memset::@3 - [136] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) - [137] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 - to:memset::@return -memset::@return: scope:[memset] from memset memset::@2 - [138] return - to:@return -memset::@3: scope:[memset] from memset::@2 - [139] *((byte*) memset::dst#2) ← (byte) memset::c#4 - [140] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 - to:memset::@2 - -(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) -memcpy: scope:[memcpy] from printf_scroll::@1 - [141] phi() - to:memcpy::@1 -memcpy::@1: scope:[memcpy] from memcpy memcpy::@2 - [142] (byte*) memcpy::dst#2 ← phi( memcpy/(byte*)(const void*) memcpy::destination#0 memcpy::@2/(byte*) memcpy::dst#1 ) - [142] (byte*) memcpy::src#2 ← phi( memcpy/(byte*)(const void*) memcpy::source#0 memcpy::@2/(byte*) memcpy::src#1 ) - [143] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 - to:memcpy::@return -memcpy::@return: scope:[memcpy] from memcpy::@1 - [144] return - to:@return -memcpy::@2: scope:[memcpy] from memcpy::@1 - [145] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) - [146] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 - [147] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2 - to:memcpy::@1 - (void()) printf_str((byte*) printf_str::str) -printf_str: scope:[printf_str] from main::@1 main::@2 print print::@10 print::@12 print::@4 print::@8 printf_number_buffer::@5 - [148] (byte*) printf_str::str#11 ← phi( main::@1/(const byte*) main::str main::@2/(const byte*) main::str1 print/(const byte*) print::str print::@10/(const byte*) print::str4 print::@12/(const byte*) print::str1 print::@4/(const byte*) print::str2 print::@8/(const byte*) print::str3 printf_number_buffer::@5/(byte*) printf_str::str#1 ) +printf_str: scope:[printf_str] from main::@1 main::@2 main::@8 print print::@10 print::@12 print::@4 print::@8 printf_number_buffer::@5 printf_string::@1 + [46] (byte*) printf_str::str#13 ← phi( main::@1/(const byte*) main::str main::@2/(const byte*) main::str1 main::@8/(const byte*) main::str2 print/(const byte*) print::str print::@10/(const byte*) print::str4 print::@12/(const byte*) print::str1 print::@4/(const byte*) print::str2 print::@8/(const byte*) print::str3 printf_number_buffer::@5/(byte*) printf_str::str#1 printf_string::@1/(const byte*) tod_buffer ) to:printf_str::@1 printf_str::@1: scope:[printf_str] from printf_str printf_str::@4 printf_str::@5 - [149] (byte*) printf_str::str#10 ← phi( printf_str/(byte*) printf_str::str#11 printf_str::@4/(byte*) printf_str::str#0 printf_str::@5/(byte*) printf_str::str#0 ) + [47] (byte*) printf_str::str#11 ← phi( printf_str/(byte*) printf_str::str#13 printf_str::@4/(byte*) printf_str::str#0 printf_str::@5/(byte*) printf_str::str#0 ) to:printf_str::@2 printf_str::@2: scope:[printf_str] from printf_str::@1 - [150] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#10) - [151] (byte*) printf_str::str#0 ← ++ (byte*) printf_str::str#10 - [152] if((byte) printf_str::ch#0!=(byte) 0) goto printf_str::@3 + [48] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#11) + [49] (byte*) printf_str::str#0 ← ++ (byte*) printf_str::str#11 + [50] if((byte) printf_str::ch#0!=(byte) 0) goto printf_str::@3 to:printf_str::@return printf_str::@return: scope:[printf_str] from printf_str::@2 - [153] return + [51] return to:@return printf_str::@3: scope:[printf_str] from printf_str::@2 - [154] if((byte) printf_str::ch#0==(byte) ' + [52] if((byte) printf_str::ch#0==(byte) ' ') goto printf_str::@4 to:printf_str::@5 printf_str::@5: scope:[printf_str] from printf_str::@3 - [155] (byte) printf_char::ch#1 ← (byte) printf_str::ch#0 - [156] call printf_char + [53] (byte) printf_char::ch#1 ← (byte) printf_str::ch#0 + [54] call printf_char to:printf_str::@1 printf_str::@4: scope:[printf_str] from printf_str::@3 - [157] phi() - [158] call printf_ln + [55] phi() + [56] call printf_ln to:printf_str::@1 (void()) printf_ln() printf_ln: scope:[printf_ln] from printf_str::@4 - [159] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x - [160] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28 - [161] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1 - [162] (byte) printf_cursor_x ← (byte) 0 - [163] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y - [164] call printf_scroll + [57] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x + [58] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28 + [59] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1 + [60] (byte) printf_cursor_x ← (byte) 0 + [61] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y + [62] call printf_scroll to:printf_ln::@return printf_ln::@return: scope:[printf_ln] from printf_ln - [165] return + [63] return to:@return +(void()) printf_scroll() +printf_scroll: scope:[printf_scroll] from printf_char::@1 printf_ln + [64] if((byte) printf_cursor_y!=(byte) $19) goto printf_scroll::@return + to:printf_scroll::@1 +printf_scroll::@1: scope:[printf_scroll] from printf_scroll + [65] phi() + [66] call memcpy + to:printf_scroll::@2 +printf_scroll::@2: scope:[printf_scroll] from printf_scroll::@1 + [67] phi() + [68] call memset + to:printf_scroll::@3 +printf_scroll::@3: scope:[printf_scroll] from printf_scroll::@2 + [69] (byte*~) printf_scroll::$4 ← (byte*) printf_cursor_ptr - (byte) $28 + [70] (byte*) printf_cursor_ptr ← (byte*~) printf_scroll::$4 + [71] (byte) printf_cursor_y ← -- (byte) printf_cursor_y + to:printf_scroll::@return +printf_scroll::@return: scope:[printf_scroll] from printf_scroll printf_scroll::@3 + [72] return + to:@return + +(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) +memset: scope:[memset] from printf_cls printf_scroll::@2 + [73] (byte) memset::c#4 ← phi( printf_cls/(byte) ' ' printf_scroll::@2/(byte) ' ' ) + [73] (void*) memset::str#3 ← phi( printf_cls/(void*) 1024 printf_scroll::@2/(void*)(number) $400+(number) $28*(number) $19-(number) $28 ) + [73] (word) memset::num#2 ← phi( printf_cls/(word)(number) $28*(number) $19 printf_scroll::@2/(byte) $28 ) + [74] if((word) memset::num#2<=(byte) 0) goto memset::@return + to:memset::@1 +memset::@1: scope:[memset] from memset + [75] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 + [76] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + to:memset::@2 +memset::@2: scope:[memset] from memset::@1 memset::@3 + [77] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) + [78] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 + to:memset::@return +memset::@return: scope:[memset] from memset memset::@2 + [79] return + to:@return +memset::@3: scope:[memset] from memset::@2 + [80] *((byte*) memset::dst#2) ← (byte) memset::c#4 + [81] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + to:memset::@2 + +(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) +memcpy: scope:[memcpy] from printf_scroll::@1 + [82] phi() + to:memcpy::@1 +memcpy::@1: scope:[memcpy] from memcpy memcpy::@2 + [83] (byte*) memcpy::dst#2 ← phi( memcpy/(byte*)(const void*) memcpy::destination#0 memcpy::@2/(byte*) memcpy::dst#1 ) + [83] (byte*) memcpy::src#2 ← phi( memcpy/(byte*)(const void*) memcpy::source#0 memcpy::@2/(byte*) memcpy::src#1 ) + [84] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 + to:memcpy::@return +memcpy::@return: scope:[memcpy] from memcpy::@1 + [85] return + to:@return +memcpy::@2: scope:[memcpy] from memcpy::@1 + [86] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) + [87] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 + [88] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2 + to:memcpy::@1 + +(void()) printf_char((byte) printf_char::ch) +printf_char: scope:[printf_char] from printf_number_buffer::@9 printf_padding::@2 printf_str::@5 + [89] (byte) printf_char::ch#3 ← phi( printf_number_buffer::@9/(byte) printf_char::ch#2 printf_padding::@2/(byte) printf_char::ch#0 printf_str::@5/(byte) printf_char::ch#1 ) + [90] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#3 + [91] (byte*) printf_cursor_ptr ← ++ (byte*) printf_cursor_ptr + [92] (byte) printf_cursor_x ← ++ (byte) printf_cursor_x + [93] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return + to:printf_char::@1 +printf_char::@1: scope:[printf_char] from printf_char + [94] (byte) printf_cursor_x ← (byte) 0 + [95] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y + [96] call printf_scroll + to:printf_char::@return +printf_char::@return: scope:[printf_char] from printf_char printf_char::@1 + [97] return + to:@return + +(byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) +tod_str: scope:[tod_str] from main::@7 + [98] (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#0 >> (byte) 4 + [99] (byte~) tod_str::$1 ← (byte) '0' + (byte~) tod_str::$0 + [100] *((const byte*) tod_buffer) ← (byte~) tod_str::$1 + [101] (byte~) tod_str::$2 ← (byte) tod_str::tod_HOURS#0 & (byte) $f + [102] (byte~) tod_str::$3 ← (byte) '0' + (byte~) tod_str::$2 + [103] *((const byte*) tod_buffer+(byte) 1) ← (byte~) tod_str::$3 + [104] (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#0 >> (byte) 4 + [105] (byte~) tod_str::$5 ← (byte) '0' + (byte~) tod_str::$4 + [106] *((const byte*) tod_buffer+(byte) 3) ← (byte~) tod_str::$5 + [107] (byte~) tod_str::$6 ← (byte) tod_str::tod_MIN#0 & (byte) $f + [108] (byte~) tod_str::$7 ← (byte) '0' + (byte~) tod_str::$6 + [109] *((const byte*) tod_buffer+(byte) 4) ← (byte~) tod_str::$7 + [110] (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#0 >> (byte) 4 + [111] (byte~) tod_str::$9 ← (byte) '0' + (byte~) tod_str::$8 + [112] *((const byte*) tod_buffer+(byte) 6) ← (byte~) tod_str::$9 + [113] (byte~) tod_str::$10 ← (byte) tod_str::tod_SEC#0 & (byte) $f + [114] (byte~) tod_str::$11 ← (byte) '0' + (byte~) tod_str::$10 + [115] *((const byte*) tod_buffer+(byte) 7) ← (byte~) tod_str::$11 + [116] (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#0 >> (byte) 4 + [117] (byte~) tod_str::$13 ← (byte) '0' + (byte~) tod_str::$12 + [118] *((const byte*) tod_buffer+(byte) 9) ← (byte~) tod_str::$13 + [119] (byte~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#0 & (byte) $f + [120] (byte~) tod_str::$15 ← (byte) '0' + (byte~) tod_str::$14 + [121] *((const byte*) tod_buffer+(byte) $a) ← (byte~) tod_str::$15 + to:tod_str::@return +tod_str::@return: scope:[tod_str] from tod_str + [122] return + to:@return + +(struct TIME_OF_DAY()) tod_read() +tod_read: scope:[tod_read] from main::@6 + [123] (byte) tod_read::return_HOURS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) + [124] (byte) tod_read::return_MIN#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) + [125] (byte) tod_read::return_SEC#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) + [126] (byte) tod_read::return_TENTHS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) + to:tod_read::@return +tod_read::@return: scope:[tod_read] from tod_read + [127] return + to:@return + +(void()) queens() +queens: scope:[queens] from main::@5 + [128] phi() + to:queens::@1 +queens::@1: scope:[queens] from queens queens::@4 queens::@7 queens::@8 queens::@9 + [129] (dword) count#14 ← phi( queens/(dword) 0 queens::@4/(dword) count#22 queens::@7/(dword) count#14 queens::@8/(dword) count#14 queens::@9/(dword) count#14 ) + [129] (byte) queens::row#10 ← phi( queens/(byte) 1 queens::@4/(byte) queens::row#10 queens::@7/(byte) queens::row#1 queens::@8/(byte) queens::row#2 queens::@9/(byte) queens::row#10 ) + to:queens::@2 +queens::@2: scope:[queens] from queens::@1 + [130] *((const byte*) board + (byte) queens::row#10) ← ++ *((const byte*) board + (byte) queens::row#10) + [131] if(*((const byte*) board + (byte) queens::row#10)==(byte)(number) 8+(number) 1) goto queens::@3 + to:queens::@5 +queens::@5: scope:[queens] from queens::@2 + [132] (byte) legal::row#0 ← (byte) queens::row#10 + [133] (byte) legal::column#0 ← *((const byte*) board + (byte) queens::row#10) + [134] call legal + [135] (byte) legal::return#0 ← (byte) legal::return#4 + to:queens::@9 +queens::@9: scope:[queens] from queens::@5 + [136] (byte~) queens::$2 ← (byte) legal::return#0 + [137] if((byte) 0==(byte~) queens::$2) goto queens::@1 + to:queens::@6 +queens::@6: scope:[queens] from queens::@9 + [138] if((byte) queens::row#10==(byte) 8) goto queens::@4 + to:queens::@7 +queens::@7: scope:[queens] from queens::@6 + [139] (byte) queens::row#1 ← ++ (byte) queens::row#10 + to:queens::@1 +queens::@4: scope:[queens] from queens::@6 + [140] (dword) count#22 ← ++ (dword) count#14 + [141] call print + to:queens::@1 +queens::@3: scope:[queens] from queens::@2 + [142] *((const byte*) board + (byte) queens::row#10) ← (byte) 0 + [143] if((byte) queens::row#10==(byte) 1) goto queens::@return + to:queens::@8 +queens::@8: scope:[queens] from queens::@3 + [144] (byte) queens::row#2 ← -- (byte) queens::row#10 + to:queens::@1 +queens::@return: scope:[queens] from queens::@3 + [145] return + to:@return + +(void()) print() +print: scope:[print] from queens::@4 + [146] phi() + [147] call printf_str + to:print::@11 +print::@11: scope:[print] from print + [148] (dword) printf_ulong::uvalue#0 ← (dword) count#22 + [149] call printf_ulong + to:print::@12 +print::@12: scope:[print] from print::@11 + [150] phi() + [151] call printf_str + to:print::@1 +print::@1: scope:[print] from print::@12 print::@13 + [152] (byte) print::i#2 ← phi( print::@12/(byte) 1 print::@13/(byte) print::i#1 ) + [153] if((byte) print::i#2<(byte) 8+(byte) 1) goto print::@2 + to:print::@3 +print::@3: scope:[print] from print::@1 print::@7 + [154] (byte) print::i1#2 ← phi( print::@1/(byte) 1 print::@7/(byte) print::i1#1 ) + [155] if((byte) print::i1#2<(byte) 8+(byte) 1) goto print::@4 + to:print::@return +print::@return: scope:[print] from print::@3 + [156] return + to:@return +print::@4: scope:[print] from print::@3 + [157] phi() + [158] call printf_str + to:print::@14 +print::@14: scope:[print] from print::@4 + [159] (byte) printf_uchar::uvalue#1 ← (byte) print::i1#2 + [160] call printf_uchar + to:print::@5 +print::@5: scope:[print] from print::@14 print::@9 + [161] (byte) print::j#2 ← phi( print::@9/(byte) print::j#1 print::@14/(byte) 1 ) + [162] if((byte) print::j#2<(byte) 8+(byte) 1) goto print::@6 + to:print::@7 +print::@7: scope:[print] from print::@5 + [163] (byte) print::i1#1 ← ++ (byte) print::i1#2 + to:print::@3 +print::@6: scope:[print] from print::@5 + [164] if(*((const byte*) board + (byte) print::i1#2)==(byte) print::j#2) goto print::@8 + to:print::@10 +print::@10: scope:[print] from print::@6 + [165] phi() + [166] call printf_str + to:print::@9 +print::@9: scope:[print] from print::@10 print::@8 + [167] (byte) print::j#1 ← ++ (byte) print::j#2 + to:print::@5 +print::@8: scope:[print] from print::@6 + [168] phi() + [169] call printf_str + to:print::@9 +print::@2: scope:[print] from print::@1 + [170] (byte) printf_uchar::uvalue#0 ← (byte) print::i#2 + [171] call printf_uchar + to:print::@13 +print::@13: scope:[print] from print::@2 + [172] (byte) print::i#1 ← ++ (byte) print::i#2 + to:print::@1 + +(void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) +printf_uchar: scope:[printf_uchar] from print::@14 print::@2 + [173] (byte) printf_uchar::uvalue#2 ← phi( print::@14/(byte) printf_uchar::uvalue#1 print::@2/(byte) printf_uchar::uvalue#0 ) + to:printf_uchar::@1 +printf_uchar::@1: scope:[printf_uchar] from printf_uchar + [174] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 + [175] (byte) uctoa::value#1 ← (byte) printf_uchar::uvalue#2 + [176] call uctoa + to:printf_uchar::@2 +printf_uchar::@2: scope:[printf_uchar] from printf_uchar::@1 + [177] (byte) printf_number_buffer::buffer_sign#2 ← *((byte*)&(struct printf_buffer_number) printf_buffer) + [178] call printf_number_buffer + to:printf_uchar::@return +printf_uchar::@return: scope:[printf_uchar] from printf_uchar::@2 + [179] return + to:@return + +(void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) +printf_number_buffer: scope:[printf_number_buffer] from printf_uchar::@2 printf_uint::@2 printf_ulong::@2 + [180] (byte) printf_number_buffer::format_upper_case#10 ← phi( printf_uchar::@2/(byte) 0 printf_uint::@2/(const byte) printf_uint::format_upper_case#0 printf_ulong::@2/(const byte) printf_ulong::format_upper_case#0 ) + [180] (byte) printf_number_buffer::buffer_sign#10 ← phi( printf_uchar::@2/(byte) printf_number_buffer::buffer_sign#2 printf_uint::@2/(byte) printf_number_buffer::buffer_sign#1 printf_ulong::@2/(byte) printf_number_buffer::buffer_sign#0 ) + [180] (byte*) printf_number_buffer::buffer_digits#10 ← phi( printf_uchar::@2/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS printf_uint::@2/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS printf_ulong::@2/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) + [180] (byte) printf_number_buffer::format_zero_padding#10 ← phi( printf_uchar::@2/(byte) 0 printf_uint::@2/(const byte) printf_uint::format_zero_padding#0 printf_ulong::@2/(const byte) printf_ulong::format_zero_padding#0 ) + [180] (byte) printf_number_buffer::format_justify_left#10 ← phi( printf_uchar::@2/(byte) 0 printf_uint::@2/(const byte) printf_uint::format_justify_left#0 printf_ulong::@2/(const byte) printf_ulong::format_justify_left#0 ) + [180] (byte) printf_number_buffer::format_min_length#3 ← phi( printf_uchar::@2/(byte) 0 printf_uint::@2/(const byte) printf_uint::format_min_length#0 printf_ulong::@2/(const byte) printf_ulong::format_min_length#0 ) + [181] if((byte) 0==(byte) printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 + to:printf_number_buffer::@6 +printf_number_buffer::@6: scope:[printf_number_buffer] from printf_number_buffer + [182] (byte*) strlen::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 + [183] call strlen + [184] (word) strlen::return#2 ← (word) strlen::len#2 + to:printf_number_buffer::@14 +printf_number_buffer::@14: scope:[printf_number_buffer] from printf_number_buffer::@6 + [185] (word~) printf_number_buffer::$19 ← (word) strlen::return#2 + [186] (signed byte) printf_number_buffer::len#0 ← (signed byte)(word~) printf_number_buffer::$19 + [187] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 + to:printf_number_buffer::@7 +printf_number_buffer::@7: scope:[printf_number_buffer] from printf_number_buffer::@14 + [188] (signed byte) printf_number_buffer::len#1 ← ++ (signed byte) printf_number_buffer::len#0 + to:printf_number_buffer::@13 +printf_number_buffer::@13: scope:[printf_number_buffer] from printf_number_buffer::@14 printf_number_buffer::@7 + [189] (signed byte) printf_number_buffer::len#2 ← phi( printf_number_buffer::@14/(signed byte) printf_number_buffer::len#0 printf_number_buffer::@7/(signed byte) printf_number_buffer::len#1 ) + [190] (signed byte) printf_number_buffer::padding#1 ← (signed byte)(byte) printf_number_buffer::format_min_length#3 - (signed byte) printf_number_buffer::len#2 + [191] if((signed byte) printf_number_buffer::padding#1>=(signed byte) 0) goto printf_number_buffer::@21 + to:printf_number_buffer::@1 +printf_number_buffer::@21: scope:[printf_number_buffer] from printf_number_buffer::@13 + [192] phi() + to:printf_number_buffer::@1 +printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer printf_number_buffer::@13 printf_number_buffer::@21 + [193] (signed byte) printf_number_buffer::padding#10 ← phi( printf_number_buffer/(signed byte) 0 printf_number_buffer::@21/(signed byte) printf_number_buffer::padding#1 printf_number_buffer::@13/(signed byte) 0 ) + [194] if((byte) 0!=(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 + to:printf_number_buffer::@17 +printf_number_buffer::@17: scope:[printf_number_buffer] from printf_number_buffer::@1 + [195] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 + to:printf_number_buffer::@16 +printf_number_buffer::@16: scope:[printf_number_buffer] from printf_number_buffer::@17 + [196] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@8 + to:printf_number_buffer::@2 +printf_number_buffer::@8: scope:[printf_number_buffer] from printf_number_buffer::@16 + [197] (byte) printf_padding::length#0 ← (byte)(signed byte) printf_number_buffer::padding#10 + [198] call printf_padding + to:printf_number_buffer::@2 +printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@16 printf_number_buffer::@17 printf_number_buffer::@8 + [199] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 + to:printf_number_buffer::@9 +printf_number_buffer::@9: scope:[printf_number_buffer] from printf_number_buffer::@2 + [200] (byte) printf_char::ch#2 ← (byte) printf_number_buffer::buffer_sign#10 + [201] call printf_char + to:printf_number_buffer::@3 +printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@2 printf_number_buffer::@9 + [202] if((byte) 0==(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 + to:printf_number_buffer::@18 +printf_number_buffer::@18: scope:[printf_number_buffer] from printf_number_buffer::@3 + [203] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@10 + to:printf_number_buffer::@4 +printf_number_buffer::@10: scope:[printf_number_buffer] from printf_number_buffer::@18 + [204] (byte) printf_padding::length#1 ← (byte)(signed byte) printf_number_buffer::padding#10 + [205] call printf_padding + to:printf_number_buffer::@4 +printf_number_buffer::@4: scope:[printf_number_buffer] from printf_number_buffer::@10 printf_number_buffer::@18 printf_number_buffer::@3 + [206] if((byte) 0==(byte) printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 + to:printf_number_buffer::@11 +printf_number_buffer::@11: scope:[printf_number_buffer] from printf_number_buffer::@4 + [207] (byte*) strupr::str#0 ← (byte*) printf_number_buffer::buffer_digits#10 + [208] call strupr + to:printf_number_buffer::@5 +printf_number_buffer::@5: scope:[printf_number_buffer] from printf_number_buffer::@11 printf_number_buffer::@4 + [209] (byte*) printf_str::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 + [210] call printf_str + to:printf_number_buffer::@15 +printf_number_buffer::@15: scope:[printf_number_buffer] from printf_number_buffer::@5 + [211] if((byte) 0==(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return + to:printf_number_buffer::@20 +printf_number_buffer::@20: scope:[printf_number_buffer] from printf_number_buffer::@15 + [212] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return + to:printf_number_buffer::@19 +printf_number_buffer::@19: scope:[printf_number_buffer] from printf_number_buffer::@20 + [213] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@12 + to:printf_number_buffer::@return +printf_number_buffer::@12: scope:[printf_number_buffer] from printf_number_buffer::@19 + [214] (byte) printf_padding::length#2 ← (byte)(signed byte) printf_number_buffer::padding#10 + [215] call printf_padding + to:printf_number_buffer::@return +printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@12 printf_number_buffer::@15 printf_number_buffer::@19 printf_number_buffer::@20 + [216] return + to:@return + +(void()) printf_padding((byte) printf_padding::pad , (byte) printf_padding::length) +printf_padding: scope:[printf_padding] from printf_number_buffer::@10 printf_number_buffer::@12 printf_number_buffer::@8 + [217] (byte) printf_padding::pad#7 ← phi( printf_number_buffer::@10/(byte) '0' printf_number_buffer::@12/(byte) ' ' printf_number_buffer::@8/(byte) ' ' ) + [217] (byte) printf_padding::length#6 ← phi( printf_number_buffer::@10/(byte) printf_padding::length#1 printf_number_buffer::@12/(byte) printf_padding::length#2 printf_number_buffer::@8/(byte) printf_padding::length#0 ) + to:printf_padding::@1 +printf_padding::@1: scope:[printf_padding] from printf_padding printf_padding::@3 + [218] (byte) printf_padding::i#2 ← phi( printf_padding/(byte) 0 printf_padding::@3/(byte) printf_padding::i#1 ) + [219] if((byte) printf_padding::i#2<(byte) printf_padding::length#6) goto printf_padding::@2 + to:printf_padding::@return +printf_padding::@return: scope:[printf_padding] from printf_padding::@1 + [220] return + to:@return +printf_padding::@2: scope:[printf_padding] from printf_padding::@1 + [221] (byte) printf_char::ch#0 ← (byte) printf_padding::pad#7 + [222] call printf_char + to:printf_padding::@3 +printf_padding::@3: scope:[printf_padding] from printf_padding::@2 + [223] (byte) printf_padding::i#1 ← ++ (byte) printf_padding::i#2 + to:printf_padding::@1 + (byte*()) strupr((byte*) strupr::str) strupr: scope:[strupr] from printf_number_buffer::@11 - [166] phi() + [224] phi() to:strupr::@1 strupr::@1: scope:[strupr] from strupr strupr::@3 - [167] (byte*) strupr::src#2 ← phi( strupr/(byte*) strupr::str#0 strupr::@3/(byte*) strupr::src#1 ) - [168] if((byte) 0!=*((byte*) strupr::src#2)) goto strupr::@2 + [225] (byte*) strupr::src#2 ← phi( strupr/(byte*) strupr::str#0 strupr::@3/(byte*) strupr::src#1 ) + [226] if((byte) 0!=*((byte*) strupr::src#2)) goto strupr::@2 to:strupr::@return strupr::@return: scope:[strupr] from strupr::@1 - [169] return + [227] return to:@return strupr::@2: scope:[strupr] from strupr::@1 - [170] (byte) toupper::ch#0 ← *((byte*) strupr::src#2) - [171] call toupper - [172] (byte) toupper::return#3 ← (byte) toupper::return#2 + [228] (byte) toupper::ch#0 ← *((byte*) strupr::src#2) + [229] call toupper + [230] (byte) toupper::return#3 ← (byte) toupper::return#2 to:strupr::@3 strupr::@3: scope:[strupr] from strupr::@2 - [173] (byte~) strupr::$0 ← (byte) toupper::return#3 - [174] *((byte*) strupr::src#2) ← (byte~) strupr::$0 - [175] (byte*) strupr::src#1 ← ++ (byte*) strupr::src#2 + [231] (byte~) strupr::$0 ← (byte) toupper::return#3 + [232] *((byte*) strupr::src#2) ← (byte~) strupr::$0 + [233] (byte*) strupr::src#1 ← ++ (byte*) strupr::src#2 to:strupr::@1 (byte()) toupper((byte) toupper::ch) toupper: scope:[toupper] from strupr::@2 - [176] if((byte) toupper::ch#0<(byte) 'a') goto toupper::@return + [234] if((byte) toupper::ch#0<(byte) 'a') goto toupper::@return to:toupper::@2 toupper::@2: scope:[toupper] from toupper - [177] if((byte) toupper::ch#0<=(byte) 'z') goto toupper::@1 + [235] if((byte) toupper::ch#0<=(byte) 'z') goto toupper::@1 to:toupper::@return toupper::@1: scope:[toupper] from toupper::@2 - [178] (byte) toupper::return#0 ← (byte) toupper::ch#0 + (byte) 'A'-(byte) 'a' + [236] (byte) toupper::return#0 ← (byte) toupper::ch#0 + (byte) 'A'-(byte) 'a' to:toupper::@return toupper::@return: scope:[toupper] from toupper toupper::@1 toupper::@2 - [179] (byte) toupper::return#2 ← phi( toupper::@1/(byte) toupper::return#0 toupper/(byte) toupper::ch#0 toupper::@2/(byte) toupper::ch#0 ) - [180] return + [237] (byte) toupper::return#2 ← phi( toupper::@1/(byte) toupper::return#0 toupper/(byte) toupper::ch#0 toupper::@2/(byte) toupper::ch#0 ) + [238] return to:@return (word()) strlen((byte*) strlen::str) strlen: scope:[strlen] from printf_number_buffer::@6 - [181] phi() + [239] phi() to:strlen::@1 strlen::@1: scope:[strlen] from strlen strlen::@2 - [182] (word) strlen::len#2 ← phi( strlen/(word) 0 strlen::@2/(word) strlen::len#1 ) - [182] (byte*) strlen::str#2 ← phi( strlen/(byte*) strlen::str#1 strlen::@2/(byte*) strlen::str#0 ) - [183] if((byte) 0!=*((byte*) strlen::str#2)) goto strlen::@2 + [240] (word) strlen::len#2 ← phi( strlen/(word) 0 strlen::@2/(word) strlen::len#1 ) + [240] (byte*) strlen::str#3 ← phi( strlen/(byte*) strlen::str#1 strlen::@2/(byte*) strlen::str#0 ) + [241] if((byte) 0!=*((byte*) strlen::str#3)) goto strlen::@2 to:strlen::@return strlen::@return: scope:[strlen] from strlen::@1 - [184] return + [242] return to:@return strlen::@2: scope:[strlen] from strlen::@1 - [185] (word) strlen::len#1 ← ++ (word) strlen::len#2 - [186] (byte*) strlen::str#0 ← ++ (byte*) strlen::str#2 + [243] (word) strlen::len#1 ← ++ (word) strlen::len#2 + [244] (byte*) strlen::str#0 ← ++ (byte*) strlen::str#3 to:strlen::@1 (void()) uctoa((byte) uctoa::value , (byte*) uctoa::buffer , (byte) uctoa::radix) uctoa: scope:[uctoa] from printf_uchar::@1 - [187] phi() + [245] phi() to:uctoa::@1 uctoa::@1: scope:[uctoa] from uctoa uctoa::@4 - [188] (byte*) uctoa::buffer#11 ← phi( uctoa::@4/(byte*) uctoa::buffer#14 uctoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) - [188] (byte) uctoa::started#2 ← phi( uctoa::@4/(byte) uctoa::started#4 uctoa/(byte) 0 ) - [188] (byte) uctoa::value#2 ← phi( uctoa::@4/(byte) uctoa::value#6 uctoa/(byte) uctoa::value#1 ) - [188] (byte) uctoa::digit#2 ← phi( uctoa::@4/(byte) uctoa::digit#1 uctoa/(byte) 0 ) - [189] if((byte) uctoa::digit#2<(byte) 2-(byte) 1) goto uctoa::@2 + [246] (byte*) uctoa::buffer#11 ← phi( uctoa::@4/(byte*) uctoa::buffer#14 uctoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) + [246] (byte) uctoa::started#2 ← phi( uctoa::@4/(byte) uctoa::started#4 uctoa/(byte) 0 ) + [246] (byte) uctoa::value#2 ← phi( uctoa::@4/(byte) uctoa::value#6 uctoa/(byte) uctoa::value#1 ) + [246] (byte) uctoa::digit#2 ← phi( uctoa::@4/(byte) uctoa::digit#1 uctoa/(byte) 0 ) + [247] if((byte) uctoa::digit#2<(byte) 2-(byte) 1) goto uctoa::@2 to:uctoa::@3 uctoa::@3: scope:[uctoa] from uctoa::@1 - [190] *((byte*) uctoa::buffer#11) ← *((const byte*) DIGITS + (byte) uctoa::value#2) - [191] (byte*) uctoa::buffer#3 ← ++ (byte*) uctoa::buffer#11 - [192] *((byte*) uctoa::buffer#3) ← (byte) 0 + [248] *((byte*) uctoa::buffer#11) ← *((const byte*) DIGITS + (byte) uctoa::value#2) + [249] (byte*) uctoa::buffer#3 ← ++ (byte*) uctoa::buffer#11 + [250] *((byte*) uctoa::buffer#3) ← (byte) 0 to:uctoa::@return uctoa::@return: scope:[uctoa] from uctoa::@3 - [193] return + [251] return to:@return uctoa::@2: scope:[uctoa] from uctoa::@1 - [194] (byte) uctoa::digit_value#0 ← *((const byte*) RADIX_HEXADECIMAL_VALUES_CHAR + (byte) uctoa::digit#2) - [195] if((byte) 0!=(byte) uctoa::started#2) goto uctoa::@5 + [252] (byte) uctoa::digit_value#0 ← *((const byte*) RADIX_HEXADECIMAL_VALUES_CHAR + (byte) uctoa::digit#2) + [253] if((byte) 0!=(byte) uctoa::started#2) goto uctoa::@5 to:uctoa::@7 uctoa::@7: scope:[uctoa] from uctoa::@2 - [196] if((byte) uctoa::value#2>=(byte) uctoa::digit_value#0) goto uctoa::@5 + [254] if((byte) uctoa::value#2>=(byte) uctoa::digit_value#0) goto uctoa::@5 to:uctoa::@4 uctoa::@4: scope:[uctoa] from uctoa::@6 uctoa::@7 - [197] (byte*) uctoa::buffer#14 ← phi( uctoa::@7/(byte*) uctoa::buffer#11 uctoa::@6/(byte*) uctoa::buffer#4 ) - [197] (byte) uctoa::started#4 ← phi( uctoa::@7/(byte) uctoa::started#2 uctoa::@6/(byte) 1 ) - [197] (byte) uctoa::value#6 ← phi( uctoa::@7/(byte) uctoa::value#2 uctoa::@6/(byte) uctoa::value#0 ) - [198] (byte) uctoa::digit#1 ← ++ (byte) uctoa::digit#2 + [255] (byte*) uctoa::buffer#14 ← phi( uctoa::@7/(byte*) uctoa::buffer#11 uctoa::@6/(byte*) uctoa::buffer#4 ) + [255] (byte) uctoa::started#4 ← phi( uctoa::@7/(byte) uctoa::started#2 uctoa::@6/(byte) 1 ) + [255] (byte) uctoa::value#6 ← phi( uctoa::@7/(byte) uctoa::value#2 uctoa::@6/(byte) uctoa::value#0 ) + [256] (byte) uctoa::digit#1 ← ++ (byte) uctoa::digit#2 to:uctoa::@1 uctoa::@5: scope:[uctoa] from uctoa::@2 uctoa::@7 - [199] (byte*) uctoa_append::buffer#0 ← (byte*) uctoa::buffer#11 - [200] (byte) uctoa_append::value#0 ← (byte) uctoa::value#2 - [201] (byte) uctoa_append::sub#0 ← (byte) uctoa::digit_value#0 - [202] call uctoa_append - [203] (byte) uctoa_append::return#0 ← (byte) uctoa_append::value#2 + [257] (byte*) uctoa_append::buffer#0 ← (byte*) uctoa::buffer#11 + [258] (byte) uctoa_append::value#0 ← (byte) uctoa::value#2 + [259] (byte) uctoa_append::sub#0 ← (byte) uctoa::digit_value#0 + [260] call uctoa_append + [261] (byte) uctoa_append::return#0 ← (byte) uctoa_append::value#2 to:uctoa::@6 uctoa::@6: scope:[uctoa] from uctoa::@5 - [204] (byte) uctoa::value#0 ← (byte) uctoa_append::return#0 - [205] (byte*) uctoa::buffer#4 ← ++ (byte*) uctoa::buffer#11 + [262] (byte) uctoa::value#0 ← (byte) uctoa_append::return#0 + [263] (byte*) uctoa::buffer#4 ← ++ (byte*) uctoa::buffer#11 to:uctoa::@4 (byte()) uctoa_append((byte*) uctoa_append::buffer , (byte) uctoa_append::value , (byte) uctoa_append::sub) uctoa_append: scope:[uctoa_append] from uctoa::@5 - [206] phi() + [264] phi() to:uctoa_append::@1 uctoa_append::@1: scope:[uctoa_append] from uctoa_append uctoa_append::@2 - [207] (byte) uctoa_append::digit#2 ← phi( uctoa_append/(byte) 0 uctoa_append::@2/(byte) uctoa_append::digit#1 ) - [207] (byte) uctoa_append::value#2 ← phi( uctoa_append/(byte) uctoa_append::value#0 uctoa_append::@2/(byte) uctoa_append::value#1 ) - [208] if((byte) uctoa_append::value#2>=(byte) uctoa_append::sub#0) goto uctoa_append::@2 + [265] (byte) uctoa_append::digit#2 ← phi( uctoa_append/(byte) 0 uctoa_append::@2/(byte) uctoa_append::digit#1 ) + [265] (byte) uctoa_append::value#2 ← phi( uctoa_append/(byte) uctoa_append::value#0 uctoa_append::@2/(byte) uctoa_append::value#1 ) + [266] if((byte) uctoa_append::value#2>=(byte) uctoa_append::sub#0) goto uctoa_append::@2 to:uctoa_append::@3 uctoa_append::@3: scope:[uctoa_append] from uctoa_append::@1 - [209] *((byte*) uctoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) uctoa_append::digit#2) + [267] *((byte*) uctoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) uctoa_append::digit#2) to:uctoa_append::@return uctoa_append::@return: scope:[uctoa_append] from uctoa_append::@3 - [210] return + [268] return to:@return uctoa_append::@2: scope:[uctoa_append] from uctoa_append::@1 - [211] (byte) uctoa_append::digit#1 ← ++ (byte) uctoa_append::digit#2 - [212] (byte) uctoa_append::value#1 ← (byte) uctoa_append::value#2 - (byte) uctoa_append::sub#0 + [269] (byte) uctoa_append::digit#1 ← ++ (byte) uctoa_append::digit#2 + [270] (byte) uctoa_append::value#1 ← (byte) uctoa_append::value#2 - (byte) uctoa_append::sub#0 to:uctoa_append::@1 (void()) printf_ulong((dword) printf_ulong::uvalue , (byte) printf_ulong::format_min_length , (byte) printf_ulong::format_justify_left , (byte) printf_ulong::format_sign_always , (byte) printf_ulong::format_zero_padding , (byte) printf_ulong::format_upper_case , (byte) printf_ulong::format_radix) printf_ulong: scope:[printf_ulong] from print::@11 - [213] phi() + [271] phi() to:printf_ulong::@1 printf_ulong::@1: scope:[printf_ulong] from printf_ulong - [214] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 - [215] (dword) ultoa::value#1 ← (dword) printf_ulong::uvalue#0 - [216] call ultoa + [272] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 + [273] (dword) ultoa::value#1 ← (dword) printf_ulong::uvalue#0 + [274] call ultoa to:printf_ulong::@2 printf_ulong::@2: scope:[printf_ulong] from printf_ulong::@1 - [217] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) - [218] call printf_number_buffer + [275] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) + [276] call printf_number_buffer to:printf_ulong::@return printf_ulong::@return: scope:[printf_ulong] from printf_ulong::@2 - [219] return + [277] return to:@return (void()) ultoa((dword) ultoa::value , (byte*) ultoa::buffer , (byte) ultoa::radix) ultoa: scope:[ultoa] from printf_ulong::@1 - [220] phi() + [278] phi() to:ultoa::@1 ultoa::@1: scope:[ultoa] from ultoa ultoa::@4 - [221] (byte*) ultoa::buffer#11 ← phi( ultoa::@4/(byte*) ultoa::buffer#14 ultoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) - [221] (byte) ultoa::started#2 ← phi( ultoa::@4/(byte) ultoa::started#4 ultoa/(byte) 0 ) - [221] (dword) ultoa::value#2 ← phi( ultoa::@4/(dword) ultoa::value#6 ultoa/(dword) ultoa::value#1 ) - [221] (byte) ultoa::digit#2 ← phi( ultoa::@4/(byte) ultoa::digit#1 ultoa/(byte) 0 ) - [222] if((byte) ultoa::digit#2<(const byte) ultoa::max_digits#1-(byte) 1) goto ultoa::@2 + [279] (byte*) ultoa::buffer#11 ← phi( ultoa::@4/(byte*) ultoa::buffer#14 ultoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) + [279] (byte) ultoa::started#2 ← phi( ultoa::@4/(byte) ultoa::started#4 ultoa/(byte) 0 ) + [279] (dword) ultoa::value#2 ← phi( ultoa::@4/(dword) ultoa::value#6 ultoa/(dword) ultoa::value#1 ) + [279] (byte) ultoa::digit#2 ← phi( ultoa::@4/(byte) ultoa::digit#1 ultoa/(byte) 0 ) + [280] if((byte) ultoa::digit#2<(const byte) ultoa::max_digits#1-(byte) 1) goto ultoa::@2 to:ultoa::@3 ultoa::@3: scope:[ultoa] from ultoa::@1 - [223] (byte~) ultoa::$11 ← (byte)(dword) ultoa::value#2 - [224] *((byte*) ultoa::buffer#11) ← *((const byte*) DIGITS + (byte~) ultoa::$11) - [225] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 - [226] *((byte*) ultoa::buffer#3) ← (byte) 0 + [281] (byte~) ultoa::$11 ← (byte)(dword) ultoa::value#2 + [282] *((byte*) ultoa::buffer#11) ← *((const byte*) DIGITS + (byte~) ultoa::$11) + [283] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 + [284] *((byte*) ultoa::buffer#3) ← (byte) 0 to:ultoa::@return ultoa::@return: scope:[ultoa] from ultoa::@3 - [227] return + [285] return to:@return ultoa::@2: scope:[ultoa] from ultoa::@1 - [228] (byte~) ultoa::$10 ← (byte) ultoa::digit#2 << (byte) 2 - [229] (dword) ultoa::digit_value#0 ← *((const dword*) RADIX_DECIMAL_VALUES_LONG + (byte~) ultoa::$10) - [230] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 + [286] (byte~) ultoa::$10 ← (byte) ultoa::digit#2 << (byte) 2 + [287] (dword) ultoa::digit_value#0 ← *((const dword*) RADIX_DECIMAL_VALUES_LONG + (byte~) ultoa::$10) + [288] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 to:ultoa::@7 ultoa::@7: scope:[ultoa] from ultoa::@2 - [231] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 + [289] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 to:ultoa::@4 ultoa::@4: scope:[ultoa] from ultoa::@6 ultoa::@7 - [232] (byte*) ultoa::buffer#14 ← phi( ultoa::@7/(byte*) ultoa::buffer#11 ultoa::@6/(byte*) ultoa::buffer#4 ) - [232] (byte) ultoa::started#4 ← phi( ultoa::@7/(byte) ultoa::started#2 ultoa::@6/(byte) 1 ) - [232] (dword) ultoa::value#6 ← phi( ultoa::@7/(dword) ultoa::value#2 ultoa::@6/(dword) ultoa::value#0 ) - [233] (byte) ultoa::digit#1 ← ++ (byte) ultoa::digit#2 + [290] (byte*) ultoa::buffer#14 ← phi( ultoa::@7/(byte*) ultoa::buffer#11 ultoa::@6/(byte*) ultoa::buffer#4 ) + [290] (byte) ultoa::started#4 ← phi( ultoa::@7/(byte) ultoa::started#2 ultoa::@6/(byte) 1 ) + [290] (dword) ultoa::value#6 ← phi( ultoa::@7/(dword) ultoa::value#2 ultoa::@6/(dword) ultoa::value#0 ) + [291] (byte) ultoa::digit#1 ← ++ (byte) ultoa::digit#2 to:ultoa::@1 ultoa::@5: scope:[ultoa] from ultoa::@2 ultoa::@7 - [234] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 - [235] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 - [236] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 - [237] call ultoa_append - [238] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 + [292] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 + [293] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 + [294] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 + [295] call ultoa_append + [296] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 to:ultoa::@6 ultoa::@6: scope:[ultoa] from ultoa::@5 - [239] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 - [240] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#11 + [297] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 + [298] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#11 to:ultoa::@4 (dword()) ultoa_append((byte*) ultoa_append::buffer , (dword) ultoa_append::value , (dword) ultoa_append::sub) ultoa_append: scope:[ultoa_append] from ultoa::@5 - [241] phi() + [299] phi() to:ultoa_append::@1 ultoa_append::@1: scope:[ultoa_append] from ultoa_append ultoa_append::@2 - [242] (byte) ultoa_append::digit#2 ← phi( ultoa_append/(byte) 0 ultoa_append::@2/(byte) ultoa_append::digit#1 ) - [242] (dword) ultoa_append::value#2 ← phi( ultoa_append/(dword) ultoa_append::value#0 ultoa_append::@2/(dword) ultoa_append::value#1 ) - [243] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 + [300] (byte) ultoa_append::digit#2 ← phi( ultoa_append/(byte) 0 ultoa_append::@2/(byte) ultoa_append::digit#1 ) + [300] (dword) ultoa_append::value#2 ← phi( ultoa_append/(dword) ultoa_append::value#0 ultoa_append::@2/(dword) ultoa_append::value#1 ) + [301] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 to:ultoa_append::@3 ultoa_append::@3: scope:[ultoa_append] from ultoa_append::@1 - [244] *((byte*) ultoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) ultoa_append::digit#2) + [302] *((byte*) ultoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) ultoa_append::digit#2) to:ultoa_append::@return ultoa_append::@return: scope:[ultoa_append] from ultoa_append::@3 - [245] return + [303] return to:@return ultoa_append::@2: scope:[ultoa_append] from ultoa_append::@1 - [246] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 - [247] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 + [304] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 + [305] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 to:ultoa_append::@1 (byte()) legal((byte) legal::row , (byte) legal::column) -legal: scope:[legal] from queens::@7 - [248] phi() +legal: scope:[legal] from queens::@5 + [306] phi() to:legal::@1 legal::@1: scope:[legal] from legal legal::@3 - [249] (byte) legal::i#2 ← phi( legal/(byte) 1 legal::@3/(byte) legal::i#1 ) - [250] (byte~) legal::$0 ← (byte) legal::row#0 - (byte) 1 - [251] if((byte) legal::i#2<=(byte~) legal::$0) goto legal::@2 + [307] (byte) legal::i#10 ← phi( legal/(byte) 1 legal::@3/(byte) legal::i#1 ) + [308] (byte~) legal::$0 ← (byte) legal::row#0 - (byte) 1 + [309] if((byte) legal::i#10<=(byte~) legal::$0) goto legal::@2 to:legal::@return -legal::@return: scope:[legal] from legal::@1 legal::@2 legal::@6 - [252] (byte) legal::return#4 ← phi( legal::@1/(byte) 1 legal::@2/(byte) 0 legal::@6/(byte) 0 ) - [253] return +legal::@return: scope:[legal] from legal::@1 legal::@2 legal::@5 + [310] (byte) legal::return#4 ← phi( legal::@1/(byte) 1 legal::@2/(byte) 0 legal::@5/(byte) 0 ) + [311] return to:@return legal::@2: scope:[legal] from legal::@1 - [254] if(*((const byte*) board + (byte) legal::i#2)==(byte) legal::column#0) goto legal::@return + [312] if(*((const byte*) board + (byte) legal::i#10)==(byte) legal::column#0) goto legal::@return to:legal::@4 legal::@4: scope:[legal] from legal::@2 - [255] (byte) diff::a#0 ← *((const byte*) board + (byte) legal::i#2) - [256] (byte) diff::b#0 ← (byte) legal::column#0 - [257] call diff - [258] (byte) diff::return#0 ← (byte) diff::return#4 + [313] (byte) legal::diff1_a#0 ← *((const byte*) board + (byte) legal::i#10) + to:legal::diff1 +legal::diff1: scope:[legal] from legal::@4 + [314] if((byte) legal::diff1_a#0<(byte) legal::column#0) goto legal::diff1_@1 + to:legal::diff1_@3 +legal::diff1_@3: scope:[legal] from legal::diff1 + [315] (byte) legal::diff1_return#1 ← (byte) legal::diff1_a#0 - (byte) legal::column#0 + to:legal::diff1_@return +legal::diff1_@return: scope:[legal] from legal::diff1_@1 legal::diff1_@3 + [316] (byte) legal::diff1_return#2 ← phi( legal::diff1_@1/(byte) legal::diff1_return#0 legal::diff1_@3/(byte) legal::diff1_return#1 ) + to:legal::diff2 +legal::diff2: scope:[legal] from legal::diff1_@return + [317] if((byte) legal::i#10<(byte) legal::row#0) goto legal::diff2_@1 + to:legal::diff2_@3 +legal::diff2_@3: scope:[legal] from legal::diff2 + [318] (byte) legal::diff2_return#1 ← (byte) legal::i#10 - (byte) legal::row#0 + to:legal::diff2_@return +legal::diff2_@return: scope:[legal] from legal::diff2_@1 legal::diff2_@3 + [319] (byte) legal::diff2_return#2 ← phi( legal::diff2_@1/(byte) legal::diff2_return#0 legal::diff2_@3/(byte) legal::diff2_return#1 ) to:legal::@5 -legal::@5: scope:[legal] from legal::@4 - [259] (byte~) legal::$3 ← (byte) diff::return#0 - [260] (byte) diff::a#1 ← (byte) legal::i#2 - [261] (byte) diff::b#1 ← (byte) legal::row#0 - [262] call diff - [263] (byte) diff::return#1 ← (byte) diff::return#4 - to:legal::@6 -legal::@6: scope:[legal] from legal::@5 - [264] (byte~) legal::$4 ← (byte) diff::return#1 - [265] if((byte~) legal::$3!=(byte~) legal::$4) goto legal::@3 +legal::@5: scope:[legal] from legal::diff2_@return + [320] if((byte) legal::diff1_return#2!=(byte) legal::diff2_return#2) goto legal::@3 to:legal::@return -legal::@3: scope:[legal] from legal::@6 - [266] (byte) legal::i#1 ← ++ (byte) legal::i#2 +legal::@3: scope:[legal] from legal::@5 + [321] (byte) legal::i#1 ← ++ (byte) legal::i#10 to:legal::@1 +legal::diff2_@1: scope:[legal] from legal::diff2 + [322] (byte) legal::diff2_return#0 ← (byte) legal::row#0 - (byte) legal::i#10 + to:legal::diff2_@return +legal::diff1_@1: scope:[legal] from legal::diff1 + [323] (byte) legal::diff1_return#0 ← (byte) legal::column#0 - (byte) legal::diff1_a#0 + to:legal::diff1_@return -(byte()) diff((byte) diff::a , (byte) diff::b) -diff: scope:[diff] from legal::@4 legal::@5 - [267] (byte) diff::b#2 ← phi( legal::@4/(byte) diff::b#0 legal::@5/(byte) diff::b#1 ) - [267] (byte) diff::a#2 ← phi( legal::@4/(byte) diff::a#0 legal::@5/(byte) diff::a#1 ) - [268] if((byte) diff::a#2<(byte) diff::b#2) goto diff::@1 - to:diff::@2 -diff::@2: scope:[diff] from diff - [269] (byte) diff::return#3 ← (byte) diff::a#2 - (byte) diff::b#2 - to:diff::@return -diff::@return: scope:[diff] from diff::@1 diff::@2 - [270] (byte) diff::return#4 ← phi( diff::@1/(byte) diff::return#2 diff::@2/(byte) diff::return#3 ) - [271] return +(void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) +tod_init: scope:[tod_init] from main::@4 + [324] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (byte) $80 + [325] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (byte) $7f + [326] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) ← (byte) tod_init::tod_HOURS#0 + [327] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) ← (byte) tod_init::tod_MIN#0 + [328] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) ← (byte) tod_init::tod_SEC#0 + [329] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) ← (byte) tod_init::tod_TENTHS#0 + to:tod_init::@return +tod_init::@return: scope:[tod_init] from tod_init + [330] return to:@return -diff::@1: scope:[diff] from diff - [272] (byte) diff::return#2 ← (byte) diff::b#2 - (byte) diff::a#2 - to:diff::@return (void()) printf_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix) printf_uint: scope:[printf_uint] from main::@3 - [273] phi() + [331] phi() to:printf_uint::@1 printf_uint::@1: scope:[printf_uint] from printf_uint - [274] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 - [275] call utoa + [332] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 + [333] call utoa to:printf_uint::@2 printf_uint::@2: scope:[printf_uint] from printf_uint::@1 - [276] (byte) printf_number_buffer::buffer_sign#1 ← *((byte*)&(struct printf_buffer_number) printf_buffer) - [277] call printf_number_buffer + [334] (byte) printf_number_buffer::buffer_sign#1 ← *((byte*)&(struct printf_buffer_number) printf_buffer) + [335] call printf_number_buffer to:printf_uint::@return printf_uint::@return: scope:[printf_uint] from printf_uint::@2 - [278] return + [336] return to:@return (void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix) utoa: scope:[utoa] from printf_uint::@1 - [279] phi() + [337] phi() to:utoa::@1 utoa::@1: scope:[utoa] from utoa utoa::@4 - [280] (byte*) utoa::buffer#11 ← phi( utoa::@4/(byte*) utoa::buffer#14 utoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) - [280] (byte) utoa::started#2 ← phi( utoa::@4/(byte) utoa::started#4 utoa/(byte) 0 ) - [280] (word) utoa::value#2 ← phi( utoa::@4/(word) utoa::value#6 utoa/(const word) printf_uint::uvalue#0 ) - [280] (byte) utoa::digit#2 ← phi( utoa::@4/(byte) utoa::digit#1 utoa/(byte) 0 ) - [281] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 + [338] (byte*) utoa::buffer#11 ← phi( utoa::@4/(byte*) utoa::buffer#14 utoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) + [338] (byte) utoa::started#2 ← phi( utoa::@4/(byte) utoa::started#4 utoa/(byte) 0 ) + [338] (word) utoa::value#2 ← phi( utoa::@4/(word) utoa::value#6 utoa/(const word) printf_uint::uvalue#0 ) + [338] (byte) utoa::digit#2 ← phi( utoa::@4/(byte) utoa::digit#1 utoa/(byte) 0 ) + [339] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 to:utoa::@3 utoa::@3: scope:[utoa] from utoa::@1 - [282] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 - [283] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) - [284] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 - [285] *((byte*) utoa::buffer#3) ← (byte) 0 + [340] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 + [341] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) + [342] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 + [343] *((byte*) utoa::buffer#3) ← (byte) 0 to:utoa::@return utoa::@return: scope:[utoa] from utoa::@3 - [286] return + [344] return to:@return utoa::@2: scope:[utoa] from utoa::@1 - [287] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 - [288] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) - [289] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 + [345] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 + [346] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) + [347] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 to:utoa::@7 utoa::@7: scope:[utoa] from utoa::@2 - [290] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 + [348] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 to:utoa::@4 utoa::@4: scope:[utoa] from utoa::@6 utoa::@7 - [291] (byte*) utoa::buffer#14 ← phi( utoa::@7/(byte*) utoa::buffer#11 utoa::@6/(byte*) utoa::buffer#4 ) - [291] (byte) utoa::started#4 ← phi( utoa::@7/(byte) utoa::started#2 utoa::@6/(byte) 1 ) - [291] (word) utoa::value#6 ← phi( utoa::@7/(word) utoa::value#2 utoa::@6/(word) utoa::value#0 ) - [292] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 + [349] (byte*) utoa::buffer#14 ← phi( utoa::@7/(byte*) utoa::buffer#11 utoa::@6/(byte*) utoa::buffer#4 ) + [349] (byte) utoa::started#4 ← phi( utoa::@7/(byte) utoa::started#2 utoa::@6/(byte) 1 ) + [349] (word) utoa::value#6 ← phi( utoa::@7/(word) utoa::value#2 utoa::@6/(word) utoa::value#0 ) + [350] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 to:utoa::@1 utoa::@5: scope:[utoa] from utoa::@2 utoa::@7 - [293] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 - [294] (word) utoa_append::value#0 ← (word) utoa::value#2 - [295] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 - [296] call utoa_append - [297] (word) utoa_append::return#0 ← (word) utoa_append::value#2 + [351] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 + [352] (word) utoa_append::value#0 ← (word) utoa::value#2 + [353] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 + [354] call utoa_append + [355] (word) utoa_append::return#0 ← (word) utoa_append::value#2 to:utoa::@6 utoa::@6: scope:[utoa] from utoa::@5 - [298] (word) utoa::value#0 ← (word) utoa_append::return#0 - [299] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 + [356] (word) utoa::value#0 ← (word) utoa_append::return#0 + [357] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 to:utoa::@4 (word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub) utoa_append: scope:[utoa_append] from utoa::@5 - [300] phi() + [358] phi() to:utoa_append::@1 utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2 - [301] (byte) utoa_append::digit#2 ← phi( utoa_append/(byte) 0 utoa_append::@2/(byte) utoa_append::digit#1 ) - [301] (word) utoa_append::value#2 ← phi( utoa_append/(word) utoa_append::value#0 utoa_append::@2/(word) utoa_append::value#1 ) - [302] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 + [359] (byte) utoa_append::digit#2 ← phi( utoa_append/(byte) 0 utoa_append::@2/(byte) utoa_append::digit#1 ) + [359] (word) utoa_append::value#2 ← phi( utoa_append/(word) utoa_append::value#0 utoa_append::@2/(word) utoa_append::value#1 ) + [360] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 to:utoa_append::@3 utoa_append::@3: scope:[utoa_append] from utoa_append::@1 - [303] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) + [361] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) to:utoa_append::@return utoa_append::@return: scope:[utoa_append] from utoa_append::@3 - [304] return + [362] return to:@return utoa_append::@2: scope:[utoa_append] from utoa_append::@1 - [305] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 - [306] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 + [363] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 + [364] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 to:utoa_append::@1 (void()) printf_cls() printf_cls: scope:[printf_cls] from main - [307] phi() - [308] call memset + [365] phi() + [366] call memset to:printf_cls::@1 printf_cls::@1: scope:[printf_cls] from printf_cls - [309] (byte*) printf_cursor_ptr ← (byte*) 1024 - [310] (byte) printf_cursor_x ← (byte) 0 - [311] (byte) printf_cursor_y ← (byte) 0 + [367] (byte*) printf_cursor_ptr ← (byte*) 1024 + [368] (byte) printf_cursor_x ← (byte) 0 + [369] (byte) printf_cursor_y ← (byte) 0 to:printf_cls::@return printf_cls::@return: scope:[printf_cls] from printf_cls::@1 - [312] return + [370] return to:@return -null depth in calling loop Loop head: queens::@1 tails: queens::@9 queens::@8 queens::@6 queens::@5 blocks: queens::@9 queens::@7 queens::@2 queens::@1 queens::@8 queens::@3 queens::@6 queens::@4 queens::@5 in scope print -null depth in calling loop Loop head: queens::@1 tails: queens::@9 queens::@8 queens::@6 queens::@5 blocks: queens::@9 queens::@7 queens::@2 queens::@1 queens::@8 queens::@3 queens::@6 queens::@4 queens::@5 in scope print +null depth in calling loop Loop head: queens::@1 tails: queens::@9 queens::@8 queens::@7 queens::@4 blocks: queens::@9 queens::@5 queens::@2 queens::@1 queens::@8 queens::@3 queens::@7 queens::@6 queens::@4 in scope print +null depth in calling loop Loop head: queens::@1 tails: queens::@9 queens::@8 queens::@7 queens::@4 blocks: queens::@9 queens::@5 queens::@2 queens::@1 queens::@8 queens::@3 queens::@7 queens::@6 queens::@4 in scope print null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print::@7 print::@5 print::@14 print::@9 print::@4 print::@10 print::@8 print::@3 print::@6 in scope printf_str -null depth in calling loop Loop head: queens::@1 tails: queens::@9 queens::@8 queens::@6 queens::@5 blocks: queens::@9 queens::@7 queens::@2 queens::@1 queens::@8 queens::@3 queens::@6 queens::@4 queens::@5 in scope print +null depth in calling loop Loop head: queens::@1 tails: queens::@9 queens::@8 queens::@7 queens::@4 blocks: queens::@9 queens::@5 queens::@2 queens::@1 queens::@8 queens::@3 queens::@7 queens::@6 queens::@4 in scope print null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print::@7 print::@5 print::@14 print::@9 print::@4 print::@10 print::@8 print::@3 print::@6 in scope printf_str null depth in calling loop Loop head: print::@5 tails: print::@9 blocks: print::@9 print::@10 print::@8 print::@6 print::@5 in scope printf_str -null depth in calling loop Loop head: queens::@1 tails: queens::@9 queens::@8 queens::@6 queens::@5 blocks: queens::@9 queens::@7 queens::@2 queens::@1 queens::@8 queens::@3 queens::@6 queens::@4 queens::@5 in scope print +null depth in calling loop Loop head: queens::@1 tails: queens::@9 queens::@8 queens::@7 queens::@4 blocks: queens::@9 queens::@5 queens::@2 queens::@1 queens::@8 queens::@3 queens::@7 queens::@6 queens::@4 in scope print null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print::@7 print::@5 print::@14 print::@9 print::@4 print::@10 print::@8 print::@3 print::@6 in scope printf_str null depth in calling loop Loop head: print::@5 tails: print::@9 blocks: print::@9 print::@10 print::@8 print::@6 print::@5 in scope printf_str -null depth in calling loop Loop head: queens::@1 tails: queens::@9 queens::@8 queens::@6 queens::@5 blocks: queens::@9 queens::@7 queens::@2 queens::@1 queens::@8 queens::@3 queens::@6 queens::@4 queens::@5 in scope print -null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print::@7 print::@5 print::@14 print::@9 print::@4 print::@10 print::@8 print::@3 print::@6 in scope printf_uchar -null depth in calling loop Loop head: queens::@1 tails: queens::@9 queens::@8 queens::@6 queens::@5 blocks: queens::@9 queens::@7 queens::@2 queens::@1 queens::@8 queens::@3 queens::@6 queens::@4 queens::@5 in scope print -null depth in calling loop Loop head: print::@1 tails: print::@13 blocks: print::@13 print::@2 print::@1 in scope printf_uchar -null depth in calling loop Loop head: queens::@1 tails: queens::@9 queens::@8 queens::@6 queens::@5 blocks: queens::@9 queens::@7 queens::@2 queens::@1 queens::@8 queens::@3 queens::@6 queens::@4 queens::@5 in scope print -null depth in calling loop Loop head: queens::@1 tails: queens::@9 queens::@8 queens::@6 queens::@5 blocks: queens::@9 queens::@7 queens::@2 queens::@1 queens::@8 queens::@3 queens::@6 queens::@4 queens::@5 in scope print -null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print::@7 print::@5 print::@14 print::@9 print::@4 print::@10 print::@8 print::@3 print::@6 in scope printf_uchar -null depth in calling loop Loop head: print::@1 tails: print::@13 blocks: print::@13 print::@2 print::@1 in scope printf_uchar -null depth in calling loop Loop head: printf_padding::@1 tails: printf_padding::@3 blocks: printf_padding::@3 printf_padding::@2 printf_padding::@1 in scope printf_char -null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print::@7 print::@5 print::@14 print::@9 print::@4 print::@10 print::@8 print::@3 print::@6 in scope printf_uchar -null depth in calling loop Loop head: print::@1 tails: print::@13 blocks: print::@13 print::@2 print::@1 in scope printf_uchar -null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print::@7 print::@5 print::@14 print::@9 print::@4 print::@10 print::@8 print::@3 print::@6 in scope printf_uchar -null depth in calling loop Loop head: print::@1 tails: print::@13 blocks: print::@13 print::@2 print::@1 in scope printf_uchar +null depth in calling loop Loop head: queens::@1 tails: queens::@9 queens::@8 queens::@7 queens::@4 blocks: queens::@9 queens::@5 queens::@2 queens::@1 queens::@8 queens::@3 queens::@7 queens::@6 queens::@4 in scope print null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print::@7 print::@5 print::@14 print::@9 print::@4 print::@10 print::@8 print::@3 print::@6 in scope printf_uchar +null depth in calling loop Loop head: queens::@1 tails: queens::@9 queens::@8 queens::@7 queens::@4 blocks: queens::@9 queens::@5 queens::@2 queens::@1 queens::@8 queens::@3 queens::@7 queens::@6 queens::@4 in scope print null depth in calling loop Loop head: print::@1 tails: print::@13 blocks: print::@13 print::@2 print::@1 in scope printf_uchar +null depth in calling loop Loop head: queens::@1 tails: queens::@9 queens::@8 queens::@7 queens::@4 blocks: queens::@9 queens::@5 queens::@2 queens::@1 queens::@8 queens::@3 queens::@7 queens::@6 queens::@4 in scope print +null depth in calling loop Loop head: queens::@1 tails: queens::@9 queens::@8 queens::@7 queens::@4 blocks: queens::@9 queens::@5 queens::@2 queens::@1 queens::@8 queens::@3 queens::@7 queens::@6 queens::@4 in scope print null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print::@7 print::@5 print::@14 print::@9 print::@4 print::@10 print::@8 print::@3 print::@6 in scope printf_str null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print::@7 print::@5 print::@14 print::@9 print::@4 print::@10 print::@8 print::@3 print::@6 in scope printf_str null depth in calling loop Loop head: print::@5 tails: print::@9 blocks: print::@9 print::@10 print::@8 print::@6 print::@5 in scope printf_str @@ -5585,6 +6507,15 @@ null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print:: null depth in calling loop Loop head: print::@5 tails: print::@9 blocks: print::@9 print::@10 print::@8 print::@6 print::@5 in scope printf_str null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print::@7 print::@5 print::@14 print::@9 print::@4 print::@10 print::@8 print::@3 print::@6 in scope printf_uchar null depth in calling loop Loop head: print::@1 tails: print::@13 blocks: print::@13 print::@2 print::@1 in scope printf_uchar +null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print::@7 print::@5 print::@14 print::@9 print::@4 print::@10 print::@8 print::@3 print::@6 in scope printf_uchar +null depth in calling loop Loop head: print::@1 tails: print::@13 blocks: print::@13 print::@2 print::@1 in scope printf_uchar +null depth in calling loop Loop head: printf_padding::@1 tails: printf_padding::@3 blocks: printf_padding::@3 printf_padding::@2 printf_padding::@1 in scope printf_char +null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print::@7 print::@5 print::@14 print::@9 print::@4 print::@10 print::@8 print::@3 print::@6 in scope printf_uchar +null depth in calling loop Loop head: print::@1 tails: print::@13 blocks: print::@13 print::@2 print::@1 in scope printf_uchar +null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print::@7 print::@5 print::@14 print::@9 print::@4 print::@10 print::@8 print::@3 print::@6 in scope printf_uchar +null depth in calling loop Loop head: print::@1 tails: print::@13 blocks: print::@13 print::@2 print::@1 in scope printf_uchar +null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print::@7 print::@5 print::@14 print::@9 print::@4 print::@10 print::@8 print::@3 print::@6 in scope printf_uchar +null depth in calling loop Loop head: print::@1 tails: print::@13 blocks: print::@13 print::@2 print::@1 in scope printf_uchar null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print::@7 print::@5 print::@14 print::@9 print::@4 print::@10 print::@8 print::@3 print::@6 in scope printf_str null depth in calling loop Loop head: print::@3 tails: print::@7 blocks: print::@7 print::@5 print::@14 print::@9 print::@4 print::@10 print::@8 print::@3 print::@6 in scope printf_str null depth in calling loop Loop head: print::@5 tails: print::@9 blocks: print::@9 print::@10 print::@8 print::@6 print::@5 in scope printf_str @@ -5597,39 +6528,62 @@ null depth in calling loop Loop head: print::@1 tails: print::@13 blocks: print: null depth in calling loop Loop head: printf_padding::@1 tails: printf_padding::@3 blocks: printf_padding::@3 printf_padding::@2 printf_padding::@1 in scope printf_char VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(byte) TIME_OF_DAY::HOURS +(byte) TIME_OF_DAY::MIN +(byte) TIME_OF_DAY::SEC +(byte) TIME_OF_DAY::TENTHS +(struct TIME_OF_DAY) TOD_ZERO loadstore = { TENTHS: (byte) 0, SEC: (byte) 0, MIN: (byte) 0, HOURS: (byte) 0 } (dword) count -(dword) count#11 1133.8666666666668 -(dword) count#13 750.1071428571429 -(byte()) diff((byte) diff::a , (byte) diff::b) -(byte) diff::a -(byte) diff::a#0 1000001.0 -(byte) diff::a#1 1000001.0 -(byte) diff::a#2 1.60000025E7 -(byte) diff::b -(byte) diff::b#0 2000002.0 -(byte) diff::b#1 2000002.0 -(byte) diff::b#2 1.60000025E7 -(byte) diff::return -(byte) diff::return#0 2000002.0 -(byte) diff::return#1 2000002.0 -(byte) diff::return#2 2.0000002E7 -(byte) diff::return#3 2.0000002E7 -(byte) diff::return#4 5500001.0 +(dword) count#14 572.0 +(dword) count#22 413.89655172413796 (byte()) legal((byte) legal::row , (byte) legal::column) (byte~) legal::$0 2000002.0 -(byte~) legal::$3 333333.6666666667 -(byte~) legal::$4 2000002.0 (byte) legal::column -(byte) legal::column#0 111166.83333333333 +(byte) legal::column#0 235353.23529411765 +(byte) legal::diff1_a +(byte) legal::diff1_a#0 2000002.0 +(byte) legal::diff1_b +(byte) legal::diff1_return +(byte) legal::diff1_return#0 2000002.0 +(byte) legal::diff1_return#1 2000002.0 +(byte) legal::diff1_return#2 600000.6000000001 +(byte) legal::diff2_a +(byte) legal::diff2_b +(byte) legal::diff2_return +(byte) legal::diff2_return#0 2000002.0 +(byte) legal::diff2_return#1 2000002.0 +(byte) legal::diff2_return#2 3000003.0 (byte) legal::i (byte) legal::i#1 2000002.0 -(byte) legal::i#2 400000.4 +(byte) legal::i#10 571429.1428571428 (byte) legal::return (byte) legal::return#0 2002.0 (byte) legal::return#4 333.6666666666667 (byte) legal::row -(byte) legal::row#0 105315.94736842104 +(byte) legal::row#0 222278.05555555556 (void()) main() +(byte) main::tod_HOURS +(byte) main::tod_HOURS#0 5.5 +(byte) main::tod_MIN +(byte) main::tod_MIN#0 5.5 +(byte) main::tod_SEC +(byte) main::tod_SEC#0 5.5 +(byte) main::tod_TENTHS +(byte) main::tod_TENTHS#0 5.5 (void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) (void*) memcpy::destination (byte*) memcpy::dst @@ -5675,9 +6629,9 @@ VARIABLE REGISTER WEIGHTS (byte) printf_char::ch#2 2.00000002E8 (byte) printf_char::ch#3 1.1010100000004E13 (void()) printf_cls() -(byte*) printf_cursor_ptr loadstore 1.5045751633994116E12 -(byte) printf_cursor_x loadstore 2.811188811196433E11 -(byte) printf_cursor_y loadstore 2.0792207792214937E12 +(byte*) printf_cursor_ptr loadstore 1.2788888888894998E12 +(byte) printf_cursor_x loadstore 2.3647058823593533E11 +(byte) printf_cursor_y loadstore 1.769060773481271E12 (byte) printf_format_number::justify_left (byte) printf_format_number::min_length (byte) printf_format_number::radix @@ -5725,9 +6679,9 @@ VARIABLE REGISTER WEIGHTS (byte) printf_padding::length#0 2.00000002E8 (byte) printf_padding::length#1 2.00000002E8 (byte) printf_padding::length#2 2.00000002E8 -(byte) printf_padding::length#4 1.6671666666733334E11 +(byte) printf_padding::length#6 1.6671666666733334E11 (byte) printf_padding::pad -(byte) printf_padding::pad#5 1.6666666666683334E11 +(byte) printf_padding::pad#7 1.6666666666683334E11 (void()) printf_scroll() (byte*~) printf_scroll::$4 2.00000000000002E14 (void()) printf_str((byte*) printf_str::str) @@ -5736,8 +6690,15 @@ VARIABLE REGISTER WEIGHTS (byte*) printf_str::str (byte*) printf_str::str#0 4.2857142861428566E9 (byte*) printf_str::str#1 2.00000002E8 -(byte*) printf_str::str#10 2.05000000025E10 -(byte*) printf_str::str#11 1.100000002E9 +(byte*) printf_str::str#11 2.05000000025E10 +(byte*) printf_str::str#13 1.100000002E9 +(void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) +(struct printf_format_string) printf_string::format +(byte) printf_string::format_justify_left +(byte) printf_string::format_min_length +(signed byte) printf_string::len +(signed byte) printf_string::padding +(byte*) printf_string::str (void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) (struct printf_format_number) printf_uchar::format (byte) printf_uchar::format_justify_left @@ -5784,7 +6745,7 @@ VARIABLE REGISTER WEIGHTS (byte*) strlen::str (byte*) strlen::str#0 2.000000000002E12 (byte*) strlen::str#1 5.50000001E8 -(byte*) strlen::str#2 1.0003333333346667E12 +(byte*) strlen::str#3 1.0003333333346667E12 (byte*()) strupr((byte*) strupr::str) (byte~) strupr::$0 2.000000000002E12 (byte*) strupr::return @@ -5793,6 +6754,65 @@ VARIABLE REGISTER WEIGHTS (byte*) strupr::src#2 7.144285714294285E11 (byte*) strupr::str (byte*) strupr::str#0 5.50000001E8 +(void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) +(struct TIME_OF_DAY) tod_init::tod +(byte) tod_init::tod_HOURS +(byte) tod_init::tod_HOURS#0 37.33333333333333 +(byte) tod_init::tod_MIN +(byte) tod_init::tod_MIN#0 22.4 +(byte) tod_init::tod_SEC +(byte) tod_init::tod_SEC#0 16.0 +(byte) tod_init::tod_TENTHS +(byte) tod_init::tod_TENTHS#0 12.444444444444443 +(struct TIME_OF_DAY()) tod_read() +(byte) tod_read::hours +(byte) tod_read::mins +(struct TIME_OF_DAY) tod_read::return +(byte) tod_read::return_HOURS +(byte) tod_read::return_HOURS#0 12.444444444444443 +(byte) tod_read::return_HOURS#2 5.5 +(byte) tod_read::return_MIN +(byte) tod_read::return_MIN#0 16.0 +(byte) tod_read::return_MIN#2 5.5 +(byte) tod_read::return_SEC +(byte) tod_read::return_SEC#0 22.4 +(byte) tod_read::return_SEC#2 5.5 +(byte) tod_read::return_TENTHS +(byte) tod_read::return_TENTHS#0 37.33333333333333 +(byte) tod_read::return_TENTHS#2 5.5 +(byte) tod_read::secs +(byte) tod_read::tenths +(byte) tod_read::tod_HOURS +(byte) tod_read::tod_MIN +(byte) tod_read::tod_SEC +(byte) tod_read::tod_TENTHS +(byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) +(byte~) tod_str::$0 202.0 +(byte~) tod_str::$1 202.0 +(byte~) tod_str::$10 202.0 +(byte~) tod_str::$11 202.0 +(byte~) tod_str::$12 202.0 +(byte~) tod_str::$13 202.0 +(byte~) tod_str::$14 202.0 +(byte~) tod_str::$15 202.0 +(byte~) tod_str::$2 202.0 +(byte~) tod_str::$3 202.0 +(byte~) tod_str::$4 202.0 +(byte~) tod_str::$5 202.0 +(byte~) tod_str::$6 202.0 +(byte~) tod_str::$7 202.0 +(byte~) tod_str::$8 202.0 +(byte~) tod_str::$9 202.0 +(byte*) tod_str::return +(struct TIME_OF_DAY) tod_str::tod +(byte) tod_str::tod_HOURS +(byte) tod_str::tod_HOURS#0 53.25 +(byte) tod_str::tod_MIN +(byte) tod_str::tod_MIN#0 19.363636363636363 +(byte) tod_str::tod_SEC +(byte) tod_str::tod_SEC#0 11.833333333333332 +(byte) tod_str::tod_TENTHS +(byte) tod_str::tod_TENTHS#0 8.52 (byte()) toupper((byte) toupper::ch) (byte) toupper::ch (byte) toupper::ch#0 1.7000000000001998E13 @@ -5913,8 +6933,16 @@ VARIABLE REGISTER WEIGHTS (word) utoa_append::value#2 5018334.166666666 Initial phi equivalence classes +[ printf_str::str#11 printf_str::str#13 printf_str::str#1 printf_str::str#0 ] +[ memset::num#2 ] +[ memset::str#3 ] +[ memset::c#4 ] +[ memset::dst#2 memset::dst#4 memset::dst#1 ] +[ memcpy::src#2 memcpy::src#1 ] +[ memcpy::dst#2 memcpy::dst#1 ] +[ printf_char::ch#3 printf_char::ch#2 printf_char::ch#0 printf_char::ch#1 ] [ queens::row#10 queens::row#1 queens::row#2 ] -[ count#11 count#13 ] +[ count#14 count#22 ] [ print::i#2 print::i#1 ] [ print::i1#2 print::i1#1 ] [ print::j#2 print::j#1 ] @@ -5927,20 +6955,12 @@ Initial phi equivalence classes [ printf_number_buffer::format_upper_case#10 ] [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] -[ printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] -[ printf_padding::pad#5 ] +[ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] +[ printf_padding::pad#7 ] [ printf_padding::i#2 printf_padding::i#1 ] -[ printf_char::ch#3 printf_char::ch#2 printf_char::ch#0 printf_char::ch#1 ] -[ memset::num#2 ] -[ memset::str#3 ] -[ memset::c#4 ] -[ memset::dst#2 memset::dst#4 memset::dst#1 ] -[ memcpy::src#2 memcpy::src#1 ] -[ memcpy::dst#2 memcpy::dst#1 ] -[ printf_str::str#10 printf_str::str#11 printf_str::str#1 printf_str::str#0 ] [ strupr::src#2 strupr::str#0 strupr::src#1 ] [ toupper::return#2 toupper::return#0 toupper::ch#0 ] -[ strlen::str#2 strlen::str#1 strlen::str#0 ] +[ strlen::str#3 strlen::str#1 strlen::str#0 ] [ strlen::len#2 strlen::len#1 ] [ uctoa::digit#2 uctoa::digit#1 ] [ uctoa::value#2 uctoa::value#6 uctoa::value#1 uctoa::value#0 ] @@ -5954,11 +6974,10 @@ Initial phi equivalence classes [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] [ ultoa_append::digit#2 ultoa_append::digit#1 ] -[ legal::i#2 legal::i#1 ] +[ legal::i#10 legal::i#1 ] [ legal::return#4 ] -[ diff::a#2 diff::a#0 diff::a#1 ] -[ diff::b#2 diff::b#0 diff::b#1 ] -[ diff::return#4 diff::return#2 diff::return#3 ] +[ legal::diff1_return#2 legal::diff1_return#0 legal::diff1_return#1 ] +[ legal::diff2_return#2 legal::diff2_return#0 legal::diff2_return#1 ] [ utoa::digit#2 utoa::digit#1 ] [ utoa::value#2 utoa::value#6 utoa::value#0 ] [ utoa::started#2 utoa::started#4 ] @@ -5968,6 +6987,47 @@ Initial phi equivalence classes Added variable printf_cursor_x to live range equivalence class [ printf_cursor_x ] Added variable printf_cursor_y to live range equivalence class [ printf_cursor_y ] Added variable printf_cursor_ptr to live range equivalence class [ printf_cursor_ptr ] +Added variable tod_init::tod_TENTHS#0 to live range equivalence class [ tod_init::tod_TENTHS#0 ] +Added variable tod_init::tod_SEC#0 to live range equivalence class [ tod_init::tod_SEC#0 ] +Added variable tod_init::tod_MIN#0 to live range equivalence class [ tod_init::tod_MIN#0 ] +Added variable tod_init::tod_HOURS#0 to live range equivalence class [ tod_init::tod_HOURS#0 ] +Added variable tod_read::return_TENTHS#2 to live range equivalence class [ tod_read::return_TENTHS#2 ] +Added variable tod_read::return_SEC#2 to live range equivalence class [ tod_read::return_SEC#2 ] +Added variable tod_read::return_MIN#2 to live range equivalence class [ tod_read::return_MIN#2 ] +Added variable tod_read::return_HOURS#2 to live range equivalence class [ tod_read::return_HOURS#2 ] +Added variable main::tod_TENTHS#0 to live range equivalence class [ main::tod_TENTHS#0 ] +Added variable main::tod_SEC#0 to live range equivalence class [ main::tod_SEC#0 ] +Added variable main::tod_MIN#0 to live range equivalence class [ main::tod_MIN#0 ] +Added variable main::tod_HOURS#0 to live range equivalence class [ main::tod_HOURS#0 ] +Added variable tod_str::tod_TENTHS#0 to live range equivalence class [ tod_str::tod_TENTHS#0 ] +Added variable tod_str::tod_SEC#0 to live range equivalence class [ tod_str::tod_SEC#0 ] +Added variable tod_str::tod_MIN#0 to live range equivalence class [ tod_str::tod_MIN#0 ] +Added variable tod_str::tod_HOURS#0 to live range equivalence class [ tod_str::tod_HOURS#0 ] +Added variable printf_str::ch#0 to live range equivalence class [ printf_str::ch#0 ] +Added variable printf_ln::$0 to live range equivalence class [ printf_ln::$0 ] +Added variable printf_ln::$1 to live range equivalence class [ printf_ln::$1 ] +Added variable printf_scroll::$4 to live range equivalence class [ printf_scroll::$4 ] +Added variable memset::end#0 to live range equivalence class [ memset::end#0 ] +Added variable tod_str::$0 to live range equivalence class [ tod_str::$0 ] +Added variable tod_str::$1 to live range equivalence class [ tod_str::$1 ] +Added variable tod_str::$2 to live range equivalence class [ tod_str::$2 ] +Added variable tod_str::$3 to live range equivalence class [ tod_str::$3 ] +Added variable tod_str::$4 to live range equivalence class [ tod_str::$4 ] +Added variable tod_str::$5 to live range equivalence class [ tod_str::$5 ] +Added variable tod_str::$6 to live range equivalence class [ tod_str::$6 ] +Added variable tod_str::$7 to live range equivalence class [ tod_str::$7 ] +Added variable tod_str::$8 to live range equivalence class [ tod_str::$8 ] +Added variable tod_str::$9 to live range equivalence class [ tod_str::$9 ] +Added variable tod_str::$10 to live range equivalence class [ tod_str::$10 ] +Added variable tod_str::$11 to live range equivalence class [ tod_str::$11 ] +Added variable tod_str::$12 to live range equivalence class [ tod_str::$12 ] +Added variable tod_str::$13 to live range equivalence class [ tod_str::$13 ] +Added variable tod_str::$14 to live range equivalence class [ tod_str::$14 ] +Added variable tod_str::$15 to live range equivalence class [ tod_str::$15 ] +Added variable tod_read::return_HOURS#0 to live range equivalence class [ tod_read::return_HOURS#0 ] +Added variable tod_read::return_MIN#0 to live range equivalence class [ tod_read::return_MIN#0 ] +Added variable tod_read::return_SEC#0 to live range equivalence class [ tod_read::return_SEC#0 ] +Added variable tod_read::return_TENTHS#0 to live range equivalence class [ tod_read::return_TENTHS#0 ] Added variable legal::row#0 to live range equivalence class [ legal::row#0 ] Added variable legal::column#0 to live range equivalence class [ legal::column#0 ] Added variable legal::return#0 to live range equivalence class [ legal::return#0 ] @@ -5975,11 +7035,6 @@ Added variable queens::$2 to live range equivalence class [ queens::$2 ] Added variable printf_ulong::uvalue#0 to live range equivalence class [ printf_ulong::uvalue#0 ] Added variable strlen::return#2 to live range equivalence class [ strlen::return#2 ] Added variable printf_number_buffer::$19 to live range equivalence class [ printf_number_buffer::$19 ] -Added variable printf_scroll::$4 to live range equivalence class [ printf_scroll::$4 ] -Added variable memset::end#0 to live range equivalence class [ memset::end#0 ] -Added variable printf_str::ch#0 to live range equivalence class [ printf_str::ch#0 ] -Added variable printf_ln::$0 to live range equivalence class [ printf_ln::$0 ] -Added variable printf_ln::$1 to live range equivalence class [ printf_ln::$1 ] Added variable toupper::return#3 to live range equivalence class [ toupper::return#3 ] Added variable strupr::$0 to live range equivalence class [ strupr::$0 ] Added variable uctoa::buffer#3 to live range equivalence class [ uctoa::buffer#3 ] @@ -5995,10 +7050,7 @@ Added variable ultoa_append::buffer#0 to live range equivalence class [ ultoa_ap Added variable ultoa_append::sub#0 to live range equivalence class [ ultoa_append::sub#0 ] Added variable ultoa_append::return#0 to live range equivalence class [ ultoa_append::return#0 ] Added variable legal::$0 to live range equivalence class [ legal::$0 ] -Added variable diff::return#0 to live range equivalence class [ diff::return#0 ] -Added variable legal::$3 to live range equivalence class [ legal::$3 ] -Added variable diff::return#1 to live range equivalence class [ diff::return#1 ] -Added variable legal::$4 to live range equivalence class [ legal::$4 ] +Added variable legal::diff1_a#0 to live range equivalence class [ legal::diff1_a#0 ] Added variable utoa::$11 to live range equivalence class [ utoa::$11 ] Added variable utoa::buffer#3 to live range equivalence class [ utoa::buffer#3 ] Added variable utoa::$10 to live range equivalence class [ utoa::$10 ] @@ -6007,9 +7059,18 @@ Added variable utoa_append::buffer#0 to live range equivalence class [ utoa_appe Added variable utoa_append::sub#0 to live range equivalence class [ utoa_append::sub#0 ] Added variable utoa_append::return#0 to live range equivalence class [ utoa_append::return#0 ] Added variable printf_buffer to live range equivalence class [ printf_buffer ] +Added variable TOD_ZERO to live range equivalence class [ TOD_ZERO ] Complete equivalence classes +[ printf_str::str#11 printf_str::str#13 printf_str::str#1 printf_str::str#0 ] +[ memset::num#2 ] +[ memset::str#3 ] +[ memset::c#4 ] +[ memset::dst#2 memset::dst#4 memset::dst#1 ] +[ memcpy::src#2 memcpy::src#1 ] +[ memcpy::dst#2 memcpy::dst#1 ] +[ printf_char::ch#3 printf_char::ch#2 printf_char::ch#0 printf_char::ch#1 ] [ queens::row#10 queens::row#1 queens::row#2 ] -[ count#11 count#13 ] +[ count#14 count#22 ] [ print::i#2 print::i#1 ] [ print::i1#2 print::i1#1 ] [ print::j#2 print::j#1 ] @@ -6022,20 +7083,12 @@ Complete equivalence classes [ printf_number_buffer::format_upper_case#10 ] [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] -[ printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] -[ printf_padding::pad#5 ] +[ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] +[ printf_padding::pad#7 ] [ printf_padding::i#2 printf_padding::i#1 ] -[ printf_char::ch#3 printf_char::ch#2 printf_char::ch#0 printf_char::ch#1 ] -[ memset::num#2 ] -[ memset::str#3 ] -[ memset::c#4 ] -[ memset::dst#2 memset::dst#4 memset::dst#1 ] -[ memcpy::src#2 memcpy::src#1 ] -[ memcpy::dst#2 memcpy::dst#1 ] -[ printf_str::str#10 printf_str::str#11 printf_str::str#1 printf_str::str#0 ] [ strupr::src#2 strupr::str#0 strupr::src#1 ] [ toupper::return#2 toupper::return#0 toupper::ch#0 ] -[ strlen::str#2 strlen::str#1 strlen::str#0 ] +[ strlen::str#3 strlen::str#1 strlen::str#0 ] [ strlen::len#2 strlen::len#1 ] [ uctoa::digit#2 uctoa::digit#1 ] [ uctoa::value#2 uctoa::value#6 uctoa::value#1 uctoa::value#0 ] @@ -6049,11 +7102,10 @@ Complete equivalence classes [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] [ ultoa_append::digit#2 ultoa_append::digit#1 ] -[ legal::i#2 legal::i#1 ] +[ legal::i#10 legal::i#1 ] [ legal::return#4 ] -[ diff::a#2 diff::a#0 diff::a#1 ] -[ diff::b#2 diff::b#0 diff::b#1 ] -[ diff::return#4 diff::return#2 diff::return#3 ] +[ legal::diff1_return#2 legal::diff1_return#0 legal::diff1_return#1 ] +[ legal::diff2_return#2 legal::diff2_return#0 legal::diff2_return#1 ] [ utoa::digit#2 utoa::digit#1 ] [ utoa::value#2 utoa::value#6 utoa::value#0 ] [ utoa::started#2 utoa::started#4 ] @@ -6063,6 +7115,47 @@ Complete equivalence classes [ printf_cursor_x ] [ printf_cursor_y ] [ printf_cursor_ptr ] +[ tod_init::tod_TENTHS#0 ] +[ tod_init::tod_SEC#0 ] +[ tod_init::tod_MIN#0 ] +[ tod_init::tod_HOURS#0 ] +[ tod_read::return_TENTHS#2 ] +[ tod_read::return_SEC#2 ] +[ tod_read::return_MIN#2 ] +[ tod_read::return_HOURS#2 ] +[ main::tod_TENTHS#0 ] +[ main::tod_SEC#0 ] +[ main::tod_MIN#0 ] +[ main::tod_HOURS#0 ] +[ tod_str::tod_TENTHS#0 ] +[ tod_str::tod_SEC#0 ] +[ tod_str::tod_MIN#0 ] +[ tod_str::tod_HOURS#0 ] +[ printf_str::ch#0 ] +[ printf_ln::$0 ] +[ printf_ln::$1 ] +[ printf_scroll::$4 ] +[ memset::end#0 ] +[ tod_str::$0 ] +[ tod_str::$1 ] +[ tod_str::$2 ] +[ tod_str::$3 ] +[ tod_str::$4 ] +[ tod_str::$5 ] +[ tod_str::$6 ] +[ tod_str::$7 ] +[ tod_str::$8 ] +[ tod_str::$9 ] +[ tod_str::$10 ] +[ tod_str::$11 ] +[ tod_str::$12 ] +[ tod_str::$13 ] +[ tod_str::$14 ] +[ tod_str::$15 ] +[ tod_read::return_HOURS#0 ] +[ tod_read::return_MIN#0 ] +[ tod_read::return_SEC#0 ] +[ tod_read::return_TENTHS#0 ] [ legal::row#0 ] [ legal::column#0 ] [ legal::return#0 ] @@ -6070,11 +7163,6 @@ Complete equivalence classes [ printf_ulong::uvalue#0 ] [ strlen::return#2 ] [ printf_number_buffer::$19 ] -[ printf_scroll::$4 ] -[ memset::end#0 ] -[ printf_str::ch#0 ] -[ printf_ln::$0 ] -[ printf_ln::$1 ] [ toupper::return#3 ] [ strupr::$0 ] [ uctoa::buffer#3 ] @@ -6090,10 +7178,7 @@ Complete equivalence classes [ ultoa_append::sub#0 ] [ ultoa_append::return#0 ] [ legal::$0 ] -[ diff::return#0 ] -[ legal::$3 ] -[ diff::return#1 ] -[ legal::$4 ] +[ legal::diff1_a#0 ] [ utoa::$11 ] [ utoa::buffer#3 ] [ utoa::$10 ] @@ -6102,34 +7187,35 @@ Complete equivalence classes [ utoa_append::sub#0 ] [ utoa_append::return#0 ] [ printf_buffer ] -Allocated zp[1]:2 [ queens::row#10 queens::row#1 queens::row#2 ] -Allocated zp[4]:3 [ count#11 count#13 ] -Allocated zp[1]:7 [ print::i#2 print::i#1 ] -Allocated zp[1]:8 [ print::i1#2 print::i1#1 ] -Allocated zp[1]:9 [ print::j#2 print::j#1 ] -Allocated zp[1]:10 [ printf_uchar::uvalue#2 printf_uchar::uvalue#1 printf_uchar::uvalue#0 ] -Allocated zp[1]:11 [ printf_number_buffer::format_min_length#3 ] -Allocated zp[1]:12 [ printf_number_buffer::format_justify_left#10 ] -Allocated zp[1]:13 [ printf_number_buffer::format_zero_padding#10 ] -Allocated zp[2]:14 [ printf_number_buffer::buffer_digits#10 ] -Allocated zp[1]:16 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] -Allocated zp[1]:17 [ printf_number_buffer::format_upper_case#10 ] -Allocated zp[1]:18 [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] -Allocated zp[1]:19 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] -Allocated zp[1]:20 [ printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] -Allocated zp[1]:21 [ printf_padding::pad#5 ] -Allocated zp[1]:22 [ printf_padding::i#2 printf_padding::i#1 ] -Allocated zp[1]:23 [ printf_char::ch#3 printf_char::ch#2 printf_char::ch#0 printf_char::ch#1 ] -Allocated zp[2]:24 [ memset::num#2 ] -Allocated zp[2]:26 [ memset::str#3 ] -Allocated zp[1]:28 [ memset::c#4 ] -Allocated zp[2]:29 [ memset::dst#2 memset::dst#4 memset::dst#1 ] -Allocated zp[2]:31 [ memcpy::src#2 memcpy::src#1 ] -Allocated zp[2]:33 [ memcpy::dst#2 memcpy::dst#1 ] -Allocated zp[2]:35 [ printf_str::str#10 printf_str::str#11 printf_str::str#1 printf_str::str#0 ] +[ TOD_ZERO ] +Allocated zp[2]:2 [ printf_str::str#11 printf_str::str#13 printf_str::str#1 printf_str::str#0 ] +Allocated zp[2]:4 [ memset::num#2 ] +Allocated zp[2]:6 [ memset::str#3 ] +Allocated zp[1]:8 [ memset::c#4 ] +Allocated zp[2]:9 [ memset::dst#2 memset::dst#4 memset::dst#1 ] +Allocated zp[2]:11 [ memcpy::src#2 memcpy::src#1 ] +Allocated zp[2]:13 [ memcpy::dst#2 memcpy::dst#1 ] +Allocated zp[1]:15 [ printf_char::ch#3 printf_char::ch#2 printf_char::ch#0 printf_char::ch#1 ] +Allocated zp[1]:16 [ queens::row#10 queens::row#1 queens::row#2 ] +Allocated zp[4]:17 [ count#14 count#22 ] +Allocated zp[1]:21 [ print::i#2 print::i#1 ] +Allocated zp[1]:22 [ print::i1#2 print::i1#1 ] +Allocated zp[1]:23 [ print::j#2 print::j#1 ] +Allocated zp[1]:24 [ printf_uchar::uvalue#2 printf_uchar::uvalue#1 printf_uchar::uvalue#0 ] +Allocated zp[1]:25 [ printf_number_buffer::format_min_length#3 ] +Allocated zp[1]:26 [ printf_number_buffer::format_justify_left#10 ] +Allocated zp[1]:27 [ printf_number_buffer::format_zero_padding#10 ] +Allocated zp[2]:28 [ printf_number_buffer::buffer_digits#10 ] +Allocated zp[1]:30 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] +Allocated zp[1]:31 [ printf_number_buffer::format_upper_case#10 ] +Allocated zp[1]:32 [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] +Allocated zp[1]:33 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] +Allocated zp[1]:34 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] +Allocated zp[1]:35 [ printf_padding::pad#7 ] +Allocated zp[1]:36 [ printf_padding::i#2 printf_padding::i#1 ] Allocated zp[2]:37 [ strupr::src#2 strupr::str#0 strupr::src#1 ] Allocated zp[1]:39 [ toupper::return#2 toupper::return#0 toupper::ch#0 ] -Allocated zp[2]:40 [ strlen::str#2 strlen::str#1 strlen::str#0 ] +Allocated zp[2]:40 [ strlen::str#3 strlen::str#1 strlen::str#0 ] Allocated zp[2]:42 [ strlen::len#2 strlen::len#1 ] Allocated zp[1]:44 [ uctoa::digit#2 uctoa::digit#1 ] Allocated zp[1]:45 [ uctoa::value#2 uctoa::value#6 uctoa::value#1 uctoa::value#0 ] @@ -6143,59 +7229,92 @@ Allocated zp[1]:56 [ ultoa::started#2 ultoa::started#4 ] Allocated zp[2]:57 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] Allocated zp[4]:59 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] Allocated zp[1]:63 [ ultoa_append::digit#2 ultoa_append::digit#1 ] -Allocated zp[1]:64 [ legal::i#2 legal::i#1 ] +Allocated zp[1]:64 [ legal::i#10 legal::i#1 ] Allocated zp[1]:65 [ legal::return#4 ] -Allocated zp[1]:66 [ diff::a#2 diff::a#0 diff::a#1 ] -Allocated zp[1]:67 [ diff::b#2 diff::b#0 diff::b#1 ] -Allocated zp[1]:68 [ diff::return#4 diff::return#2 diff::return#3 ] -Allocated zp[1]:69 [ utoa::digit#2 utoa::digit#1 ] -Allocated zp[2]:70 [ utoa::value#2 utoa::value#6 utoa::value#0 ] -Allocated zp[1]:72 [ utoa::started#2 utoa::started#4 ] -Allocated zp[2]:73 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] -Allocated zp[2]:75 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] -Allocated zp[1]:77 [ utoa_append::digit#2 utoa_append::digit#1 ] -Allocated zp[1]:78 [ printf_cursor_x ] -Allocated zp[1]:79 [ printf_cursor_y ] -Allocated zp[2]:80 [ printf_cursor_ptr ] -Allocated zp[1]:82 [ legal::row#0 ] -Allocated zp[1]:83 [ legal::column#0 ] -Allocated zp[1]:84 [ legal::return#0 ] -Allocated zp[1]:85 [ queens::$2 ] -Allocated zp[4]:86 [ printf_ulong::uvalue#0 ] -Allocated zp[2]:90 [ strlen::return#2 ] -Allocated zp[2]:92 [ printf_number_buffer::$19 ] -Allocated zp[2]:94 [ printf_scroll::$4 ] -Allocated zp[2]:96 [ memset::end#0 ] -Allocated zp[1]:98 [ printf_str::ch#0 ] -Allocated zp[2]:99 [ printf_ln::$0 ] -Allocated zp[2]:101 [ printf_ln::$1 ] -Allocated zp[1]:103 [ toupper::return#3 ] -Allocated zp[1]:104 [ strupr::$0 ] -Allocated zp[2]:105 [ uctoa::buffer#3 ] -Allocated zp[1]:107 [ uctoa::digit_value#0 ] -Allocated zp[2]:108 [ uctoa_append::buffer#0 ] -Allocated zp[1]:110 [ uctoa_append::sub#0 ] -Allocated zp[1]:111 [ uctoa_append::return#0 ] -Allocated zp[1]:112 [ ultoa::$11 ] -Allocated zp[2]:113 [ ultoa::buffer#3 ] -Allocated zp[1]:115 [ ultoa::$10 ] -Allocated zp[4]:116 [ ultoa::digit_value#0 ] -Allocated zp[2]:120 [ ultoa_append::buffer#0 ] -Allocated zp[4]:122 [ ultoa_append::sub#0 ] -Allocated zp[4]:126 [ ultoa_append::return#0 ] -Allocated zp[1]:130 [ legal::$0 ] -Allocated zp[1]:131 [ diff::return#0 ] -Allocated zp[1]:132 [ legal::$3 ] -Allocated zp[1]:133 [ diff::return#1 ] -Allocated zp[1]:134 [ legal::$4 ] -Allocated zp[1]:135 [ utoa::$11 ] -Allocated zp[2]:136 [ utoa::buffer#3 ] -Allocated zp[1]:138 [ utoa::$10 ] -Allocated zp[2]:139 [ utoa::digit_value#0 ] -Allocated zp[2]:141 [ utoa_append::buffer#0 ] -Allocated zp[2]:143 [ utoa_append::sub#0 ] -Allocated zp[2]:145 [ utoa_append::return#0 ] +Allocated zp[1]:66 [ legal::diff1_return#2 legal::diff1_return#0 legal::diff1_return#1 ] +Allocated zp[1]:67 [ legal::diff2_return#2 legal::diff2_return#0 legal::diff2_return#1 ] +Allocated zp[1]:68 [ utoa::digit#2 utoa::digit#1 ] +Allocated zp[2]:69 [ utoa::value#2 utoa::value#6 utoa::value#0 ] +Allocated zp[1]:71 [ utoa::started#2 utoa::started#4 ] +Allocated zp[2]:72 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] +Allocated zp[2]:74 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] +Allocated zp[1]:76 [ utoa_append::digit#2 utoa_append::digit#1 ] +Allocated zp[1]:77 [ printf_cursor_x ] +Allocated zp[1]:78 [ printf_cursor_y ] +Allocated zp[2]:79 [ printf_cursor_ptr ] +Allocated zp[1]:81 [ tod_init::tod_TENTHS#0 ] +Allocated zp[1]:82 [ tod_init::tod_SEC#0 ] +Allocated zp[1]:83 [ tod_init::tod_MIN#0 ] +Allocated zp[1]:84 [ tod_init::tod_HOURS#0 ] +Allocated zp[1]:85 [ tod_read::return_TENTHS#2 ] +Allocated zp[1]:86 [ tod_read::return_SEC#2 ] +Allocated zp[1]:87 [ tod_read::return_MIN#2 ] +Allocated zp[1]:88 [ tod_read::return_HOURS#2 ] +Allocated zp[1]:89 [ main::tod_TENTHS#0 ] +Allocated zp[1]:90 [ main::tod_SEC#0 ] +Allocated zp[1]:91 [ main::tod_MIN#0 ] +Allocated zp[1]:92 [ main::tod_HOURS#0 ] +Allocated zp[1]:93 [ tod_str::tod_TENTHS#0 ] +Allocated zp[1]:94 [ tod_str::tod_SEC#0 ] +Allocated zp[1]:95 [ tod_str::tod_MIN#0 ] +Allocated zp[1]:96 [ tod_str::tod_HOURS#0 ] +Allocated zp[1]:97 [ printf_str::ch#0 ] +Allocated zp[2]:98 [ printf_ln::$0 ] +Allocated zp[2]:100 [ printf_ln::$1 ] +Allocated zp[2]:102 [ printf_scroll::$4 ] +Allocated zp[2]:104 [ memset::end#0 ] +Allocated zp[1]:106 [ tod_str::$0 ] +Allocated zp[1]:107 [ tod_str::$1 ] +Allocated zp[1]:108 [ tod_str::$2 ] +Allocated zp[1]:109 [ tod_str::$3 ] +Allocated zp[1]:110 [ tod_str::$4 ] +Allocated zp[1]:111 [ tod_str::$5 ] +Allocated zp[1]:112 [ tod_str::$6 ] +Allocated zp[1]:113 [ tod_str::$7 ] +Allocated zp[1]:114 [ tod_str::$8 ] +Allocated zp[1]:115 [ tod_str::$9 ] +Allocated zp[1]:116 [ tod_str::$10 ] +Allocated zp[1]:117 [ tod_str::$11 ] +Allocated zp[1]:118 [ tod_str::$12 ] +Allocated zp[1]:119 [ tod_str::$13 ] +Allocated zp[1]:120 [ tod_str::$14 ] +Allocated zp[1]:121 [ tod_str::$15 ] +Allocated zp[1]:122 [ tod_read::return_HOURS#0 ] +Allocated zp[1]:123 [ tod_read::return_MIN#0 ] +Allocated zp[1]:124 [ tod_read::return_SEC#0 ] +Allocated zp[1]:125 [ tod_read::return_TENTHS#0 ] +Allocated zp[1]:126 [ legal::row#0 ] +Allocated zp[1]:127 [ legal::column#0 ] +Allocated zp[1]:128 [ legal::return#0 ] +Allocated zp[1]:129 [ queens::$2 ] +Allocated zp[4]:130 [ printf_ulong::uvalue#0 ] +Allocated zp[2]:134 [ strlen::return#2 ] +Allocated zp[2]:136 [ printf_number_buffer::$19 ] +Allocated zp[1]:138 [ toupper::return#3 ] +Allocated zp[1]:139 [ strupr::$0 ] +Allocated zp[2]:140 [ uctoa::buffer#3 ] +Allocated zp[1]:142 [ uctoa::digit_value#0 ] +Allocated zp[2]:143 [ uctoa_append::buffer#0 ] +Allocated zp[1]:145 [ uctoa_append::sub#0 ] +Allocated zp[1]:146 [ uctoa_append::return#0 ] +Allocated zp[1]:147 [ ultoa::$11 ] +Allocated zp[2]:148 [ ultoa::buffer#3 ] +Allocated zp[1]:150 [ ultoa::$10 ] +Allocated zp[4]:151 [ ultoa::digit_value#0 ] +Allocated zp[2]:155 [ ultoa_append::buffer#0 ] +Allocated zp[4]:157 [ ultoa_append::sub#0 ] +Allocated zp[4]:161 [ ultoa_append::return#0 ] +Allocated zp[1]:165 [ legal::$0 ] +Allocated zp[1]:166 [ legal::diff1_a#0 ] +Allocated zp[1]:167 [ utoa::$11 ] +Allocated zp[2]:168 [ utoa::buffer#3 ] +Allocated zp[1]:170 [ utoa::$10 ] +Allocated zp[2]:171 [ utoa::digit_value#0 ] +Allocated zp[2]:173 [ utoa_append::buffer#0 ] +Allocated zp[2]:175 [ utoa_append::sub#0 ] +Allocated zp[2]:177 [ utoa_append::return#0 ] Allocated mem[12] [ printf_buffer ] +Allocated mem[4] [ TOD_ZERO ] INITIAL ASM Target platform is c64basic / MOS6502X @@ -6210,12 +7329,23 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 - .label printf_cursor_x = $4e - .label printf_cursor_y = $4f - .label printf_cursor_ptr = $50 + .const OFFSET_STRUCT_TIME_OF_DAY_SEC = 1 + .const OFFSET_STRUCT_TIME_OF_DAY_MIN = 2 + .const OFFSET_STRUCT_TIME_OF_DAY_HOURS = 3 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f + .const OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS = $b + .const OFFSET_STRUCT_MOS6526_CIA_TOD_MIN = $a + .const OFFSET_STRUCT_MOS6526_CIA_TOD_SEC = 9 + .const OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = 8 + .label printf_cursor_x = $4d + .label printf_cursor_y = $4e + .label printf_cursor_ptr = $4f // The number of found solutions - .label count = 3 + .label count = $11 // @begin __bbegin: jmp __b1 @@ -6251,8 +7381,12 @@ __bend_from___b2: __bend: // main main: { + .label tod_TENTHS = $59 + .label tod_SEC = $5a + .label tod_MIN = $5b + .label tod_HOURS = $5c // [8] call printf_cls - // [307] phi from main to printf_cls [phi:main->printf_cls] + // [365] phi from main to printf_cls [phi:main->printf_cls] printf_cls_from_main: jsr printf_cls // [9] phi from main to main::@1 [phi:main->main::@1] @@ -6261,9 +7395,9 @@ main: { // main::@1 __b1: // [10] call printf_str - // [148] phi from main::@1 to printf_str [phi:main::@1->printf_str] + // [46] phi from main::@1 to printf_str [phi:main::@1->printf_str] printf_str_from___b1: - // [148] phi (byte*) printf_str::str#11 = (const byte*) main::str [phi:main::@1->printf_str#0] -- pbuz1=pbuc1 + // [46] phi (byte*) printf_str::str#13 = (const byte*) main::str [phi:main::@1->printf_str#0] -- pbuz1=pbuc1 lda #str @@ -6275,9 +7409,9 @@ main: { // main::@2 __b2: // [12] call printf_str - // [148] phi from main::@2 to printf_str [phi:main::@2->printf_str] + // [46] phi from main::@2 to printf_str [phi:main::@2->printf_str] printf_str_from___b2: - // [148] phi (byte*) printf_str::str#11 = (const byte*) main::str1 [phi:main::@2->printf_str#0] -- pbuz1=pbuc1 + // [46] phi (byte*) printf_str::str#13 = (const byte*) main::str1 [phi:main::@2->printf_str#0] -- pbuz1=pbuc1 lda #str1 @@ -6289,762 +7423,278 @@ main: { // main::@3 __b3: // [14] call printf_uint - // [273] phi from main::@3 to printf_uint [phi:main::@3->printf_uint] + // [331] phi from main::@3 to printf_uint [phi:main::@3->printf_uint] printf_uint_from___b3: jsr printf_uint - // [15] phi from main::@3 to main::@4 [phi:main::@3->main::@4] - __b4_from___b3: jmp __b4 // main::@4 __b4: - // [16] call queens - // [18] phi from main::@4 to queens [phi:main::@4->queens] - queens_from___b4: - jsr queens - jmp __breturn - // main::@return - __breturn: - // [17] return - rts - str: .text " - n queens problem using backtracking -" - .byte 0 - str1: .text @"\nNumber of queens:" - .byte 0 -} - // queens -// Generates all valid placements of queens on a NxN board without recursion -// Works exactly like the recursive solution by generating all legal placements af a queen for a specific row taking into consideration the queens already placed on the rows below -// and then moving on to generating all legal placements on the rows above. -// In practice this works like a depth first tree search where the level in the tree is the row on the board and each branch in the tree is the legal placement of a queen on that row. -// The solution uses the board itself as a "cursor" moving through all possibilities -// When all columns on a row is exhausted move back down to the lower level and move forward one position until we are done with the last position on the first row -queens: { - .label __2 = $55 - // The current row where the queen is moving - .label row = 2 - // [19] phi from queens to queens::@1 [phi:queens->queens::@1] - __b1_from_queens: - // [19] phi (dword) count#11 = (dword) 0 [phi:queens->queens::@1#0] -- vduz1=vduc1 - lda #<0 - sta.z count - lda #>0 - sta.z count+1 - lda #<0>>$10 - sta.z count+2 - lda #>0>>$10 - sta.z count+3 - // [19] phi (byte) queens::row#10 = (byte) 1 [phi:queens->queens::@1#1] -- vbuz1=vbuc1 - lda #1 - sta.z row - jmp __b1 - // queens::@1 - __b1: - jmp __b2 - // queens::@2 - __b2: - // [20] *((const byte*) board + (byte) queens::row#10) ← ++ *((const byte*) board + (byte) queens::row#10) -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 - ldx.z row - inc board,x - // [21] if(*((const byte*) board + (byte) queens::row#10)==(byte)(number) 8+(number) 1) goto queens::@3 -- pbuc1_derefidx_vbuz1_eq_vbuc2_then_la1 - ldy.z row - lda board,y - cmp #8+1 - beq __b3 - jmp __b7 - // queens::@7 - __b7: - // [22] (byte) legal::row#0 ← (byte) queens::row#10 -- vbuz1=vbuz2 - lda.z row - sta.z legal.row - // [23] (byte) legal::column#0 ← *((const byte*) board + (byte) queens::row#10) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z row - lda board,y - sta.z legal.column - // [24] call legal - // [248] phi from queens::@7 to legal [phi:queens::@7->legal] - legal_from___b7: - jsr legal - // [25] (byte) legal::return#0 ← (byte) legal::return#4 -- vbuz1=vbuz2 - lda.z legal.return_1 - sta.z legal.return - jmp __b9 - // queens::@9 - __b9: - // [26] (byte~) queens::$2 ← (byte) legal::return#0 -- vbuz1=vbuz2 - lda.z legal.return - sta.z __2 - // [27] if((byte) 0!=(byte~) queens::$2) goto queens::@4 -- vbuc1_neq_vbuz1_then_la1 - // check if the current position on row 1-row is legal - lda #0 - cmp.z __2 - bne __b4 - // [19] phi from queens::@5 queens::@6 queens::@8 queens::@9 to queens::@1 [phi:queens::@5/queens::@6/queens::@8/queens::@9->queens::@1] - __b1_from___b5: - __b1_from___b6: - __b1_from___b8: - __b1_from___b9: - // [19] phi (dword) count#11 = (dword) count#13 [phi:queens::@5/queens::@6/queens::@8/queens::@9->queens::@1#0] -- register_copy - // [19] phi (byte) queens::row#10 = (byte) queens::row#10 [phi:queens::@5/queens::@6/queens::@8/queens::@9->queens::@1#1] -- register_copy - jmp __b1 - // queens::@4 - __b4: - // [28] if((byte) queens::row#10==(byte) 8) goto queens::@5 -- vbuz1_eq_vbuc1_then_la1 - // position is legal - move up to the next row - lda #8 - cmp.z row - beq __b5_from___b4 - jmp __b6 - // queens::@6 - __b6: - // [29] (byte) queens::row#1 ← ++ (byte) queens::row#10 -- vbuz1=_inc_vbuz1 - inc.z row - jmp __b1_from___b6 - // [30] phi from queens::@4 to queens::@5 [phi:queens::@4->queens::@5] + // [15] (byte) tod_init::tod_TENTHS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO) -- vbuz1=_deref_pbuc1 + lda TOD_ZERO + sta.z tod_init.tod_TENTHS + // [16] (byte) tod_init::tod_SEC#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC) -- vbuz1=_deref_pbuc1 + lda TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_SEC + sta.z tod_init.tod_SEC + // [17] (byte) tod_init::tod_MIN#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN) -- vbuz1=_deref_pbuc1 + lda TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_MIN + sta.z tod_init.tod_MIN + // [18] (byte) tod_init::tod_HOURS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS) -- vbuz1=_deref_pbuc1 + lda TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS + sta.z tod_init.tod_HOURS + // [19] call tod_init + jsr tod_init + // [20] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: jmp __b5 - // queens::@5 + // main::@5 __b5: - // [31] call print - // We have a complete legal board - print it! - jsr print - jmp __b1_from___b5 - // queens::@3 - __b3: - // [32] *((const byte*) board + (byte) queens::row#10) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 - // We moved past the end of the row - reset position and go down to the lower row - lda #0 - ldy.z row - sta board,y - // [33] if((byte) queens::row#10==(byte) 1) goto queens::@return -- vbuz1_eq_vbuc1_then_la1 - lda #1 - cmp.z row - beq __breturn + // [21] call queens + // [128] phi from main::@5 to queens [phi:main::@5->queens] + queens_from___b5: + jsr queens + // [22] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + __b6_from___b5: + jmp __b6 + // main::@6 + __b6: + // [23] call tod_read + jsr tod_read + // [24] (byte) tod_read::return_TENTHS#2 ← (byte) tod_read::return_TENTHS#0 -- vbuz1=vbuz2 + lda.z tod_read.return_TENTHS + sta.z tod_read.return_TENTHS_1 + // [25] (byte) tod_read::return_SEC#2 ← (byte) tod_read::return_SEC#0 -- vbuz1=vbuz2 + lda.z tod_read.return_SEC + sta.z tod_read.return_SEC_1 + // [26] (byte) tod_read::return_MIN#2 ← (byte) tod_read::return_MIN#0 -- vbuz1=vbuz2 + lda.z tod_read.return_MIN + sta.z tod_read.return_MIN_1 + // [27] (byte) tod_read::return_HOURS#2 ← (byte) tod_read::return_HOURS#0 -- vbuz1=vbuz2 + lda.z tod_read.return_HOURS + sta.z tod_read.return_HOURS_1 + jmp __b7 + // main::@7 + __b7: + // [28] (byte) main::tod_TENTHS#0 ← (byte) tod_read::return_TENTHS#2 -- vbuz1=vbuz2 + lda.z tod_read.return_TENTHS_1 + sta.z tod_TENTHS + // [29] (byte) main::tod_SEC#0 ← (byte) tod_read::return_SEC#2 -- vbuz1=vbuz2 + lda.z tod_read.return_SEC_1 + sta.z tod_SEC + // [30] (byte) main::tod_MIN#0 ← (byte) tod_read::return_MIN#2 -- vbuz1=vbuz2 + lda.z tod_read.return_MIN_1 + sta.z tod_MIN + // [31] (byte) main::tod_HOURS#0 ← (byte) tod_read::return_HOURS#2 -- vbuz1=vbuz2 + lda.z tod_read.return_HOURS_1 + sta.z tod_HOURS + // [32] (byte) tod_str::tod_TENTHS#0 ← (byte) main::tod_TENTHS#0 -- vbuz1=vbuz2 + lda.z tod_TENTHS + sta.z tod_str.tod_TENTHS + // [33] (byte) tod_str::tod_SEC#0 ← (byte) main::tod_SEC#0 -- vbuz1=vbuz2 + lda.z tod_SEC + sta.z tod_str.tod_SEC + // [34] (byte) tod_str::tod_MIN#0 ← (byte) main::tod_MIN#0 -- vbuz1=vbuz2 + lda.z tod_MIN + sta.z tod_str.tod_MIN + // [35] (byte) tod_str::tod_HOURS#0 ← (byte) main::tod_HOURS#0 -- vbuz1=vbuz2 + lda.z tod_HOURS + sta.z tod_str.tod_HOURS + // [36] call tod_str + jsr tod_str + // [37] phi from main::@7 to main::@8 [phi:main::@7->main::@8] + __b8_from___b7: jmp __b8 - // queens::@8 + // main::@8 __b8: - // [34] (byte) queens::row#2 ← -- (byte) queens::row#10 -- vbuz1=_dec_vbuz1 - dec.z row - jmp __b1_from___b8 - // queens::@return - __breturn: - // [35] return - rts -} - // print -// Print the board with a legal placement. Also increments the solution count. -print: { - .label i = 7 - .label i1 = 8 - .label j = 9 - // [36] (dword) count#13 ← ++ (dword) count#11 -- vduz1=_inc_vduz1 - inc.z count - bne !+ - inc.z count+1 - bne !+ - inc.z count+2 - bne !+ - inc.z count+3 - !: - // [37] call printf_str - // [148] phi from print to printf_str [phi:print->printf_str] - printf_str_from_print: - // [148] phi (byte*) printf_str::str#11 = (const byte*) print::str [phi:print->printf_str#0] -- pbuz1=pbuc1 - lda #str - sta.z printf_str.str+1 - jsr printf_str - jmp __b11 - // print::@11 - __b11: - // [38] (dword) printf_ulong::uvalue#0 ← (dword) count#13 -- vduz1=vduz2 - lda.z count - sta.z printf_ulong.uvalue - lda.z count+1 - sta.z printf_ulong.uvalue+1 - lda.z count+2 - sta.z printf_ulong.uvalue+2 - lda.z count+3 - sta.z printf_ulong.uvalue+3 - // [39] call printf_ulong - // [213] phi from print::@11 to printf_ulong [phi:print::@11->printf_ulong] - printf_ulong_from___b11: - jsr printf_ulong - // [40] phi from print::@11 to print::@12 [phi:print::@11->print::@12] - __b12_from___b11: - jmp __b12 - // print::@12 - __b12: - // [41] call printf_str - // [148] phi from print::@12 to printf_str [phi:print::@12->printf_str] - printf_str_from___b12: - // [148] phi (byte*) printf_str::str#11 = (const byte*) print::str1 [phi:print::@12->printf_str#0] -- pbuz1=pbuc1 - lda #str1 - sta.z printf_str.str+1 - jsr printf_str - // [42] phi from print::@12 to print::@1 [phi:print::@12->print::@1] - __b1_from___b12: - // [42] phi (byte) print::i#2 = (byte) 1 [phi:print::@12->print::@1#0] -- vbuz1=vbuc1 - lda #1 - sta.z i - jmp __b1 - // print::@1 - __b1: - // [43] if((byte) print::i#2<(byte) 8+(byte) 1) goto print::@2 -- vbuz1_lt_vbuc1_then_la1 - lda.z i - cmp #8+1 - bcc __b2 - // [44] phi from print::@1 to print::@3 [phi:print::@1->print::@3] - __b3_from___b1: - // [44] phi (byte) print::i1#2 = (byte) 1 [phi:print::@1->print::@3#0] -- vbuz1=vbuc1 - lda #1 - sta.z i1 - jmp __b3 - // print::@3 - __b3: - // [45] if((byte) print::i1#2<(byte) 8+(byte) 1) goto print::@4 -- vbuz1_lt_vbuc1_then_la1 - lda.z i1 - cmp #8+1 - bcc __b4_from___b3 - jmp __breturn - // print::@return - __breturn: - // [46] return - rts - // [47] phi from print::@3 to print::@4 [phi:print::@3->print::@4] - __b4_from___b3: - jmp __b4 - // print::@4 - __b4: - // [48] call printf_str - // [148] phi from print::@4 to printf_str [phi:print::@4->printf_str] - printf_str_from___b4: - // [148] phi (byte*) printf_str::str#11 = (const byte*) print::str2 [phi:print::@4->printf_str#0] -- pbuz1=pbuc1 + // [38] call printf_str + // [46] phi from main::@8 to printf_str [phi:main::@8->printf_str] + printf_str_from___b8: + // [46] phi (byte*) printf_str::str#13 = (const byte*) main::str2 [phi:main::@8->printf_str#0] -- pbuz1=pbuc1 lda #str2 sta.z printf_str.str+1 jsr printf_str - jmp __b14 - // print::@14 - __b14: - // [49] (byte) printf_uchar::uvalue#1 ← (byte) print::i1#2 -- vbuz1=vbuz2 - lda.z i1 - sta.z printf_uchar.uvalue - // [50] call printf_uchar - // [63] phi from print::@14 to printf_uchar [phi:print::@14->printf_uchar] - printf_uchar_from___b14: - // [63] phi (byte) printf_uchar::uvalue#2 = (byte) printf_uchar::uvalue#1 [phi:print::@14->printf_uchar#0] -- register_copy - jsr printf_uchar - // [51] phi from print::@14 to print::@5 [phi:print::@14->print::@5] - __b5_from___b14: - // [51] phi (byte) print::j#2 = (byte) 1 [phi:print::@14->print::@5#0] -- vbuz1=vbuc1 - lda #1 - sta.z j - jmp __b5 - // print::@5 - __b5: - // [52] if((byte) print::j#2<(byte) 8+(byte) 1) goto print::@6 -- vbuz1_lt_vbuc1_then_la1 - lda.z j - cmp #8+1 - bcc __b6 - jmp __b7 - // print::@7 - __b7: - // [53] (byte) print::i1#1 ← ++ (byte) print::i1#2 -- vbuz1=_inc_vbuz1 - inc.z i1 - // [44] phi from print::@7 to print::@3 [phi:print::@7->print::@3] - __b3_from___b7: - // [44] phi (byte) print::i1#2 = (byte) print::i1#1 [phi:print::@7->print::@3#0] -- register_copy - jmp __b3 - // print::@6 - __b6: - // [54] if(*((const byte*) board + (byte) print::i1#2)==(byte) print::j#2) goto print::@8 -- pbuc1_derefidx_vbuz1_eq_vbuz2_then_la1 - ldy.z i1 - lda board,y - cmp.z j - beq __b8_from___b6 - // [55] phi from print::@6 to print::@10 [phi:print::@6->print::@10] - __b10_from___b6: - jmp __b10 - // print::@10 - __b10: - // [56] call printf_str - // [148] phi from print::@10 to printf_str [phi:print::@10->printf_str] - printf_str_from___b10: - // [148] phi (byte*) printf_str::str#11 = (const byte*) print::str4 [phi:print::@10->printf_str#0] -- pbuz1=pbuc1 - lda #str4 - sta.z printf_str.str+1 - jsr printf_str + // [39] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + __b9_from___b8: jmp __b9 - // print::@9 + // main::@9 __b9: - // [57] (byte) print::j#1 ← ++ (byte) print::j#2 -- vbuz1=_inc_vbuz1 - inc.z j - // [51] phi from print::@9 to print::@5 [phi:print::@9->print::@5] - __b5_from___b9: - // [51] phi (byte) print::j#2 = (byte) print::j#1 [phi:print::@9->print::@5#0] -- register_copy - jmp __b5 - // [58] phi from print::@6 to print::@8 [phi:print::@6->print::@8] - __b8_from___b6: - jmp __b8 - // print::@8 - __b8: - // [59] call printf_str - // [148] phi from print::@8 to printf_str [phi:print::@8->printf_str] - printf_str_from___b8: - // [148] phi (byte*) printf_str::str#11 = (const byte*) print::str3 [phi:print::@8->printf_str#0] -- pbuz1=pbuc1 - lda #printf_string] + printf_string_from___b9: + jsr printf_string + jmp __breturn + // main::@return + __breturn: + // [41] return + rts + str: .text " - n queens problem using backtracking -" + .byte 0 + str1: .text @"\nnumber of queens:" + .byte 0 + str2: .text @"\ntime: " + .byte 0 +} + // printf_string +// Print a string value using a specific format +// Handles justification and min length +printf_string: { + // [43] phi from printf_string to printf_string::@1 [phi:printf_string->printf_string::@1] + __b1_from_printf_string: + jmp __b1 + // printf_string::@1 + __b1: + // [44] call printf_str + // [46] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] + printf_str_from___b1: + // [46] phi (byte*) printf_str::str#13 = (const byte*) tod_buffer [phi:printf_string::@1->printf_str#0] -- pbuz1=pbuc1 + lda #str3 + lda #>tod_buffer sta.z printf_str.str+1 jsr printf_str - jmp __b9 - // print::@2 - __b2: - // [60] (byte) printf_uchar::uvalue#0 ← (byte) print::i#2 -- vbuz1=vbuz2 - lda.z i - sta.z printf_uchar.uvalue - // [61] call printf_uchar - // [63] phi from print::@2 to printf_uchar [phi:print::@2->printf_uchar] - printf_uchar_from___b2: - // [63] phi (byte) printf_uchar::uvalue#2 = (byte) printf_uchar::uvalue#0 [phi:print::@2->printf_uchar#0] -- register_copy - jsr printf_uchar - jmp __b13 - // print::@13 - __b13: - // [62] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [42] phi from print::@13 to print::@1 [phi:print::@13->print::@1] - __b1_from___b13: - // [42] phi (byte) print::i#2 = (byte) print::i#1 [phi:print::@13->print::@1#0] -- register_copy - jmp __b1 - str: .text @"\n#" - .byte 0 - str1: .text @":\n " - .byte 0 - str2: .text @"\n" - .byte 0 - str3: .text "Q" - .byte 0 - str4: .text "-" - .byte 0 -} - // printf_uchar -// Print an unsigned char using a specific format -// printf_uchar(byte zp($a) uvalue) -printf_uchar: { - .label uvalue = $a - jmp __b1 - // printf_uchar::@1 - __b1: - // [64] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 - // Handle any sign - lda #0 - sta printf_buffer - // [65] (byte) uctoa::value#1 ← (byte) printf_uchar::uvalue#2 -- vbuz1=vbuz2 - lda.z uvalue - sta.z uctoa.value - // [66] call uctoa - // Format number into buffer - // [187] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] - uctoa_from___b1: - jsr uctoa - jmp __b2 - // printf_uchar::@2 - __b2: - // [67] (byte) printf_number_buffer::buffer_sign#2 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 - lda printf_buffer - sta.z printf_number_buffer.buffer_sign - // [68] call printf_number_buffer - // Print using format - // [70] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] - printf_number_buffer_from___b2: - // [70] phi (byte) printf_number_buffer::format_upper_case#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#0] -- vbuz1=vbuc1 - lda #0 - sta.z printf_number_buffer.format_upper_case - // [70] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#2 [phi:printf_uchar::@2->printf_number_buffer#1] -- register_copy - // [70] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_uchar::@2->printf_number_buffer#2] -- pbuz1=pbuc1 - lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS - sta.z printf_number_buffer.buffer_digits+1 - // [70] phi (byte) printf_number_buffer::format_zero_padding#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#3] -- vbuz1=vbuc1 - lda #0 - sta.z printf_number_buffer.format_zero_padding - // [70] phi (byte) printf_number_buffer::format_justify_left#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#4] -- vbuz1=vbuc1 - lda #0 - sta.z printf_number_buffer.format_justify_left - // [70] phi (byte) printf_number_buffer::format_min_length#3 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#5] -- vbuz1=vbuc1 - lda #0 - sta.z printf_number_buffer.format_min_length - jsr printf_number_buffer jmp __breturn - // printf_uchar::@return + // printf_string::@return __breturn: - // [69] return + // [45] return rts } - // printf_number_buffer -// Print the contents of the number buffer using a specific format. -// This handles minimum length, zero-filling, and left/right justification from the format -// printf_number_buffer(byte zp($10) buffer_sign, byte* zp($e) buffer_digits, byte zp($b) format_min_length, byte zp($c) format_justify_left, byte zp($d) format_zero_padding, byte zp($11) format_upper_case) -printf_number_buffer: { - .label __19 = $5c - .label buffer_sign = $10 - .label len = $12 - .label padding = $13 - .label format_min_length = $b - .label format_zero_padding = $d - .label format_justify_left = $c - .label buffer_digits = $e - .label format_upper_case = $11 - // [71] if((byte) 0==(byte) printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 -- vbuc1_eq_vbuz1_then_la1 - lda #0 - cmp.z format_min_length - beq __b1_from_printf_number_buffer - jmp __b6 - // printf_number_buffer::@6 - __b6: - // [72] (byte*) strlen::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 -- pbuz1=pbuz2 - lda.z buffer_digits - sta.z strlen.str - lda.z buffer_digits+1 - sta.z strlen.str+1 - // [73] call strlen - // [181] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] - strlen_from___b6: - jsr strlen - // [74] (word) strlen::return#2 ← (word) strlen::len#2 -- vwuz1=vwuz2 - lda.z strlen.len - sta.z strlen.return - lda.z strlen.len+1 - sta.z strlen.return+1 - jmp __b14 - // printf_number_buffer::@14 - __b14: - // [75] (word~) printf_number_buffer::$19 ← (word) strlen::return#2 -- vwuz1=vwuz2 - lda.z strlen.return - sta.z __19 - lda.z strlen.return+1 - sta.z __19+1 - // [76] (signed byte) printf_number_buffer::len#0 ← (signed byte)(word~) printf_number_buffer::$19 -- vbsz1=_sbyte_vwuz2 - // There is a minimum length - work out the padding - lda.z __19 - sta.z len - // [77] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 -- vbuc1_eq_vbuz1_then_la1 - lda #0 - cmp.z buffer_sign - beq __b13_from___b14 - jmp __b7 - // printf_number_buffer::@7 - __b7: - // [78] (signed byte) printf_number_buffer::len#1 ← ++ (signed byte) printf_number_buffer::len#0 -- vbsz1=_inc_vbsz1 - inc.z len - // [79] phi from printf_number_buffer::@14 printf_number_buffer::@7 to printf_number_buffer::@13 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13] - __b13_from___b14: - __b13_from___b7: - // [79] phi (signed byte) printf_number_buffer::len#2 = (signed byte) printf_number_buffer::len#0 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13#0] -- register_copy - jmp __b13 - // printf_number_buffer::@13 - __b13: - // [80] (signed byte) printf_number_buffer::padding#1 ← (signed byte)(byte) printf_number_buffer::format_min_length#3 - (signed byte) printf_number_buffer::len#2 -- vbsz1=vbsz2_minus_vbsz3 - lda.z format_min_length - sec - sbc.z len - sta.z padding - // [81] if((signed byte) printf_number_buffer::padding#1>=(signed byte) 0) goto printf_number_buffer::@21 -- vbsz1_ge_0_then_la1 - lda.z padding - cmp #0 - bpl __b21_from___b13 - // [83] phi from printf_number_buffer printf_number_buffer::@13 to printf_number_buffer::@1 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1] - __b1_from_printf_number_buffer: - __b1_from___b13: - // [83] phi (signed byte) printf_number_buffer::padding#10 = (signed byte) 0 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1#0] -- vbsz1=vbsc1 - lda #0 - sta.z padding + // printf_str +// Print a zero-terminated string +// Handles escape codes such as newline +// printf_str(byte* zp(2) str) +printf_str: { + .label ch = $61 + .label str = 2 + // [47] phi from printf_str printf_str::@4 printf_str::@5 to printf_str::@1 [phi:printf_str/printf_str::@4/printf_str::@5->printf_str::@1] + __b1_from_printf_str: + __b1_from___b4: + __b1_from___b5: + // [47] phi (byte*) printf_str::str#11 = (byte*) printf_str::str#13 [phi:printf_str/printf_str::@4/printf_str::@5->printf_str::@1#0] -- register_copy jmp __b1 - // [82] phi from printf_number_buffer::@13 to printf_number_buffer::@21 [phi:printf_number_buffer::@13->printf_number_buffer::@21] - __b21_from___b13: - jmp __b21 - // printf_number_buffer::@21 - __b21: - // [83] phi from printf_number_buffer::@21 to printf_number_buffer::@1 [phi:printf_number_buffer::@21->printf_number_buffer::@1] - __b1_from___b21: - // [83] phi (signed byte) printf_number_buffer::padding#10 = (signed byte) printf_number_buffer::padding#1 [phi:printf_number_buffer::@21->printf_number_buffer::@1#0] -- register_copy - jmp __b1 - // printf_number_buffer::@1 + // printf_str::@1 __b1: - // [84] if((byte) 0!=(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 -- vbuc1_neq_vbuz1_then_la1 - lda #0 - cmp.z format_justify_left - bne __b2 - jmp __b17 - // printf_number_buffer::@17 - __b17: - // [85] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 -- vbuc1_neq_vbuz1_then_la1 - lda #0 - cmp.z format_zero_padding - bne __b2 - jmp __b16 - // printf_number_buffer::@16 - __b16: - // [86] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@8 -- vbsc1_neq_vbsz1_then_la1 - lda #0 - cmp.z padding - bne __b8 jmp __b2 - // printf_number_buffer::@8 - __b8: - // [87] (byte) printf_padding::length#0 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 - lda.z padding - sta.z printf_padding.length - // [88] call printf_padding - // [107] phi from printf_number_buffer::@8 to printf_padding [phi:printf_number_buffer::@8->printf_padding] - printf_padding_from___b8: - // [107] phi (byte) printf_padding::pad#5 = (byte) ' ' [phi:printf_number_buffer::@8->printf_padding#0] -- vbuz1=vbuc1 - lda #' ' - sta.z printf_padding.pad - // [107] phi (byte) printf_padding::length#4 = (byte) printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#1] -- register_copy - jsr printf_padding - jmp __b2 - // printf_number_buffer::@2 + // printf_str::@2 __b2: - // [89] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 -- vbuc1_eq_vbuz1_then_la1 - lda #0 - cmp.z buffer_sign - beq __b3 - jmp __b9 - // printf_number_buffer::@9 - __b9: - // [90] (byte) printf_char::ch#2 ← (byte) printf_number_buffer::buffer_sign#10 -- vbuz1=vbuz2 - lda.z buffer_sign - sta.z printf_char.ch - // [91] call printf_char - // [114] phi from printf_number_buffer::@9 to printf_char [phi:printf_number_buffer::@9->printf_char] - printf_char_from___b9: - // [114] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#2 [phi:printf_number_buffer::@9->printf_char#0] -- register_copy - jsr printf_char - jmp __b3 - // printf_number_buffer::@3 - __b3: - // [92] if((byte) 0==(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 -- vbuc1_eq_vbuz1_then_la1 - lda #0 - cmp.z format_zero_padding - beq __b4 - jmp __b18 - // printf_number_buffer::@18 - __b18: - // [93] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@10 -- vbsc1_neq_vbsz1_then_la1 - lda #0 - cmp.z padding - bne __b10 - jmp __b4 - // printf_number_buffer::@10 - __b10: - // [94] (byte) printf_padding::length#1 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 - lda.z padding - sta.z printf_padding.length - // [95] call printf_padding - // [107] phi from printf_number_buffer::@10 to printf_padding [phi:printf_number_buffer::@10->printf_padding] - printf_padding_from___b10: - // [107] phi (byte) printf_padding::pad#5 = (byte) '0' [phi:printf_number_buffer::@10->printf_padding#0] -- vbuz1=vbuc1 - lda #'0' - sta.z printf_padding.pad - // [107] phi (byte) printf_padding::length#4 = (byte) printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#1] -- register_copy - jsr printf_padding - jmp __b4 - // printf_number_buffer::@4 - __b4: - // [96] if((byte) 0==(byte) printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 -- vbuc1_eq_vbuz1_then_la1 - lda #0 - cmp.z format_upper_case - beq __b5 - jmp __b11 - // printf_number_buffer::@11 - __b11: - // [97] (byte*) strupr::str#0 ← (byte*) printf_number_buffer::buffer_digits#10 -- pbuz1=pbuz2 - lda.z buffer_digits - sta.z strupr.str - lda.z buffer_digits+1 - sta.z strupr.str+1 - // [98] call strupr - // [166] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] - strupr_from___b11: - jsr strupr - jmp __b5 - // printf_number_buffer::@5 - __b5: - // [99] (byte*) printf_str::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 -- pbuz1=pbuz2 - lda.z buffer_digits - sta.z printf_str.str - lda.z buffer_digits+1 - sta.z printf_str.str+1 - // [100] call printf_str - // [148] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] - printf_str_from___b5: - // [148] phi (byte*) printf_str::str#11 = (byte*) printf_str::str#1 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - jsr printf_str - jmp __b15 - // printf_number_buffer::@15 - __b15: - // [101] if((byte) 0==(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return -- vbuc1_eq_vbuz1_then_la1 - lda #0 - cmp.z format_justify_left - beq __breturn - jmp __b20 - // printf_number_buffer::@20 - __b20: - // [102] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return -- vbuc1_neq_vbuz1_then_la1 - lda #0 - cmp.z format_zero_padding - bne __breturn - jmp __b19 - // printf_number_buffer::@19 - __b19: - // [103] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@12 -- vbsc1_neq_vbsz1_then_la1 - lda #0 - cmp.z padding - bne __b12 - jmp __breturn - // printf_number_buffer::@12 - __b12: - // [104] (byte) printf_padding::length#2 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 - lda.z padding - sta.z printf_padding.length - // [105] call printf_padding - // [107] phi from printf_number_buffer::@12 to printf_padding [phi:printf_number_buffer::@12->printf_padding] - printf_padding_from___b12: - // [107] phi (byte) printf_padding::pad#5 = (byte) ' ' [phi:printf_number_buffer::@12->printf_padding#0] -- vbuz1=vbuc1 - lda #' ' - sta.z printf_padding.pad - // [107] phi (byte) printf_padding::length#4 = (byte) printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#1] -- register_copy - jsr printf_padding - jmp __breturn - // printf_number_buffer::@return - __breturn: - // [106] return - rts -} - // printf_padding -// Print a padding char a number of times -// printf_padding(byte zp($15) pad, byte zp($14) length) -printf_padding: { - .label i = $16 - .label length = $14 - .label pad = $15 - // [108] phi from printf_padding to printf_padding::@1 [phi:printf_padding->printf_padding::@1] - __b1_from_printf_padding: - // [108] phi (byte) printf_padding::i#2 = (byte) 0 [phi:printf_padding->printf_padding::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - jmp __b1 - // printf_padding::@1 - __b1: - // [109] if((byte) printf_padding::i#2<(byte) printf_padding::length#4) goto printf_padding::@2 -- vbuz1_lt_vbuz2_then_la1 - lda.z i - cmp.z length - bcc __b2 - jmp __breturn - // printf_padding::@return - __breturn: - // [110] return - rts - // printf_padding::@2 - __b2: - // [111] (byte) printf_char::ch#0 ← (byte) printf_padding::pad#5 -- vbuz1=vbuz2 - lda.z pad - sta.z printf_char.ch - // [112] call printf_char - // [114] phi from printf_padding::@2 to printf_char [phi:printf_padding::@2->printf_char] - printf_char_from___b2: - // [114] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#0 [phi:printf_padding::@2->printf_char#0] -- register_copy - jsr printf_char - jmp __b3 - // printf_padding::@3 - __b3: - // [113] (byte) printf_padding::i#1 ← ++ (byte) printf_padding::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [108] phi from printf_padding::@3 to printf_padding::@1 [phi:printf_padding::@3->printf_padding::@1] - __b1_from___b3: - // [108] phi (byte) printf_padding::i#2 = (byte) printf_padding::i#1 [phi:printf_padding::@3->printf_padding::@1#0] -- register_copy - jmp __b1 -} - // printf_char -// Print a single char -// If the end of the screen is reached scroll it up one char and place the cursor at the -// printf_char(byte zp($17) ch) -printf_char: { - .label ch = $17 - // [115] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#3 -- _deref_pbuz1=vbuz2 - lda.z ch + // [48] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#11) -- vbuz1=_deref_pbuz2 ldy #0 - sta (printf_cursor_ptr),y - // [116] (byte*) printf_cursor_ptr ← ++ (byte*) printf_cursor_ptr -- pbuz1=_inc_pbuz1 - inc.z printf_cursor_ptr + lda (str),y + sta.z ch + // [49] (byte*) printf_str::str#0 ← ++ (byte*) printf_str::str#11 -- pbuz1=_inc_pbuz1 + inc.z str bne !+ - inc.z printf_cursor_ptr+1 + inc.z str+1 !: - // [117] (byte) printf_cursor_x ← ++ (byte) printf_cursor_x -- vbuz1=_inc_vbuz1 - inc.z printf_cursor_x - // [118] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return -- vbuz1_neq_vbuc1_then_la1 + // [50] if((byte) printf_str::ch#0!=(byte) 0) goto printf_str::@3 -- vbuz1_neq_0_then_la1 + lda.z ch + cmp #0 + bne __b3 + jmp __breturn + // printf_str::@return + __breturn: + // [51] return + rts + // printf_str::@3 + __b3: + // [52] if((byte) printf_str::ch#0==(byte) ' ') goto printf_str::@4 -- vbuz1_eq_vbuc1_then_la1 + lda #'\n' + cmp.z ch + beq __b4_from___b3 + jmp __b5 + // printf_str::@5 + __b5: + // [53] (byte) printf_char::ch#1 ← (byte) printf_str::ch#0 -- vbuz1=vbuz2 + lda.z ch + sta.z printf_char.ch + // [54] call printf_char + // [89] phi from printf_str::@5 to printf_char [phi:printf_str::@5->printf_char] + printf_char_from___b5: + // [89] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#1 [phi:printf_str::@5->printf_char#0] -- register_copy + jsr printf_char + jmp __b1_from___b5 + // [55] phi from printf_str::@3 to printf_str::@4 [phi:printf_str::@3->printf_str::@4] + __b4_from___b3: + jmp __b4 + // printf_str::@4 + __b4: + // [56] call printf_ln + jsr printf_ln + jmp __b1_from___b4 +} + // printf_ln +// Print a newline +printf_ln: { + .label __0 = $62 + .label __1 = $64 + // [57] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x -- pbuz1=pbuz2_minus_vbuz3 + sec + lda.z printf_cursor_ptr + sbc.z printf_cursor_x + sta.z __0 + lda.z printf_cursor_ptr+1 + sbc #0 + sta.z __0+1 + // [58] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28 -- pbuz1=pbuz2_plus_vbuc1 lda #$28 - cmp.z printf_cursor_x - bne __breturn - jmp __b1 - // printf_char::@1 - __b1: - // [119] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 + clc + adc.z __0 + sta.z __1 + lda #0 + adc.z __0+1 + sta.z __1+1 + // [59] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1 -- pbuz1=pbuz2 + lda.z __1 + sta.z printf_cursor_ptr + lda.z __1+1 + sta.z printf_cursor_ptr+1 + // [60] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta.z printf_cursor_x - // [120] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y -- vbuz1=_inc_vbuz1 + // [61] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y -- vbuz1=_inc_vbuz1 inc.z printf_cursor_y - // [121] call printf_scroll + // [62] call printf_scroll jsr printf_scroll jmp __breturn - // printf_char::@return + // printf_ln::@return __breturn: - // [122] return + // [63] return rts } // printf_scroll // Scroll the entire screen if the cursor is on the last line printf_scroll: { - .label __4 = $5e - // [123] if((byte) printf_cursor_y!=(byte) $19) goto printf_scroll::@return -- vbuz1_neq_vbuc1_then_la1 + .label __4 = $66 + // [64] if((byte) printf_cursor_y!=(byte) $19) goto printf_scroll::@return -- vbuz1_neq_vbuc1_then_la1 lda #$19 cmp.z printf_cursor_y bne __breturn - // [124] phi from printf_scroll to printf_scroll::@1 [phi:printf_scroll->printf_scroll::@1] + // [65] phi from printf_scroll to printf_scroll::@1 [phi:printf_scroll->printf_scroll::@1] __b1_from_printf_scroll: jmp __b1 // printf_scroll::@1 __b1: - // [125] call memcpy - // [141] phi from printf_scroll::@1 to memcpy [phi:printf_scroll::@1->memcpy] + // [66] call memcpy + // [82] phi from printf_scroll::@1 to memcpy [phi:printf_scroll::@1->memcpy] memcpy_from___b1: jsr memcpy - // [126] phi from printf_scroll::@1 to printf_scroll::@2 [phi:printf_scroll::@1->printf_scroll::@2] + // [67] phi from printf_scroll::@1 to printf_scroll::@2 [phi:printf_scroll::@1->printf_scroll::@2] __b2_from___b1: jmp __b2 // printf_scroll::@2 __b2: - // [127] call memset - // [132] phi from printf_scroll::@2 to memset [phi:printf_scroll::@2->memset] + // [68] call memset + // [73] phi from printf_scroll::@2 to memset [phi:printf_scroll::@2->memset] memset_from___b2: - // [132] phi (byte) memset::c#4 = (byte) ' ' [phi:printf_scroll::@2->memset#0] -- vbuz1=vbuc1 + // [73] phi (byte) memset::c#4 = (byte) ' ' [phi:printf_scroll::@2->memset#0] -- vbuz1=vbuc1 lda #' ' sta.z memset.c - // [132] phi (void*) memset::str#3 = (void*)(number) $400+(number) $28*(number) $19-(number) $28 [phi:printf_scroll::@2->memset#1] -- pvoz1=pvoc1 + // [73] phi (void*) memset::str#3 = (void*)(number) $400+(number) $28*(number) $19-(number) $28 [phi:printf_scroll::@2->memset#1] -- pvoz1=pvoc1 lda #<$400+$28*$19-$28 sta.z memset.str lda #>$400+$28*$19-$28 sta.z memset.str+1 - // [132] phi (word) memset::num#2 = (byte) $28 [phi:printf_scroll::@2->memset#2] -- vwuz1=vbuc1 + // [73] phi (word) memset::num#2 = (byte) $28 [phi:printf_scroll::@2->memset#2] -- vwuz1=vbuc1 lda #<$28 sta.z memset.num lda #>$28 @@ -7053,7 +7703,7 @@ printf_scroll: { jmp __b3 // printf_scroll::@3 __b3: - // [128] (byte*~) printf_scroll::$4 ← (byte*) printf_cursor_ptr - (byte) $28 -- pbuz1=pbuz2_minus_vwuc1 + // [69] (byte*~) printf_scroll::$4 ← (byte*) printf_cursor_ptr - (byte) $28 -- pbuz1=pbuz2_minus_vwuc1 lda.z printf_cursor_ptr sec sbc #<$28 @@ -7061,29 +7711,29 @@ printf_scroll: { lda.z printf_cursor_ptr+1 sbc #>$28 sta.z __4+1 - // [129] (byte*) printf_cursor_ptr ← (byte*~) printf_scroll::$4 -- pbuz1=pbuz2 + // [70] (byte*) printf_cursor_ptr ← (byte*~) printf_scroll::$4 -- pbuz1=pbuz2 lda.z __4 sta.z printf_cursor_ptr lda.z __4+1 sta.z printf_cursor_ptr+1 - // [130] (byte) printf_cursor_y ← -- (byte) printf_cursor_y -- vbuz1=_dec_vbuz1 + // [71] (byte) printf_cursor_y ← -- (byte) printf_cursor_y -- vbuz1=_dec_vbuz1 dec.z printf_cursor_y jmp __breturn // printf_scroll::@return __breturn: - // [131] return + // [72] return rts } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// memset(void* zp($1a) str, byte zp($1c) c, word zp($18) num) +// memset(void* zp(6) str, byte zp(8) c, word zp(4) num) memset: { - .label end = $60 - .label dst = $1d - .label num = $18 - .label str = $1a - .label c = $1c - // [133] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 + .label end = $68 + .label dst = 9 + .label num = 4 + .label str = 6 + .label c = 8 + // [74] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 lda.z num bne !+ lda.z num+1 @@ -7092,7 +7742,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [134] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz3 + // [75] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz3 lda.z str clc adc.z num @@ -7100,19 +7750,19 @@ memset: { lda.z str+1 adc.z num+1 sta.z end+1 - // [135] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 -- pbuz1=pbuz2 + // [76] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 -- pbuz1=pbuz2 lda.z str sta.z dst lda.z str+1 sta.z dst+1 - // [136] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [77] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] __b2_from___b1: __b2_from___b3: - // [136] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [77] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy jmp __b2 // memset::@2 __b2: - // [137] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [78] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 @@ -7122,15 +7772,15 @@ memset: { jmp __breturn // memset::@return __breturn: - // [138] return + // [79] return rts // memset::@3 __b3: - // [139] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuz2 + // [80] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuz2 lda.z c ldy #0 sta (dst),y - // [140] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [81] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -7145,16 +7795,16 @@ memcpy: { .label source = $400+$28 .const num = $28*$19-$28 .label src_end = source+num - .label dst = $21 - .label src = $1f - // [142] phi from memcpy to memcpy::@1 [phi:memcpy->memcpy::@1] + .label dst = $d + .label src = $b + // [83] phi from memcpy to memcpy::@1 [phi:memcpy->memcpy::@1] __b1_from_memcpy: - // [142] phi (byte*) memcpy::dst#2 = (byte*)(const void*) memcpy::destination#0 [phi:memcpy->memcpy::@1#0] -- pbuz1=pbuc1 + // [83] phi (byte*) memcpy::dst#2 = (byte*)(const void*) memcpy::destination#0 [phi:memcpy->memcpy::@1#0] -- pbuz1=pbuc1 lda #destination sta.z dst+1 - // [142] phi (byte*) memcpy::src#2 = (byte*)(const void*) memcpy::source#0 [phi:memcpy->memcpy::@1#1] -- pbuz1=pbuc1 + // [83] phi (byte*) memcpy::src#2 = (byte*)(const void*) memcpy::source#0 [phi:memcpy->memcpy::@1#1] -- pbuz1=pbuc1 lda #source @@ -7162,7 +7812,7 @@ memcpy: { jmp __b1 // memcpy::@1 __b1: - // [143] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuc1_then_la1 + // [84] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z src+1 cmp #>src_end bne __b2 @@ -7172,148 +7822,904 @@ memcpy: { jmp __breturn // memcpy::@return __breturn: - // [144] return + // [85] return rts // memcpy::@2 __b2: - // [145] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) -- _deref_pbuz1=_deref_pbuz2 + // [86] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (src),y ldy #0 sta (dst),y - // [146] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 -- pbuz1=_inc_pbuz1 + // [87] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [147] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2 -- pbuz1=_inc_pbuz1 + // [88] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2 -- pbuz1=_inc_pbuz1 inc.z src bne !+ inc.z src+1 !: - // [142] phi from memcpy::@2 to memcpy::@1 [phi:memcpy::@2->memcpy::@1] + // [83] phi from memcpy::@2 to memcpy::@1 [phi:memcpy::@2->memcpy::@1] __b1_from___b2: - // [142] phi (byte*) memcpy::dst#2 = (byte*) memcpy::dst#1 [phi:memcpy::@2->memcpy::@1#0] -- register_copy - // [142] phi (byte*) memcpy::src#2 = (byte*) memcpy::src#1 [phi:memcpy::@2->memcpy::@1#1] -- register_copy + // [83] phi (byte*) memcpy::dst#2 = (byte*) memcpy::dst#1 [phi:memcpy::@2->memcpy::@1#0] -- register_copy + // [83] phi (byte*) memcpy::src#2 = (byte*) memcpy::src#1 [phi:memcpy::@2->memcpy::@1#1] -- register_copy jmp __b1 } - // printf_str -// Print a zero-terminated string -// Handles escape codes such as newline -// printf_str(byte* zp($23) str) -printf_str: { - .label ch = $62 - .label str = $23 - // [149] phi from printf_str printf_str::@4 printf_str::@5 to printf_str::@1 [phi:printf_str/printf_str::@4/printf_str::@5->printf_str::@1] - __b1_from_printf_str: - __b1_from___b4: - __b1_from___b5: - // [149] phi (byte*) printf_str::str#10 = (byte*) printf_str::str#11 [phi:printf_str/printf_str::@4/printf_str::@5->printf_str::@1#0] -- register_copy - jmp __b1 - // printf_str::@1 - __b1: - jmp __b2 - // printf_str::@2 - __b2: - // [150] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#10) -- vbuz1=_deref_pbuz2 + // printf_char +// Print a single char +// If the end of the screen is reached scroll it up one char and place the cursor at the +// printf_char(byte zp($f) ch) +printf_char: { + .label ch = $f + // [90] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#3 -- _deref_pbuz1=vbuz2 + lda.z ch ldy #0 - lda (str),y - sta.z ch - // [151] (byte*) printf_str::str#0 ← ++ (byte*) printf_str::str#10 -- pbuz1=_inc_pbuz1 - inc.z str + sta (printf_cursor_ptr),y + // [91] (byte*) printf_cursor_ptr ← ++ (byte*) printf_cursor_ptr -- pbuz1=_inc_pbuz1 + inc.z printf_cursor_ptr bne !+ - inc.z str+1 + inc.z printf_cursor_ptr+1 !: - // [152] if((byte) printf_str::ch#0!=(byte) 0) goto printf_str::@3 -- vbuz1_neq_0_then_la1 - lda.z ch - cmp #0 - bne __b3 - jmp __breturn - // printf_str::@return - __breturn: - // [153] return - rts - // printf_str::@3 - __b3: - // [154] if((byte) printf_str::ch#0==(byte) ' ') goto printf_str::@4 -- vbuz1_eq_vbuc1_then_la1 - lda #'\n' - cmp.z ch - beq __b4_from___b3 - jmp __b5 - // printf_str::@5 - __b5: - // [155] (byte) printf_char::ch#1 ← (byte) printf_str::ch#0 -- vbuz1=vbuz2 - lda.z ch - sta.z printf_char.ch - // [156] call printf_char - // [114] phi from printf_str::@5 to printf_char [phi:printf_str::@5->printf_char] - printf_char_from___b5: - // [114] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#1 [phi:printf_str::@5->printf_char#0] -- register_copy - jsr printf_char - jmp __b1_from___b5 - // [157] phi from printf_str::@3 to printf_str::@4 [phi:printf_str::@3->printf_str::@4] - __b4_from___b3: - jmp __b4 - // printf_str::@4 - __b4: - // [158] call printf_ln - jsr printf_ln - jmp __b1_from___b4 -} - // printf_ln -// Print a newline -printf_ln: { - .label __0 = $63 - .label __1 = $65 - // [159] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x -- pbuz1=pbuz2_minus_vbuz3 - sec - lda.z printf_cursor_ptr - sbc.z printf_cursor_x - sta.z __0 - lda.z printf_cursor_ptr+1 - sbc #0 - sta.z __0+1 - // [160] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28 -- pbuz1=pbuz2_plus_vbuc1 + // [92] (byte) printf_cursor_x ← ++ (byte) printf_cursor_x -- vbuz1=_inc_vbuz1 + inc.z printf_cursor_x + // [93] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return -- vbuz1_neq_vbuc1_then_la1 lda #$28 - clc - adc.z __0 - sta.z __1 - lda #0 - adc.z __0+1 - sta.z __1+1 - // [161] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1 -- pbuz1=pbuz2 - lda.z __1 - sta.z printf_cursor_ptr - lda.z __1+1 - sta.z printf_cursor_ptr+1 - // [162] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 + cmp.z printf_cursor_x + bne __breturn + jmp __b1 + // printf_char::@1 + __b1: + // [94] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta.z printf_cursor_x - // [163] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y -- vbuz1=_inc_vbuz1 + // [95] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y -- vbuz1=_inc_vbuz1 inc.z printf_cursor_y - // [164] call printf_scroll + // [96] call printf_scroll jsr printf_scroll jmp __breturn - // printf_ln::@return + // printf_char::@return __breturn: - // [165] return + // [97] return rts +} + // tod_str +// Convert time of day to a human-readable string "hh:mm:ss:10" +// tod_str(byte zp($5d) tod_TENTHS, byte zp($5e) tod_SEC, byte zp($5f) tod_MIN, byte zp($60) tod_HOURS) +tod_str: { + .label __0 = $6a + .label __1 = $6b + .label __2 = $6c + .label __3 = $6d + .label __4 = $6e + .label __5 = $6f + .label __6 = $70 + .label __7 = $71 + .label __8 = $72 + .label __9 = $73 + .label __10 = $74 + .label __11 = $75 + .label __12 = $76 + .label __13 = $77 + .label __14 = $78 + .label __15 = $79 + .label tod_TENTHS = $5d + .label tod_SEC = $5e + .label tod_MIN = $5f + .label tod_HOURS = $60 + // [98] (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#0 >> (byte) 4 -- vbuz1=vbuz2_ror_4 + lda.z tod_HOURS + lsr + lsr + lsr + lsr + sta.z __0 + // [99] (byte~) tod_str::$1 ← (byte) '0' + (byte~) tod_str::$0 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __0 + axs #-['0'] + stx.z __1 + // [100] *((const byte*) tod_buffer) ← (byte~) tod_str::$1 -- _deref_pbuc1=vbuz1 + lda.z __1 + sta tod_buffer + // [101] (byte~) tod_str::$2 ← (byte) tod_str::tod_HOURS#0 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 + lda #$f + and.z tod_HOURS + sta.z __2 + // [102] (byte~) tod_str::$3 ← (byte) '0' + (byte~) tod_str::$2 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __2 + axs #-['0'] + stx.z __3 + // [103] *((const byte*) tod_buffer+(byte) 1) ← (byte~) tod_str::$3 -- _deref_pbuc1=vbuz1 + lda.z __3 + sta tod_buffer+1 + // [104] (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#0 >> (byte) 4 -- vbuz1=vbuz2_ror_4 + lda.z tod_MIN + lsr + lsr + lsr + lsr + sta.z __4 + // [105] (byte~) tod_str::$5 ← (byte) '0' + (byte~) tod_str::$4 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __4 + axs #-['0'] + stx.z __5 + // [106] *((const byte*) tod_buffer+(byte) 3) ← (byte~) tod_str::$5 -- _deref_pbuc1=vbuz1 + lda.z __5 + sta tod_buffer+3 + // [107] (byte~) tod_str::$6 ← (byte) tod_str::tod_MIN#0 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 + lda #$f + and.z tod_MIN + sta.z __6 + // [108] (byte~) tod_str::$7 ← (byte) '0' + (byte~) tod_str::$6 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __6 + axs #-['0'] + stx.z __7 + // [109] *((const byte*) tod_buffer+(byte) 4) ← (byte~) tod_str::$7 -- _deref_pbuc1=vbuz1 + lda.z __7 + sta tod_buffer+4 + // [110] (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#0 >> (byte) 4 -- vbuz1=vbuz2_ror_4 + lda.z tod_SEC + lsr + lsr + lsr + lsr + sta.z __8 + // [111] (byte~) tod_str::$9 ← (byte) '0' + (byte~) tod_str::$8 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __8 + axs #-['0'] + stx.z __9 + // [112] *((const byte*) tod_buffer+(byte) 6) ← (byte~) tod_str::$9 -- _deref_pbuc1=vbuz1 + lda.z __9 + sta tod_buffer+6 + // [113] (byte~) tod_str::$10 ← (byte) tod_str::tod_SEC#0 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 + lda #$f + and.z tod_SEC + sta.z __10 + // [114] (byte~) tod_str::$11 ← (byte) '0' + (byte~) tod_str::$10 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __10 + axs #-['0'] + stx.z __11 + // [115] *((const byte*) tod_buffer+(byte) 7) ← (byte~) tod_str::$11 -- _deref_pbuc1=vbuz1 + lda.z __11 + sta tod_buffer+7 + // [116] (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#0 >> (byte) 4 -- vbuz1=vbuz2_ror_4 + lda.z tod_TENTHS + lsr + lsr + lsr + lsr + sta.z __12 + // [117] (byte~) tod_str::$13 ← (byte) '0' + (byte~) tod_str::$12 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __12 + axs #-['0'] + stx.z __13 + // [118] *((const byte*) tod_buffer+(byte) 9) ← (byte~) tod_str::$13 -- _deref_pbuc1=vbuz1 + lda.z __13 + sta tod_buffer+9 + // [119] (byte~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#0 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 + lda #$f + and.z tod_TENTHS + sta.z __14 + // [120] (byte~) tod_str::$15 ← (byte) '0' + (byte~) tod_str::$14 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __14 + axs #-['0'] + stx.z __15 + // [121] *((const byte*) tod_buffer+(byte) $a) ← (byte~) tod_str::$15 -- _deref_pbuc1=vbuz1 + lda.z __15 + sta tod_buffer+$a + jmp __breturn + // tod_str::@return + __breturn: + // [122] return + rts +} + // tod_read +// Read time of day +tod_read: { + .label return_TENTHS = $7d + .label return_SEC = $7c + .label return_MIN = $7b + .label return_HOURS = $7a + .label return_TENTHS_1 = $55 + .label return_SEC_1 = $56 + .label return_MIN_1 = $57 + .label return_HOURS_1 = $58 + // [123] (byte) tod_read::return_HOURS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) -- vbuz1=_deref_pbuc1 + // Reading sequence is important. TOD latches on reading hours until 10ths is read. + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS + sta.z return_HOURS + // [124] (byte) tod_read::return_MIN#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) -- vbuz1=_deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_MIN + sta.z return_MIN + // [125] (byte) tod_read::return_SEC#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) -- vbuz1=_deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_SEC + sta.z return_SEC + // [126] (byte) tod_read::return_TENTHS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) -- vbuz1=_deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_10THS + sta.z return_TENTHS + jmp __breturn + // tod_read::@return + __breturn: + // [127] return + rts +} + // queens +// Generates all valid placements of queens on a NxN board without recursion +// Works exactly like the recursive solution by generating all legal placements af a queen for a specific row taking into consideration the queens already placed on the rows below +// and then moving on to generating all legal placements on the rows above. +// In practice this works like a depth first tree search where the level in the tree is the row on the board and each branch in the tree is the legal placement of a queen on that row. +// The solution uses the board itself as a "cursor" moving through all possibilities +// When all columns on a row is exhausted move back down to the lower level and move forward one position until we are done with the last position on the first row +queens: { + .label __2 = $81 + // The current row where the queen is moving + .label row = $10 + // [129] phi from queens to queens::@1 [phi:queens->queens::@1] + __b1_from_queens: + // [129] phi (dword) count#14 = (dword) 0 [phi:queens->queens::@1#0] -- vduz1=vduc1 + lda #<0 + sta.z count + lda #>0 + sta.z count+1 + lda #<0>>$10 + sta.z count+2 + lda #>0>>$10 + sta.z count+3 + // [129] phi (byte) queens::row#10 = (byte) 1 [phi:queens->queens::@1#1] -- vbuz1=vbuc1 + lda #1 + sta.z row + jmp __b1 + // [129] phi from queens::@4 queens::@7 queens::@8 queens::@9 to queens::@1 [phi:queens::@4/queens::@7/queens::@8/queens::@9->queens::@1] + __b1_from___b4: + __b1_from___b7: + __b1_from___b8: + __b1_from___b9: + // [129] phi (dword) count#14 = (dword) count#22 [phi:queens::@4/queens::@7/queens::@8/queens::@9->queens::@1#0] -- register_copy + // [129] phi (byte) queens::row#10 = (byte) queens::row#10 [phi:queens::@4/queens::@7/queens::@8/queens::@9->queens::@1#1] -- register_copy + jmp __b1 + // queens::@1 + __b1: + jmp __b2 + // queens::@2 + __b2: + // [130] *((const byte*) board + (byte) queens::row#10) ← ++ *((const byte*) board + (byte) queens::row#10) -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 + ldx.z row + inc board,x + // [131] if(*((const byte*) board + (byte) queens::row#10)==(byte)(number) 8+(number) 1) goto queens::@3 -- pbuc1_derefidx_vbuz1_eq_vbuc2_then_la1 + ldy.z row + lda board,y + cmp #8+1 + beq __b3 + jmp __b5 + // queens::@5 + __b5: + // [132] (byte) legal::row#0 ← (byte) queens::row#10 -- vbuz1=vbuz2 + lda.z row + sta.z legal.row + // [133] (byte) legal::column#0 ← *((const byte*) board + (byte) queens::row#10) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z row + lda board,y + sta.z legal.column + // [134] call legal + // [306] phi from queens::@5 to legal [phi:queens::@5->legal] + legal_from___b5: + jsr legal + // [135] (byte) legal::return#0 ← (byte) legal::return#4 -- vbuz1=vbuz2 + lda.z legal.return_1 + sta.z legal.return + jmp __b9 + // queens::@9 + __b9: + // [136] (byte~) queens::$2 ← (byte) legal::return#0 -- vbuz1=vbuz2 + lda.z legal.return + sta.z __2 + // [137] if((byte) 0==(byte~) queens::$2) goto queens::@1 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp.z __2 + beq __b1_from___b9 + jmp __b6 + // queens::@6 + __b6: + // [138] if((byte) queens::row#10==(byte) 8) goto queens::@4 -- vbuz1_eq_vbuc1_then_la1 + // position is legal - move up to the next row + lda #8 + cmp.z row + beq __b4 + jmp __b7 + // queens::@7 + __b7: + // [139] (byte) queens::row#1 ← ++ (byte) queens::row#10 -- vbuz1=_inc_vbuz1 + inc.z row + jmp __b1_from___b7 + // queens::@4 + __b4: + // [140] (dword) count#22 ← ++ (dword) count#14 -- vduz1=_inc_vduz1 + inc.z count + bne !+ + inc.z count+1 + bne !+ + inc.z count+2 + bne !+ + inc.z count+3 + !: + // [141] call print + // [146] phi from queens::@4 to print [phi:queens::@4->print] + print_from___b4: + jsr print + jmp __b1_from___b4 + // queens::@3 + __b3: + // [142] *((const byte*) board + (byte) queens::row#10) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 + // We moved past the end of the row - reset position and go down to the lower row + lda #0 + ldy.z row + sta board,y + // [143] if((byte) queens::row#10==(byte) 1) goto queens::@return -- vbuz1_eq_vbuc1_then_la1 + lda #1 + cmp.z row + beq __breturn + jmp __b8 + // queens::@8 + __b8: + // [144] (byte) queens::row#2 ← -- (byte) queens::row#10 -- vbuz1=_dec_vbuz1 + dec.z row + jmp __b1_from___b8 + // queens::@return + __breturn: + // [145] return + rts +} + // print +// Print the board with a legal placement. +print: { + .label i = $15 + .label i1 = $16 + .label j = $17 + // [147] call printf_str + // [46] phi from print to printf_str [phi:print->printf_str] + printf_str_from_print: + // [46] phi (byte*) printf_str::str#13 = (const byte*) print::str [phi:print->printf_str#0] -- pbuz1=pbuc1 + lda #str + sta.z printf_str.str+1 + jsr printf_str + jmp __b11 + // print::@11 + __b11: + // [148] (dword) printf_ulong::uvalue#0 ← (dword) count#22 -- vduz1=vduz2 + lda.z count + sta.z printf_ulong.uvalue + lda.z count+1 + sta.z printf_ulong.uvalue+1 + lda.z count+2 + sta.z printf_ulong.uvalue+2 + lda.z count+3 + sta.z printf_ulong.uvalue+3 + // [149] call printf_ulong + // [271] phi from print::@11 to printf_ulong [phi:print::@11->printf_ulong] + printf_ulong_from___b11: + jsr printf_ulong + // [150] phi from print::@11 to print::@12 [phi:print::@11->print::@12] + __b12_from___b11: + jmp __b12 + // print::@12 + __b12: + // [151] call printf_str + // [46] phi from print::@12 to printf_str [phi:print::@12->printf_str] + printf_str_from___b12: + // [46] phi (byte*) printf_str::str#13 = (const byte*) print::str1 [phi:print::@12->printf_str#0] -- pbuz1=pbuc1 + lda #str1 + sta.z printf_str.str+1 + jsr printf_str + // [152] phi from print::@12 to print::@1 [phi:print::@12->print::@1] + __b1_from___b12: + // [152] phi (byte) print::i#2 = (byte) 1 [phi:print::@12->print::@1#0] -- vbuz1=vbuc1 + lda #1 + sta.z i + jmp __b1 + // print::@1 + __b1: + // [153] if((byte) print::i#2<(byte) 8+(byte) 1) goto print::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z i + cmp #8+1 + bcc __b2 + // [154] phi from print::@1 to print::@3 [phi:print::@1->print::@3] + __b3_from___b1: + // [154] phi (byte) print::i1#2 = (byte) 1 [phi:print::@1->print::@3#0] -- vbuz1=vbuc1 + lda #1 + sta.z i1 + jmp __b3 + // print::@3 + __b3: + // [155] if((byte) print::i1#2<(byte) 8+(byte) 1) goto print::@4 -- vbuz1_lt_vbuc1_then_la1 + lda.z i1 + cmp #8+1 + bcc __b4_from___b3 + jmp __breturn + // print::@return + __breturn: + // [156] return + rts + // [157] phi from print::@3 to print::@4 [phi:print::@3->print::@4] + __b4_from___b3: + jmp __b4 + // print::@4 + __b4: + // [158] call printf_str + // [46] phi from print::@4 to printf_str [phi:print::@4->printf_str] + printf_str_from___b4: + // [46] phi (byte*) printf_str::str#13 = (const byte*) print::str2 [phi:print::@4->printf_str#0] -- pbuz1=pbuc1 + lda #str2 + sta.z printf_str.str+1 + jsr printf_str + jmp __b14 + // print::@14 + __b14: + // [159] (byte) printf_uchar::uvalue#1 ← (byte) print::i1#2 -- vbuz1=vbuz2 + lda.z i1 + sta.z printf_uchar.uvalue + // [160] call printf_uchar + // [173] phi from print::@14 to printf_uchar [phi:print::@14->printf_uchar] + printf_uchar_from___b14: + // [173] phi (byte) printf_uchar::uvalue#2 = (byte) printf_uchar::uvalue#1 [phi:print::@14->printf_uchar#0] -- register_copy + jsr printf_uchar + // [161] phi from print::@14 to print::@5 [phi:print::@14->print::@5] + __b5_from___b14: + // [161] phi (byte) print::j#2 = (byte) 1 [phi:print::@14->print::@5#0] -- vbuz1=vbuc1 + lda #1 + sta.z j + jmp __b5 + // print::@5 + __b5: + // [162] if((byte) print::j#2<(byte) 8+(byte) 1) goto print::@6 -- vbuz1_lt_vbuc1_then_la1 + lda.z j + cmp #8+1 + bcc __b6 + jmp __b7 + // print::@7 + __b7: + // [163] (byte) print::i1#1 ← ++ (byte) print::i1#2 -- vbuz1=_inc_vbuz1 + inc.z i1 + // [154] phi from print::@7 to print::@3 [phi:print::@7->print::@3] + __b3_from___b7: + // [154] phi (byte) print::i1#2 = (byte) print::i1#1 [phi:print::@7->print::@3#0] -- register_copy + jmp __b3 + // print::@6 + __b6: + // [164] if(*((const byte*) board + (byte) print::i1#2)==(byte) print::j#2) goto print::@8 -- pbuc1_derefidx_vbuz1_eq_vbuz2_then_la1 + ldy.z i1 + lda board,y + cmp.z j + beq __b8_from___b6 + // [165] phi from print::@6 to print::@10 [phi:print::@6->print::@10] + __b10_from___b6: + jmp __b10 + // print::@10 + __b10: + // [166] call printf_str + // [46] phi from print::@10 to printf_str [phi:print::@10->printf_str] + printf_str_from___b10: + // [46] phi (byte*) printf_str::str#13 = (const byte*) print::str4 [phi:print::@10->printf_str#0] -- pbuz1=pbuc1 + lda #str4 + sta.z printf_str.str+1 + jsr printf_str + jmp __b9 + // print::@9 + __b9: + // [167] (byte) print::j#1 ← ++ (byte) print::j#2 -- vbuz1=_inc_vbuz1 + inc.z j + // [161] phi from print::@9 to print::@5 [phi:print::@9->print::@5] + __b5_from___b9: + // [161] phi (byte) print::j#2 = (byte) print::j#1 [phi:print::@9->print::@5#0] -- register_copy + jmp __b5 + // [168] phi from print::@6 to print::@8 [phi:print::@6->print::@8] + __b8_from___b6: + jmp __b8 + // print::@8 + __b8: + // [169] call printf_str + // [46] phi from print::@8 to printf_str [phi:print::@8->printf_str] + printf_str_from___b8: + // [46] phi (byte*) printf_str::str#13 = (const byte*) print::str3 [phi:print::@8->printf_str#0] -- pbuz1=pbuc1 + lda #str3 + sta.z printf_str.str+1 + jsr printf_str + jmp __b9 + // print::@2 + __b2: + // [170] (byte) printf_uchar::uvalue#0 ← (byte) print::i#2 -- vbuz1=vbuz2 + lda.z i + sta.z printf_uchar.uvalue + // [171] call printf_uchar + // [173] phi from print::@2 to printf_uchar [phi:print::@2->printf_uchar] + printf_uchar_from___b2: + // [173] phi (byte) printf_uchar::uvalue#2 = (byte) printf_uchar::uvalue#0 [phi:print::@2->printf_uchar#0] -- register_copy + jsr printf_uchar + jmp __b13 + // print::@13 + __b13: + // [172] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [152] phi from print::@13 to print::@1 [phi:print::@13->print::@1] + __b1_from___b13: + // [152] phi (byte) print::i#2 = (byte) print::i#1 [phi:print::@13->print::@1#0] -- register_copy + jmp __b1 + str: .text @"\n#" + .byte 0 + str1: .text @":\n " + .byte 0 + str2: .text @"\n" + .byte 0 + str3: .text "Q" + .byte 0 + str4: .text "-" + .byte 0 +} + // printf_uchar +// Print an unsigned char using a specific format +// printf_uchar(byte zp($18) uvalue) +printf_uchar: { + .label uvalue = $18 + jmp __b1 + // printf_uchar::@1 + __b1: + // [174] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // Handle any sign + lda #0 + sta printf_buffer + // [175] (byte) uctoa::value#1 ← (byte) printf_uchar::uvalue#2 -- vbuz1=vbuz2 + lda.z uvalue + sta.z uctoa.value + // [176] call uctoa + // Format number into buffer + // [245] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] + uctoa_from___b1: + jsr uctoa + jmp __b2 + // printf_uchar::@2 + __b2: + // [177] (byte) printf_number_buffer::buffer_sign#2 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 + lda printf_buffer + sta.z printf_number_buffer.buffer_sign + // [178] call printf_number_buffer + // Print using format + // [180] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] + printf_number_buffer_from___b2: + // [180] phi (byte) printf_number_buffer::format_upper_case#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#0] -- vbuz1=vbuc1 + lda #0 + sta.z printf_number_buffer.format_upper_case + // [180] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#2 [phi:printf_uchar::@2->printf_number_buffer#1] -- register_copy + // [180] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_uchar::@2->printf_number_buffer#2] -- pbuz1=pbuc1 + lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS + sta.z printf_number_buffer.buffer_digits+1 + // [180] phi (byte) printf_number_buffer::format_zero_padding#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#3] -- vbuz1=vbuc1 + lda #0 + sta.z printf_number_buffer.format_zero_padding + // [180] phi (byte) printf_number_buffer::format_justify_left#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#4] -- vbuz1=vbuc1 + lda #0 + sta.z printf_number_buffer.format_justify_left + // [180] phi (byte) printf_number_buffer::format_min_length#3 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#5] -- vbuz1=vbuc1 + lda #0 + sta.z printf_number_buffer.format_min_length + jsr printf_number_buffer + jmp __breturn + // printf_uchar::@return + __breturn: + // [179] return + rts +} + // printf_number_buffer +// Print the contents of the number buffer using a specific format. +// This handles minimum length, zero-filling, and left/right justification from the format +// printf_number_buffer(byte zp($1e) buffer_sign, byte* zp($1c) buffer_digits, byte zp($19) format_min_length, byte zp($1a) format_justify_left, byte zp($1b) format_zero_padding, byte zp($1f) format_upper_case) +printf_number_buffer: { + .label __19 = $88 + .label buffer_sign = $1e + .label len = $20 + .label padding = $21 + .label format_min_length = $19 + .label format_zero_padding = $1b + .label format_justify_left = $1a + .label buffer_digits = $1c + .label format_upper_case = $1f + // [181] if((byte) 0==(byte) printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp.z format_min_length + beq __b1_from_printf_number_buffer + jmp __b6 + // printf_number_buffer::@6 + __b6: + // [182] (byte*) strlen::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 -- pbuz1=pbuz2 + lda.z buffer_digits + sta.z strlen.str + lda.z buffer_digits+1 + sta.z strlen.str+1 + // [183] call strlen + // [239] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + strlen_from___b6: + jsr strlen + // [184] (word) strlen::return#2 ← (word) strlen::len#2 -- vwuz1=vwuz2 + lda.z strlen.len + sta.z strlen.return + lda.z strlen.len+1 + sta.z strlen.return+1 + jmp __b14 + // printf_number_buffer::@14 + __b14: + // [185] (word~) printf_number_buffer::$19 ← (word) strlen::return#2 -- vwuz1=vwuz2 + lda.z strlen.return + sta.z __19 + lda.z strlen.return+1 + sta.z __19+1 + // [186] (signed byte) printf_number_buffer::len#0 ← (signed byte)(word~) printf_number_buffer::$19 -- vbsz1=_sbyte_vwuz2 + // There is a minimum length - work out the padding + lda.z __19 + sta.z len + // [187] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp.z buffer_sign + beq __b13_from___b14 + jmp __b7 + // printf_number_buffer::@7 + __b7: + // [188] (signed byte) printf_number_buffer::len#1 ← ++ (signed byte) printf_number_buffer::len#0 -- vbsz1=_inc_vbsz1 + inc.z len + // [189] phi from printf_number_buffer::@14 printf_number_buffer::@7 to printf_number_buffer::@13 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13] + __b13_from___b14: + __b13_from___b7: + // [189] phi (signed byte) printf_number_buffer::len#2 = (signed byte) printf_number_buffer::len#0 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13#0] -- register_copy + jmp __b13 + // printf_number_buffer::@13 + __b13: + // [190] (signed byte) printf_number_buffer::padding#1 ← (signed byte)(byte) printf_number_buffer::format_min_length#3 - (signed byte) printf_number_buffer::len#2 -- vbsz1=vbsz2_minus_vbsz3 + lda.z format_min_length + sec + sbc.z len + sta.z padding + // [191] if((signed byte) printf_number_buffer::padding#1>=(signed byte) 0) goto printf_number_buffer::@21 -- vbsz1_ge_0_then_la1 + lda.z padding + cmp #0 + bpl __b21_from___b13 + // [193] phi from printf_number_buffer printf_number_buffer::@13 to printf_number_buffer::@1 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1] + __b1_from_printf_number_buffer: + __b1_from___b13: + // [193] phi (signed byte) printf_number_buffer::padding#10 = (signed byte) 0 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1#0] -- vbsz1=vbsc1 + lda #0 + sta.z padding + jmp __b1 + // [192] phi from printf_number_buffer::@13 to printf_number_buffer::@21 [phi:printf_number_buffer::@13->printf_number_buffer::@21] + __b21_from___b13: + jmp __b21 + // printf_number_buffer::@21 + __b21: + // [193] phi from printf_number_buffer::@21 to printf_number_buffer::@1 [phi:printf_number_buffer::@21->printf_number_buffer::@1] + __b1_from___b21: + // [193] phi (signed byte) printf_number_buffer::padding#10 = (signed byte) printf_number_buffer::padding#1 [phi:printf_number_buffer::@21->printf_number_buffer::@1#0] -- register_copy + jmp __b1 + // printf_number_buffer::@1 + __b1: + // [194] if((byte) 0!=(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp.z format_justify_left + bne __b2 + jmp __b17 + // printf_number_buffer::@17 + __b17: + // [195] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp.z format_zero_padding + bne __b2 + jmp __b16 + // printf_number_buffer::@16 + __b16: + // [196] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@8 -- vbsc1_neq_vbsz1_then_la1 + lda #0 + cmp.z padding + bne __b8 + jmp __b2 + // printf_number_buffer::@8 + __b8: + // [197] (byte) printf_padding::length#0 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 + lda.z padding + sta.z printf_padding.length + // [198] call printf_padding + // [217] phi from printf_number_buffer::@8 to printf_padding [phi:printf_number_buffer::@8->printf_padding] + printf_padding_from___b8: + // [217] phi (byte) printf_padding::pad#7 = (byte) ' ' [phi:printf_number_buffer::@8->printf_padding#0] -- vbuz1=vbuc1 + lda #' ' + sta.z printf_padding.pad + // [217] phi (byte) printf_padding::length#6 = (byte) printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#1] -- register_copy + jsr printf_padding + jmp __b2 + // printf_number_buffer::@2 + __b2: + // [199] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp.z buffer_sign + beq __b3 + jmp __b9 + // printf_number_buffer::@9 + __b9: + // [200] (byte) printf_char::ch#2 ← (byte) printf_number_buffer::buffer_sign#10 -- vbuz1=vbuz2 + lda.z buffer_sign + sta.z printf_char.ch + // [201] call printf_char + // [89] phi from printf_number_buffer::@9 to printf_char [phi:printf_number_buffer::@9->printf_char] + printf_char_from___b9: + // [89] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#2 [phi:printf_number_buffer::@9->printf_char#0] -- register_copy + jsr printf_char + jmp __b3 + // printf_number_buffer::@3 + __b3: + // [202] if((byte) 0==(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp.z format_zero_padding + beq __b4 + jmp __b18 + // printf_number_buffer::@18 + __b18: + // [203] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@10 -- vbsc1_neq_vbsz1_then_la1 + lda #0 + cmp.z padding + bne __b10 + jmp __b4 + // printf_number_buffer::@10 + __b10: + // [204] (byte) printf_padding::length#1 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 + lda.z padding + sta.z printf_padding.length + // [205] call printf_padding + // [217] phi from printf_number_buffer::@10 to printf_padding [phi:printf_number_buffer::@10->printf_padding] + printf_padding_from___b10: + // [217] phi (byte) printf_padding::pad#7 = (byte) '0' [phi:printf_number_buffer::@10->printf_padding#0] -- vbuz1=vbuc1 + lda #'0' + sta.z printf_padding.pad + // [217] phi (byte) printf_padding::length#6 = (byte) printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#1] -- register_copy + jsr printf_padding + jmp __b4 + // printf_number_buffer::@4 + __b4: + // [206] if((byte) 0==(byte) printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp.z format_upper_case + beq __b5 + jmp __b11 + // printf_number_buffer::@11 + __b11: + // [207] (byte*) strupr::str#0 ← (byte*) printf_number_buffer::buffer_digits#10 -- pbuz1=pbuz2 + lda.z buffer_digits + sta.z strupr.str + lda.z buffer_digits+1 + sta.z strupr.str+1 + // [208] call strupr + // [224] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + strupr_from___b11: + jsr strupr + jmp __b5 + // printf_number_buffer::@5 + __b5: + // [209] (byte*) printf_str::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 -- pbuz1=pbuz2 + lda.z buffer_digits + sta.z printf_str.str + lda.z buffer_digits+1 + sta.z printf_str.str+1 + // [210] call printf_str + // [46] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] + printf_str_from___b5: + // [46] phi (byte*) printf_str::str#13 = (byte*) printf_str::str#1 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy + jsr printf_str + jmp __b15 + // printf_number_buffer::@15 + __b15: + // [211] if((byte) 0==(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp.z format_justify_left + beq __breturn + jmp __b20 + // printf_number_buffer::@20 + __b20: + // [212] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp.z format_zero_padding + bne __breturn + jmp __b19 + // printf_number_buffer::@19 + __b19: + // [213] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@12 -- vbsc1_neq_vbsz1_then_la1 + lda #0 + cmp.z padding + bne __b12 + jmp __breturn + // printf_number_buffer::@12 + __b12: + // [214] (byte) printf_padding::length#2 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 + lda.z padding + sta.z printf_padding.length + // [215] call printf_padding + // [217] phi from printf_number_buffer::@12 to printf_padding [phi:printf_number_buffer::@12->printf_padding] + printf_padding_from___b12: + // [217] phi (byte) printf_padding::pad#7 = (byte) ' ' [phi:printf_number_buffer::@12->printf_padding#0] -- vbuz1=vbuc1 + lda #' ' + sta.z printf_padding.pad + // [217] phi (byte) printf_padding::length#6 = (byte) printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#1] -- register_copy + jsr printf_padding + jmp __breturn + // printf_number_buffer::@return + __breturn: + // [216] return + rts +} + // printf_padding +// Print a padding char a number of times +// printf_padding(byte zp($23) pad, byte zp($22) length) +printf_padding: { + .label i = $24 + .label length = $22 + .label pad = $23 + // [218] phi from printf_padding to printf_padding::@1 [phi:printf_padding->printf_padding::@1] + __b1_from_printf_padding: + // [218] phi (byte) printf_padding::i#2 = (byte) 0 [phi:printf_padding->printf_padding::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + jmp __b1 + // printf_padding::@1 + __b1: + // [219] if((byte) printf_padding::i#2<(byte) printf_padding::length#6) goto printf_padding::@2 -- vbuz1_lt_vbuz2_then_la1 + lda.z i + cmp.z length + bcc __b2 + jmp __breturn + // printf_padding::@return + __breturn: + // [220] return + rts + // printf_padding::@2 + __b2: + // [221] (byte) printf_char::ch#0 ← (byte) printf_padding::pad#7 -- vbuz1=vbuz2 + lda.z pad + sta.z printf_char.ch + // [222] call printf_char + // [89] phi from printf_padding::@2 to printf_char [phi:printf_padding::@2->printf_char] + printf_char_from___b2: + // [89] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#0 [phi:printf_padding::@2->printf_char#0] -- register_copy + jsr printf_char + jmp __b3 + // printf_padding::@3 + __b3: + // [223] (byte) printf_padding::i#1 ← ++ (byte) printf_padding::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [218] phi from printf_padding::@3 to printf_padding::@1 [phi:printf_padding::@3->printf_padding::@1] + __b1_from___b3: + // [218] phi (byte) printf_padding::i#2 = (byte) printf_padding::i#1 [phi:printf_padding::@3->printf_padding::@1#0] -- register_copy + jmp __b1 } // strupr // Converts a string to uppercase. // strupr(byte* zp($25) str) strupr: { - .label __0 = $68 + .label __0 = $8b .label src = $25 .label str = $25 - // [167] phi from strupr strupr::@3 to strupr::@1 [phi:strupr/strupr::@3->strupr::@1] + // [225] phi from strupr strupr::@3 to strupr::@1 [phi:strupr/strupr::@3->strupr::@1] __b1_from_strupr: __b1_from___b3: - // [167] phi (byte*) strupr::src#2 = (byte*) strupr::str#0 [phi:strupr/strupr::@3->strupr::@1#0] -- register_copy + // [225] phi (byte*) strupr::src#2 = (byte*) strupr::str#0 [phi:strupr/strupr::@3->strupr::@1#0] -- register_copy jmp __b1 // strupr::@1 __b1: - // [168] if((byte) 0!=*((byte*) strupr::src#2)) goto strupr::@2 -- vbuc1_neq__deref_pbuz1_then_la1 + // [226] if((byte) 0!=*((byte*) strupr::src#2)) goto strupr::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (src),y cmp #0 @@ -7321,30 +8727,30 @@ strupr: { jmp __breturn // strupr::@return __breturn: - // [169] return + // [227] return rts // strupr::@2 __b2: - // [170] (byte) toupper::ch#0 ← *((byte*) strupr::src#2) -- vbuz1=_deref_pbuz2 + // [228] (byte) toupper::ch#0 ← *((byte*) strupr::src#2) -- vbuz1=_deref_pbuz2 ldy #0 lda (src),y sta.z toupper.ch - // [171] call toupper + // [229] call toupper jsr toupper - // [172] (byte) toupper::return#3 ← (byte) toupper::return#2 -- vbuz1=vbuz2 + // [230] (byte) toupper::return#3 ← (byte) toupper::return#2 -- vbuz1=vbuz2 lda.z toupper.return sta.z toupper.return_1 jmp __b3 // strupr::@3 __b3: - // [173] (byte~) strupr::$0 ← (byte) toupper::return#3 -- vbuz1=vbuz2 + // [231] (byte~) strupr::$0 ← (byte) toupper::return#3 -- vbuz1=vbuz2 lda.z toupper.return_1 sta.z __0 - // [174] *((byte*) strupr::src#2) ← (byte~) strupr::$0 -- _deref_pbuz1=vbuz2 + // [232] *((byte*) strupr::src#2) ← (byte~) strupr::$0 -- _deref_pbuz1=vbuz2 lda.z __0 ldy #0 sta (src),y - // [175] (byte*) strupr::src#1 ← ++ (byte*) strupr::src#2 -- pbuz1=_inc_pbuz1 + // [233] (byte*) strupr::src#1 ← ++ (byte*) strupr::src#2 -- pbuz1=_inc_pbuz1 inc.z src bne !+ inc.z src+1 @@ -7358,34 +8764,34 @@ strupr: { toupper: { .label return = $27 .label ch = $27 - .label return_1 = $67 - // [176] if((byte) toupper::ch#0<(byte) 'a') goto toupper::@return -- vbuz1_lt_vbuc1_then_la1 + .label return_1 = $8a + // [234] if((byte) toupper::ch#0<(byte) 'a') goto toupper::@return -- vbuz1_lt_vbuc1_then_la1 lda.z ch cmp #'a' bcc __breturn_from_toupper jmp __b2 // toupper::@2 __b2: - // [177] if((byte) toupper::ch#0<=(byte) 'z') goto toupper::@1 -- vbuz1_le_vbuc1_then_la1 + // [235] if((byte) toupper::ch#0<=(byte) 'z') goto toupper::@1 -- vbuz1_le_vbuc1_then_la1 lda #'z' cmp.z ch bcs __b1 - // [179] phi from toupper toupper::@1 toupper::@2 to toupper::@return [phi:toupper/toupper::@1/toupper::@2->toupper::@return] + // [237] phi from toupper toupper::@1 toupper::@2 to toupper::@return [phi:toupper/toupper::@1/toupper::@2->toupper::@return] __breturn_from_toupper: __breturn_from___b1: __breturn_from___b2: - // [179] phi (byte) toupper::return#2 = (byte) toupper::ch#0 [phi:toupper/toupper::@1/toupper::@2->toupper::@return#0] -- register_copy + // [237] phi (byte) toupper::return#2 = (byte) toupper::ch#0 [phi:toupper/toupper::@1/toupper::@2->toupper::@return#0] -- register_copy jmp __breturn // toupper::@1 __b1: - // [178] (byte) toupper::return#0 ← (byte) toupper::ch#0 + (byte) 'A'-(byte) 'a' -- vbuz1=vbuz1_plus_vbuc1 + // [236] (byte) toupper::return#0 ← (byte) toupper::ch#0 + (byte) 'A'-(byte) 'a' -- vbuz1=vbuz1_plus_vbuc1 lax.z return axs #-['A'-'a'] stx.z return jmp __breturn_from___b1 // toupper::@return __breturn: - // [180] return + // [238] return rts } // strlen @@ -7394,19 +8800,19 @@ toupper: { strlen: { .label len = $2a .label str = $28 - .label return = $5a - // [182] phi from strlen to strlen::@1 [phi:strlen->strlen::@1] + .label return = $86 + // [240] phi from strlen to strlen::@1 [phi:strlen->strlen::@1] __b1_from_strlen: - // [182] phi (word) strlen::len#2 = (word) 0 [phi:strlen->strlen::@1#0] -- vwuz1=vwuc1 + // [240] phi (word) strlen::len#2 = (word) 0 [phi:strlen->strlen::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z len lda #>0 sta.z len+1 - // [182] phi (byte*) strlen::str#2 = (byte*) strlen::str#1 [phi:strlen->strlen::@1#1] -- register_copy + // [240] phi (byte*) strlen::str#3 = (byte*) strlen::str#1 [phi:strlen->strlen::@1#1] -- register_copy jmp __b1 // strlen::@1 __b1: - // [183] if((byte) 0!=*((byte*) strlen::str#2)) goto strlen::@2 -- vbuc1_neq__deref_pbuz1_then_la1 + // [241] if((byte) 0!=*((byte*) strlen::str#3)) goto strlen::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y cmp #0 @@ -7414,24 +8820,24 @@ strlen: { jmp __breturn // strlen::@return __breturn: - // [184] return + // [242] return rts // strlen::@2 __b2: - // [185] (word) strlen::len#1 ← ++ (word) strlen::len#2 -- vwuz1=_inc_vwuz1 + // [243] (word) strlen::len#1 ← ++ (word) strlen::len#2 -- vwuz1=_inc_vwuz1 inc.z len bne !+ inc.z len+1 !: - // [186] (byte*) strlen::str#0 ← ++ (byte*) strlen::str#2 -- pbuz1=_inc_pbuz1 + // [244] (byte*) strlen::str#0 ← ++ (byte*) strlen::str#3 -- pbuz1=_inc_pbuz1 inc.z str bne !+ inc.z str+1 !: - // [182] phi from strlen::@2 to strlen::@1 [phi:strlen::@2->strlen::@1] + // [240] phi from strlen::@2 to strlen::@1 [phi:strlen::@2->strlen::@1] __b1_from___b2: - // [182] phi (word) strlen::len#2 = (word) strlen::len#1 [phi:strlen::@2->strlen::@1#0] -- register_copy - // [182] phi (byte*) strlen::str#2 = (byte*) strlen::str#0 [phi:strlen::@2->strlen::@1#1] -- register_copy + // [240] phi (word) strlen::len#2 = (word) strlen::len#1 [phi:strlen::@2->strlen::@1#0] -- register_copy + // [240] phi (byte*) strlen::str#3 = (byte*) strlen::str#0 [phi:strlen::@2->strlen::@1#1] -- register_copy jmp __b1 } // uctoa @@ -7440,44 +8846,44 @@ strlen: { // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// uctoa(byte zp($2d) value, byte* zp($69) buffer) +// uctoa(byte zp($2d) value, byte* zp($8c) buffer) uctoa: { - .label digit_value = $6b - .label buffer = $69 + .label digit_value = $8e + .label buffer = $8c .label digit = $2c .label value = $2d .label buffer_1 = $2f .label started = $2e - // [188] phi from uctoa to uctoa::@1 [phi:uctoa->uctoa::@1] + // [246] phi from uctoa to uctoa::@1 [phi:uctoa->uctoa::@1] __b1_from_uctoa: - // [188] phi (byte*) uctoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:uctoa->uctoa::@1#0] -- pbuz1=pbuc1 + // [246] phi (byte*) uctoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:uctoa->uctoa::@1#0] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z buffer_1+1 - // [188] phi (byte) uctoa::started#2 = (byte) 0 [phi:uctoa->uctoa::@1#1] -- vbuz1=vbuc1 + // [246] phi (byte) uctoa::started#2 = (byte) 0 [phi:uctoa->uctoa::@1#1] -- vbuz1=vbuc1 lda #0 sta.z started - // [188] phi (byte) uctoa::value#2 = (byte) uctoa::value#1 [phi:uctoa->uctoa::@1#2] -- register_copy - // [188] phi (byte) uctoa::digit#2 = (byte) 0 [phi:uctoa->uctoa::@1#3] -- vbuz1=vbuc1 + // [246] phi (byte) uctoa::value#2 = (byte) uctoa::value#1 [phi:uctoa->uctoa::@1#2] -- register_copy + // [246] phi (byte) uctoa::digit#2 = (byte) 0 [phi:uctoa->uctoa::@1#3] -- vbuz1=vbuc1 lda #0 sta.z digit jmp __b1 // uctoa::@1 __b1: - // [189] if((byte) uctoa::digit#2<(byte) 2-(byte) 1) goto uctoa::@2 -- vbuz1_lt_vbuc1_then_la1 + // [247] if((byte) uctoa::digit#2<(byte) 2-(byte) 1) goto uctoa::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z digit cmp #2-1 bcc __b2 jmp __b3 // uctoa::@3 __b3: - // [190] *((byte*) uctoa::buffer#11) ← *((const byte*) DIGITS + (byte) uctoa::value#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [248] *((byte*) uctoa::buffer#11) ← *((const byte*) DIGITS + (byte) uctoa::value#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy.z value lda DIGITS,y ldy #0 sta (buffer_1),y - // [191] (byte*) uctoa::buffer#3 ← ++ (byte*) uctoa::buffer#11 -- pbuz1=_inc_pbuz2 + // [249] (byte*) uctoa::buffer#3 ← ++ (byte*) uctoa::buffer#11 -- pbuz1=_inc_pbuz2 lda.z buffer_1 clc adc #1 @@ -7485,87 +8891,87 @@ uctoa: { lda.z buffer_1+1 adc #0 sta.z buffer+1 - // [192] *((byte*) uctoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [250] *((byte*) uctoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (buffer),y jmp __breturn // uctoa::@return __breturn: - // [193] return + // [251] return rts // uctoa::@2 __b2: - // [194] (byte) uctoa::digit_value#0 ← *((const byte*) RADIX_HEXADECIMAL_VALUES_CHAR + (byte) uctoa::digit#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [252] (byte) uctoa::digit_value#0 ← *((const byte*) RADIX_HEXADECIMAL_VALUES_CHAR + (byte) uctoa::digit#2) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z digit lda RADIX_HEXADECIMAL_VALUES_CHAR,y sta.z digit_value - // [195] if((byte) 0!=(byte) uctoa::started#2) goto uctoa::@5 -- vbuc1_neq_vbuz1_then_la1 + // [253] if((byte) 0!=(byte) uctoa::started#2) goto uctoa::@5 -- vbuc1_neq_vbuz1_then_la1 lda #0 cmp.z started bne __b5 jmp __b7 // uctoa::@7 __b7: - // [196] if((byte) uctoa::value#2>=(byte) uctoa::digit_value#0) goto uctoa::@5 -- vbuz1_ge_vbuz2_then_la1 + // [254] if((byte) uctoa::value#2>=(byte) uctoa::digit_value#0) goto uctoa::@5 -- vbuz1_ge_vbuz2_then_la1 lda.z value cmp.z digit_value bcs __b5 - // [197] phi from uctoa::@7 to uctoa::@4 [phi:uctoa::@7->uctoa::@4] + // [255] phi from uctoa::@7 to uctoa::@4 [phi:uctoa::@7->uctoa::@4] __b4_from___b7: - // [197] phi (byte*) uctoa::buffer#14 = (byte*) uctoa::buffer#11 [phi:uctoa::@7->uctoa::@4#0] -- register_copy - // [197] phi (byte) uctoa::started#4 = (byte) uctoa::started#2 [phi:uctoa::@7->uctoa::@4#1] -- register_copy - // [197] phi (byte) uctoa::value#6 = (byte) uctoa::value#2 [phi:uctoa::@7->uctoa::@4#2] -- register_copy + // [255] phi (byte*) uctoa::buffer#14 = (byte*) uctoa::buffer#11 [phi:uctoa::@7->uctoa::@4#0] -- register_copy + // [255] phi (byte) uctoa::started#4 = (byte) uctoa::started#2 [phi:uctoa::@7->uctoa::@4#1] -- register_copy + // [255] phi (byte) uctoa::value#6 = (byte) uctoa::value#2 [phi:uctoa::@7->uctoa::@4#2] -- register_copy jmp __b4 // uctoa::@4 __b4: - // [198] (byte) uctoa::digit#1 ← ++ (byte) uctoa::digit#2 -- vbuz1=_inc_vbuz1 + // [256] (byte) uctoa::digit#1 ← ++ (byte) uctoa::digit#2 -- vbuz1=_inc_vbuz1 inc.z digit - // [188] phi from uctoa::@4 to uctoa::@1 [phi:uctoa::@4->uctoa::@1] + // [246] phi from uctoa::@4 to uctoa::@1 [phi:uctoa::@4->uctoa::@1] __b1_from___b4: - // [188] phi (byte*) uctoa::buffer#11 = (byte*) uctoa::buffer#14 [phi:uctoa::@4->uctoa::@1#0] -- register_copy - // [188] phi (byte) uctoa::started#2 = (byte) uctoa::started#4 [phi:uctoa::@4->uctoa::@1#1] -- register_copy - // [188] phi (byte) uctoa::value#2 = (byte) uctoa::value#6 [phi:uctoa::@4->uctoa::@1#2] -- register_copy - // [188] phi (byte) uctoa::digit#2 = (byte) uctoa::digit#1 [phi:uctoa::@4->uctoa::@1#3] -- register_copy + // [246] phi (byte*) uctoa::buffer#11 = (byte*) uctoa::buffer#14 [phi:uctoa::@4->uctoa::@1#0] -- register_copy + // [246] phi (byte) uctoa::started#2 = (byte) uctoa::started#4 [phi:uctoa::@4->uctoa::@1#1] -- register_copy + // [246] phi (byte) uctoa::value#2 = (byte) uctoa::value#6 [phi:uctoa::@4->uctoa::@1#2] -- register_copy + // [246] phi (byte) uctoa::digit#2 = (byte) uctoa::digit#1 [phi:uctoa::@4->uctoa::@1#3] -- register_copy jmp __b1 // uctoa::@5 __b5: - // [199] (byte*) uctoa_append::buffer#0 ← (byte*) uctoa::buffer#11 -- pbuz1=pbuz2 + // [257] (byte*) uctoa_append::buffer#0 ← (byte*) uctoa::buffer#11 -- pbuz1=pbuz2 lda.z buffer_1 sta.z uctoa_append.buffer lda.z buffer_1+1 sta.z uctoa_append.buffer+1 - // [200] (byte) uctoa_append::value#0 ← (byte) uctoa::value#2 -- vbuz1=vbuz2 + // [258] (byte) uctoa_append::value#0 ← (byte) uctoa::value#2 -- vbuz1=vbuz2 lda.z value sta.z uctoa_append.value - // [201] (byte) uctoa_append::sub#0 ← (byte) uctoa::digit_value#0 -- vbuz1=vbuz2 + // [259] (byte) uctoa_append::sub#0 ← (byte) uctoa::digit_value#0 -- vbuz1=vbuz2 lda.z digit_value sta.z uctoa_append.sub - // [202] call uctoa_append - // [206] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [260] call uctoa_append + // [264] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] uctoa_append_from___b5: jsr uctoa_append - // [203] (byte) uctoa_append::return#0 ← (byte) uctoa_append::value#2 -- vbuz1=vbuz2 + // [261] (byte) uctoa_append::return#0 ← (byte) uctoa_append::value#2 -- vbuz1=vbuz2 lda.z uctoa_append.value sta.z uctoa_append.return jmp __b6 // uctoa::@6 __b6: - // [204] (byte) uctoa::value#0 ← (byte) uctoa_append::return#0 -- vbuz1=vbuz2 + // [262] (byte) uctoa::value#0 ← (byte) uctoa_append::return#0 -- vbuz1=vbuz2 lda.z uctoa_append.return sta.z value - // [205] (byte*) uctoa::buffer#4 ← ++ (byte*) uctoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [263] (byte*) uctoa::buffer#4 ← ++ (byte*) uctoa::buffer#11 -- pbuz1=_inc_pbuz1 inc.z buffer_1 bne !+ inc.z buffer_1+1 !: - // [197] phi from uctoa::@6 to uctoa::@4 [phi:uctoa::@6->uctoa::@4] + // [255] phi from uctoa::@6 to uctoa::@4 [phi:uctoa::@6->uctoa::@4] __b4_from___b6: - // [197] phi (byte*) uctoa::buffer#14 = (byte*) uctoa::buffer#4 [phi:uctoa::@6->uctoa::@4#0] -- register_copy - // [197] phi (byte) uctoa::started#4 = (byte) 1 [phi:uctoa::@6->uctoa::@4#1] -- vbuz1=vbuc1 + // [255] phi (byte*) uctoa::buffer#14 = (byte*) uctoa::buffer#4 [phi:uctoa::@6->uctoa::@4#0] -- register_copy + // [255] phi (byte) uctoa::started#4 = (byte) 1 [phi:uctoa::@6->uctoa::@4#1] -- vbuz1=vbuc1 lda #1 sta.z started - // [197] phi (byte) uctoa::value#6 = (byte) uctoa::value#0 [phi:uctoa::@6->uctoa::@4#2] -- register_copy + // [255] phi (byte) uctoa::value#6 = (byte) uctoa::value#0 [phi:uctoa::@6->uctoa::@4#2] -- register_copy jmp __b4 } // uctoa_append @@ -7577,30 +8983,30 @@ uctoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// uctoa_append(byte* zp($6c) buffer, byte zp($31) value, byte zp($6e) sub) +// uctoa_append(byte* zp($8f) buffer, byte zp($31) value, byte zp($91) sub) uctoa_append: { - .label buffer = $6c + .label buffer = $8f .label value = $31 - .label sub = $6e - .label return = $6f + .label sub = $91 + .label return = $92 .label digit = $32 - // [207] phi from uctoa_append to uctoa_append::@1 [phi:uctoa_append->uctoa_append::@1] + // [265] phi from uctoa_append to uctoa_append::@1 [phi:uctoa_append->uctoa_append::@1] __b1_from_uctoa_append: - // [207] phi (byte) uctoa_append::digit#2 = (byte) 0 [phi:uctoa_append->uctoa_append::@1#0] -- vbuz1=vbuc1 + // [265] phi (byte) uctoa_append::digit#2 = (byte) 0 [phi:uctoa_append->uctoa_append::@1#0] -- vbuz1=vbuc1 lda #0 sta.z digit - // [207] phi (byte) uctoa_append::value#2 = (byte) uctoa_append::value#0 [phi:uctoa_append->uctoa_append::@1#1] -- register_copy + // [265] phi (byte) uctoa_append::value#2 = (byte) uctoa_append::value#0 [phi:uctoa_append->uctoa_append::@1#1] -- register_copy jmp __b1 // uctoa_append::@1 __b1: - // [208] if((byte) uctoa_append::value#2>=(byte) uctoa_append::sub#0) goto uctoa_append::@2 -- vbuz1_ge_vbuz2_then_la1 + // [266] if((byte) uctoa_append::value#2>=(byte) uctoa_append::sub#0) goto uctoa_append::@2 -- vbuz1_ge_vbuz2_then_la1 lda.z value cmp.z sub bcs __b2 jmp __b3 // uctoa_append::@3 __b3: - // [209] *((byte*) uctoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) uctoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [267] *((byte*) uctoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) uctoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy.z digit lda DIGITS,y ldy #0 @@ -7608,40 +9014,40 @@ uctoa_append: { jmp __breturn // uctoa_append::@return __breturn: - // [210] return + // [268] return rts // uctoa_append::@2 __b2: - // [211] (byte) uctoa_append::digit#1 ← ++ (byte) uctoa_append::digit#2 -- vbuz1=_inc_vbuz1 + // [269] (byte) uctoa_append::digit#1 ← ++ (byte) uctoa_append::digit#2 -- vbuz1=_inc_vbuz1 inc.z digit - // [212] (byte) uctoa_append::value#1 ← (byte) uctoa_append::value#2 - (byte) uctoa_append::sub#0 -- vbuz1=vbuz1_minus_vbuz2 + // [270] (byte) uctoa_append::value#1 ← (byte) uctoa_append::value#2 - (byte) uctoa_append::sub#0 -- vbuz1=vbuz1_minus_vbuz2 lda.z value sec sbc.z sub sta.z value - // [207] phi from uctoa_append::@2 to uctoa_append::@1 [phi:uctoa_append::@2->uctoa_append::@1] + // [265] phi from uctoa_append::@2 to uctoa_append::@1 [phi:uctoa_append::@2->uctoa_append::@1] __b1_from___b2: - // [207] phi (byte) uctoa_append::digit#2 = (byte) uctoa_append::digit#1 [phi:uctoa_append::@2->uctoa_append::@1#0] -- register_copy - // [207] phi (byte) uctoa_append::value#2 = (byte) uctoa_append::value#1 [phi:uctoa_append::@2->uctoa_append::@1#1] -- register_copy + // [265] phi (byte) uctoa_append::digit#2 = (byte) uctoa_append::digit#1 [phi:uctoa_append::@2->uctoa_append::@1#0] -- register_copy + // [265] phi (byte) uctoa_append::value#2 = (byte) uctoa_append::value#1 [phi:uctoa_append::@2->uctoa_append::@1#1] -- register_copy jmp __b1 } // printf_ulong // Print an unsigned int using a specific format -// printf_ulong(dword zp($56) uvalue) +// printf_ulong(dword zp($82) uvalue) printf_ulong: { .const format_min_length = 0 .const format_justify_left = 0 .const format_zero_padding = 0 .const format_upper_case = 0 - .label uvalue = $56 + .label uvalue = $82 jmp __b1 // printf_ulong::@1 __b1: - // [214] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [272] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer - // [215] (dword) ultoa::value#1 ← (dword) printf_ulong::uvalue#0 -- vduz1=vduz2 + // [273] (dword) ultoa::value#1 ← (dword) printf_ulong::uvalue#0 -- vduz1=vduz2 lda.z uvalue sta.z ultoa.value lda.z uvalue+1 @@ -7650,44 +9056,44 @@ printf_ulong: { sta.z ultoa.value+2 lda.z uvalue+3 sta.z ultoa.value+3 - // [216] call ultoa + // [274] call ultoa // Format number into buffer - // [220] phi from printf_ulong::@1 to ultoa [phi:printf_ulong::@1->ultoa] + // [278] phi from printf_ulong::@1 to ultoa [phi:printf_ulong::@1->ultoa] ultoa_from___b1: jsr ultoa jmp __b2 // printf_ulong::@2 __b2: - // [217] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 + // [275] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [218] call printf_number_buffer + // [276] call printf_number_buffer // Print using format - // [70] phi from printf_ulong::@2 to printf_number_buffer [phi:printf_ulong::@2->printf_number_buffer] + // [180] phi from printf_ulong::@2 to printf_number_buffer [phi:printf_ulong::@2->printf_number_buffer] printf_number_buffer_from___b2: - // [70] phi (byte) printf_number_buffer::format_upper_case#10 = (const byte) printf_ulong::format_upper_case#0 [phi:printf_ulong::@2->printf_number_buffer#0] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_upper_case#10 = (const byte) printf_ulong::format_upper_case#0 [phi:printf_ulong::@2->printf_number_buffer#0] -- vbuz1=vbuc1 lda #format_upper_case sta.z printf_number_buffer.format_upper_case - // [70] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#0 [phi:printf_ulong::@2->printf_number_buffer#1] -- register_copy - // [70] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_ulong::@2->printf_number_buffer#2] -- pbuz1=pbuc1 + // [180] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#0 [phi:printf_ulong::@2->printf_number_buffer#1] -- register_copy + // [180] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_ulong::@2->printf_number_buffer#2] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z printf_number_buffer.buffer_digits+1 - // [70] phi (byte) printf_number_buffer::format_zero_padding#10 = (const byte) printf_ulong::format_zero_padding#0 [phi:printf_ulong::@2->printf_number_buffer#3] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_zero_padding#10 = (const byte) printf_ulong::format_zero_padding#0 [phi:printf_ulong::@2->printf_number_buffer#3] -- vbuz1=vbuc1 lda #format_zero_padding sta.z printf_number_buffer.format_zero_padding - // [70] phi (byte) printf_number_buffer::format_justify_left#10 = (const byte) printf_ulong::format_justify_left#0 [phi:printf_ulong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_justify_left#10 = (const byte) printf_ulong::format_justify_left#0 [phi:printf_ulong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [70] phi (byte) printf_number_buffer::format_min_length#3 = (const byte) printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_min_length#3 = (const byte) printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- vbuz1=vbuc1 lda #format_min_length sta.z printf_number_buffer.format_min_length jsr printf_number_buffer jmp __breturn // printf_ulong::@return __breturn: - // [219] return + // [277] return rts } // ultoa @@ -7696,50 +9102,50 @@ printf_ulong: { // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// ultoa(dword zp($34) value, byte* zp($71) buffer) +// ultoa(dword zp($34) value, byte* zp($94) buffer) ultoa: { .const max_digits = $a - .label __10 = $73 - .label __11 = $70 - .label digit_value = $74 - .label buffer = $71 + .label __10 = $96 + .label __11 = $93 + .label digit_value = $97 + .label buffer = $94 .label digit = $33 .label value = $34 .label buffer_1 = $39 .label started = $38 - // [221] phi from ultoa to ultoa::@1 [phi:ultoa->ultoa::@1] + // [279] phi from ultoa to ultoa::@1 [phi:ultoa->ultoa::@1] __b1_from_ultoa: - // [221] phi (byte*) ultoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:ultoa->ultoa::@1#0] -- pbuz1=pbuc1 + // [279] phi (byte*) ultoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:ultoa->ultoa::@1#0] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z buffer_1+1 - // [221] phi (byte) ultoa::started#2 = (byte) 0 [phi:ultoa->ultoa::@1#1] -- vbuz1=vbuc1 + // [279] phi (byte) ultoa::started#2 = (byte) 0 [phi:ultoa->ultoa::@1#1] -- vbuz1=vbuc1 lda #0 sta.z started - // [221] phi (dword) ultoa::value#2 = (dword) ultoa::value#1 [phi:ultoa->ultoa::@1#2] -- register_copy - // [221] phi (byte) ultoa::digit#2 = (byte) 0 [phi:ultoa->ultoa::@1#3] -- vbuz1=vbuc1 + // [279] phi (dword) ultoa::value#2 = (dword) ultoa::value#1 [phi:ultoa->ultoa::@1#2] -- register_copy + // [279] phi (byte) ultoa::digit#2 = (byte) 0 [phi:ultoa->ultoa::@1#3] -- vbuz1=vbuc1 lda #0 sta.z digit jmp __b1 // ultoa::@1 __b1: - // [222] if((byte) ultoa::digit#2<(const byte) ultoa::max_digits#1-(byte) 1) goto ultoa::@2 -- vbuz1_lt_vbuc1_then_la1 + // [280] if((byte) ultoa::digit#2<(const byte) ultoa::max_digits#1-(byte) 1) goto ultoa::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z digit cmp #max_digits-1 bcc __b2 jmp __b3 // ultoa::@3 __b3: - // [223] (byte~) ultoa::$11 ← (byte)(dword) ultoa::value#2 -- vbuz1=_byte_vduz2 + // [281] (byte~) ultoa::$11 ← (byte)(dword) ultoa::value#2 -- vbuz1=_byte_vduz2 lda.z value sta.z __11 - // [224] *((byte*) ultoa::buffer#11) ← *((const byte*) DIGITS + (byte~) ultoa::$11) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [282] *((byte*) ultoa::buffer#11) ← *((const byte*) DIGITS + (byte~) ultoa::$11) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy.z __11 lda DIGITS,y ldy #0 sta (buffer_1),y - // [225] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz2 + // [283] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz2 lda.z buffer_1 clc adc #1 @@ -7747,23 +9153,23 @@ ultoa: { lda.z buffer_1+1 adc #0 sta.z buffer+1 - // [226] *((byte*) ultoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [284] *((byte*) ultoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (buffer),y jmp __breturn // ultoa::@return __breturn: - // [227] return + // [285] return rts // ultoa::@2 __b2: - // [228] (byte~) ultoa::$10 ← (byte) ultoa::digit#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [286] (byte~) ultoa::$10 ← (byte) ultoa::digit#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 lda.z digit asl asl sta.z __10 - // [229] (dword) ultoa::digit_value#0 ← *((const dword*) RADIX_DECIMAL_VALUES_LONG + (byte~) ultoa::$10) -- vduz1=pduc1_derefidx_vbuz2 + // [287] (dword) ultoa::digit_value#0 ← *((const dword*) RADIX_DECIMAL_VALUES_LONG + (byte~) ultoa::$10) -- vduz1=pduc1_derefidx_vbuz2 ldy.z __10 lda RADIX_DECIMAL_VALUES_LONG,y sta.z digit_value @@ -7773,14 +9179,14 @@ ultoa: { sta.z digit_value+2 lda RADIX_DECIMAL_VALUES_LONG+3,y sta.z digit_value+3 - // [230] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 -- vbuc1_neq_vbuz1_then_la1 + // [288] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 -- vbuc1_neq_vbuz1_then_la1 lda #0 cmp.z started bne __b5 jmp __b7 // ultoa::@7 __b7: - // [231] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 -- vduz1_ge_vduz2_then_la1 + // [289] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 -- vduz1_ge_vduz2_then_la1 lda.z value+3 cmp.z digit_value+3 bcc !+ @@ -7797,31 +9203,31 @@ ultoa: { cmp.z digit_value bcs __b5 !: - // [232] phi from ultoa::@7 to ultoa::@4 [phi:ultoa::@7->ultoa::@4] + // [290] phi from ultoa::@7 to ultoa::@4 [phi:ultoa::@7->ultoa::@4] __b4_from___b7: - // [232] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#11 [phi:ultoa::@7->ultoa::@4#0] -- register_copy - // [232] phi (byte) ultoa::started#4 = (byte) ultoa::started#2 [phi:ultoa::@7->ultoa::@4#1] -- register_copy - // [232] phi (dword) ultoa::value#6 = (dword) ultoa::value#2 [phi:ultoa::@7->ultoa::@4#2] -- register_copy + // [290] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#11 [phi:ultoa::@7->ultoa::@4#0] -- register_copy + // [290] phi (byte) ultoa::started#4 = (byte) ultoa::started#2 [phi:ultoa::@7->ultoa::@4#1] -- register_copy + // [290] phi (dword) ultoa::value#6 = (dword) ultoa::value#2 [phi:ultoa::@7->ultoa::@4#2] -- register_copy jmp __b4 // ultoa::@4 __b4: - // [233] (byte) ultoa::digit#1 ← ++ (byte) ultoa::digit#2 -- vbuz1=_inc_vbuz1 + // [291] (byte) ultoa::digit#1 ← ++ (byte) ultoa::digit#2 -- vbuz1=_inc_vbuz1 inc.z digit - // [221] phi from ultoa::@4 to ultoa::@1 [phi:ultoa::@4->ultoa::@1] + // [279] phi from ultoa::@4 to ultoa::@1 [phi:ultoa::@4->ultoa::@1] __b1_from___b4: - // [221] phi (byte*) ultoa::buffer#11 = (byte*) ultoa::buffer#14 [phi:ultoa::@4->ultoa::@1#0] -- register_copy - // [221] phi (byte) ultoa::started#2 = (byte) ultoa::started#4 [phi:ultoa::@4->ultoa::@1#1] -- register_copy - // [221] phi (dword) ultoa::value#2 = (dword) ultoa::value#6 [phi:ultoa::@4->ultoa::@1#2] -- register_copy - // [221] phi (byte) ultoa::digit#2 = (byte) ultoa::digit#1 [phi:ultoa::@4->ultoa::@1#3] -- register_copy + // [279] phi (byte*) ultoa::buffer#11 = (byte*) ultoa::buffer#14 [phi:ultoa::@4->ultoa::@1#0] -- register_copy + // [279] phi (byte) ultoa::started#2 = (byte) ultoa::started#4 [phi:ultoa::@4->ultoa::@1#1] -- register_copy + // [279] phi (dword) ultoa::value#2 = (dword) ultoa::value#6 [phi:ultoa::@4->ultoa::@1#2] -- register_copy + // [279] phi (byte) ultoa::digit#2 = (byte) ultoa::digit#1 [phi:ultoa::@4->ultoa::@1#3] -- register_copy jmp __b1 // ultoa::@5 __b5: - // [234] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 -- pbuz1=pbuz2 + // [292] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 -- pbuz1=pbuz2 lda.z buffer_1 sta.z ultoa_append.buffer lda.z buffer_1+1 sta.z ultoa_append.buffer+1 - // [235] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 -- vduz1=vduz2 + // [293] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 -- vduz1=vduz2 lda.z value sta.z ultoa_append.value lda.z value+1 @@ -7830,7 +9236,7 @@ ultoa: { sta.z ultoa_append.value+2 lda.z value+3 sta.z ultoa_append.value+3 - // [236] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 -- vduz1=vduz2 + // [294] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 -- vduz1=vduz2 lda.z digit_value sta.z ultoa_append.sub lda.z digit_value+1 @@ -7839,11 +9245,11 @@ ultoa: { sta.z ultoa_append.sub+2 lda.z digit_value+3 sta.z ultoa_append.sub+3 - // [237] call ultoa_append - // [241] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [295] call ultoa_append + // [299] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] ultoa_append_from___b5: jsr ultoa_append - // [238] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 -- vduz1=vduz2 + // [296] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 -- vduz1=vduz2 lda.z ultoa_append.value sta.z ultoa_append.return lda.z ultoa_append.value+1 @@ -7855,7 +9261,7 @@ ultoa: { jmp __b6 // ultoa::@6 __b6: - // [239] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 -- vduz1=vduz2 + // [297] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 -- vduz1=vduz2 lda.z ultoa_append.return sta.z value lda.z ultoa_append.return+1 @@ -7864,18 +9270,18 @@ ultoa: { sta.z value+2 lda.z ultoa_append.return+3 sta.z value+3 - // [240] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [298] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz1 inc.z buffer_1 bne !+ inc.z buffer_1+1 !: - // [232] phi from ultoa::@6 to ultoa::@4 [phi:ultoa::@6->ultoa::@4] + // [290] phi from ultoa::@6 to ultoa::@4 [phi:ultoa::@6->ultoa::@4] __b4_from___b6: - // [232] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#4 [phi:ultoa::@6->ultoa::@4#0] -- register_copy - // [232] phi (byte) ultoa::started#4 = (byte) 1 [phi:ultoa::@6->ultoa::@4#1] -- vbuz1=vbuc1 + // [290] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#4 [phi:ultoa::@6->ultoa::@4#0] -- register_copy + // [290] phi (byte) ultoa::started#4 = (byte) 1 [phi:ultoa::@6->ultoa::@4#1] -- vbuz1=vbuc1 lda #1 sta.z started - // [232] phi (dword) ultoa::value#6 = (dword) ultoa::value#0 [phi:ultoa::@6->ultoa::@4#2] -- register_copy + // [290] phi (dword) ultoa::value#6 = (dword) ultoa::value#0 [phi:ultoa::@6->ultoa::@4#2] -- register_copy jmp __b4 } // ultoa_append @@ -7887,23 +9293,23 @@ ultoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// ultoa_append(byte* zp($78) buffer, dword zp($3b) value, dword zp($7a) sub) +// ultoa_append(byte* zp($9b) buffer, dword zp($3b) value, dword zp($9d) sub) ultoa_append: { - .label buffer = $78 + .label buffer = $9b .label value = $3b - .label sub = $7a - .label return = $7e + .label sub = $9d + .label return = $a1 .label digit = $3f - // [242] phi from ultoa_append to ultoa_append::@1 [phi:ultoa_append->ultoa_append::@1] + // [300] phi from ultoa_append to ultoa_append::@1 [phi:ultoa_append->ultoa_append::@1] __b1_from_ultoa_append: - // [242] phi (byte) ultoa_append::digit#2 = (byte) 0 [phi:ultoa_append->ultoa_append::@1#0] -- vbuz1=vbuc1 + // [300] phi (byte) ultoa_append::digit#2 = (byte) 0 [phi:ultoa_append->ultoa_append::@1#0] -- vbuz1=vbuc1 lda #0 sta.z digit - // [242] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#0 [phi:ultoa_append->ultoa_append::@1#1] -- register_copy + // [300] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#0 [phi:ultoa_append->ultoa_append::@1#1] -- register_copy jmp __b1 // ultoa_append::@1 __b1: - // [243] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 -- vduz1_ge_vduz2_then_la1 + // [301] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 -- vduz1_ge_vduz2_then_la1 lda.z value+3 cmp.z sub+3 bcc !+ @@ -7923,7 +9329,7 @@ ultoa_append: { jmp __b3 // ultoa_append::@3 __b3: - // [244] *((byte*) ultoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) ultoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [302] *((byte*) ultoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) ultoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy.z digit lda DIGITS,y ldy #0 @@ -7931,13 +9337,13 @@ ultoa_append: { jmp __breturn // ultoa_append::@return __breturn: - // [245] return + // [303] return rts // ultoa_append::@2 __b2: - // [246] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 -- vbuz1=_inc_vbuz1 + // [304] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 -- vbuz1=_inc_vbuz1 inc.z digit - // [247] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 -- vduz1=vduz1_minus_vduz2 + // [305] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 -- vduz1=vduz1_minus_vduz2 lda.z value sec sbc.z sub @@ -7951,68 +9357,69 @@ ultoa_append: { lda.z value+3 sbc.z sub+3 sta.z value+3 - // [242] phi from ultoa_append::@2 to ultoa_append::@1 [phi:ultoa_append::@2->ultoa_append::@1] + // [300] phi from ultoa_append::@2 to ultoa_append::@1 [phi:ultoa_append::@2->ultoa_append::@1] __b1_from___b2: - // [242] phi (byte) ultoa_append::digit#2 = (byte) ultoa_append::digit#1 [phi:ultoa_append::@2->ultoa_append::@1#0] -- register_copy - // [242] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#1 [phi:ultoa_append::@2->ultoa_append::@1#1] -- register_copy + // [300] phi (byte) ultoa_append::digit#2 = (byte) ultoa_append::digit#1 [phi:ultoa_append::@2->ultoa_append::@1#0] -- register_copy + // [300] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#1 [phi:ultoa_append::@2->ultoa_append::@1#1] -- register_copy jmp __b1 } // legal // Checks is a placement of the queen on the board is legal. // Checks the passed (row, column) against all queens placed on the board on lower rows. // If no conflict for desired position returns 1 otherwise returns 0 -// legal(byte zp($52) row, byte zp($53) column) +// legal(byte zp($7e) row, byte zp($7f) column) legal: { - .label __0 = $82 - .label __3 = $84 - .label __4 = $86 - .label row = $52 - .label column = $53 + .label __0 = $a5 + .label row = $7e + .label column = $7f // Placement is legal // The same column is a conflict. // The same diagonal is a conflict. - .label return = $54 + .label return = $80 + .label diff1_a = $a6 + .label diff1_return = $42 + .label diff2_return = $43 // Placement is legal // The same column is a conflict. // The same diagonal is a conflict. .label return_1 = $41 .label i = $40 - // [249] phi from legal to legal::@1 [phi:legal->legal::@1] + // [307] phi from legal to legal::@1 [phi:legal->legal::@1] __b1_from_legal: - // [249] phi (byte) legal::i#2 = (byte) 1 [phi:legal->legal::@1#0] -- vbuz1=vbuc1 + // [307] phi (byte) legal::i#10 = (byte) 1 [phi:legal->legal::@1#0] -- vbuz1=vbuc1 lda #1 sta.z i jmp __b1 // legal::@1 __b1: - // [250] (byte~) legal::$0 ← (byte) legal::row#0 - (byte) 1 -- vbuz1=vbuz2_minus_1 + // [308] (byte~) legal::$0 ← (byte) legal::row#0 - (byte) 1 -- vbuz1=vbuz2_minus_1 ldx.z row dex stx.z __0 - // [251] if((byte) legal::i#2<=(byte~) legal::$0) goto legal::@2 -- vbuz1_le_vbuz2_then_la1 + // [309] if((byte) legal::i#10<=(byte~) legal::$0) goto legal::@2 -- vbuz1_le_vbuz2_then_la1 lda.z __0 cmp.z i bcs __b2 - // [252] phi from legal::@1 to legal::@return [phi:legal::@1->legal::@return] + // [310] phi from legal::@1 to legal::@return [phi:legal::@1->legal::@return] __breturn_from___b1: - // [252] phi (byte) legal::return#4 = (byte) 1 [phi:legal::@1->legal::@return#0] -- vbuz1=vbuc1 + // [310] phi (byte) legal::return#4 = (byte) 1 [phi:legal::@1->legal::@return#0] -- vbuz1=vbuc1 lda #1 sta.z return_1 jmp __breturn - // [252] phi from legal::@2 legal::@6 to legal::@return [phi:legal::@2/legal::@6->legal::@return] + // [310] phi from legal::@2 legal::@5 to legal::@return [phi:legal::@2/legal::@5->legal::@return] __breturn_from___b2: - __breturn_from___b6: - // [252] phi (byte) legal::return#4 = (byte) 0 [phi:legal::@2/legal::@6->legal::@return#0] -- vbuz1=vbuc1 + __breturn_from___b5: + // [310] phi (byte) legal::return#4 = (byte) 0 [phi:legal::@2/legal::@5->legal::@return#0] -- vbuz1=vbuc1 lda #0 sta.z return_1 jmp __breturn // legal::@return __breturn: - // [253] return + // [311] return rts // legal::@2 __b2: - // [254] if(*((const byte*) board + (byte) legal::i#2)==(byte) legal::column#0) goto legal::@return -- pbuc1_derefidx_vbuz1_eq_vbuz2_then_la1 + // [312] if(*((const byte*) board + (byte) legal::i#10)==(byte) legal::column#0) goto legal::@return -- pbuc1_derefidx_vbuz1_eq_vbuz2_then_la1 ldy.z i lda board,y cmp.z column @@ -8020,101 +9427,125 @@ legal: { jmp __b4 // legal::@4 __b4: - // [255] (byte) diff::a#0 ← *((const byte*) board + (byte) legal::i#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [313] (byte) legal::diff1_a#0 ← *((const byte*) board + (byte) legal::i#10) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z i lda board,y - sta.z diff.a - // [256] (byte) diff::b#0 ← (byte) legal::column#0 -- vbuz1=vbuz2 - lda.z column - sta.z diff.b - // [257] call diff - // [267] phi from legal::@4 to diff [phi:legal::@4->diff] - diff_from___b4: - // [267] phi (byte) diff::b#2 = (byte) diff::b#0 [phi:legal::@4->diff#0] -- register_copy - // [267] phi (byte) diff::a#2 = (byte) diff::a#0 [phi:legal::@4->diff#1] -- register_copy - jsr diff - // [258] (byte) diff::return#0 ← (byte) diff::return#4 -- vbuz1=vbuz2 - lda.z diff.return_2 - sta.z diff.return + sta.z diff1_a + jmp diff1 + // legal::diff1 + diff1: + // [314] if((byte) legal::diff1_a#0<(byte) legal::column#0) goto legal::diff1_@1 -- vbuz1_lt_vbuz2_then_la1 + lda.z diff1_a + cmp.z column + bcc diff1___b1 + jmp diff1___b3 + // legal::diff1_@3 + diff1___b3: + // [315] (byte) legal::diff1_return#1 ← (byte) legal::diff1_a#0 - (byte) legal::column#0 -- vbuz1=vbuz2_minus_vbuz3 + lda.z diff1_a + sec + sbc.z column + sta.z diff1_return + // [316] phi from legal::diff1_@1 legal::diff1_@3 to legal::diff1_@return [phi:legal::diff1_@1/legal::diff1_@3->legal::diff1_@return] + diff1___breturn_from_diff1___b1: + diff1___breturn_from_diff1___b3: + // [316] phi (byte) legal::diff1_return#2 = (byte) legal::diff1_return#0 [phi:legal::diff1_@1/legal::diff1_@3->legal::diff1_@return#0] -- register_copy + jmp diff1___breturn + // legal::diff1_@return + diff1___breturn: + jmp diff2 + // legal::diff2 + diff2: + // [317] if((byte) legal::i#10<(byte) legal::row#0) goto legal::diff2_@1 -- vbuz1_lt_vbuz2_then_la1 + lda.z i + cmp.z row + bcc diff2___b1 + jmp diff2___b3 + // legal::diff2_@3 + diff2___b3: + // [318] (byte) legal::diff2_return#1 ← (byte) legal::i#10 - (byte) legal::row#0 -- vbuz1=vbuz2_minus_vbuz3 + lda.z i + sec + sbc.z row + sta.z diff2_return + // [319] phi from legal::diff2_@1 legal::diff2_@3 to legal::diff2_@return [phi:legal::diff2_@1/legal::diff2_@3->legal::diff2_@return] + diff2___breturn_from_diff2___b1: + diff2___breturn_from_diff2___b3: + // [319] phi (byte) legal::diff2_return#2 = (byte) legal::diff2_return#0 [phi:legal::diff2_@1/legal::diff2_@3->legal::diff2_@return#0] -- register_copy + jmp diff2___breturn + // legal::diff2_@return + diff2___breturn: jmp __b5 // legal::@5 __b5: - // [259] (byte~) legal::$3 ← (byte) diff::return#0 -- vbuz1=vbuz2 - lda.z diff.return - sta.z __3 - // [260] (byte) diff::a#1 ← (byte) legal::i#2 -- vbuz1=vbuz2 - lda.z i - sta.z diff.a - // [261] (byte) diff::b#1 ← (byte) legal::row#0 -- vbuz1=vbuz2 - lda.z row - sta.z diff.b - // [262] call diff - // [267] phi from legal::@5 to diff [phi:legal::@5->diff] - diff_from___b5: - // [267] phi (byte) diff::b#2 = (byte) diff::b#1 [phi:legal::@5->diff#0] -- register_copy - // [267] phi (byte) diff::a#2 = (byte) diff::a#1 [phi:legal::@5->diff#1] -- register_copy - jsr diff - // [263] (byte) diff::return#1 ← (byte) diff::return#4 -- vbuz1=vbuz2 - lda.z diff.return_2 - sta.z diff.return_1 - jmp __b6 - // legal::@6 - __b6: - // [264] (byte~) legal::$4 ← (byte) diff::return#1 -- vbuz1=vbuz2 - lda.z diff.return_1 - sta.z __4 - // [265] if((byte~) legal::$3!=(byte~) legal::$4) goto legal::@3 -- vbuz1_neq_vbuz2_then_la1 - lda.z __3 - cmp.z __4 + // [320] if((byte) legal::diff1_return#2!=(byte) legal::diff2_return#2) goto legal::@3 -- vbuz1_neq_vbuz2_then_la1 + lda.z diff1_return + cmp.z diff2_return bne __b3 - jmp __breturn_from___b6 + jmp __breturn_from___b5 // legal::@3 __b3: - // [266] (byte) legal::i#1 ← ++ (byte) legal::i#2 -- vbuz1=_inc_vbuz1 + // [321] (byte) legal::i#1 ← ++ (byte) legal::i#10 -- vbuz1=_inc_vbuz1 inc.z i - // [249] phi from legal::@3 to legal::@1 [phi:legal::@3->legal::@1] + // [307] phi from legal::@3 to legal::@1 [phi:legal::@3->legal::@1] __b1_from___b3: - // [249] phi (byte) legal::i#2 = (byte) legal::i#1 [phi:legal::@3->legal::@1#0] -- register_copy + // [307] phi (byte) legal::i#10 = (byte) legal::i#1 [phi:legal::@3->legal::@1#0] -- register_copy jmp __b1 + // legal::diff2_@1 + diff2___b1: + // [322] (byte) legal::diff2_return#0 ← (byte) legal::row#0 - (byte) legal::i#10 -- vbuz1=vbuz2_minus_vbuz3 + lda.z row + sec + sbc.z i + sta.z diff2_return + jmp diff2___breturn_from_diff2___b1 + // legal::diff1_@1 + diff1___b1: + // [323] (byte) legal::diff1_return#0 ← (byte) legal::column#0 - (byte) legal::diff1_a#0 -- vbuz1=vbuz2_minus_vbuz3 + lda.z column + sec + sbc.z diff1_a + sta.z diff1_return + jmp diff1___breturn_from_diff1___b1 } - // diff -// Find the absolute difference between two unsigned chars -// diff(byte zp($42) a, byte zp($43) b) -diff: { - .label a = $42 - .label b = $43 - .label return = $83 - .label return_1 = $85 - .label return_2 = $44 - // [268] if((byte) diff::a#2<(byte) diff::b#2) goto diff::@1 -- vbuz1_lt_vbuz2_then_la1 - lda.z a - cmp.z b - bcc __b1 - jmp __b2 - // diff::@2 - __b2: - // [269] (byte) diff::return#3 ← (byte) diff::a#2 - (byte) diff::b#2 -- vbuz1=vbuz2_minus_vbuz3 - lda.z a - sec - sbc.z b - sta.z return_2 - // [270] phi from diff::@1 diff::@2 to diff::@return [phi:diff::@1/diff::@2->diff::@return] - __breturn_from___b1: - __breturn_from___b2: - // [270] phi (byte) diff::return#4 = (byte) diff::return#2 [phi:diff::@1/diff::@2->diff::@return#0] -- register_copy + // tod_init +// Initialize time-of-day clock +// This uses the MOS6526 CIA#1 +// tod_init(byte zp($51) tod_TENTHS, byte zp($52) tod_SEC, byte zp($53) tod_MIN, byte zp($54) tod_HOURS) +tod_init: { + .label tod_TENTHS = $51 + .label tod_SEC = $52 + .label tod_MIN = $53 + .label tod_HOURS = $54 + // [324] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc2_bor_vbuc3 + // Set 50hz (this assumes PAL!) (bit7=1) + lda #$80 + ora CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // [325] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc2_band_vbuc3 + // Writing TOD clock (bit7=0) + lda #$7f + and CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // [326] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) ← (byte) tod_init::tod_HOURS#0 -- _deref_pbuc1=vbuz1 + // Reset TOD clock + // Writing sequence is important. TOD stops when hours is written and starts when 10ths is written. + lda.z tod_HOURS + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS + // [327] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) ← (byte) tod_init::tod_MIN#0 -- _deref_pbuc1=vbuz1 + lda.z tod_MIN + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_MIN + // [328] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) ← (byte) tod_init::tod_SEC#0 -- _deref_pbuc1=vbuz1 + lda.z tod_SEC + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_SEC + // [329] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) ← (byte) tod_init::tod_TENTHS#0 -- _deref_pbuc1=vbuz1 + lda.z tod_TENTHS + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_10THS jmp __breturn - // diff::@return + // tod_init::@return __breturn: - // [271] return + // [330] return rts - // diff::@1 - __b1: - // [272] (byte) diff::return#2 ← (byte) diff::b#2 - (byte) diff::a#2 -- vbuz1=vbuz2_minus_vbuz3 - lda.z b - sec - sbc.z a - sta.z return_2 - jmp __breturn_from___b1 } // printf_uint // Print an unsigned int using a specific format @@ -8127,48 +9558,48 @@ printf_uint: { jmp __b1 // printf_uint::@1 __b1: - // [274] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [332] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer - // [275] call utoa + // [333] call utoa // Format number into buffer - // [279] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] + // [337] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] utoa_from___b1: jsr utoa jmp __b2 // printf_uint::@2 __b2: - // [276] (byte) printf_number_buffer::buffer_sign#1 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 + // [334] (byte) printf_number_buffer::buffer_sign#1 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [277] call printf_number_buffer + // [335] call printf_number_buffer // Print using format - // [70] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] + // [180] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] printf_number_buffer_from___b2: - // [70] phi (byte) printf_number_buffer::format_upper_case#10 = (const byte) printf_uint::format_upper_case#0 [phi:printf_uint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_upper_case#10 = (const byte) printf_uint::format_upper_case#0 [phi:printf_uint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 lda #format_upper_case sta.z printf_number_buffer.format_upper_case - // [70] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#1 [phi:printf_uint::@2->printf_number_buffer#1] -- register_copy - // [70] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_uint::@2->printf_number_buffer#2] -- pbuz1=pbuc1 + // [180] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#1 [phi:printf_uint::@2->printf_number_buffer#1] -- register_copy + // [180] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_uint::@2->printf_number_buffer#2] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z printf_number_buffer.buffer_digits+1 - // [70] phi (byte) printf_number_buffer::format_zero_padding#10 = (const byte) printf_uint::format_zero_padding#0 [phi:printf_uint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_zero_padding#10 = (const byte) printf_uint::format_zero_padding#0 [phi:printf_uint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 lda #format_zero_padding sta.z printf_number_buffer.format_zero_padding - // [70] phi (byte) printf_number_buffer::format_justify_left#10 = (const byte) printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_justify_left#10 = (const byte) printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [70] phi (byte) printf_number_buffer::format_min_length#3 = (const byte) printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_min_length#3 = (const byte) printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuz1=vbuc1 lda #format_min_length sta.z printf_number_buffer.format_min_length jsr printf_number_buffer jmp __breturn // printf_uint::@return __breturn: - // [278] return + // [336] return rts } // utoa @@ -8177,54 +9608,54 @@ printf_uint: { // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// utoa(word zp($46) value, byte* zp($88) buffer) +// utoa(word zp($45) value, byte* zp($a8) buffer) utoa: { .const max_digits = 5 - .label __10 = $8a - .label __11 = $87 - .label digit_value = $8b - .label buffer = $88 - .label digit = $45 - .label value = $46 - .label buffer_1 = $49 - .label started = $48 - // [280] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] + .label __10 = $aa + .label __11 = $a7 + .label digit_value = $ab + .label buffer = $a8 + .label digit = $44 + .label value = $45 + .label buffer_1 = $48 + .label started = $47 + // [338] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] __b1_from_utoa: - // [280] phi (byte*) utoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1 + // [338] phi (byte*) utoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z buffer_1+1 - // [280] phi (byte) utoa::started#2 = (byte) 0 [phi:utoa->utoa::@1#1] -- vbuz1=vbuc1 + // [338] phi (byte) utoa::started#2 = (byte) 0 [phi:utoa->utoa::@1#1] -- vbuz1=vbuc1 lda #0 sta.z started - // [280] phi (word) utoa::value#2 = (const word) printf_uint::uvalue#0 [phi:utoa->utoa::@1#2] -- vwuz1=vwuc1 + // [338] phi (word) utoa::value#2 = (const word) printf_uint::uvalue#0 [phi:utoa->utoa::@1#2] -- vwuz1=vwuc1 lda #printf_uint.uvalue sta.z value+1 - // [280] phi (byte) utoa::digit#2 = (byte) 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1 + // [338] phi (byte) utoa::digit#2 = (byte) 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1 lda #0 sta.z digit jmp __b1 // utoa::@1 __b1: - // [281] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 -- vbuz1_lt_vbuc1_then_la1 + // [339] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z digit cmp #max_digits-1 bcc __b2 jmp __b3 // utoa::@3 __b3: - // [282] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 -- vbuz1=_byte_vwuz2 + // [340] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 -- vbuz1=_byte_vwuz2 lda.z value sta.z __11 - // [283] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [341] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy.z __11 lda DIGITS,y ldy #0 sta (buffer_1),y - // [284] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz2 + // [342] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz2 lda.z buffer_1 clc adc #1 @@ -8232,35 +9663,35 @@ utoa: { lda.z buffer_1+1 adc #0 sta.z buffer+1 - // [285] *((byte*) utoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [343] *((byte*) utoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (buffer),y jmp __breturn // utoa::@return __breturn: - // [286] return + // [344] return rts // utoa::@2 __b2: - // [287] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [345] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z digit asl sta.z __10 - // [288] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) -- vwuz1=pwuc1_derefidx_vbuz2 + // [346] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) -- vwuz1=pwuc1_derefidx_vbuz2 ldy.z __10 lda RADIX_DECIMAL_VALUES,y sta.z digit_value lda RADIX_DECIMAL_VALUES+1,y sta.z digit_value+1 - // [289] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuz1_then_la1 + // [347] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuz1_then_la1 lda #0 cmp.z started bne __b5 jmp __b7 // utoa::@7 __b7: - // [290] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 + // [348] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 lda.z digit_value+1 cmp.z value+1 bne !+ @@ -8269,45 +9700,45 @@ utoa: { beq __b5 !: bcc __b5 - // [291] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] + // [349] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] __b4_from___b7: - // [291] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#11 [phi:utoa::@7->utoa::@4#0] -- register_copy - // [291] phi (byte) utoa::started#4 = (byte) utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy - // [291] phi (word) utoa::value#6 = (word) utoa::value#2 [phi:utoa::@7->utoa::@4#2] -- register_copy + // [349] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#11 [phi:utoa::@7->utoa::@4#0] -- register_copy + // [349] phi (byte) utoa::started#4 = (byte) utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy + // [349] phi (word) utoa::value#6 = (word) utoa::value#2 [phi:utoa::@7->utoa::@4#2] -- register_copy jmp __b4 // utoa::@4 __b4: - // [292] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 -- vbuz1=_inc_vbuz1 + // [350] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 -- vbuz1=_inc_vbuz1 inc.z digit - // [280] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] + // [338] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] __b1_from___b4: - // [280] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#14 [phi:utoa::@4->utoa::@1#0] -- register_copy - // [280] phi (byte) utoa::started#2 = (byte) utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy - // [280] phi (word) utoa::value#2 = (word) utoa::value#6 [phi:utoa::@4->utoa::@1#2] -- register_copy - // [280] phi (byte) utoa::digit#2 = (byte) utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy + // [338] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#14 [phi:utoa::@4->utoa::@1#0] -- register_copy + // [338] phi (byte) utoa::started#2 = (byte) utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy + // [338] phi (word) utoa::value#2 = (word) utoa::value#6 [phi:utoa::@4->utoa::@1#2] -- register_copy + // [338] phi (byte) utoa::digit#2 = (byte) utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy jmp __b1 // utoa::@5 __b5: - // [293] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 -- pbuz1=pbuz2 + // [351] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 -- pbuz1=pbuz2 lda.z buffer_1 sta.z utoa_append.buffer lda.z buffer_1+1 sta.z utoa_append.buffer+1 - // [294] (word) utoa_append::value#0 ← (word) utoa::value#2 -- vwuz1=vwuz2 + // [352] (word) utoa_append::value#0 ← (word) utoa::value#2 -- vwuz1=vwuz2 lda.z value sta.z utoa_append.value lda.z value+1 sta.z utoa_append.value+1 - // [295] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 -- vwuz1=vwuz2 + // [353] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 -- vwuz1=vwuz2 lda.z digit_value sta.z utoa_append.sub lda.z digit_value+1 sta.z utoa_append.sub+1 - // [296] call utoa_append - // [300] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [354] call utoa_append + // [358] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] utoa_append_from___b5: jsr utoa_append - // [297] (word) utoa_append::return#0 ← (word) utoa_append::value#2 -- vwuz1=vwuz2 + // [355] (word) utoa_append::return#0 ← (word) utoa_append::value#2 -- vwuz1=vwuz2 lda.z utoa_append.value sta.z utoa_append.return lda.z utoa_append.value+1 @@ -8315,23 +9746,23 @@ utoa: { jmp __b6 // utoa::@6 __b6: - // [298] (word) utoa::value#0 ← (word) utoa_append::return#0 -- vwuz1=vwuz2 + // [356] (word) utoa::value#0 ← (word) utoa_append::return#0 -- vwuz1=vwuz2 lda.z utoa_append.return sta.z value lda.z utoa_append.return+1 sta.z value+1 - // [299] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [357] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 inc.z buffer_1 bne !+ inc.z buffer_1+1 !: - // [291] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] + // [349] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] __b4_from___b6: - // [291] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy - // [291] phi (byte) utoa::started#4 = (byte) 1 [phi:utoa::@6->utoa::@4#1] -- vbuz1=vbuc1 + // [349] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy + // [349] phi (byte) utoa::started#4 = (byte) 1 [phi:utoa::@6->utoa::@4#1] -- vbuz1=vbuc1 lda #1 sta.z started - // [291] phi (word) utoa::value#6 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy + // [349] phi (word) utoa::value#6 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy jmp __b4 } // utoa_append @@ -8343,23 +9774,23 @@ utoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// utoa_append(byte* zp($8d) buffer, word zp($4b) value, word zp($8f) sub) +// utoa_append(byte* zp($ad) buffer, word zp($4a) value, word zp($af) sub) utoa_append: { - .label buffer = $8d - .label value = $4b - .label sub = $8f - .label return = $91 - .label digit = $4d - // [301] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] + .label buffer = $ad + .label value = $4a + .label sub = $af + .label return = $b1 + .label digit = $4c + // [359] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] __b1_from_utoa_append: - // [301] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuz1=vbuc1 + // [359] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuz1=vbuc1 lda #0 sta.z digit - // [301] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy + // [359] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy jmp __b1 // utoa_append::@1 __b1: - // [302] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 + // [360] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 lda.z sub+1 cmp.z value+1 bne !+ @@ -8371,7 +9802,7 @@ utoa_append: { jmp __b3 // utoa_append::@3 __b3: - // [303] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [361] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy.z digit lda DIGITS,y ldy #0 @@ -8379,13 +9810,13 @@ utoa_append: { jmp __breturn // utoa_append::@return __breturn: - // [304] return + // [362] return rts // utoa_append::@2 __b2: - // [305] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuz1=_inc_vbuz1 + // [363] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuz1=_inc_vbuz1 inc.z digit - // [306] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 + // [364] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 lda.z value sec sbc.z sub @@ -8393,27 +9824,27 @@ utoa_append: { lda.z value+1 sbc.z sub+1 sta.z value+1 - // [301] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] + // [359] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] __b1_from___b2: - // [301] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy - // [301] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy + // [359] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy + // [359] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy jmp __b1 } // printf_cls // Clear the screen. Also resets current line/char cursor. printf_cls: { - // [308] call memset - // [132] phi from printf_cls to memset [phi:printf_cls->memset] + // [366] call memset + // [73] phi from printf_cls to memset [phi:printf_cls->memset] memset_from_printf_cls: - // [132] phi (byte) memset::c#4 = (byte) ' ' [phi:printf_cls->memset#0] -- vbuz1=vbuc1 + // [73] phi (byte) memset::c#4 = (byte) ' ' [phi:printf_cls->memset#0] -- vbuz1=vbuc1 lda #' ' sta.z memset.c - // [132] phi (void*) memset::str#3 = (void*) 1024 [phi:printf_cls->memset#1] -- pvoz1=pvoc1 + // [73] phi (void*) memset::str#3 = (void*) 1024 [phi:printf_cls->memset#1] -- pvoz1=pvoc1 lda #<$400 sta.z memset.str lda #>$400 sta.z memset.str+1 - // [132] phi (word) memset::num#2 = (word)(number) $28*(number) $19 [phi:printf_cls->memset#2] -- vwuz1=vwuc1 + // [73] phi (word) memset::num#2 = (word)(number) $28*(number) $19 [phi:printf_cls->memset#2] -- vwuz1=vwuc1 lda #<$28*$19 sta.z memset.num lda #>$28*$19 @@ -8422,21 +9853,21 @@ printf_cls: { jmp __b1 // printf_cls::@1 __b1: - // [309] (byte*) printf_cursor_ptr ← (byte*) 1024 -- pbuz1=pbuc1 + // [367] (byte*) printf_cursor_ptr ← (byte*) 1024 -- pbuz1=pbuc1 lda #<$400 sta.z printf_cursor_ptr lda #>$400 sta.z printf_cursor_ptr+1 - // [310] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 + // [368] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta.z printf_cursor_x - // [311] (byte) printf_cursor_y ← (byte) 0 -- vbuz1=vbuc1 + // [369] (byte) printf_cursor_y ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta.z printf_cursor_y jmp __breturn // printf_cls::@return __breturn: - // [312] return + // [370] return rts } // File Data @@ -8448,255 +9879,292 @@ printf_cls: { RADIX_DECIMAL_VALUES: .word $2710, $3e8, $64, $a // Values of decimal digits RADIX_DECIMAL_VALUES_LONG: .dword $3b9aca00, $5f5e100, $989680, $f4240, $186a0, $2710, $3e8, $64, $a + // The buffer used by tod_str() + tod_buffer: .text "00:00:00:00" + .byte 0 // The board. board[i] holds the column position of the queen on row i. board: .fill $14, 0 // Buffer used for stringified number being printed printf_buffer: .fill SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER, 0 + // Time of Day 00:00:00:00 + TOD_ZERO: .byte 0, 0, 0, 0 REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] (byte) printf_cursor_x ← (byte) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [2] (byte) printf_cursor_y ← (byte) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [3] (byte*) printf_cursor_ptr ← (byte*) 1024 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [21] if(*((const byte*) board + (byte) queens::row#10)==(byte)(number) 8+(number) 1) goto queens::@3 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer ] ( main:5::queens:16 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:2 [ queens::row#10 queens::row#1 queens::row#2 ] -Statement [32] *((const byte*) board + (byte) queens::row#10) ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer ] ( main:5::queens:16 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer ] { } ) always clobbers reg byte a -Statement [38] (dword) printf_ulong::uvalue#0 ← (dword) count#13 [ printf_cursor_x printf_cursor_y printf_cursor_ptr count#13 printf_ulong::uvalue#0 printf_buffer ] ( main:5::queens:16::print:31 [ queens::row#10 printf_cursor_x printf_cursor_y printf_cursor_ptr count#13 printf_ulong::uvalue#0 printf_buffer ] { { count#13 = printf_ulong::uvalue#0 } } ) always clobbers reg byte a -Statement [54] if(*((const byte*) board + (byte) print::i1#2)==(byte) print::j#2) goto print::@8 [ printf_cursor_x printf_cursor_y printf_cursor_ptr count#13 print::i1#2 print::j#2 printf_buffer ] ( main:5::queens:16::print:31 [ queens::row#10 printf_cursor_x printf_cursor_y printf_cursor_ptr count#13 print::i1#2 print::j#2 printf_buffer ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:8 [ print::i1#2 print::i1#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:9 [ print::j#2 print::j#1 ] -Statement [64] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_uchar::uvalue#2 printf_buffer ] ( main:5::queens:16::print:31::printf_uchar:50 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_uchar::uvalue#2 printf_buffer ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } } main:5::queens:16::print:31::printf_uchar:61 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_uchar::uvalue#2 printf_buffer ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:10 [ printf_uchar::uvalue#2 printf_uchar::uvalue#1 printf_uchar::uvalue#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:7 [ print::i#2 print::i#1 ] -Statement [72] (byte*) strlen::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:14::printf_number_buffer:277 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:11 [ printf_number_buffer::format_min_length#3 ] -Removing always clobbered register reg byte a as potential for zp[1]:12 [ printf_number_buffer::format_justify_left#10 ] -Removing always clobbered register reg byte a as potential for zp[1]:13 [ printf_number_buffer::format_zero_padding#10 ] -Removing always clobbered register reg byte a as potential for zp[1]:16 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:17 [ printf_number_buffer::format_upper_case#10 ] -Statement [74] (word) strlen::return#2 ← (word) strlen::len#2 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:14::printf_number_buffer:277 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a -Statement [75] (word~) printf_number_buffer::$19 ← (word) strlen::return#2 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:14::printf_number_buffer:277 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [76] (signed byte) printf_number_buffer::len#0 ← (signed byte)(word~) printf_number_buffer::$19 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:14::printf_number_buffer:277 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [80] (signed byte) printf_number_buffer::padding#1 ← (signed byte)(byte) printf_number_buffer::format_min_length#3 - (signed byte) printf_number_buffer::len#2 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:14::printf_number_buffer:277 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [97] (byte*) strupr::str#0 ← (byte*) printf_number_buffer::buffer_digits#10 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:19 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] -Statement [99] (byte*) printf_str::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#1 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#1 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [115] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#3 [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:2 [ queens::row#10 queens::row#1 queens::row#2 ] -Removing always clobbered register reg byte y as potential for zp[1]:8 [ print::i1#2 print::i1#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:12 [ printf_number_buffer::format_justify_left#10 ] -Removing always clobbered register reg byte y as potential for zp[1]:13 [ printf_number_buffer::format_zero_padding#10 ] -Removing always clobbered register reg byte y as potential for zp[1]:17 [ printf_number_buffer::format_upper_case#10 ] -Removing always clobbered register reg byte y as potential for zp[1]:19 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:7 [ print::i#2 print::i#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:16 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:20 [ printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:21 [ printf_padding::pad#5 ] -Removing always clobbered register reg byte y as potential for zp[1]:22 [ printf_padding::i#2 printf_padding::i#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:9 [ print::j#2 print::j#1 ] -Statement [118] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:20 [ printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:21 [ printf_padding::pad#5 ] -Removing always clobbered register reg byte a as potential for zp[1]:22 [ printf_padding::i#2 printf_padding::i#1 ] -Statement [119] (byte) printf_cursor_x ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } ) always clobbers reg byte a -Statement [123] if((byte) printf_cursor_y!=(byte) $19) goto printf_scroll::@return [ printf_cursor_y printf_cursor_ptr ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [128] (byte*~) printf_scroll::$4 ← (byte*) printf_cursor_ptr - (byte) $28 [ printf_cursor_y printf_scroll::$4 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [129] (byte*) printf_cursor_ptr ← (byte*~) printf_scroll::$4 [ printf_cursor_y printf_cursor_ptr ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [133] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_cls:8::memset:308 [ printf_buffer memset::num#2 memset::str#3 memset::c#4 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:28 [ memset::c#4 ] -Statement [134] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_cls:8::memset:308 [ printf_buffer memset::str#3 memset::c#4 memset::end#0 ] { } ) always clobbers reg byte a -Statement [135] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_cls:8::memset:308 [ printf_buffer memset::c#4 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a -Statement [137] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_cls:8::memset:308 [ printf_buffer memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a -Statement [139] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_cls:8::memset:308 [ printf_buffer memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:28 [ memset::c#4 ] -Statement [143] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 [ memcpy::src#2 memcpy::dst#2 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121::memcpy:125 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121::memcpy:125 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121::memcpy:125 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164::memcpy:125 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164::memcpy:125 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [145] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) [ memcpy::src#2 memcpy::dst#2 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121::memcpy:125 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121::memcpy:125 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121::memcpy:125 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164::memcpy:125 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164::memcpy:125 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a reg byte y -Statement [150] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#10) [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] ( main:5::printf_str:10 [ printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { } main:5::printf_str:12 [ printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { } main:5::queens:16::print:31::printf_str:37 [ queens::row#10 count#13 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { } main:5::queens:16::print:31::printf_str:41 [ queens::row#10 count#13 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { } main:5::queens:16::print:31::printf_str:48 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { } main:5::queens:16::print:31::printf_str:56 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { } main:5::queens:16::print:31::printf_str:59 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a reg byte y -Statement [159] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x [ printf_cursor_y printf_ln::$0 ] ( main:5::printf_str:10::printf_ln:158 [ printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::printf_str:12::printf_ln:158 [ printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [160] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28 [ printf_cursor_y printf_ln::$1 ] ( main:5::printf_str:10::printf_ln:158 [ printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::printf_str:12::printf_ln:158 [ printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$1 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [161] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1 [ printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_ln:158 [ printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:12::printf_ln:158 [ printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [162] (byte) printf_cursor_x ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_ln:158 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:12::printf_ln:158 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [168] if((byte) 0!=*((byte*) strupr::src#2)) goto strupr::@2 [ strupr::src#2 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::strupr:98 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::strupr:98 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::strupr:98 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::strupr:98 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a reg byte y -Statement [170] (byte) toupper::ch#0 ← *((byte*) strupr::src#2) [ strupr::src#2 toupper::ch#0 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::strupr:98 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::strupr:98 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::strupr:98 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::printf_uint:14::printf_number_buffer:277::strupr:98 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a reg byte y -Statement [174] *((byte*) strupr::src#2) ← (byte~) strupr::$0 [ strupr::src#2 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::strupr:98 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::strupr:98 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::strupr:98 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::strupr:98 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte y -Statement [178] (byte) toupper::return#0 ← (byte) toupper::ch#0 + (byte) 'A'-(byte) 'a' [ toupper::return#0 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::strupr:98::toupper:171 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::strupr:98::toupper:171 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::strupr:98::toupper:171 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::printf_uint:14::printf_number_buffer:277::strupr:98::toupper:171 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a -Statement [183] if((byte) 0!=*((byte*) strlen::str#2)) goto strlen::@2 [ strlen::len#2 strlen::str#2 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::strlen:73 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::len#2 strlen::str#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::strlen:73 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::len#2 strlen::str#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::strlen:73 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::len#2 strlen::str#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:14::printf_number_buffer:277::strlen:73 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::len#2 strlen::str#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:11 [ printf_number_buffer::format_min_length#3 ] -Statement [190] *((byte*) uctoa::buffer#11) ← *((const byte*) DIGITS + (byte) uctoa::value#2) [ printf_buffer uctoa::buffer#11 ] ( main:5::queens:16::print:31::printf_uchar:50::uctoa:66 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::buffer#11 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } } main:5::queens:16::print:31::printf_uchar:61::uctoa:66 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::buffer#11 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } } ) always clobbers reg byte a reg byte y -Statement [191] (byte*) uctoa::buffer#3 ← ++ (byte*) uctoa::buffer#11 [ printf_buffer uctoa::buffer#3 ] ( main:5::queens:16::print:31::printf_uchar:50::uctoa:66 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::buffer#3 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } } main:5::queens:16::print:31::printf_uchar:61::uctoa:66 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::buffer#3 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } } ) always clobbers reg byte a -Statement [192] *((byte*) uctoa::buffer#3) ← (byte) 0 [ printf_buffer ] ( main:5::queens:16::print:31::printf_uchar:50::uctoa:66 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } } main:5::queens:16::print:31::printf_uchar:61::uctoa:66 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } } ) always clobbers reg byte a reg byte y -Statement [199] (byte*) uctoa_append::buffer#0 ← (byte*) uctoa::buffer#11 [ printf_buffer uctoa::digit#2 uctoa::value#2 uctoa::buffer#11 uctoa::digit_value#0 uctoa_append::buffer#0 ] ( main:5::queens:16::print:31::printf_uchar:50::uctoa:66 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::value#2 uctoa::buffer#11 uctoa::digit_value#0 uctoa_append::buffer#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } main:5::queens:16::print:31::printf_uchar:61::uctoa:66 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::value#2 uctoa::buffer#11 uctoa::digit_value#0 uctoa_append::buffer#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } ) always clobbers reg byte a +Statement [1] (byte) printf_cursor_x ← (byte) 0 [ TOD_ZERO printf_buffer ] ( [ TOD_ZERO printf_buffer ] { } ) always clobbers reg byte a +Statement [2] (byte) printf_cursor_y ← (byte) 0 [ TOD_ZERO printf_buffer ] ( [ TOD_ZERO printf_buffer ] { } ) always clobbers reg byte a +Statement [3] (byte*) printf_cursor_ptr ← (byte*) 1024 [ TOD_ZERO printf_buffer ] ( [ TOD_ZERO printf_buffer ] { } ) always clobbers reg byte a +Statement [48] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#11) [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] ( main:5::printf_str:10 [ TOD_ZERO printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::printf_str:12 [ TOD_ZERO printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::printf_str:38 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::printf_string:40::printf_str:44 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::queens:21::print:141::printf_str:147 [ queens::row#10 count#22 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::queens:21::print:141::printf_str:151 [ queens::row#10 count#22 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::queens:21::print:141::printf_str:158 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::queens:21::print:141::printf_str:166 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::queens:21::print:141::printf_str:169 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp[1]:16 [ queens::row#10 queens::row#1 queens::row#2 ] +Removing always clobbered register reg byte y as potential for zp[1]:16 [ queens::row#10 queens::row#1 queens::row#2 ] +Removing always clobbered register reg byte a as potential for zp[1]:22 [ print::i1#2 print::i1#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:22 [ print::i1#2 print::i1#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:23 [ print::j#2 print::j#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:23 [ print::j#2 print::j#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:26 [ printf_number_buffer::format_justify_left#10 ] +Removing always clobbered register reg byte y as potential for zp[1]:26 [ printf_number_buffer::format_justify_left#10 ] +Removing always clobbered register reg byte a as potential for zp[1]:27 [ printf_number_buffer::format_zero_padding#10 ] +Removing always clobbered register reg byte y as potential for zp[1]:27 [ printf_number_buffer::format_zero_padding#10 ] +Removing always clobbered register reg byte a as potential for zp[1]:33 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:33 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:21 [ print::i#2 print::i#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:21 [ print::i#2 print::i#1 ] +Statement [57] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x [ printf_cursor_y printf_ln::$0 ] ( main:5::printf_str:10::printf_ln:56 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::printf_str:12::printf_ln:56 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::printf_str:38::printf_ln:56 [ printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56 [ printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a +Statement [58] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28 [ printf_cursor_y printf_ln::$1 ] ( main:5::printf_str:10::printf_ln:56 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::printf_str:12::printf_ln:56 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::printf_str:38::printf_ln:56 [ printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56 [ printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$1 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a +Statement [59] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1 [ printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_ln:56 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:12::printf_ln:56 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:38::printf_ln:56 [ printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::printf_string:40::printf_str:44::printf_ln:56 [ printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a +Statement [60] (byte) printf_cursor_x ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_ln:56 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:12::printf_ln:56 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:38::printf_ln:56 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_string:40::printf_str:44::printf_ln:56 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a +Statement [64] if((byte) printf_cursor_y!=(byte) $19) goto printf_scroll::@return [ printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:31 [ printf_number_buffer::format_upper_case#10 ] +Removing always clobbered register reg byte a as potential for zp[1]:30 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:34 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:35 [ printf_padding::pad#7 ] +Removing always clobbered register reg byte a as potential for zp[1]:36 [ printf_padding::i#2 printf_padding::i#1 ] +Statement [69] (byte*~) printf_scroll::$4 ← (byte*) printf_cursor_ptr - (byte) $28 [ printf_cursor_y printf_scroll::$4 ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } ) always clobbers reg byte a +Statement [70] (byte*) printf_cursor_ptr ← (byte*~) printf_scroll::$4 [ printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } ) always clobbers reg byte a +Statement [74] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_cls:8::memset:366 [ TOD_ZERO printf_buffer memset::num#2 memset::str#3 memset::c#4 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:8 [ memset::c#4 ] +Statement [75] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_cls:8::memset:366 [ TOD_ZERO printf_buffer memset::str#3 memset::c#4 memset::end#0 ] { } ) always clobbers reg byte a +Statement [76] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_cls:8::memset:366 [ TOD_ZERO printf_buffer memset::c#4 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a +Statement [78] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_cls:8::memset:366 [ TOD_ZERO printf_buffer memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a +Statement [80] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_cls:8::memset:366 [ TOD_ZERO printf_buffer memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:8 [ memset::c#4 ] +Removing always clobbered register reg byte y as potential for zp[1]:31 [ printf_number_buffer::format_upper_case#10 ] +Removing always clobbered register reg byte y as potential for zp[1]:30 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:34 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:35 [ printf_padding::pad#7 ] +Removing always clobbered register reg byte y as potential for zp[1]:36 [ printf_padding::i#2 printf_padding::i#1 ] +Statement [84] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 [ memcpy::src#2 memcpy::dst#2 ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62::memcpy:66 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62::memcpy:66 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62::memcpy:66 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62::memcpy:66 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96::memcpy:66 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96::memcpy:66 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } ) always clobbers reg byte a +Statement [86] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) [ memcpy::src#2 memcpy::dst#2 ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62::memcpy:66 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62::memcpy:66 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62::memcpy:66 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62::memcpy:66 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96::memcpy:66 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96::memcpy:66 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } ) always clobbers reg byte a reg byte y +Statement [90] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#3 [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_char:54 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } ) always clobbers reg byte y +Statement [93] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_char:54 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } ) always clobbers reg byte a +Statement [94] (byte) printf_cursor_x ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_char:54 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } ) always clobbers reg byte a +Statement [98] (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#0 >> (byte) 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::tod_HOURS#0 tod_str::$0 ] ( main:5::tod_str:36 [ printf_cursor_x printf_cursor_y printf_cursor_ptr tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::tod_HOURS#0 tod_str::$0 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:93 [ tod_str::tod_TENTHS#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:94 [ tod_str::tod_SEC#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:95 [ tod_str::tod_MIN#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:96 [ tod_str::tod_HOURS#0 ] +Statement [101] (byte~) tod_str::$2 ← (byte) tod_str::tod_HOURS#0 & (byte) $f [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$2 ] ( main:5::tod_str:36 [ printf_cursor_x printf_cursor_y printf_cursor_ptr tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$2 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [104] (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#0 >> (byte) 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$4 ] ( main:5::tod_str:36 [ printf_cursor_x printf_cursor_y printf_cursor_ptr tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$4 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [107] (byte~) tod_str::$6 ← (byte) tod_str::tod_MIN#0 & (byte) $f [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$6 ] ( main:5::tod_str:36 [ printf_cursor_x printf_cursor_y printf_cursor_ptr tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$6 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [110] (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#0 >> (byte) 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$8 ] ( main:5::tod_str:36 [ printf_cursor_x printf_cursor_y printf_cursor_ptr tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$8 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [113] (byte~) tod_str::$10 ← (byte) tod_str::tod_SEC#0 & (byte) $f [ tod_str::tod_TENTHS#0 tod_str::$10 ] ( main:5::tod_str:36 [ printf_cursor_x printf_cursor_y printf_cursor_ptr tod_str::tod_TENTHS#0 tod_str::$10 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [116] (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#0 >> (byte) 4 [ tod_str::tod_TENTHS#0 tod_str::$12 ] ( main:5::tod_str:36 [ printf_cursor_x printf_cursor_y printf_cursor_ptr tod_str::tod_TENTHS#0 tod_str::$12 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [119] (byte~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#0 & (byte) $f [ tod_str::$14 ] ( main:5::tod_str:36 [ printf_cursor_x printf_cursor_y printf_cursor_ptr tod_str::$14 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [131] if(*((const byte*) board + (byte) queens::row#10)==(byte)(number) 8+(number) 1) goto queens::@3 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer ] ( main:5::queens:21 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer ] { } ) always clobbers reg byte a +Statement [142] *((const byte*) board + (byte) queens::row#10) ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer ] ( main:5::queens:21 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer ] { } ) always clobbers reg byte a +Statement [148] (dword) printf_ulong::uvalue#0 ← (dword) count#22 [ printf_cursor_x printf_cursor_y printf_cursor_ptr count#22 printf_ulong::uvalue#0 printf_buffer ] ( main:5::queens:21::print:141 [ queens::row#10 printf_cursor_x printf_cursor_y printf_cursor_ptr count#22 printf_ulong::uvalue#0 printf_buffer ] { { count#22 = printf_ulong::uvalue#0 } } ) always clobbers reg byte a +Statement [164] if(*((const byte*) board + (byte) print::i1#2)==(byte) print::j#2) goto print::@8 [ printf_cursor_x printf_cursor_y printf_cursor_ptr count#22 print::i1#2 print::j#2 printf_buffer ] ( main:5::queens:21::print:141 [ queens::row#10 printf_cursor_x printf_cursor_y printf_cursor_ptr count#22 print::i1#2 print::j#2 printf_buffer ] { } ) always clobbers reg byte a +Statement [174] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_uchar::uvalue#2 printf_buffer ] ( main:5::queens:21::print:141::printf_uchar:160 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_uchar::uvalue#2 printf_buffer ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } } main:5::queens:21::print:141::printf_uchar:171 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_uchar::uvalue#2 printf_buffer ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:24 [ printf_uchar::uvalue#2 printf_uchar::uvalue#1 printf_uchar::uvalue#0 ] +Statement [182] (byte*) strlen::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:14::printf_number_buffer:335 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:25 [ printf_number_buffer::format_min_length#3 ] +Statement [184] (word) strlen::return#2 ← (word) strlen::len#2 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:14::printf_number_buffer:335 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a +Statement [185] (word~) printf_number_buffer::$19 ← (word) strlen::return#2 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:14::printf_number_buffer:335 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [186] (signed byte) printf_number_buffer::len#0 ← (signed byte)(word~) printf_number_buffer::$19 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:14::printf_number_buffer:335 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [190] (signed byte) printf_number_buffer::padding#1 ← (signed byte)(byte) printf_number_buffer::format_min_length#3 - (signed byte) printf_number_buffer::len#2 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:14::printf_number_buffer:335 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [207] (byte*) strupr::str#0 ← (byte*) printf_number_buffer::buffer_digits#10 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a +Statement [209] (byte*) printf_str::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a +Statement [226] if((byte) 0!=*((byte*) strupr::src#2)) goto strupr::@2 [ strupr::src#2 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::strupr:208 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::strupr:208 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::strupr:208 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::strupr:208 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a reg byte y +Statement [228] (byte) toupper::ch#0 ← *((byte*) strupr::src#2) [ strupr::src#2 toupper::ch#0 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::strupr:208 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::strupr:208 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::strupr:208 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::printf_uint:14::printf_number_buffer:335::strupr:208 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a reg byte y +Statement [232] *((byte*) strupr::src#2) ← (byte~) strupr::$0 [ strupr::src#2 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::strupr:208 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::strupr:208 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::strupr:208 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::strupr:208 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte y +Statement [236] (byte) toupper::return#0 ← (byte) toupper::ch#0 + (byte) 'A'-(byte) 'a' [ toupper::return#0 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::strupr:208::toupper:229 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::strupr:208::toupper:229 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::strupr:208::toupper:229 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::printf_uint:14::printf_number_buffer:335::strupr:208::toupper:229 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a +Statement [241] if((byte) 0!=*((byte*) strlen::str#3)) goto strlen::@2 [ strlen::len#2 strlen::str#3 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::strlen:183 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::len#2 strlen::str#3 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::strlen:183 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::len#2 strlen::str#3 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::strlen:183 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::len#2 strlen::str#3 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:14::printf_number_buffer:335::strlen:183 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:25 [ printf_number_buffer::format_min_length#3 ] +Statement [248] *((byte*) uctoa::buffer#11) ← *((const byte*) DIGITS + (byte) uctoa::value#2) [ printf_buffer uctoa::buffer#11 ] ( main:5::queens:21::print:141::printf_uchar:160::uctoa:176 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::buffer#11 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } } main:5::queens:21::print:141::printf_uchar:171::uctoa:176 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::buffer#11 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } } ) always clobbers reg byte a reg byte y +Statement [249] (byte*) uctoa::buffer#3 ← ++ (byte*) uctoa::buffer#11 [ printf_buffer uctoa::buffer#3 ] ( main:5::queens:21::print:141::printf_uchar:160::uctoa:176 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::buffer#3 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } } main:5::queens:21::print:141::printf_uchar:171::uctoa:176 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::buffer#3 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } } ) always clobbers reg byte a +Statement [250] *((byte*) uctoa::buffer#3) ← (byte) 0 [ printf_buffer ] ( main:5::queens:21::print:141::printf_uchar:160::uctoa:176 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } } main:5::queens:21::print:141::printf_uchar:171::uctoa:176 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } } ) always clobbers reg byte a reg byte y +Statement [257] (byte*) uctoa_append::buffer#0 ← (byte*) uctoa::buffer#11 [ printf_buffer uctoa::digit#2 uctoa::value#2 uctoa::buffer#11 uctoa::digit_value#0 uctoa_append::buffer#0 ] ( main:5::queens:21::print:141::printf_uchar:160::uctoa:176 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::value#2 uctoa::buffer#11 uctoa::digit_value#0 uctoa_append::buffer#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } main:5::queens:21::print:141::printf_uchar:171::uctoa:176 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::value#2 uctoa::buffer#11 uctoa::digit_value#0 uctoa_append::buffer#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:44 [ uctoa::digit#2 uctoa::digit#1 ] Removing always clobbered register reg byte a as potential for zp[1]:45 [ uctoa::value#2 uctoa::value#6 uctoa::value#1 uctoa::value#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:107 [ uctoa::digit_value#0 ] -Statement [209] *((byte*) uctoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) uctoa_append::digit#2) [ uctoa_append::value#2 ] ( main:5::queens:16::print:31::printf_uchar:50::uctoa:66::uctoa_append:202 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::buffer#11 uctoa_append::value#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } main:5::queens:16::print:31::printf_uchar:61::uctoa:66::uctoa_append:202 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::buffer#11 uctoa_append::value#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp[1]:142 [ uctoa::digit_value#0 ] +Statement [267] *((byte*) uctoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) uctoa_append::digit#2) [ uctoa_append::value#2 ] ( main:5::queens:21::print:141::printf_uchar:160::uctoa:176::uctoa_append:260 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::buffer#11 uctoa_append::value#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } main:5::queens:21::print:141::printf_uchar:171::uctoa:176::uctoa_append:260 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::buffer#11 uctoa_append::value#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:44 [ uctoa::digit#2 uctoa::digit#1 ] Removing always clobbered register reg byte a as potential for zp[1]:49 [ uctoa_append::value#2 uctoa_append::value#0 uctoa_append::value#1 ] Removing always clobbered register reg byte y as potential for zp[1]:49 [ uctoa_append::value#2 uctoa_append::value#0 uctoa_append::value#1 ] -Statement [212] (byte) uctoa_append::value#1 ← (byte) uctoa_append::value#2 - (byte) uctoa_append::sub#0 [ uctoa_append::buffer#0 uctoa_append::sub#0 uctoa_append::value#1 uctoa_append::digit#1 ] ( main:5::queens:16::print:31::printf_uchar:50::uctoa:66::uctoa_append:202 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::buffer#11 uctoa_append::buffer#0 uctoa_append::sub#0 uctoa_append::value#1 uctoa_append::digit#1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } main:5::queens:16::print:31::printf_uchar:61::uctoa:66::uctoa_append:202 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::buffer#11 uctoa_append::buffer#0 uctoa_append::sub#0 uctoa_append::value#1 uctoa_append::digit#1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:110 [ uctoa_append::sub#0 ] +Statement [270] (byte) uctoa_append::value#1 ← (byte) uctoa_append::value#2 - (byte) uctoa_append::sub#0 [ uctoa_append::buffer#0 uctoa_append::sub#0 uctoa_append::value#1 uctoa_append::digit#1 ] ( main:5::queens:21::print:141::printf_uchar:160::uctoa:176::uctoa_append:260 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::buffer#11 uctoa_append::buffer#0 uctoa_append::sub#0 uctoa_append::value#1 uctoa_append::digit#1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } main:5::queens:21::print:141::printf_uchar:171::uctoa:176::uctoa_append:260 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::buffer#11 uctoa_append::buffer#0 uctoa_append::sub#0 uctoa_append::value#1 uctoa_append::digit#1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:145 [ uctoa_append::sub#0 ] Removing always clobbered register reg byte a as potential for zp[1]:50 [ uctoa_append::digit#2 uctoa_append::digit#1 ] -Statement [214] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_ulong::uvalue#0 printf_buffer ] ( main:5::queens:16::print:31::printf_ulong:39 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_ulong::uvalue#0 printf_buffer ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a -Statement [215] (dword) ultoa::value#1 ← (dword) printf_ulong::uvalue#0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::value#1 ] ( main:5::queens:16::print:31::printf_ulong:39 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::value#1 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a -Statement [223] (byte~) ultoa::$11 ← (byte)(dword) ultoa::value#2 [ printf_buffer ultoa::buffer#11 ultoa::$11 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::buffer#11 ultoa::$11 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a -Statement [224] *((byte*) ultoa::buffer#11) ← *((const byte*) DIGITS + (byte~) ultoa::$11) [ printf_buffer ultoa::buffer#11 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::buffer#11 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a reg byte y -Statement [225] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 [ printf_buffer ultoa::buffer#3 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::buffer#3 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a -Statement [226] *((byte*) ultoa::buffer#3) ← (byte) 0 [ printf_buffer ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a reg byte y -Statement [228] (byte~) ultoa::$10 ← (byte) ultoa::digit#2 << (byte) 2 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$10 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$10 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a +Statement [272] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_ulong::uvalue#0 printf_buffer ] ( main:5::queens:21::print:141::printf_ulong:149 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_ulong::uvalue#0 printf_buffer ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a +Statement [273] (dword) ultoa::value#1 ← (dword) printf_ulong::uvalue#0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::value#1 ] ( main:5::queens:21::print:141::printf_ulong:149 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::value#1 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a +Statement [281] (byte~) ultoa::$11 ← (byte)(dword) ultoa::value#2 [ printf_buffer ultoa::buffer#11 ultoa::$11 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::buffer#11 ultoa::$11 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a +Statement [282] *((byte*) ultoa::buffer#11) ← *((const byte*) DIGITS + (byte~) ultoa::$11) [ printf_buffer ultoa::buffer#11 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::buffer#11 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a reg byte y +Statement [283] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 [ printf_buffer ultoa::buffer#3 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::buffer#3 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a +Statement [284] *((byte*) ultoa::buffer#3) ← (byte) 0 [ printf_buffer ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a reg byte y +Statement [286] (byte~) ultoa::$10 ← (byte) ultoa::digit#2 << (byte) 2 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$10 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$10 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:51 [ ultoa::digit#2 ultoa::digit#1 ] Removing always clobbered register reg byte a as potential for zp[1]:56 [ ultoa::started#2 ultoa::started#4 ] -Statement [229] (dword) ultoa::digit_value#0 ← *((const dword*) RADIX_DECIMAL_VALUES_LONG + (byte~) ultoa::$10) [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a -Statement [231] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a -Statement [234] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [235] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [236] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [238] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [239] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a -Statement [243] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216::ultoa_append:237 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [287] (dword) ultoa::digit_value#0 ← *((const dword*) RADIX_DECIMAL_VALUES_LONG + (byte~) ultoa::$10) [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a +Statement [289] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a +Statement [292] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [293] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [294] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [296] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [297] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a +Statement [301] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274::ultoa_append:295 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:63 [ ultoa_append::digit#2 ultoa_append::digit#1 ] -Statement [244] *((byte*) ultoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) ultoa_append::digit#2) [ ultoa_append::value#2 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216::ultoa_append:237 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::value#2 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Statement [302] *((byte*) ultoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) ultoa_append::digit#2) [ ultoa_append::value#2 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274::ultoa_append:295 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::value#2 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:51 [ ultoa::digit#2 ultoa::digit#1 ] -Statement [247] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216::ultoa_append:237 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [254] if(*((const byte*) board + (byte) legal::i#2)==(byte) legal::column#0) goto legal::@return [ legal::row#0 legal::column#0 legal::i#2 ] ( main:5::queens:16::legal:24 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer legal::row#0 legal::column#0 legal::i#2 ] { { legal::row#0 = queens::row#10 } { legal::return#0 = legal::return#4 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:82 [ legal::row#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:83 [ legal::column#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:64 [ legal::i#2 legal::i#1 ] -Statement [269] (byte) diff::return#3 ← (byte) diff::a#2 - (byte) diff::b#2 [ diff::return#3 ] ( main:5::queens:16::legal:24::diff:257 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer legal::row#0 legal::column#0 legal::i#2 diff::return#3 ] { { legal::row#0 = queens::row#10 } { legal::return#0 = legal::return#4 } { diff::a#0 = diff::a#2 } { diff::b#0 = diff::b#2 legal::column#0 } { diff::return#0 = diff::return#4 } } main:5::queens:16::legal:24::diff:262 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer legal::row#0 legal::column#0 legal::i#2 legal::$3 diff::return#3 ] { { legal::return#0 = legal::return#4 } { diff::a#1 = diff::a#2 legal::i#2 } { diff::b#1 = diff::b#2 legal::row#0 queens::row#10 } { diff::return#1 = diff::return#4 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:132 [ legal::$3 ] -Statement [272] (byte) diff::return#2 ← (byte) diff::b#2 - (byte) diff::a#2 [ diff::return#2 ] ( main:5::queens:16::legal:24::diff:257 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer legal::row#0 legal::column#0 legal::i#2 diff::return#2 ] { { legal::row#0 = queens::row#10 } { legal::return#0 = legal::return#4 } { diff::a#0 = diff::a#2 } { diff::b#0 = diff::b#2 legal::column#0 } { diff::return#0 = diff::return#4 } } main:5::queens:16::legal:24::diff:262 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer legal::row#0 legal::column#0 legal::i#2 legal::$3 diff::return#2 ] { { legal::return#0 = legal::return#4 } { diff::a#1 = diff::a#2 legal::i#2 } { diff::b#1 = diff::b#2 legal::row#0 queens::row#10 } { diff::return#1 = diff::return#4 } } ) always clobbers reg byte a -Statement [274] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] ( main:5::printf_uint:14 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { } ) always clobbers reg byte a -Statement [282] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 [ printf_buffer utoa::buffer#11 utoa::$11 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::buffer#11 utoa::$11 ] { } ) always clobbers reg byte a -Statement [283] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) [ printf_buffer utoa::buffer#11 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::buffer#11 ] { } ) always clobbers reg byte a reg byte y -Statement [284] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 [ printf_buffer utoa::buffer#3 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::buffer#3 ] { } ) always clobbers reg byte a -Statement [285] *((byte*) utoa::buffer#3) ← (byte) 0 [ printf_buffer ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { } ) always clobbers reg byte a reg byte y -Statement [287] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:69 [ utoa::digit#2 utoa::digit#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:72 [ utoa::started#2 utoa::started#4 ] -Statement [288] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { } ) always clobbers reg byte a -Statement [290] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { } ) always clobbers reg byte a -Statement [293] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [294] (word) utoa_append::value#0 ← (word) utoa::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [295] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [297] (word) utoa_append::return#0 ← (word) utoa_append::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [298] (word) utoa::value#0 ← (word) utoa_append::return#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] { } ) always clobbers reg byte a -Statement [302] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:5::printf_uint:14::utoa:275::utoa_append:296 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:77 [ utoa_append::digit#2 utoa_append::digit#1 ] -Statement [303] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) [ utoa_append::value#2 ] ( main:5::printf_uint:14::utoa:275::utoa_append:296 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:69 [ utoa::digit#2 utoa::digit#1 ] -Statement [306] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:5::printf_uint:14::utoa:275::utoa_append:296 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [309] (byte*) printf_cursor_ptr ← (byte*) 1024 [ printf_cursor_ptr ] ( main:5::printf_cls:8 [ printf_buffer printf_cursor_ptr ] { } ) always clobbers reg byte a -Statement [310] (byte) printf_cursor_x ← (byte) 0 [ printf_cursor_x printf_cursor_ptr ] ( main:5::printf_cls:8 [ printf_buffer printf_cursor_x printf_cursor_ptr ] { } ) always clobbers reg byte a -Statement [311] (byte) printf_cursor_y ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::printf_cls:8 [ printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } ) always clobbers reg byte a -Statement [1] (byte) printf_cursor_x ← (byte) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [2] (byte) printf_cursor_y ← (byte) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [3] (byte*) printf_cursor_ptr ← (byte*) 1024 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [21] if(*((const byte*) board + (byte) queens::row#10)==(byte)(number) 8+(number) 1) goto queens::@3 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer ] ( main:5::queens:16 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer ] { } ) always clobbers reg byte a -Statement [32] *((const byte*) board + (byte) queens::row#10) ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer ] ( main:5::queens:16 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer ] { } ) always clobbers reg byte a -Statement [38] (dword) printf_ulong::uvalue#0 ← (dword) count#13 [ printf_cursor_x printf_cursor_y printf_cursor_ptr count#13 printf_ulong::uvalue#0 printf_buffer ] ( main:5::queens:16::print:31 [ queens::row#10 printf_cursor_x printf_cursor_y printf_cursor_ptr count#13 printf_ulong::uvalue#0 printf_buffer ] { { count#13 = printf_ulong::uvalue#0 } } ) always clobbers reg byte a -Statement [54] if(*((const byte*) board + (byte) print::i1#2)==(byte) print::j#2) goto print::@8 [ printf_cursor_x printf_cursor_y printf_cursor_ptr count#13 print::i1#2 print::j#2 printf_buffer ] ( main:5::queens:16::print:31 [ queens::row#10 printf_cursor_x printf_cursor_y printf_cursor_ptr count#13 print::i1#2 print::j#2 printf_buffer ] { } ) always clobbers reg byte a -Statement [64] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_uchar::uvalue#2 printf_buffer ] ( main:5::queens:16::print:31::printf_uchar:50 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_uchar::uvalue#2 printf_buffer ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } } main:5::queens:16::print:31::printf_uchar:61 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_uchar::uvalue#2 printf_buffer ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } } ) always clobbers reg byte a -Statement [72] (byte*) strlen::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:14::printf_number_buffer:277 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a -Statement [74] (word) strlen::return#2 ← (word) strlen::len#2 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:14::printf_number_buffer:277 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a -Statement [75] (word~) printf_number_buffer::$19 ← (word) strlen::return#2 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:14::printf_number_buffer:277 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [76] (signed byte) printf_number_buffer::len#0 ← (signed byte)(word~) printf_number_buffer::$19 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:14::printf_number_buffer:277 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [80] (signed byte) printf_number_buffer::padding#1 ← (signed byte)(byte) printf_number_buffer::format_min_length#3 - (signed byte) printf_number_buffer::len#2 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:14::printf_number_buffer:277 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [97] (byte*) strupr::str#0 ← (byte*) printf_number_buffer::buffer_digits#10 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [99] (byte*) printf_str::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#1 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#1 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [115] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#3 [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } ) always clobbers reg byte y -Statement [118] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } ) always clobbers reg byte a -Statement [119] (byte) printf_cursor_x ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } ) always clobbers reg byte a -Statement [123] if((byte) printf_cursor_y!=(byte) $19) goto printf_scroll::@return [ printf_cursor_y printf_cursor_ptr ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [128] (byte*~) printf_scroll::$4 ← (byte*) printf_cursor_ptr - (byte) $28 [ printf_cursor_y printf_scroll::$4 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [129] (byte*) printf_cursor_ptr ← (byte*~) printf_scroll::$4 [ printf_cursor_y printf_cursor_ptr ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [133] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_cls:8::memset:308 [ printf_buffer memset::num#2 memset::str#3 memset::c#4 ] { } ) always clobbers reg byte a -Statement [134] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_cls:8::memset:308 [ printf_buffer memset::str#3 memset::c#4 memset::end#0 ] { } ) always clobbers reg byte a -Statement [135] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_cls:8::memset:308 [ printf_buffer memset::c#4 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a -Statement [137] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_cls:8::memset:308 [ printf_buffer memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a -Statement [139] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121::memset:127 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164::memset:127 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_cls:8::memset:308 [ printf_buffer memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a reg byte y -Statement [143] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 [ memcpy::src#2 memcpy::dst#2 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121::memcpy:125 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121::memcpy:125 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121::memcpy:125 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164::memcpy:125 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164::memcpy:125 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [145] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) [ memcpy::src#2 memcpy::dst#2 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_char:91::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_char:91::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_char:91::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_char:91::printf_scroll:121::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:88::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:88::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:88::printf_char:112::printf_scroll:121::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:95::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:95::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:95::printf_char:112::printf_scroll:121::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_padding:105::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_padding:105::printf_char:112::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_uint:14::printf_number_buffer:277::printf_padding:105::printf_char:112::printf_scroll:121::memcpy:125 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#5 } } main:5::printf_str:10::printf_char:156::printf_scroll:121::memcpy:125 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:156::printf_scroll:121::memcpy:125 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:37::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:41::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:48::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:56::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_str:59::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_char:156::printf_scroll:121::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_char:156::printf_scroll:121::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:10::printf_ln:158::printf_scroll:164::memcpy:125 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::printf_str:12::printf_ln:158::printf_scroll:164::memcpy:125 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158::printf_scroll:164::memcpy:125 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158::printf_scroll:164::memcpy:125 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a reg byte y -Statement [150] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#10) [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] ( main:5::printf_str:10 [ printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { } main:5::printf_str:12 [ printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { } main:5::queens:16::print:31::printf_str:37 [ queens::row#10 count#13 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { } main:5::queens:16::print:31::printf_str:41 [ queens::row#10 count#13 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { } main:5::queens:16::print:31::printf_str:48 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { } main:5::queens:16::print:31::printf_str:56 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { } main:5::queens:16::print:31::printf_str:59 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#10 printf_str::ch#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a reg byte y -Statement [159] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x [ printf_cursor_y printf_ln::$0 ] ( main:5::printf_str:10::printf_ln:158 [ printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::printf_str:12::printf_ln:158 [ printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [160] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28 [ printf_cursor_y printf_ln::$1 ] ( main:5::printf_str:10::printf_ln:158 [ printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::printf_str:12::printf_ln:158 [ printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$1 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [161] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1 [ printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_ln:158 [ printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:12::printf_ln:158 [ printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [162] (byte) printf_cursor_x ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_ln:158 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:12::printf_ln:158 [ printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:37::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:41::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:48::printf_ln:158 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:56::printf_ln:158 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_str:59::printf_ln:158 [ queens::row#10 count#13 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::printf_str:100::printf_ln:158 [ queens::row#10 count#13 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::printf_str:100::printf_ln:158 [ queens::row#10 count#13 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::printf_str:100::printf_ln:158 [ queens::row#10 count#13 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::printf_str:100::printf_ln:158 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#11 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a -Statement [168] if((byte) 0!=*((byte*) strupr::src#2)) goto strupr::@2 [ strupr::src#2 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::strupr:98 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::strupr:98 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::strupr:98 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::strupr:98 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a reg byte y -Statement [170] (byte) toupper::ch#0 ← *((byte*) strupr::src#2) [ strupr::src#2 toupper::ch#0 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::strupr:98 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::strupr:98 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::strupr:98 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::printf_uint:14::printf_number_buffer:277::strupr:98 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a reg byte y -Statement [174] *((byte*) strupr::src#2) ← (byte~) strupr::$0 [ strupr::src#2 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::strupr:98 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::strupr:98 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::strupr:98 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:277::strupr:98 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte y -Statement [178] (byte) toupper::return#0 ← (byte) toupper::ch#0 + (byte) 'A'-(byte) 'a' [ toupper::return#0 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::strupr:98::toupper:171 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::strupr:98::toupper:171 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::strupr:98::toupper:171 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::printf_uint:14::printf_number_buffer:277::strupr:98::toupper:171 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a -Statement [183] if((byte) 0!=*((byte*) strlen::str#2)) goto strlen::@2 [ strlen::len#2 strlen::str#2 ] ( main:5::queens:16::print:31::printf_uchar:50::printf_number_buffer:68::strlen:73 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::len#2 strlen::str#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:16::print:31::printf_uchar:61::printf_number_buffer:68::strlen:73 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::len#2 strlen::str#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:16::print:31::printf_ulong:39::printf_number_buffer:218::strlen:73 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::len#2 strlen::str#2 ] { { count#13 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:14::printf_number_buffer:277::strlen:73 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::len#2 strlen::str#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a reg byte y -Statement [190] *((byte*) uctoa::buffer#11) ← *((const byte*) DIGITS + (byte) uctoa::value#2) [ printf_buffer uctoa::buffer#11 ] ( main:5::queens:16::print:31::printf_uchar:50::uctoa:66 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::buffer#11 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } } main:5::queens:16::print:31::printf_uchar:61::uctoa:66 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::buffer#11 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } } ) always clobbers reg byte a reg byte y -Statement [191] (byte*) uctoa::buffer#3 ← ++ (byte*) uctoa::buffer#11 [ printf_buffer uctoa::buffer#3 ] ( main:5::queens:16::print:31::printf_uchar:50::uctoa:66 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::buffer#3 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } } main:5::queens:16::print:31::printf_uchar:61::uctoa:66 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::buffer#3 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } } ) always clobbers reg byte a -Statement [192] *((byte*) uctoa::buffer#3) ← (byte) 0 [ printf_buffer ] ( main:5::queens:16::print:31::printf_uchar:50::uctoa:66 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } } main:5::queens:16::print:31::printf_uchar:61::uctoa:66 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } } ) always clobbers reg byte a reg byte y -Statement [199] (byte*) uctoa_append::buffer#0 ← (byte*) uctoa::buffer#11 [ printf_buffer uctoa::digit#2 uctoa::value#2 uctoa::buffer#11 uctoa::digit_value#0 uctoa_append::buffer#0 ] ( main:5::queens:16::print:31::printf_uchar:50::uctoa:66 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::value#2 uctoa::buffer#11 uctoa::digit_value#0 uctoa_append::buffer#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } main:5::queens:16::print:31::printf_uchar:61::uctoa:66 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::value#2 uctoa::buffer#11 uctoa::digit_value#0 uctoa_append::buffer#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } ) always clobbers reg byte a -Statement [209] *((byte*) uctoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) uctoa_append::digit#2) [ uctoa_append::value#2 ] ( main:5::queens:16::print:31::printf_uchar:50::uctoa:66::uctoa_append:202 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::buffer#11 uctoa_append::value#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } main:5::queens:16::print:31::printf_uchar:61::uctoa:66::uctoa_append:202 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::buffer#11 uctoa_append::value#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } ) always clobbers reg byte a reg byte y -Statement [212] (byte) uctoa_append::value#1 ← (byte) uctoa_append::value#2 - (byte) uctoa_append::sub#0 [ uctoa_append::buffer#0 uctoa_append::sub#0 uctoa_append::value#1 uctoa_append::digit#1 ] ( main:5::queens:16::print:31::printf_uchar:50::uctoa:66::uctoa_append:202 [ queens::row#10 count#13 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::buffer#11 uctoa_append::buffer#0 uctoa_append::sub#0 uctoa_append::value#1 uctoa_append::digit#1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } main:5::queens:16::print:31::printf_uchar:61::uctoa:66::uctoa_append:202 [ queens::row#10 count#13 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::buffer#11 uctoa_append::buffer#0 uctoa_append::sub#0 uctoa_append::value#1 uctoa_append::digit#1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } ) always clobbers reg byte a -Statement [214] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_ulong::uvalue#0 printf_buffer ] ( main:5::queens:16::print:31::printf_ulong:39 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_ulong::uvalue#0 printf_buffer ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a -Statement [215] (dword) ultoa::value#1 ← (dword) printf_ulong::uvalue#0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::value#1 ] ( main:5::queens:16::print:31::printf_ulong:39 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::value#1 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a -Statement [223] (byte~) ultoa::$11 ← (byte)(dword) ultoa::value#2 [ printf_buffer ultoa::buffer#11 ultoa::$11 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::buffer#11 ultoa::$11 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a -Statement [224] *((byte*) ultoa::buffer#11) ← *((const byte*) DIGITS + (byte~) ultoa::$11) [ printf_buffer ultoa::buffer#11 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::buffer#11 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a reg byte y -Statement [225] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 [ printf_buffer ultoa::buffer#3 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::buffer#3 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a -Statement [226] *((byte*) ultoa::buffer#3) ← (byte) 0 [ printf_buffer ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a reg byte y -Statement [228] (byte~) ultoa::$10 ← (byte) ultoa::digit#2 << (byte) 2 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$10 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$10 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a -Statement [229] (dword) ultoa::digit_value#0 ← *((const dword*) RADIX_DECIMAL_VALUES_LONG + (byte~) ultoa::$10) [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a -Statement [231] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a -Statement [234] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [235] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [236] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [238] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [239] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a -Statement [243] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216::ultoa_append:237 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [244] *((byte*) ultoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) ultoa_append::digit#2) [ ultoa_append::value#2 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216::ultoa_append:237 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::value#2 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a reg byte y -Statement [247] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ( main:5::queens:16::print:31::printf_ulong:39::ultoa:216::ultoa_append:237 [ queens::row#10 count#13 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] { { count#13 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [254] if(*((const byte*) board + (byte) legal::i#2)==(byte) legal::column#0) goto legal::@return [ legal::row#0 legal::column#0 legal::i#2 ] ( main:5::queens:16::legal:24 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer legal::row#0 legal::column#0 legal::i#2 ] { { legal::row#0 = queens::row#10 } { legal::return#0 = legal::return#4 } } ) always clobbers reg byte a -Statement [269] (byte) diff::return#3 ← (byte) diff::a#2 - (byte) diff::b#2 [ diff::return#3 ] ( main:5::queens:16::legal:24::diff:257 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer legal::row#0 legal::column#0 legal::i#2 diff::return#3 ] { { legal::row#0 = queens::row#10 } { legal::return#0 = legal::return#4 } { diff::a#0 = diff::a#2 } { diff::b#0 = diff::b#2 legal::column#0 } { diff::return#0 = diff::return#4 } } main:5::queens:16::legal:24::diff:262 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer legal::row#0 legal::column#0 legal::i#2 legal::$3 diff::return#3 ] { { legal::return#0 = legal::return#4 } { diff::a#1 = diff::a#2 legal::i#2 } { diff::b#1 = diff::b#2 legal::row#0 queens::row#10 } { diff::return#1 = diff::return#4 } } ) always clobbers reg byte a -Statement [272] (byte) diff::return#2 ← (byte) diff::b#2 - (byte) diff::a#2 [ diff::return#2 ] ( main:5::queens:16::legal:24::diff:257 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer legal::row#0 legal::column#0 legal::i#2 diff::return#2 ] { { legal::row#0 = queens::row#10 } { legal::return#0 = legal::return#4 } { diff::a#0 = diff::a#2 } { diff::b#0 = diff::b#2 legal::column#0 } { diff::return#0 = diff::return#4 } } main:5::queens:16::legal:24::diff:262 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#11 printf_buffer legal::row#0 legal::column#0 legal::i#2 legal::$3 diff::return#2 ] { { legal::return#0 = legal::return#4 } { diff::a#1 = diff::a#2 legal::i#2 } { diff::b#1 = diff::b#2 legal::row#0 queens::row#10 } { diff::return#1 = diff::return#4 } } ) always clobbers reg byte a -Statement [274] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] ( main:5::printf_uint:14 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { } ) always clobbers reg byte a -Statement [282] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 [ printf_buffer utoa::buffer#11 utoa::$11 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::buffer#11 utoa::$11 ] { } ) always clobbers reg byte a -Statement [283] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) [ printf_buffer utoa::buffer#11 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::buffer#11 ] { } ) always clobbers reg byte a reg byte y -Statement [284] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 [ printf_buffer utoa::buffer#3 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::buffer#3 ] { } ) always clobbers reg byte a -Statement [285] *((byte*) utoa::buffer#3) ← (byte) 0 [ printf_buffer ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { } ) always clobbers reg byte a reg byte y -Statement [287] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] { } ) always clobbers reg byte a -Statement [288] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { } ) always clobbers reg byte a -Statement [290] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { } ) always clobbers reg byte a -Statement [293] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [294] (word) utoa_append::value#0 ← (word) utoa::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [295] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [297] (word) utoa_append::return#0 ← (word) utoa_append::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [298] (word) utoa::value#0 ← (word) utoa_append::return#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] ( main:5::printf_uint:14::utoa:275 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] { } ) always clobbers reg byte a -Statement [302] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:5::printf_uint:14::utoa:275::utoa_append:296 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [303] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) [ utoa_append::value#2 ] ( main:5::printf_uint:14::utoa:275::utoa_append:296 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y -Statement [306] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:5::printf_uint:14::utoa:275::utoa_append:296 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [309] (byte*) printf_cursor_ptr ← (byte*) 1024 [ printf_cursor_ptr ] ( main:5::printf_cls:8 [ printf_buffer printf_cursor_ptr ] { } ) always clobbers reg byte a -Statement [310] (byte) printf_cursor_x ← (byte) 0 [ printf_cursor_x printf_cursor_ptr ] ( main:5::printf_cls:8 [ printf_buffer printf_cursor_x printf_cursor_ptr ] { } ) always clobbers reg byte a -Statement [311] (byte) printf_cursor_y ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::printf_cls:8 [ printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } ) always clobbers reg byte a -Potential registers zp[1]:2 [ queens::row#10 queens::row#1 queens::row#2 ] : zp[1]:2 , reg byte x , -Potential registers zp[4]:3 [ count#11 count#13 ] : zp[4]:3 , -Potential registers zp[1]:7 [ print::i#2 print::i#1 ] : zp[1]:7 , reg byte x , -Potential registers zp[1]:8 [ print::i1#2 print::i1#1 ] : zp[1]:8 , reg byte x , -Potential registers zp[1]:9 [ print::j#2 print::j#1 ] : zp[1]:9 , reg byte x , -Potential registers zp[1]:10 [ printf_uchar::uvalue#2 printf_uchar::uvalue#1 printf_uchar::uvalue#0 ] : zp[1]:10 , reg byte x , reg byte y , -Potential registers zp[1]:11 [ printf_number_buffer::format_min_length#3 ] : zp[1]:11 , reg byte x , -Potential registers zp[1]:12 [ printf_number_buffer::format_justify_left#10 ] : zp[1]:12 , reg byte x , -Potential registers zp[1]:13 [ printf_number_buffer::format_zero_padding#10 ] : zp[1]:13 , reg byte x , -Potential registers zp[2]:14 [ printf_number_buffer::buffer_digits#10 ] : zp[2]:14 , -Potential registers zp[1]:16 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] : zp[1]:16 , reg byte x , -Potential registers zp[1]:17 [ printf_number_buffer::format_upper_case#10 ] : zp[1]:17 , reg byte x , -Potential registers zp[1]:18 [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] : zp[1]:18 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:19 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] : zp[1]:19 , reg byte x , -Potential registers zp[1]:20 [ printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] : zp[1]:20 , reg byte x , -Potential registers zp[1]:21 [ printf_padding::pad#5 ] : zp[1]:21 , reg byte x , -Potential registers zp[1]:22 [ printf_padding::i#2 printf_padding::i#1 ] : zp[1]:22 , reg byte x , -Potential registers zp[1]:23 [ printf_char::ch#3 printf_char::ch#2 printf_char::ch#0 printf_char::ch#1 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:24 [ memset::num#2 ] : zp[2]:24 , -Potential registers zp[2]:26 [ memset::str#3 ] : zp[2]:26 , -Potential registers zp[1]:28 [ memset::c#4 ] : zp[1]:28 , reg byte x , -Potential registers zp[2]:29 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:29 , -Potential registers zp[2]:31 [ memcpy::src#2 memcpy::src#1 ] : zp[2]:31 , -Potential registers zp[2]:33 [ memcpy::dst#2 memcpy::dst#1 ] : zp[2]:33 , -Potential registers zp[2]:35 [ printf_str::str#10 printf_str::str#11 printf_str::str#1 printf_str::str#0 ] : zp[2]:35 , +Statement [305] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274::ultoa_append:295 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [312] if(*((const byte*) board + (byte) legal::i#10)==(byte) legal::column#0) goto legal::@return [ legal::row#0 legal::column#0 legal::i#10 ] ( main:5::queens:21::legal:134 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer legal::row#0 legal::column#0 legal::i#10 ] { { legal::row#0 = queens::row#10 } { legal::return#0 = legal::return#4 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:126 [ legal::row#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:127 [ legal::column#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:64 [ legal::i#10 legal::i#1 ] +Statement [315] (byte) legal::diff1_return#1 ← (byte) legal::diff1_a#0 - (byte) legal::column#0 [ legal::row#0 legal::column#0 legal::i#10 legal::diff1_return#1 ] ( main:5::queens:21::legal:134 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer legal::row#0 legal::column#0 legal::i#10 legal::diff1_return#1 ] { { legal::row#0 = queens::row#10 } { legal::return#0 = legal::return#4 } } ) always clobbers reg byte a +Statement [318] (byte) legal::diff2_return#1 ← (byte) legal::i#10 - (byte) legal::row#0 [ legal::row#0 legal::column#0 legal::i#10 legal::diff1_return#2 legal::diff2_return#1 ] ( main:5::queens:21::legal:134 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer legal::row#0 legal::column#0 legal::i#10 legal::diff1_return#2 legal::diff2_return#1 ] { { legal::row#0 = queens::row#10 } { legal::return#0 = legal::return#4 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:66 [ legal::diff1_return#2 legal::diff1_return#0 legal::diff1_return#1 ] +Statement [322] (byte) legal::diff2_return#0 ← (byte) legal::row#0 - (byte) legal::i#10 [ legal::row#0 legal::column#0 legal::i#10 legal::diff1_return#2 legal::diff2_return#0 ] ( main:5::queens:21::legal:134 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer legal::row#0 legal::column#0 legal::i#10 legal::diff1_return#2 legal::diff2_return#0 ] { { legal::row#0 = queens::row#10 } { legal::return#0 = legal::return#4 } } ) always clobbers reg byte a +Statement [323] (byte) legal::diff1_return#0 ← (byte) legal::column#0 - (byte) legal::diff1_a#0 [ legal::row#0 legal::column#0 legal::i#10 legal::diff1_return#0 ] ( main:5::queens:21::legal:134 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer legal::row#0 legal::column#0 legal::i#10 legal::diff1_return#0 ] { { legal::row#0 = queens::row#10 } { legal::return#0 = legal::return#4 } } ) always clobbers reg byte a +Statement [324] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (byte) $80 [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] ( main:5::tod_init:19 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:81 [ tod_init::tod_TENTHS#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:82 [ tod_init::tod_SEC#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:83 [ tod_init::tod_MIN#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:84 [ tod_init::tod_HOURS#0 ] +Statement [325] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (byte) $7f [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] ( main:5::tod_init:19 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] { } ) always clobbers reg byte a +Statement [332] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] ( main:5::printf_uint:14 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { } ) always clobbers reg byte a +Statement [340] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 [ printf_buffer utoa::buffer#11 utoa::$11 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::buffer#11 utoa::$11 ] { } ) always clobbers reg byte a +Statement [341] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) [ printf_buffer utoa::buffer#11 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::buffer#11 ] { } ) always clobbers reg byte a reg byte y +Statement [342] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 [ printf_buffer utoa::buffer#3 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::buffer#3 ] { } ) always clobbers reg byte a +Statement [343] *((byte*) utoa::buffer#3) ← (byte) 0 [ printf_buffer ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { } ) always clobbers reg byte a reg byte y +Statement [345] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:68 [ utoa::digit#2 utoa::digit#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:71 [ utoa::started#2 utoa::started#4 ] +Statement [346] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { } ) always clobbers reg byte a +Statement [348] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { } ) always clobbers reg byte a +Statement [351] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [352] (word) utoa_append::value#0 ← (word) utoa::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [353] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [355] (word) utoa_append::return#0 ← (word) utoa_append::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [356] (word) utoa::value#0 ← (word) utoa_append::return#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] { } ) always clobbers reg byte a +Statement [360] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:5::printf_uint:14::utoa:333::utoa_append:354 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:76 [ utoa_append::digit#2 utoa_append::digit#1 ] +Statement [361] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) [ utoa_append::value#2 ] ( main:5::printf_uint:14::utoa:333::utoa_append:354 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:68 [ utoa::digit#2 utoa::digit#1 ] +Statement [364] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:5::printf_uint:14::utoa:333::utoa_append:354 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [367] (byte*) printf_cursor_ptr ← (byte*) 1024 [ printf_cursor_ptr ] ( main:5::printf_cls:8 [ TOD_ZERO printf_buffer printf_cursor_ptr ] { } ) always clobbers reg byte a +Statement [368] (byte) printf_cursor_x ← (byte) 0 [ printf_cursor_x printf_cursor_ptr ] ( main:5::printf_cls:8 [ TOD_ZERO printf_buffer printf_cursor_x printf_cursor_ptr ] { } ) always clobbers reg byte a +Statement [369] (byte) printf_cursor_y ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::printf_cls:8 [ TOD_ZERO printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } ) always clobbers reg byte a +Statement [1] (byte) printf_cursor_x ← (byte) 0 [ TOD_ZERO printf_buffer ] ( [ TOD_ZERO printf_buffer ] { } ) always clobbers reg byte a +Statement [2] (byte) printf_cursor_y ← (byte) 0 [ TOD_ZERO printf_buffer ] ( [ TOD_ZERO printf_buffer ] { } ) always clobbers reg byte a +Statement [3] (byte*) printf_cursor_ptr ← (byte*) 1024 [ TOD_ZERO printf_buffer ] ( [ TOD_ZERO printf_buffer ] { } ) always clobbers reg byte a +Statement [48] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#11) [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] ( main:5::printf_str:10 [ TOD_ZERO printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::printf_str:12 [ TOD_ZERO printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::printf_str:38 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::printf_string:40::printf_str:44 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::queens:21::print:141::printf_str:147 [ queens::row#10 count#22 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::queens:21::print:141::printf_str:151 [ queens::row#10 count#22 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::queens:21::print:141::printf_str:158 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::queens:21::print:141::printf_str:166 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::queens:21::print:141::printf_str:169 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#11 printf_str::ch#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a reg byte y +Statement [57] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x [ printf_cursor_y printf_ln::$0 ] ( main:5::printf_str:10::printf_ln:56 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::printf_str:12::printf_ln:56 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::printf_str:38::printf_ln:56 [ printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56 [ printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$0 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a +Statement [58] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28 [ printf_cursor_y printf_ln::$1 ] ( main:5::printf_str:10::printf_ln:56 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::printf_str:12::printf_ln:56 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::printf_str:38::printf_ln:56 [ printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56 [ printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_ln::$1 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$1 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_ln::$1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a +Statement [59] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1 [ printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_ln:56 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:12::printf_ln:56 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:38::printf_ln:56 [ printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::printf_string:40::printf_str:44::printf_ln:56 [ printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a +Statement [60] (byte) printf_cursor_x ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_ln:56 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:12::printf_ln:56 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:38::printf_ln:56 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_string:40::printf_str:44::printf_ln:56 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a +Statement [64] if((byte) printf_cursor_y!=(byte) $19) goto printf_scroll::@return [ printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } ) always clobbers reg byte a +Statement [69] (byte*~) printf_scroll::$4 ← (byte*) printf_cursor_ptr - (byte) $28 [ printf_cursor_y printf_scroll::$4 ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_scroll::$4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } ) always clobbers reg byte a +Statement [70] (byte*) printf_cursor_ptr ← (byte*~) printf_scroll::$4 [ printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } ) always clobbers reg byte a +Statement [74] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::num#2 memset::str#3 memset::c#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_cls:8::memset:366 [ TOD_ZERO printf_buffer memset::num#2 memset::str#3 memset::c#4 ] { } ) always clobbers reg byte a +Statement [75] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_cls:8::memset:366 [ TOD_ZERO printf_buffer memset::str#3 memset::c#4 memset::end#0 ] { } ) always clobbers reg byte a +Statement [76] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_cls:8::memset:366 [ TOD_ZERO printf_buffer memset::c#4 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a +Statement [78] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_cls:8::memset:366 [ TOD_ZERO printf_buffer memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a +Statement [80] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96::memset:68 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96::memset:68 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memset::c#4 memset::end#0 memset::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_cls:8::memset:366 [ TOD_ZERO printf_buffer memset::c#4 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a reg byte y +Statement [84] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 [ memcpy::src#2 memcpy::dst#2 ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62::memcpy:66 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62::memcpy:66 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62::memcpy:66 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62::memcpy:66 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96::memcpy:66 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96::memcpy:66 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } ) always clobbers reg byte a +Statement [86] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2) [ memcpy::src#2 memcpy::dst#2 ] ( main:5::printf_str:10::printf_ln:56::printf_scroll:62::memcpy:66 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::printf_str:12::printf_ln:56::printf_scroll:62::memcpy:66 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::printf_str:38::printf_ln:56::printf_scroll:62::memcpy:66 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::printf_string:40::printf_str:44::printf_ln:56::printf_scroll:62::memcpy:66 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:147::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:151::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:158::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:166::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_str:169::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_ln:56::printf_scroll:62::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_ln:56::printf_scroll:62::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_str:10::printf_char:54::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54::printf_scroll:96::memcpy:66 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54::printf_scroll:96::memcpy:66 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222::printf_scroll:96::memcpy:66 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222::printf_scroll:96::memcpy:66 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } ) always clobbers reg byte a reg byte y +Statement [90] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#3 [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_char:54 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } ) always clobbers reg byte y +Statement [93] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_char:54 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } ) always clobbers reg byte a +Statement [94] (byte) printf_cursor_x ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::printf_str:10::printf_char:54 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:12::printf_char:54 [ TOD_ZERO printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_str:38::printf_char:54 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_string:40::printf_str:44::printf_char:54 [ printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:147::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:151::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:158::printf_char:54 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:166::printf_char:54 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_str:169::printf_char:54 [ queens::row#10 count#22 print::i1#2 print::j#2 printf_buffer printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_str:210::printf_char:54 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_str:210::printf_char:54 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_str:210::printf_char:54 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_str:210::printf_char:54 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 printf_str::str#0 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } { printf_char::ch#1 = printf_char::ch#3 printf_str::ch#0 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_char:201 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_char:201 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_char:201 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:5::printf_uint:14::printf_number_buffer:335::printf_char:201 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_char::ch#2 = printf_char::ch#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:198::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:198::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:198::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:198::printf_char:222 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:205::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:205::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:205::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:205::printf_char:222 [ TOD_ZERO printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::printf_padding:215::printf_char:222 [ queens::row#10 count#22 print::i1#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::printf_padding:215::printf_char:222 [ queens::row#10 count#22 print::i#2 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::printf_padding:215::printf_char:222 [ queens::row#10 count#22 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } main:5::printf_uint:14::printf_number_buffer:335::printf_padding:215::printf_char:222 [ TOD_ZERO printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_char::ch#0 = printf_char::ch#3 printf_padding::pad#7 } } ) always clobbers reg byte a +Statement [98] (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#0 >> (byte) 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::tod_HOURS#0 tod_str::$0 ] ( main:5::tod_str:36 [ printf_cursor_x printf_cursor_y printf_cursor_ptr tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::tod_HOURS#0 tod_str::$0 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [101] (byte~) tod_str::$2 ← (byte) tod_str::tod_HOURS#0 & (byte) $f [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$2 ] ( main:5::tod_str:36 [ printf_cursor_x printf_cursor_y printf_cursor_ptr tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$2 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [104] (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#0 >> (byte) 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$4 ] ( main:5::tod_str:36 [ printf_cursor_x printf_cursor_y printf_cursor_ptr tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$4 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [107] (byte~) tod_str::$6 ← (byte) tod_str::tod_MIN#0 & (byte) $f [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$6 ] ( main:5::tod_str:36 [ printf_cursor_x printf_cursor_y printf_cursor_ptr tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$6 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [110] (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#0 >> (byte) 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$8 ] ( main:5::tod_str:36 [ printf_cursor_x printf_cursor_y printf_cursor_ptr tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$8 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [113] (byte~) tod_str::$10 ← (byte) tod_str::tod_SEC#0 & (byte) $f [ tod_str::tod_TENTHS#0 tod_str::$10 ] ( main:5::tod_str:36 [ printf_cursor_x printf_cursor_y printf_cursor_ptr tod_str::tod_TENTHS#0 tod_str::$10 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [116] (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#0 >> (byte) 4 [ tod_str::tod_TENTHS#0 tod_str::$12 ] ( main:5::tod_str:36 [ printf_cursor_x printf_cursor_y printf_cursor_ptr tod_str::tod_TENTHS#0 tod_str::$12 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [119] (byte~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#0 & (byte) $f [ tod_str::$14 ] ( main:5::tod_str:36 [ printf_cursor_x printf_cursor_y printf_cursor_ptr tod_str::$14 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [131] if(*((const byte*) board + (byte) queens::row#10)==(byte)(number) 8+(number) 1) goto queens::@3 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer ] ( main:5::queens:21 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer ] { } ) always clobbers reg byte a +Statement [142] *((const byte*) board + (byte) queens::row#10) ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer ] ( main:5::queens:21 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer ] { } ) always clobbers reg byte a +Statement [148] (dword) printf_ulong::uvalue#0 ← (dword) count#22 [ printf_cursor_x printf_cursor_y printf_cursor_ptr count#22 printf_ulong::uvalue#0 printf_buffer ] ( main:5::queens:21::print:141 [ queens::row#10 printf_cursor_x printf_cursor_y printf_cursor_ptr count#22 printf_ulong::uvalue#0 printf_buffer ] { { count#22 = printf_ulong::uvalue#0 } } ) always clobbers reg byte a +Statement [164] if(*((const byte*) board + (byte) print::i1#2)==(byte) print::j#2) goto print::@8 [ printf_cursor_x printf_cursor_y printf_cursor_ptr count#22 print::i1#2 print::j#2 printf_buffer ] ( main:5::queens:21::print:141 [ queens::row#10 printf_cursor_x printf_cursor_y printf_cursor_ptr count#22 print::i1#2 print::j#2 printf_buffer ] { } ) always clobbers reg byte a +Statement [174] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_uchar::uvalue#2 printf_buffer ] ( main:5::queens:21::print:141::printf_uchar:160 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_uchar::uvalue#2 printf_buffer ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } } main:5::queens:21::print:141::printf_uchar:171 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_uchar::uvalue#2 printf_buffer ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } } ) always clobbers reg byte a +Statement [182] (byte*) strlen::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:14::printf_number_buffer:335 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::str#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a +Statement [184] (word) strlen::return#2 ← (word) strlen::len#2 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:14::printf_number_buffer:335 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a +Statement [185] (word~) printf_number_buffer::$19 ← (word) strlen::return#2 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:14::printf_number_buffer:335 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [186] (signed byte) printf_number_buffer::len#0 ← (signed byte)(word~) printf_number_buffer::$19 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:14::printf_number_buffer:335 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [190] (signed byte) printf_number_buffer::padding#1 ← (signed byte)(byte) printf_number_buffer::format_min_length#3 - (signed byte) printf_number_buffer::len#2 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:14::printf_number_buffer:335 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [207] (byte*) strupr::str#0 ← (byte*) printf_number_buffer::buffer_digits#10 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::str#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a +Statement [209] (byte*) printf_str::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_str::str#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::str#1 = printf_str::str#13 printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a +Statement [226] if((byte) 0!=*((byte*) strupr::src#2)) goto strupr::@2 [ strupr::src#2 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::strupr:208 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::strupr:208 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::strupr:208 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::strupr:208 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte a reg byte y +Statement [228] (byte) toupper::ch#0 ← *((byte*) strupr::src#2) [ strupr::src#2 toupper::ch#0 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::strupr:208 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::strupr:208 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::strupr:208 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::printf_uint:14::printf_number_buffer:335::strupr:208 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a reg byte y +Statement [232] *((byte*) strupr::src#2) ← (byte~) strupr::$0 [ strupr::src#2 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::strupr:208 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::strupr:208 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::strupr:208 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } main:5::printf_uint:14::printf_number_buffer:335::strupr:208 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } } ) always clobbers reg byte y +Statement [236] (byte) toupper::return#0 ← (byte) toupper::ch#0 + (byte) 'A'-(byte) 'a' [ toupper::return#0 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::strupr:208::toupper:229 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::strupr:208::toupper:229 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::strupr:208::toupper:229 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } main:5::printf_uint:14::printf_number_buffer:335::strupr:208::toupper:229 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strupr::str#0 = printf_number_buffer::buffer_digits#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a +Statement [241] if((byte) 0!=*((byte*) strlen::str#3)) goto strlen::@2 [ strlen::len#2 strlen::str#3 ] ( main:5::queens:21::print:141::printf_uchar:160::printf_number_buffer:178::strlen:183 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::len#2 strlen::str#3 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:21::print:141::printf_uchar:171::printf_number_buffer:178::strlen:183 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::len#2 strlen::str#3 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::queens:21::print:141::printf_ulong:149::printf_number_buffer:276::strlen:183 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::len#2 strlen::str#3 ] { { count#22 = printf_ulong::uvalue#0 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:14::printf_number_buffer:335::strlen:183 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_digits#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::format_upper_case#10 strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::str#1 = printf_number_buffer::buffer_digits#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a reg byte y +Statement [248] *((byte*) uctoa::buffer#11) ← *((const byte*) DIGITS + (byte) uctoa::value#2) [ printf_buffer uctoa::buffer#11 ] ( main:5::queens:21::print:141::printf_uchar:160::uctoa:176 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::buffer#11 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } } main:5::queens:21::print:141::printf_uchar:171::uctoa:176 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::buffer#11 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } } ) always clobbers reg byte a reg byte y +Statement [249] (byte*) uctoa::buffer#3 ← ++ (byte*) uctoa::buffer#11 [ printf_buffer uctoa::buffer#3 ] ( main:5::queens:21::print:141::printf_uchar:160::uctoa:176 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::buffer#3 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } } main:5::queens:21::print:141::printf_uchar:171::uctoa:176 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::buffer#3 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } } ) always clobbers reg byte a +Statement [250] *((byte*) uctoa::buffer#3) ← (byte) 0 [ printf_buffer ] ( main:5::queens:21::print:141::printf_uchar:160::uctoa:176 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } } main:5::queens:21::print:141::printf_uchar:171::uctoa:176 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } } ) always clobbers reg byte a reg byte y +Statement [257] (byte*) uctoa_append::buffer#0 ← (byte*) uctoa::buffer#11 [ printf_buffer uctoa::digit#2 uctoa::value#2 uctoa::buffer#11 uctoa::digit_value#0 uctoa_append::buffer#0 ] ( main:5::queens:21::print:141::printf_uchar:160::uctoa:176 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::value#2 uctoa::buffer#11 uctoa::digit_value#0 uctoa_append::buffer#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } main:5::queens:21::print:141::printf_uchar:171::uctoa:176 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::value#2 uctoa::buffer#11 uctoa::digit_value#0 uctoa_append::buffer#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } ) always clobbers reg byte a +Statement [267] *((byte*) uctoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) uctoa_append::digit#2) [ uctoa_append::value#2 ] ( main:5::queens:21::print:141::printf_uchar:160::uctoa:176::uctoa_append:260 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::buffer#11 uctoa_append::value#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } main:5::queens:21::print:141::printf_uchar:171::uctoa:176::uctoa_append:260 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::buffer#11 uctoa_append::value#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Statement [270] (byte) uctoa_append::value#1 ← (byte) uctoa_append::value#2 - (byte) uctoa_append::sub#0 [ uctoa_append::buffer#0 uctoa_append::sub#0 uctoa_append::value#1 uctoa_append::digit#1 ] ( main:5::queens:21::print:141::printf_uchar:160::uctoa:176::uctoa_append:260 [ queens::row#10 count#22 print::i1#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::buffer#11 uctoa_append::buffer#0 uctoa_append::sub#0 uctoa_append::value#1 uctoa_append::digit#1 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } main:5::queens:21::print:141::printf_uchar:171::uctoa:176::uctoa_append:260 [ queens::row#10 count#22 print::i#2 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer uctoa::digit#2 uctoa::buffer#11 uctoa_append::buffer#0 uctoa_append::sub#0 uctoa_append::value#1 uctoa_append::digit#1 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 uctoa::value#1 } { uctoa_append::buffer#0 = uctoa::buffer#11 } { uctoa_append::value#0 = uctoa::value#2 } { uctoa_append::sub#0 = uctoa::digit_value#0 } { uctoa_append::return#0 = uctoa_append::value#2 } } ) always clobbers reg byte a +Statement [272] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_ulong::uvalue#0 printf_buffer ] ( main:5::queens:21::print:141::printf_ulong:149 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_ulong::uvalue#0 printf_buffer ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a +Statement [273] (dword) ultoa::value#1 ← (dword) printf_ulong::uvalue#0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::value#1 ] ( main:5::queens:21::print:141::printf_ulong:149 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::value#1 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a +Statement [281] (byte~) ultoa::$11 ← (byte)(dword) ultoa::value#2 [ printf_buffer ultoa::buffer#11 ultoa::$11 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::buffer#11 ultoa::$11 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a +Statement [282] *((byte*) ultoa::buffer#11) ← *((const byte*) DIGITS + (byte~) ultoa::$11) [ printf_buffer ultoa::buffer#11 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::buffer#11 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a reg byte y +Statement [283] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 [ printf_buffer ultoa::buffer#3 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::buffer#3 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a +Statement [284] *((byte*) ultoa::buffer#3) ← (byte) 0 [ printf_buffer ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a reg byte y +Statement [286] (byte~) ultoa::$10 ← (byte) ultoa::digit#2 << (byte) 2 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$10 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$10 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a +Statement [287] (dword) ultoa::digit_value#0 ← *((const dword*) RADIX_DECIMAL_VALUES_LONG + (byte~) ultoa::$10) [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a +Statement [289] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a +Statement [292] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [293] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [294] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [296] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [297] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } } ) always clobbers reg byte a +Statement [301] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274::ultoa_append:295 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [302] *((byte*) ultoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) ultoa_append::digit#2) [ ultoa_append::value#2 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274::ultoa_append:295 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::value#2 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Statement [305] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ( main:5::queens:21::print:141::printf_ulong:149::ultoa:274::ultoa_append:295 [ queens::row#10 count#22 printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] { { count#22 = printf_ulong::uvalue#0 ultoa::value#1 } { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [312] if(*((const byte*) board + (byte) legal::i#10)==(byte) legal::column#0) goto legal::@return [ legal::row#0 legal::column#0 legal::i#10 ] ( main:5::queens:21::legal:134 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer legal::row#0 legal::column#0 legal::i#10 ] { { legal::row#0 = queens::row#10 } { legal::return#0 = legal::return#4 } } ) always clobbers reg byte a +Statement [315] (byte) legal::diff1_return#1 ← (byte) legal::diff1_a#0 - (byte) legal::column#0 [ legal::row#0 legal::column#0 legal::i#10 legal::diff1_return#1 ] ( main:5::queens:21::legal:134 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer legal::row#0 legal::column#0 legal::i#10 legal::diff1_return#1 ] { { legal::row#0 = queens::row#10 } { legal::return#0 = legal::return#4 } } ) always clobbers reg byte a +Statement [318] (byte) legal::diff2_return#1 ← (byte) legal::i#10 - (byte) legal::row#0 [ legal::row#0 legal::column#0 legal::i#10 legal::diff1_return#2 legal::diff2_return#1 ] ( main:5::queens:21::legal:134 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer legal::row#0 legal::column#0 legal::i#10 legal::diff1_return#2 legal::diff2_return#1 ] { { legal::row#0 = queens::row#10 } { legal::return#0 = legal::return#4 } } ) always clobbers reg byte a +Statement [322] (byte) legal::diff2_return#0 ← (byte) legal::row#0 - (byte) legal::i#10 [ legal::row#0 legal::column#0 legal::i#10 legal::diff1_return#2 legal::diff2_return#0 ] ( main:5::queens:21::legal:134 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer legal::row#0 legal::column#0 legal::i#10 legal::diff1_return#2 legal::diff2_return#0 ] { { legal::row#0 = queens::row#10 } { legal::return#0 = legal::return#4 } } ) always clobbers reg byte a +Statement [323] (byte) legal::diff1_return#0 ← (byte) legal::column#0 - (byte) legal::diff1_a#0 [ legal::row#0 legal::column#0 legal::i#10 legal::diff1_return#0 ] ( main:5::queens:21::legal:134 [ printf_cursor_x printf_cursor_y printf_cursor_ptr queens::row#10 count#14 printf_buffer legal::row#0 legal::column#0 legal::i#10 legal::diff1_return#0 ] { { legal::row#0 = queens::row#10 } { legal::return#0 = legal::return#4 } } ) always clobbers reg byte a +Statement [324] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (byte) $80 [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] ( main:5::tod_init:19 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] { } ) always clobbers reg byte a +Statement [325] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (byte) $7f [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] ( main:5::tod_init:19 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] { } ) always clobbers reg byte a +Statement [332] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] ( main:5::printf_uint:14 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { } ) always clobbers reg byte a +Statement [340] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 [ printf_buffer utoa::buffer#11 utoa::$11 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::buffer#11 utoa::$11 ] { } ) always clobbers reg byte a +Statement [341] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) [ printf_buffer utoa::buffer#11 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::buffer#11 ] { } ) always clobbers reg byte a reg byte y +Statement [342] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 [ printf_buffer utoa::buffer#3 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::buffer#3 ] { } ) always clobbers reg byte a +Statement [343] *((byte*) utoa::buffer#3) ← (byte) 0 [ printf_buffer ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer ] { } ) always clobbers reg byte a reg byte y +Statement [345] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::$10 ] { } ) always clobbers reg byte a +Statement [346] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { } ) always clobbers reg byte a +Statement [348] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::value#2 utoa::started#2 utoa::buffer#11 utoa::digit_value#0 ] { } ) always clobbers reg byte a +Statement [351] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 [ printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::value#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [352] (word) utoa_append::value#0 ← (word) utoa::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [353] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [355] (word) utoa_append::return#0 ← (word) utoa_append::value#2 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [356] (word) utoa::value#0 ← (word) utoa_append::return#0 [ printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] ( main:5::printf_uint:14::utoa:333 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa::value#0 ] { } ) always clobbers reg byte a +Statement [360] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:5::printf_uint:14::utoa:333::utoa_append:354 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [361] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) [ utoa_append::value#2 ] ( main:5::printf_uint:14::utoa:333::utoa_append:354 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Statement [364] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:5::printf_uint:14::utoa:333::utoa_append:354 [ TOD_ZERO printf_cursor_x printf_cursor_y printf_cursor_ptr printf_buffer utoa::digit#2 utoa::buffer#11 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#11 } { utoa_append::value#0 = utoa::value#2 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [367] (byte*) printf_cursor_ptr ← (byte*) 1024 [ printf_cursor_ptr ] ( main:5::printf_cls:8 [ TOD_ZERO printf_buffer printf_cursor_ptr ] { } ) always clobbers reg byte a +Statement [368] (byte) printf_cursor_x ← (byte) 0 [ printf_cursor_x printf_cursor_ptr ] ( main:5::printf_cls:8 [ TOD_ZERO printf_buffer printf_cursor_x printf_cursor_ptr ] { } ) always clobbers reg byte a +Statement [369] (byte) printf_cursor_y ← (byte) 0 [ printf_cursor_x printf_cursor_y printf_cursor_ptr ] ( main:5::printf_cls:8 [ TOD_ZERO printf_buffer printf_cursor_x printf_cursor_y printf_cursor_ptr ] { } ) always clobbers reg byte a +Potential registers zp[2]:2 [ printf_str::str#11 printf_str::str#13 printf_str::str#1 printf_str::str#0 ] : zp[2]:2 , +Potential registers zp[2]:4 [ memset::num#2 ] : zp[2]:4 , +Potential registers zp[2]:6 [ memset::str#3 ] : zp[2]:6 , +Potential registers zp[1]:8 [ memset::c#4 ] : zp[1]:8 , reg byte x , +Potential registers zp[2]:9 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:9 , +Potential registers zp[2]:11 [ memcpy::src#2 memcpy::src#1 ] : zp[2]:11 , +Potential registers zp[2]:13 [ memcpy::dst#2 memcpy::dst#1 ] : zp[2]:13 , +Potential registers zp[1]:15 [ printf_char::ch#3 printf_char::ch#2 printf_char::ch#0 printf_char::ch#1 ] : zp[1]:15 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:16 [ queens::row#10 queens::row#1 queens::row#2 ] : zp[1]:16 , reg byte x , +Potential registers zp[4]:17 [ count#14 count#22 ] : zp[4]:17 , +Potential registers zp[1]:21 [ print::i#2 print::i#1 ] : zp[1]:21 , reg byte x , +Potential registers zp[1]:22 [ print::i1#2 print::i1#1 ] : zp[1]:22 , reg byte x , +Potential registers zp[1]:23 [ print::j#2 print::j#1 ] : zp[1]:23 , reg byte x , +Potential registers zp[1]:24 [ printf_uchar::uvalue#2 printf_uchar::uvalue#1 printf_uchar::uvalue#0 ] : zp[1]:24 , reg byte x , reg byte y , +Potential registers zp[1]:25 [ printf_number_buffer::format_min_length#3 ] : zp[1]:25 , reg byte x , +Potential registers zp[1]:26 [ printf_number_buffer::format_justify_left#10 ] : zp[1]:26 , reg byte x , +Potential registers zp[1]:27 [ printf_number_buffer::format_zero_padding#10 ] : zp[1]:27 , reg byte x , +Potential registers zp[2]:28 [ printf_number_buffer::buffer_digits#10 ] : zp[2]:28 , +Potential registers zp[1]:30 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] : zp[1]:30 , reg byte x , +Potential registers zp[1]:31 [ printf_number_buffer::format_upper_case#10 ] : zp[1]:31 , reg byte x , +Potential registers zp[1]:32 [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:33 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] : zp[1]:33 , reg byte x , +Potential registers zp[1]:34 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] : zp[1]:34 , reg byte x , +Potential registers zp[1]:35 [ printf_padding::pad#7 ] : zp[1]:35 , reg byte x , +Potential registers zp[1]:36 [ printf_padding::i#2 printf_padding::i#1 ] : zp[1]:36 , reg byte x , Potential registers zp[2]:37 [ strupr::src#2 strupr::str#0 strupr::src#1 ] : zp[2]:37 , Potential registers zp[1]:39 [ toupper::return#2 toupper::return#0 toupper::ch#0 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:40 [ strlen::str#2 strlen::str#1 strlen::str#0 ] : zp[2]:40 , +Potential registers zp[2]:40 [ strlen::str#3 strlen::str#1 strlen::str#0 ] : zp[2]:40 , Potential registers zp[2]:42 [ strlen::len#2 strlen::len#1 ] : zp[2]:42 , Potential registers zp[1]:44 [ uctoa::digit#2 uctoa::digit#1 ] : zp[1]:44 , reg byte x , Potential registers zp[1]:45 [ uctoa::value#2 uctoa::value#6 uctoa::value#1 uctoa::value#0 ] : zp[1]:45 , reg byte x , reg byte y , @@ -8710,240 +10178,349 @@ Potential registers zp[1]:56 [ ultoa::started#2 ultoa::started#4 ] : zp[1]:56 , Potential registers zp[2]:57 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] : zp[2]:57 , Potential registers zp[4]:59 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] : zp[4]:59 , Potential registers zp[1]:63 [ ultoa_append::digit#2 ultoa_append::digit#1 ] : zp[1]:63 , reg byte x , reg byte y , -Potential registers zp[1]:64 [ legal::i#2 legal::i#1 ] : zp[1]:64 , reg byte x , reg byte y , +Potential registers zp[1]:64 [ legal::i#10 legal::i#1 ] : zp[1]:64 , reg byte x , reg byte y , Potential registers zp[1]:65 [ legal::return#4 ] : zp[1]:65 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:66 [ diff::a#2 diff::a#0 diff::a#1 ] : zp[1]:66 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:67 [ diff::b#2 diff::b#0 diff::b#1 ] : zp[1]:67 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:68 [ diff::return#4 diff::return#2 diff::return#3 ] : zp[1]:68 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:69 [ utoa::digit#2 utoa::digit#1 ] : zp[1]:69 , reg byte x , -Potential registers zp[2]:70 [ utoa::value#2 utoa::value#6 utoa::value#0 ] : zp[2]:70 , -Potential registers zp[1]:72 [ utoa::started#2 utoa::started#4 ] : zp[1]:72 , reg byte x , reg byte y , -Potential registers zp[2]:73 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] : zp[2]:73 , -Potential registers zp[2]:75 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] : zp[2]:75 , -Potential registers zp[1]:77 [ utoa_append::digit#2 utoa_append::digit#1 ] : zp[1]:77 , reg byte x , reg byte y , -Potential registers zp[1]:78 [ printf_cursor_x ] : zp[1]:78 , -Potential registers zp[1]:79 [ printf_cursor_y ] : zp[1]:79 , -Potential registers zp[2]:80 [ printf_cursor_ptr ] : zp[2]:80 , -Potential registers zp[1]:82 [ legal::row#0 ] : zp[1]:82 , reg byte x , reg byte y , -Potential registers zp[1]:83 [ legal::column#0 ] : zp[1]:83 , reg byte x , reg byte y , -Potential registers zp[1]:84 [ legal::return#0 ] : zp[1]:84 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:85 [ queens::$2 ] : zp[1]:85 , reg byte a , reg byte x , reg byte y , -Potential registers zp[4]:86 [ printf_ulong::uvalue#0 ] : zp[4]:86 , -Potential registers zp[2]:90 [ strlen::return#2 ] : zp[2]:90 , -Potential registers zp[2]:92 [ printf_number_buffer::$19 ] : zp[2]:92 , -Potential registers zp[2]:94 [ printf_scroll::$4 ] : zp[2]:94 , -Potential registers zp[2]:96 [ memset::end#0 ] : zp[2]:96 , -Potential registers zp[1]:98 [ printf_str::ch#0 ] : zp[1]:98 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:99 [ printf_ln::$0 ] : zp[2]:99 , -Potential registers zp[2]:101 [ printf_ln::$1 ] : zp[2]:101 , -Potential registers zp[1]:103 [ toupper::return#3 ] : zp[1]:103 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:104 [ strupr::$0 ] : zp[1]:104 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:105 [ uctoa::buffer#3 ] : zp[2]:105 , -Potential registers zp[1]:107 [ uctoa::digit_value#0 ] : zp[1]:107 , reg byte x , reg byte y , -Potential registers zp[2]:108 [ uctoa_append::buffer#0 ] : zp[2]:108 , -Potential registers zp[1]:110 [ uctoa_append::sub#0 ] : zp[1]:110 , reg byte x , reg byte y , -Potential registers zp[1]:111 [ uctoa_append::return#0 ] : zp[1]:111 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:112 [ ultoa::$11 ] : zp[1]:112 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:113 [ ultoa::buffer#3 ] : zp[2]:113 , -Potential registers zp[1]:115 [ ultoa::$10 ] : zp[1]:115 , reg byte a , reg byte x , reg byte y , -Potential registers zp[4]:116 [ ultoa::digit_value#0 ] : zp[4]:116 , -Potential registers zp[2]:120 [ ultoa_append::buffer#0 ] : zp[2]:120 , -Potential registers zp[4]:122 [ ultoa_append::sub#0 ] : zp[4]:122 , -Potential registers zp[4]:126 [ ultoa_append::return#0 ] : zp[4]:126 , -Potential registers zp[1]:130 [ legal::$0 ] : zp[1]:130 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:131 [ diff::return#0 ] : zp[1]:131 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:132 [ legal::$3 ] : zp[1]:132 , reg byte x , reg byte y , -Potential registers zp[1]:133 [ diff::return#1 ] : zp[1]:133 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:134 [ legal::$4 ] : zp[1]:134 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:135 [ utoa::$11 ] : zp[1]:135 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:136 [ utoa::buffer#3 ] : zp[2]:136 , -Potential registers zp[1]:138 [ utoa::$10 ] : zp[1]:138 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:139 [ utoa::digit_value#0 ] : zp[2]:139 , -Potential registers zp[2]:141 [ utoa_append::buffer#0 ] : zp[2]:141 , -Potential registers zp[2]:143 [ utoa_append::sub#0 ] : zp[2]:143 , -Potential registers zp[2]:145 [ utoa_append::return#0 ] : zp[2]:145 , +Potential registers zp[1]:66 [ legal::diff1_return#2 legal::diff1_return#0 legal::diff1_return#1 ] : zp[1]:66 , reg byte x , reg byte y , +Potential registers zp[1]:67 [ legal::diff2_return#2 legal::diff2_return#0 legal::diff2_return#1 ] : zp[1]:67 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:68 [ utoa::digit#2 utoa::digit#1 ] : zp[1]:68 , reg byte x , +Potential registers zp[2]:69 [ utoa::value#2 utoa::value#6 utoa::value#0 ] : zp[2]:69 , +Potential registers zp[1]:71 [ utoa::started#2 utoa::started#4 ] : zp[1]:71 , reg byte x , reg byte y , +Potential registers zp[2]:72 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] : zp[2]:72 , +Potential registers zp[2]:74 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] : zp[2]:74 , +Potential registers zp[1]:76 [ utoa_append::digit#2 utoa_append::digit#1 ] : zp[1]:76 , reg byte x , reg byte y , +Potential registers zp[1]:77 [ printf_cursor_x ] : zp[1]:77 , +Potential registers zp[1]:78 [ printf_cursor_y ] : zp[1]:78 , +Potential registers zp[2]:79 [ printf_cursor_ptr ] : zp[2]:79 , +Potential registers zp[1]:81 [ tod_init::tod_TENTHS#0 ] : zp[1]:81 , reg byte x , reg byte y , +Potential registers zp[1]:82 [ tod_init::tod_SEC#0 ] : zp[1]:82 , reg byte x , reg byte y , +Potential registers zp[1]:83 [ tod_init::tod_MIN#0 ] : zp[1]:83 , reg byte x , reg byte y , +Potential registers zp[1]:84 [ tod_init::tod_HOURS#0 ] : zp[1]:84 , reg byte x , reg byte y , +Potential registers zp[1]:85 [ tod_read::return_TENTHS#2 ] : zp[1]:85 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:86 [ tod_read::return_SEC#2 ] : zp[1]:86 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:87 [ tod_read::return_MIN#2 ] : zp[1]:87 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:88 [ tod_read::return_HOURS#2 ] : zp[1]:88 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:89 [ main::tod_TENTHS#0 ] : zp[1]:89 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:90 [ main::tod_SEC#0 ] : zp[1]:90 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:91 [ main::tod_MIN#0 ] : zp[1]:91 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:92 [ main::tod_HOURS#0 ] : zp[1]:92 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:93 [ tod_str::tod_TENTHS#0 ] : zp[1]:93 , reg byte x , reg byte y , +Potential registers zp[1]:94 [ tod_str::tod_SEC#0 ] : zp[1]:94 , reg byte x , reg byte y , +Potential registers zp[1]:95 [ tod_str::tod_MIN#0 ] : zp[1]:95 , reg byte x , reg byte y , +Potential registers zp[1]:96 [ tod_str::tod_HOURS#0 ] : zp[1]:96 , reg byte x , reg byte y , +Potential registers zp[1]:97 [ printf_str::ch#0 ] : zp[1]:97 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:98 [ printf_ln::$0 ] : zp[2]:98 , +Potential registers zp[2]:100 [ printf_ln::$1 ] : zp[2]:100 , +Potential registers zp[2]:102 [ printf_scroll::$4 ] : zp[2]:102 , +Potential registers zp[2]:104 [ memset::end#0 ] : zp[2]:104 , +Potential registers zp[1]:106 [ tod_str::$0 ] : zp[1]:106 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:107 [ tod_str::$1 ] : zp[1]:107 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:108 [ tod_str::$2 ] : zp[1]:108 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:109 [ tod_str::$3 ] : zp[1]:109 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:110 [ tod_str::$4 ] : zp[1]:110 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:111 [ tod_str::$5 ] : zp[1]:111 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:112 [ tod_str::$6 ] : zp[1]:112 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:113 [ tod_str::$7 ] : zp[1]:113 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:114 [ tod_str::$8 ] : zp[1]:114 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:115 [ tod_str::$9 ] : zp[1]:115 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:116 [ tod_str::$10 ] : zp[1]:116 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:117 [ tod_str::$11 ] : zp[1]:117 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:118 [ tod_str::$12 ] : zp[1]:118 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:119 [ tod_str::$13 ] : zp[1]:119 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:120 [ tod_str::$14 ] : zp[1]:120 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:121 [ tod_str::$15 ] : zp[1]:121 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:122 [ tod_read::return_HOURS#0 ] : zp[1]:122 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:123 [ tod_read::return_MIN#0 ] : zp[1]:123 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:124 [ tod_read::return_SEC#0 ] : zp[1]:124 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:125 [ tod_read::return_TENTHS#0 ] : zp[1]:125 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:126 [ legal::row#0 ] : zp[1]:126 , reg byte x , reg byte y , +Potential registers zp[1]:127 [ legal::column#0 ] : zp[1]:127 , reg byte x , reg byte y , +Potential registers zp[1]:128 [ legal::return#0 ] : zp[1]:128 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:129 [ queens::$2 ] : zp[1]:129 , reg byte a , reg byte x , reg byte y , +Potential registers zp[4]:130 [ printf_ulong::uvalue#0 ] : zp[4]:130 , +Potential registers zp[2]:134 [ strlen::return#2 ] : zp[2]:134 , +Potential registers zp[2]:136 [ printf_number_buffer::$19 ] : zp[2]:136 , +Potential registers zp[1]:138 [ toupper::return#3 ] : zp[1]:138 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:139 [ strupr::$0 ] : zp[1]:139 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:140 [ uctoa::buffer#3 ] : zp[2]:140 , +Potential registers zp[1]:142 [ uctoa::digit_value#0 ] : zp[1]:142 , reg byte x , reg byte y , +Potential registers zp[2]:143 [ uctoa_append::buffer#0 ] : zp[2]:143 , +Potential registers zp[1]:145 [ uctoa_append::sub#0 ] : zp[1]:145 , reg byte x , reg byte y , +Potential registers zp[1]:146 [ uctoa_append::return#0 ] : zp[1]:146 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:147 [ ultoa::$11 ] : zp[1]:147 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:148 [ ultoa::buffer#3 ] : zp[2]:148 , +Potential registers zp[1]:150 [ ultoa::$10 ] : zp[1]:150 , reg byte a , reg byte x , reg byte y , +Potential registers zp[4]:151 [ ultoa::digit_value#0 ] : zp[4]:151 , +Potential registers zp[2]:155 [ ultoa_append::buffer#0 ] : zp[2]:155 , +Potential registers zp[4]:157 [ ultoa_append::sub#0 ] : zp[4]:157 , +Potential registers zp[4]:161 [ ultoa_append::return#0 ] : zp[4]:161 , +Potential registers zp[1]:165 [ legal::$0 ] : zp[1]:165 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:166 [ legal::diff1_a#0 ] : zp[1]:166 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:167 [ utoa::$11 ] : zp[1]:167 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:168 [ utoa::buffer#3 ] : zp[2]:168 , +Potential registers zp[1]:170 [ utoa::$10 ] : zp[1]:170 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:171 [ utoa::digit_value#0 ] : zp[2]:171 , +Potential registers zp[2]:173 [ utoa_append::buffer#0 ] : zp[2]:173 , +Potential registers zp[2]:175 [ utoa_append::sub#0 ] : zp[2]:175 , +Potential registers zp[2]:177 [ utoa_append::return#0 ] : zp[2]:177 , Potential registers mem[12] [ printf_buffer ] : mem[12] , +Potential registers mem[4] [ TOD_ZERO ] : mem[4] , REGISTER UPLIFT SCOPES -Uplift Scope [memcpy] 30,000,000,000,000,000,000: zp[2]:31 [ memcpy::src#2 memcpy::src#1 ] 20,000,000,000,000,000,000: zp[2]:33 [ memcpy::dst#2 memcpy::dst#1 ] -Uplift Scope [memset] 335,666,666,666,666,620: zp[2]:29 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 16,833,333,333,333,332: zp[2]:96 [ memset::end#0 ] 12,500,000,000,000,000: zp[1]:28 [ memset::c#4 ] 1,000,000,000,000,001: zp[2]:24 [ memset::num#2 ] 0: zp[2]:26 [ memset::str#3 ] -Uplift Scope [uctoa_append] 25,000,550,000,000,000: zp[1]:49 [ uctoa_append::value#2 uctoa_append::value#0 uctoa_append::value#1 ] 20,000,500,000,000,000: zp[1]:50 [ uctoa_append::digit#2 uctoa_append::digit#1 ] 3,333,350,000,000,000: zp[1]:110 [ uctoa_append::sub#0 ] 200,000,000,002: zp[1]:111 [ uctoa_append::return#0 ] 137,500,000,000.25: zp[2]:108 [ uctoa_append::buffer#0 ] -Uplift Scope [printf_scroll] 200,000,000,000,002: zp[2]:94 [ printf_scroll::$4 ] -Uplift Scope [toupper] 47,333,333,333,338.66: zp[1]:39 [ toupper::return#2 toupper::return#0 toupper::ch#0 ] 2,000,000,000,002: zp[1]:103 [ toupper::return#3 ] -Uplift Scope [printf_char] 13,030,300,000,010: zp[1]:23 [ printf_char::ch#3 printf_char::ch#2 printf_char::ch#0 printf_char::ch#1 ] -Uplift Scope [ultoa_append] 2,500,550,000,003.5: zp[4]:59 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] 2,000,500,000,002.5: zp[1]:63 [ ultoa_append::digit#2 ultoa_append::digit#1 ] 333,350,000,000.5: zp[4]:122 [ ultoa_append::sub#0 ] 200,000,002: zp[4]:126 [ ultoa_append::return#0 ] 137,500,000.25: zp[2]:120 [ ultoa_append::buffer#0 ] -Uplift Scope [strupr] 2,714,978,571,432.43: zp[2]:37 [ strupr::src#2 strupr::str#0 strupr::src#1 ] 2,000,000,000,002: zp[1]:104 [ strupr::$0 ] -Uplift Scope [strlen] 3,000,883,333,337.67: zp[2]:40 [ strlen::str#2 strlen::str#1 strlen::str#0 ] 1,500,025,000,001.75: zp[2]:42 [ strlen::len#2 strlen::len#1 ] 200,000,002: zp[2]:90 [ strlen::return#2 ] -Uplift Scope [] 2,079,220,779,221.49: zp[1]:79 [ printf_cursor_y ] 1,504,575,163,399.41: zp[2]:80 [ printf_cursor_ptr ] 281,118,881,119.64: zp[1]:78 [ printf_cursor_x ] 1,883.97: zp[4]:3 [ count#11 count#13 ] 0: mem[12] [ printf_buffer ] -Uplift Scope [printf_padding] 2,750,000,000,002.75: zp[1]:22 [ printf_padding::i#2 printf_padding::i#1 ] 167,316,666,673.33: zp[1]:20 [ printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] 166,666,666,666.83: zp[1]:21 [ printf_padding::pad#5 ] -Uplift Scope [uctoa] 383,350,000,004: zp[2]:47 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 ] 316,755,000,004.5: zp[1]:45 [ uctoa::value#2 uctoa::value#6 uctoa::value#1 uctoa::value#0 ] 230,769,230,771.54: zp[1]:44 [ uctoa::digit#2 uctoa::digit#1 ] 160,000,000,001.6: zp[1]:46 [ uctoa::started#2 uctoa::started#4 ] 60,000,000,000.6: zp[1]:107 [ uctoa::digit_value#0 ] 200,000,002: zp[2]:105 [ uctoa::buffer#3 ] -Uplift Scope [printf_ln] 200,000,000,002: zp[2]:99 [ printf_ln::$0 ] 200,000,000,002: zp[2]:101 [ printf_ln::$1 ] -Uplift Scope [printf_str] 26,085,714,292.64: zp[2]:35 [ printf_str::str#10 printf_str::str#11 printf_str::str#1 printf_str::str#0 ] 10,000,000,001: zp[1]:98 [ printf_str::ch#0 ] -Uplift Scope [ultoa] 378,714,289.64: zp[2]:57 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] 307,835,718.5: zp[4]:52 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ] 228,571,430.86: zp[1]:51 [ ultoa::digit#2 ultoa::digit#1 ] 200,000,002: zp[1]:115 [ ultoa::$10 ] 150,000,001.5: zp[1]:56 [ ultoa::started#2 ultoa::started#4 ] 60,000,000.6: zp[4]:116 [ ultoa::digit_value#0 ] 2,000,002: zp[1]:112 [ ultoa::$11 ] 2,000,002: zp[2]:113 [ ultoa::buffer#3 ] -Uplift Scope [printf_number_buffer] 650,000,006.5: zp[1]:18 [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] 119,047,620.24: zp[1]:19 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] 100,000,001: zp[2]:92 [ printf_number_buffer::$19 ] 35,705,211.3: zp[1]:16 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] 10,344,827.69: zp[2]:14 [ printf_number_buffer::buffer_digits#10 ] 10,000,000.1: zp[1]:11 [ printf_number_buffer::format_min_length#3 ] 9,375,000.09: zp[1]:13 [ printf_number_buffer::format_zero_padding#10 ] 6,451,612.97: zp[1]:12 [ printf_number_buffer::format_justify_left#10 ] 3,846,153.88: zp[1]:17 [ printf_number_buffer::format_upper_case#10 ] -Uplift Scope [diff] 45,500,005: zp[1]:68 [ diff::return#4 diff::return#2 diff::return#3 ] 20,000,006.5: zp[1]:67 [ diff::b#2 diff::b#0 diff::b#1 ] 18,000,004.5: zp[1]:66 [ diff::a#2 diff::a#0 diff::a#1 ] 2,000,002: zp[1]:131 [ diff::return#0 ] 2,000,002: zp[1]:133 [ diff::return#1 ] -Uplift Scope [utoa_append] 25,055,003.5: zp[2]:75 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] 20,050,002.5: zp[1]:77 [ utoa_append::digit#2 utoa_append::digit#1 ] 3,335,000.5: zp[2]:143 [ utoa_append::sub#0 ] 20,002: zp[2]:145 [ utoa_append::return#0 ] 13,750.25: zp[2]:141 [ utoa_append::buffer#0 ] -Uplift Scope [print] 25,714,288.29: zp[1]:9 [ print::j#2 print::j#1 ] 3,000,003: zp[1]:7 [ print::i#2 print::i#1 ] 3,000,002.36: zp[1]:8 [ print::i1#2 print::i1#1 ] -Uplift Scope [printf_uchar] 10,000,005.5: zp[1]:10 [ printf_uchar::uvalue#2 printf_uchar::uvalue#1 printf_uchar::uvalue#0 ] -Uplift Scope [legal] 2,400,002.4: zp[1]:64 [ legal::i#2 legal::i#1 ] 2,000,002: zp[1]:130 [ legal::$0 ] 2,000,002: zp[1]:134 [ legal::$4 ] 333,333.67: zp[1]:132 [ legal::$3 ] 111,166.83: zp[1]:83 [ legal::column#0 ] 105,315.95: zp[1]:82 [ legal::row#0 ] 2,002: zp[1]:84 [ legal::return#0 ] 333.67: zp[1]:65 [ legal::return#4 ] -Uplift Scope [utoa] 38,003.93: zp[2]:73 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] 30,717.36: zp[2]:70 [ utoa::value#2 utoa::value#6 utoa::value#0 ] 22,859.43: zp[1]:69 [ utoa::digit#2 utoa::digit#1 ] 20,002: zp[1]:138 [ utoa::$10 ] 15,001.5: zp[1]:72 [ utoa::started#2 utoa::started#4 ] 6,000.6: zp[2]:139 [ utoa::digit_value#0 ] 2,002: zp[1]:135 [ utoa::$11 ] 2,002: zp[2]:136 [ utoa::buffer#3 ] -Uplift Scope [printf_ulong] 36,667.33: zp[4]:86 [ printf_ulong::uvalue#0 ] -Uplift Scope [queens] 5,148: zp[1]:2 [ queens::row#10 queens::row#1 queens::row#2 ] 2,002: zp[1]:85 [ queens::$2 ] +Uplift Scope [memcpy] 30,000,000,000,000,000,000: zp[2]:11 [ memcpy::src#2 memcpy::src#1 ] 20,000,000,000,000,000,000: zp[2]:13 [ memcpy::dst#2 memcpy::dst#1 ] +Uplift Scope [memset] 335,666,666,666,666,620: zp[2]:9 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 16,833,333,333,333,332: zp[2]:104 [ memset::end#0 ] 12,500,000,000,000,000: zp[1]:8 [ memset::c#4 ] 1,000,000,000,000,001: zp[2]:4 [ memset::num#2 ] 0: zp[2]:6 [ memset::str#3 ] +Uplift Scope [uctoa_append] 25,000,550,000,000,000: zp[1]:49 [ uctoa_append::value#2 uctoa_append::value#0 uctoa_append::value#1 ] 20,000,500,000,000,000: zp[1]:50 [ uctoa_append::digit#2 uctoa_append::digit#1 ] 3,333,350,000,000,000: zp[1]:145 [ uctoa_append::sub#0 ] 200,000,000,002: zp[1]:146 [ uctoa_append::return#0 ] 137,500,000,000.25: zp[2]:143 [ uctoa_append::buffer#0 ] +Uplift Scope [printf_scroll] 200,000,000,000,002: zp[2]:102 [ printf_scroll::$4 ] +Uplift Scope [toupper] 47,333,333,333,338.66: zp[1]:39 [ toupper::return#2 toupper::return#0 toupper::ch#0 ] 2,000,000,000,002: zp[1]:138 [ toupper::return#3 ] +Uplift Scope [printf_char] 13,030,300,000,010: zp[1]:15 [ printf_char::ch#3 printf_char::ch#2 printf_char::ch#0 printf_char::ch#1 ] +Uplift Scope [ultoa_append] 2,500,550,000,003.5: zp[4]:59 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] 2,000,500,000,002.5: zp[1]:63 [ ultoa_append::digit#2 ultoa_append::digit#1 ] 333,350,000,000.5: zp[4]:157 [ ultoa_append::sub#0 ] 200,000,002: zp[4]:161 [ ultoa_append::return#0 ] 137,500,000.25: zp[2]:155 [ ultoa_append::buffer#0 ] +Uplift Scope [strupr] 2,714,978,571,432.43: zp[2]:37 [ strupr::src#2 strupr::str#0 strupr::src#1 ] 2,000,000,000,002: zp[1]:139 [ strupr::$0 ] +Uplift Scope [strlen] 3,000,883,333,337.67: zp[2]:40 [ strlen::str#3 strlen::str#1 strlen::str#0 ] 1,500,025,000,001.75: zp[2]:42 [ strlen::len#2 strlen::len#1 ] 200,000,002: zp[2]:134 [ strlen::return#2 ] +Uplift Scope [] 1,769,060,773,481.27: zp[1]:78 [ printf_cursor_y ] 1,278,888,888,889.5: zp[2]:79 [ printf_cursor_ptr ] 236,470,588,235.94: zp[1]:77 [ printf_cursor_x ] 985.9: zp[4]:17 [ count#14 count#22 ] 0: mem[12] [ printf_buffer ] 0: mem[4] [ TOD_ZERO ] +Uplift Scope [printf_padding] 2,750,000,000,002.75: zp[1]:36 [ printf_padding::i#2 printf_padding::i#1 ] 167,316,666,673.33: zp[1]:34 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] 166,666,666,666.83: zp[1]:35 [ printf_padding::pad#7 ] +Uplift Scope [uctoa] 383,350,000,004: zp[2]:47 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 ] 316,755,000,004.5: zp[1]:45 [ uctoa::value#2 uctoa::value#6 uctoa::value#1 uctoa::value#0 ] 230,769,230,771.54: zp[1]:44 [ uctoa::digit#2 uctoa::digit#1 ] 160,000,000,001.6: zp[1]:46 [ uctoa::started#2 uctoa::started#4 ] 60,000,000,000.6: zp[1]:142 [ uctoa::digit_value#0 ] 200,000,002: zp[2]:140 [ uctoa::buffer#3 ] +Uplift Scope [printf_ln] 200,000,000,002: zp[2]:98 [ printf_ln::$0 ] 200,000,000,002: zp[2]:100 [ printf_ln::$1 ] +Uplift Scope [printf_str] 26,085,714,292.64: zp[2]:2 [ printf_str::str#11 printf_str::str#13 printf_str::str#1 printf_str::str#0 ] 10,000,000,001: zp[1]:97 [ printf_str::ch#0 ] +Uplift Scope [ultoa] 378,714,289.64: zp[2]:57 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] 307,835,718.5: zp[4]:52 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ] 228,571,430.86: zp[1]:51 [ ultoa::digit#2 ultoa::digit#1 ] 200,000,002: zp[1]:150 [ ultoa::$10 ] 150,000,001.5: zp[1]:56 [ ultoa::started#2 ultoa::started#4 ] 60,000,000.6: zp[4]:151 [ ultoa::digit_value#0 ] 2,000,002: zp[1]:147 [ ultoa::$11 ] 2,000,002: zp[2]:148 [ ultoa::buffer#3 ] +Uplift Scope [printf_number_buffer] 650,000,006.5: zp[1]:32 [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] 119,047,620.24: zp[1]:33 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] 100,000,001: zp[2]:136 [ printf_number_buffer::$19 ] 35,705,211.3: zp[1]:30 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] 10,344,827.69: zp[2]:28 [ printf_number_buffer::buffer_digits#10 ] 10,000,000.1: zp[1]:25 [ printf_number_buffer::format_min_length#3 ] 9,375,000.09: zp[1]:27 [ printf_number_buffer::format_zero_padding#10 ] 6,451,612.97: zp[1]:26 [ printf_number_buffer::format_justify_left#10 ] 3,846,153.88: zp[1]:31 [ printf_number_buffer::format_upper_case#10 ] +Uplift Scope [utoa_append] 25,055,003.5: zp[2]:74 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] 20,050,002.5: zp[1]:76 [ utoa_append::digit#2 utoa_append::digit#1 ] 3,335,000.5: zp[2]:175 [ utoa_append::sub#0 ] 20,002: zp[2]:177 [ utoa_append::return#0 ] 13,750.25: zp[2]:173 [ utoa_append::buffer#0 ] +Uplift Scope [print] 25,714,288.29: zp[1]:23 [ print::j#2 print::j#1 ] 3,000,003: zp[1]:21 [ print::i#2 print::i#1 ] 3,000,002.36: zp[1]:22 [ print::i1#2 print::i1#1 ] +Uplift Scope [legal] 7,000,007: zp[1]:67 [ legal::diff2_return#2 legal::diff2_return#0 legal::diff2_return#1 ] 4,600,004.6: zp[1]:66 [ legal::diff1_return#2 legal::diff1_return#0 legal::diff1_return#1 ] 2,571,431.14: zp[1]:64 [ legal::i#10 legal::i#1 ] 2,000,002: zp[1]:165 [ legal::$0 ] 2,000,002: zp[1]:166 [ legal::diff1_a#0 ] 235,353.24: zp[1]:127 [ legal::column#0 ] 222,278.06: zp[1]:126 [ legal::row#0 ] 2,002: zp[1]:128 [ legal::return#0 ] 333.67: zp[1]:65 [ legal::return#4 ] +Uplift Scope [printf_uchar] 10,000,005.5: zp[1]:24 [ printf_uchar::uvalue#2 printf_uchar::uvalue#1 printf_uchar::uvalue#0 ] +Uplift Scope [utoa] 38,003.93: zp[2]:72 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] 30,717.36: zp[2]:69 [ utoa::value#2 utoa::value#6 utoa::value#0 ] 22,859.43: zp[1]:68 [ utoa::digit#2 utoa::digit#1 ] 20,002: zp[1]:170 [ utoa::$10 ] 15,001.5: zp[1]:71 [ utoa::started#2 utoa::started#4 ] 6,000.6: zp[2]:171 [ utoa::digit_value#0 ] 2,002: zp[1]:167 [ utoa::$11 ] 2,002: zp[2]:168 [ utoa::buffer#3 ] +Uplift Scope [printf_ulong] 36,667.33: zp[4]:130 [ printf_ulong::uvalue#0 ] +Uplift Scope [queens] 5,148: zp[1]:16 [ queens::row#10 queens::row#1 queens::row#2 ] 2,002: zp[1]:129 [ queens::$2 ] +Uplift Scope [tod_str] 202: zp[1]:106 [ tod_str::$0 ] 202: zp[1]:107 [ tod_str::$1 ] 202: zp[1]:108 [ tod_str::$2 ] 202: zp[1]:109 [ tod_str::$3 ] 202: zp[1]:110 [ tod_str::$4 ] 202: zp[1]:111 [ tod_str::$5 ] 202: zp[1]:112 [ tod_str::$6 ] 202: zp[1]:113 [ tod_str::$7 ] 202: zp[1]:114 [ tod_str::$8 ] 202: zp[1]:115 [ tod_str::$9 ] 202: zp[1]:116 [ tod_str::$10 ] 202: zp[1]:117 [ tod_str::$11 ] 202: zp[1]:118 [ tod_str::$12 ] 202: zp[1]:119 [ tod_str::$13 ] 202: zp[1]:120 [ tod_str::$14 ] 202: zp[1]:121 [ tod_str::$15 ] 53.25: zp[1]:96 [ tod_str::tod_HOURS#0 ] 19.36: zp[1]:95 [ tod_str::tod_MIN#0 ] 11.83: zp[1]:94 [ tod_str::tod_SEC#0 ] 8.52: zp[1]:93 [ tod_str::tod_TENTHS#0 ] +Uplift Scope [tod_read] 37.33: zp[1]:125 [ tod_read::return_TENTHS#0 ] 22.4: zp[1]:124 [ tod_read::return_SEC#0 ] 16: zp[1]:123 [ tod_read::return_MIN#0 ] 12.44: zp[1]:122 [ tod_read::return_HOURS#0 ] 5.5: zp[1]:85 [ tod_read::return_TENTHS#2 ] 5.5: zp[1]:86 [ tod_read::return_SEC#2 ] 5.5: zp[1]:87 [ tod_read::return_MIN#2 ] 5.5: zp[1]:88 [ tod_read::return_HOURS#2 ] +Uplift Scope [tod_init] 37.33: zp[1]:84 [ tod_init::tod_HOURS#0 ] 22.4: zp[1]:83 [ tod_init::tod_MIN#0 ] 16: zp[1]:82 [ tod_init::tod_SEC#0 ] 12.44: zp[1]:81 [ tod_init::tod_TENTHS#0 ] +Uplift Scope [main] 5.5: zp[1]:89 [ main::tod_TENTHS#0 ] 5.5: zp[1]:90 [ main::tod_SEC#0 ] 5.5: zp[1]:91 [ main::tod_MIN#0 ] 5.5: zp[1]:92 [ main::tod_HOURS#0 ] Uplift Scope [RADIX] Uplift Scope [printf_format_number] Uplift Scope [printf_buffer_number] Uplift Scope [printf_format_string] Uplift Scope [printf_cls] Uplift Scope [printf_uint] -Uplift Scope [main] +Uplift Scope [printf_string] +Uplift Scope [TIME_OF_DAY] +Uplift Scope [MOS6526_CIA] -Uplifting [memcpy] best 1735184 combination zp[2]:31 [ memcpy::src#2 memcpy::src#1 ] zp[2]:33 [ memcpy::dst#2 memcpy::dst#1 ] -Uplifting [memset] best 1735078 combination zp[2]:29 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:96 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:24 [ memset::num#2 ] zp[2]:26 [ memset::str#3 ] -Uplifting [uctoa_append] best 1613075 combination reg byte x [ uctoa_append::value#2 uctoa_append::value#0 uctoa_append::value#1 ] reg byte y [ uctoa_append::digit#2 uctoa_append::digit#1 ] zp[1]:110 [ uctoa_append::sub#0 ] reg byte x [ uctoa_append::return#0 ] zp[2]:108 [ uctoa_append::buffer#0 ] -Uplifting [printf_scroll] best 1613075 combination zp[2]:94 [ printf_scroll::$4 ] -Uplifting [toupper] best 1601068 combination reg byte a [ toupper::return#2 toupper::return#0 toupper::ch#0 ] reg byte a [ toupper::return#3 ] -Uplifting [printf_char] best 1598032 combination reg byte a [ printf_char::ch#3 printf_char::ch#2 printf_char::ch#0 printf_char::ch#1 ] -Uplifting [ultoa_append] best 1592029 combination zp[4]:59 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] reg byte x [ ultoa_append::digit#2 ultoa_append::digit#1 ] zp[4]:122 [ ultoa_append::sub#0 ] zp[4]:126 [ ultoa_append::return#0 ] zp[2]:120 [ ultoa_append::buffer#0 ] -Uplifting [strupr] best 1586029 combination zp[2]:37 [ strupr::src#2 strupr::str#0 strupr::src#1 ] reg byte a [ strupr::$0 ] -Uplifting [strlen] best 1586029 combination zp[2]:40 [ strlen::str#2 strlen::str#1 strlen::str#0 ] zp[2]:42 [ strlen::len#2 strlen::len#1 ] zp[2]:90 [ strlen::return#2 ] -Uplifting [] best 1586029 combination zp[1]:79 [ printf_cursor_y ] zp[2]:80 [ printf_cursor_ptr ] zp[1]:78 [ printf_cursor_x ] zp[4]:3 [ count#11 count#13 ] mem[12] [ printf_buffer ] -Uplifting [printf_padding] best 1586029 combination zp[1]:22 [ printf_padding::i#2 printf_padding::i#1 ] zp[1]:20 [ printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] zp[1]:21 [ printf_padding::pad#5 ] -Uplifting [uctoa] best 1577023 combination zp[2]:47 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 ] reg byte x [ uctoa::value#2 uctoa::value#6 uctoa::value#1 uctoa::value#0 ] zp[1]:44 [ uctoa::digit#2 uctoa::digit#1 ] zp[1]:46 [ uctoa::started#2 uctoa::started#4 ] zp[1]:107 [ uctoa::digit_value#0 ] zp[2]:105 [ uctoa::buffer#3 ] -Uplifting [printf_ln] best 1577023 combination zp[2]:99 [ printf_ln::$0 ] zp[2]:101 [ printf_ln::$1 ] -Uplifting [printf_str] best 1576903 combination zp[2]:35 [ printf_str::str#10 printf_str::str#11 printf_str::str#1 printf_str::str#0 ] reg byte a [ printf_str::ch#0 ] -Uplifting [ultoa] best 1575599 combination zp[2]:57 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] zp[4]:52 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ] zp[1]:51 [ ultoa::digit#2 ultoa::digit#1 ] reg byte a [ ultoa::$10 ] reg byte x [ ultoa::started#2 ultoa::started#4 ] zp[4]:116 [ ultoa::digit_value#0 ] reg byte a [ ultoa::$11 ] zp[2]:113 [ ultoa::buffer#3 ] -Uplifting [printf_number_buffer] best 1575585 combination reg byte y [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] zp[1]:19 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] zp[2]:92 [ printf_number_buffer::$19 ] zp[1]:16 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] zp[2]:14 [ printf_number_buffer::buffer_digits#10 ] reg byte x [ printf_number_buffer::format_min_length#3 ] zp[1]:13 [ printf_number_buffer::format_zero_padding#10 ] zp[1]:12 [ printf_number_buffer::format_justify_left#10 ] zp[1]:17 [ printf_number_buffer::format_upper_case#10 ] +Uplifting [memcpy] best 1739248 combination zp[2]:11 [ memcpy::src#2 memcpy::src#1 ] zp[2]:13 [ memcpy::dst#2 memcpy::dst#1 ] +Uplifting [memset] best 1739142 combination zp[2]:9 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:104 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:4 [ memset::num#2 ] zp[2]:6 [ memset::str#3 ] +Uplifting [uctoa_append] best 1617139 combination reg byte x [ uctoa_append::value#2 uctoa_append::value#0 uctoa_append::value#1 ] reg byte y [ uctoa_append::digit#2 uctoa_append::digit#1 ] zp[1]:145 [ uctoa_append::sub#0 ] reg byte x [ uctoa_append::return#0 ] zp[2]:143 [ uctoa_append::buffer#0 ] +Uplifting [printf_scroll] best 1617139 combination zp[2]:102 [ printf_scroll::$4 ] +Uplifting [toupper] best 1605132 combination reg byte a [ toupper::return#2 toupper::return#0 toupper::ch#0 ] reg byte a [ toupper::return#3 ] +Uplifting [printf_char] best 1602096 combination reg byte a [ printf_char::ch#3 printf_char::ch#2 printf_char::ch#0 printf_char::ch#1 ] +Uplifting [ultoa_append] best 1596093 combination zp[4]:59 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] reg byte x [ ultoa_append::digit#2 ultoa_append::digit#1 ] zp[4]:157 [ ultoa_append::sub#0 ] zp[4]:161 [ ultoa_append::return#0 ] zp[2]:155 [ ultoa_append::buffer#0 ] +Uplifting [strupr] best 1590093 combination zp[2]:37 [ strupr::src#2 strupr::str#0 strupr::src#1 ] reg byte a [ strupr::$0 ] +Uplifting [strlen] best 1590093 combination zp[2]:40 [ strlen::str#3 strlen::str#1 strlen::str#0 ] zp[2]:42 [ strlen::len#2 strlen::len#1 ] zp[2]:134 [ strlen::return#2 ] +Uplifting [] best 1590093 combination zp[1]:78 [ printf_cursor_y ] zp[2]:79 [ printf_cursor_ptr ] zp[1]:77 [ printf_cursor_x ] zp[4]:17 [ count#14 count#22 ] mem[12] [ printf_buffer ] mem[4] [ TOD_ZERO ] +Uplifting [printf_padding] best 1590093 combination zp[1]:36 [ printf_padding::i#2 printf_padding::i#1 ] zp[1]:34 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] zp[1]:35 [ printf_padding::pad#7 ] +Uplifting [uctoa] best 1581087 combination zp[2]:47 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 ] reg byte x [ uctoa::value#2 uctoa::value#6 uctoa::value#1 uctoa::value#0 ] zp[1]:44 [ uctoa::digit#2 uctoa::digit#1 ] zp[1]:46 [ uctoa::started#2 uctoa::started#4 ] zp[1]:142 [ uctoa::digit_value#0 ] zp[2]:140 [ uctoa::buffer#3 ] +Uplifting [printf_ln] best 1581087 combination zp[2]:98 [ printf_ln::$0 ] zp[2]:100 [ printf_ln::$1 ] +Uplifting [printf_str] best 1580967 combination zp[2]:2 [ printf_str::str#11 printf_str::str#13 printf_str::str#1 printf_str::str#0 ] reg byte a [ printf_str::ch#0 ] +Uplifting [ultoa] best 1579663 combination zp[2]:57 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] zp[4]:52 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ] zp[1]:51 [ ultoa::digit#2 ultoa::digit#1 ] reg byte a [ ultoa::$10 ] reg byte x [ ultoa::started#2 ultoa::started#4 ] zp[4]:151 [ ultoa::digit_value#0 ] reg byte a [ ultoa::$11 ] zp[2]:148 [ ultoa::buffer#3 ] +Uplifting [printf_number_buffer] best 1579649 combination reg byte y [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] zp[1]:33 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] zp[2]:136 [ printf_number_buffer::$19 ] zp[1]:30 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] zp[2]:28 [ printf_number_buffer::buffer_digits#10 ] reg byte x [ printf_number_buffer::format_min_length#3 ] zp[1]:27 [ printf_number_buffer::format_zero_padding#10 ] zp[1]:26 [ printf_number_buffer::format_justify_left#10 ] zp[1]:31 [ printf_number_buffer::format_upper_case#10 ] Limited combination testing to 100 combinations of 256 possible. -Uplifting [diff] best 1573181 combination reg byte a [ diff::return#4 diff::return#2 diff::return#3 ] reg byte x [ diff::b#2 diff::b#0 diff::b#1 ] reg byte a [ diff::a#2 diff::a#0 diff::a#1 ] reg byte a [ diff::return#0 ] zp[1]:133 [ diff::return#1 ] -Limited combination testing to 100 combinations of 1024 possible. -Uplifting [utoa_append] best 1572578 combination zp[2]:75 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] zp[2]:143 [ utoa_append::sub#0 ] zp[2]:145 [ utoa_append::return#0 ] zp[2]:141 [ utoa_append::buffer#0 ] -Uplifting [print] best 1572578 combination zp[1]:9 [ print::j#2 print::j#1 ] zp[1]:7 [ print::i#2 print::i#1 ] zp[1]:8 [ print::i1#2 print::i1#1 ] -Uplifting [printf_uchar] best 1571975 combination reg byte x [ printf_uchar::uvalue#2 printf_uchar::uvalue#1 printf_uchar::uvalue#0 ] -Uplifting [legal] best 1569775 combination reg byte y [ legal::i#2 legal::i#1 ] reg byte x [ legal::$0 ] reg byte a [ legal::$4 ] zp[1]:132 [ legal::$3 ] zp[1]:83 [ legal::column#0 ] zp[1]:82 [ legal::row#0 ] zp[1]:84 [ legal::return#0 ] zp[1]:65 [ legal::return#4 ] -Limited combination testing to 100 combinations of 20736 possible. -Uplifting [utoa] best 1569641 combination zp[2]:73 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] zp[2]:70 [ utoa::value#2 utoa::value#6 utoa::value#0 ] zp[1]:69 [ utoa::digit#2 utoa::digit#1 ] reg byte a [ utoa::$10 ] reg byte x [ utoa::started#2 utoa::started#4 ] zp[2]:139 [ utoa::digit_value#0 ] reg byte a [ utoa::$11 ] zp[2]:136 [ utoa::buffer#3 ] -Uplifting [printf_ulong] best 1569641 combination zp[4]:86 [ printf_ulong::uvalue#0 ] -Uplifting [queens] best 1569581 combination zp[1]:2 [ queens::row#10 queens::row#1 queens::row#2 ] reg byte a [ queens::$2 ] -Uplifting [RADIX] best 1569581 combination -Uplifting [printf_format_number] best 1569581 combination -Uplifting [printf_buffer_number] best 1569581 combination -Uplifting [printf_format_string] best 1569581 combination -Uplifting [printf_cls] best 1569581 combination -Uplifting [printf_uint] best 1569581 combination -Uplifting [main] best 1569581 combination -Attempting to uplift remaining variables inzp[1]:110 [ uctoa_append::sub#0 ] -Uplifting [uctoa_append] best 1569581 combination zp[1]:110 [ uctoa_append::sub#0 ] -Attempting to uplift remaining variables inzp[1]:22 [ printf_padding::i#2 printf_padding::i#1 ] -Uplifting [printf_padding] best 1569581 combination zp[1]:22 [ printf_padding::i#2 printf_padding::i#1 ] -Attempting to uplift remaining variables inzp[1]:79 [ printf_cursor_y ] -Uplifting [] best 1569581 combination zp[1]:79 [ printf_cursor_y ] -Attempting to uplift remaining variables inzp[1]:78 [ printf_cursor_x ] -Uplifting [] best 1569581 combination zp[1]:78 [ printf_cursor_x ] +Uplifting [utoa_append] best 1579046 combination zp[2]:74 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] zp[2]:175 [ utoa_append::sub#0 ] zp[2]:177 [ utoa_append::return#0 ] zp[2]:173 [ utoa_append::buffer#0 ] +Uplifting [print] best 1579046 combination zp[1]:23 [ print::j#2 print::j#1 ] zp[1]:21 [ print::i#2 print::i#1 ] zp[1]:22 [ print::i1#2 print::i1#1 ] +Uplifting [legal] best 1576346 combination reg byte a [ legal::diff2_return#2 legal::diff2_return#0 legal::diff2_return#1 ] zp[1]:66 [ legal::diff1_return#2 legal::diff1_return#0 legal::diff1_return#1 ] reg byte y [ legal::i#10 legal::i#1 ] reg byte x [ legal::$0 ] zp[1]:166 [ legal::diff1_a#0 ] zp[1]:127 [ legal::column#0 ] zp[1]:126 [ legal::row#0 ] zp[1]:128 [ legal::return#0 ] zp[1]:65 [ legal::return#4 ] +Limited combination testing to 100 combinations of 82944 possible. +Uplifting [printf_uchar] best 1575743 combination reg byte x [ printf_uchar::uvalue#2 printf_uchar::uvalue#1 printf_uchar::uvalue#0 ] +Uplifting [utoa] best 1575609 combination zp[2]:72 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] zp[2]:69 [ utoa::value#2 utoa::value#6 utoa::value#0 ] zp[1]:68 [ utoa::digit#2 utoa::digit#1 ] reg byte a [ utoa::$10 ] reg byte x [ utoa::started#2 utoa::started#4 ] zp[2]:171 [ utoa::digit_value#0 ] reg byte a [ utoa::$11 ] zp[2]:168 [ utoa::buffer#3 ] +Uplifting [printf_ulong] best 1575609 combination zp[4]:130 [ printf_ulong::uvalue#0 ] +Uplifting [queens] best 1575549 combination zp[1]:16 [ queens::row#10 queens::row#1 queens::row#2 ] reg byte a [ queens::$2 ] +Uplifting [tod_read] best 1575531 combination reg byte y [ tod_read::return_TENTHS#0 ] reg byte x [ tod_read::return_SEC#0 ] reg byte a [ tod_read::return_MIN#0 ] zp[1]:122 [ tod_read::return_HOURS#0 ] zp[1]:85 [ tod_read::return_TENTHS#2 ] zp[1]:86 [ tod_read::return_SEC#2 ] zp[1]:87 [ tod_read::return_MIN#2 ] zp[1]:88 [ tod_read::return_HOURS#2 ] +Limited combination testing to 100 combinations of 65536 possible. +Uplifting [tod_init] best 1575519 combination reg byte y [ tod_init::tod_HOURS#0 ] reg byte x [ tod_init::tod_MIN#0 ] zp[1]:82 [ tod_init::tod_SEC#0 ] zp[1]:81 [ tod_init::tod_TENTHS#0 ] +Uplifting [main] best 1575507 combination reg byte y [ main::tod_TENTHS#0 ] reg byte x [ main::tod_SEC#0 ] zp[1]:91 [ main::tod_MIN#0 ] zp[1]:92 [ main::tod_HOURS#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [RADIX] best 1575507 combination +Uplifting [printf_format_number] best 1575507 combination +Uplifting [printf_buffer_number] best 1575507 combination +Uplifting [printf_format_string] best 1575507 combination +Uplifting [printf_cls] best 1575507 combination +Uplifting [printf_uint] best 1575507 combination +Uplifting [printf_string] best 1575507 combination +Uplifting [TIME_OF_DAY] best 1575507 combination +Uplifting [MOS6526_CIA] best 1575507 combination +Attempting to uplift remaining variables inzp[1]:145 [ uctoa_append::sub#0 ] +Uplifting [uctoa_append] best 1575507 combination zp[1]:145 [ uctoa_append::sub#0 ] +Attempting to uplift remaining variables inzp[1]:36 [ printf_padding::i#2 printf_padding::i#1 ] +Uplifting [printf_padding] best 1575507 combination zp[1]:36 [ printf_padding::i#2 printf_padding::i#1 ] +Attempting to uplift remaining variables inzp[1]:78 [ printf_cursor_y ] +Uplifting [] best 1575507 combination zp[1]:78 [ printf_cursor_y ] +Attempting to uplift remaining variables inzp[1]:77 [ printf_cursor_x ] +Uplifting [] best 1575507 combination zp[1]:77 [ printf_cursor_x ] Attempting to uplift remaining variables inzp[1]:44 [ uctoa::digit#2 uctoa::digit#1 ] -Uplifting [uctoa] best 1569581 combination zp[1]:44 [ uctoa::digit#2 uctoa::digit#1 ] -Attempting to uplift remaining variables inzp[1]:20 [ printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] -Uplifting [printf_padding] best 1569581 combination zp[1]:20 [ printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] -Attempting to uplift remaining variables inzp[1]:21 [ printf_padding::pad#5 ] -Uplifting [printf_padding] best 1569581 combination zp[1]:21 [ printf_padding::pad#5 ] +Uplifting [uctoa] best 1575507 combination zp[1]:44 [ uctoa::digit#2 uctoa::digit#1 ] +Attempting to uplift remaining variables inzp[1]:34 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] +Uplifting [printf_padding] best 1575507 combination zp[1]:34 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] +Attempting to uplift remaining variables inzp[1]:35 [ printf_padding::pad#7 ] +Uplifting [printf_padding] best 1575507 combination zp[1]:35 [ printf_padding::pad#7 ] Attempting to uplift remaining variables inzp[1]:46 [ uctoa::started#2 uctoa::started#4 ] -Uplifting [uctoa] best 1569581 combination zp[1]:46 [ uctoa::started#2 uctoa::started#4 ] -Attempting to uplift remaining variables inzp[1]:107 [ uctoa::digit_value#0 ] -Uplifting [uctoa] best 1569581 combination zp[1]:107 [ uctoa::digit_value#0 ] +Uplifting [uctoa] best 1575507 combination zp[1]:46 [ uctoa::started#2 uctoa::started#4 ] +Attempting to uplift remaining variables inzp[1]:142 [ uctoa::digit_value#0 ] +Uplifting [uctoa] best 1575507 combination zp[1]:142 [ uctoa::digit_value#0 ] Attempting to uplift remaining variables inzp[1]:51 [ ultoa::digit#2 ultoa::digit#1 ] -Uplifting [ultoa] best 1569581 combination zp[1]:51 [ ultoa::digit#2 ultoa::digit#1 ] -Attempting to uplift remaining variables inzp[1]:19 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] -Uplifting [printf_number_buffer] best 1569581 combination zp[1]:19 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] -Attempting to uplift remaining variables inzp[1]:16 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] -Uplifting [printf_number_buffer] best 1569581 combination zp[1]:16 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] -Attempting to uplift remaining variables inzp[1]:9 [ print::j#2 print::j#1 ] -Uplifting [print] best 1569581 combination zp[1]:9 [ print::j#2 print::j#1 ] -Attempting to uplift remaining variables inzp[1]:13 [ printf_number_buffer::format_zero_padding#10 ] -Uplifting [printf_number_buffer] best 1569581 combination zp[1]:13 [ printf_number_buffer::format_zero_padding#10 ] -Attempting to uplift remaining variables inzp[1]:12 [ printf_number_buffer::format_justify_left#10 ] -Uplifting [printf_number_buffer] best 1569581 combination zp[1]:12 [ printf_number_buffer::format_justify_left#10 ] -Attempting to uplift remaining variables inzp[1]:17 [ printf_number_buffer::format_upper_case#10 ] -Uplifting [printf_number_buffer] best 1569581 combination zp[1]:17 [ printf_number_buffer::format_upper_case#10 ] -Attempting to uplift remaining variables inzp[1]:7 [ print::i#2 print::i#1 ] -Uplifting [print] best 1569581 combination zp[1]:7 [ print::i#2 print::i#1 ] -Attempting to uplift remaining variables inzp[1]:8 [ print::i1#2 print::i1#1 ] -Uplifting [print] best 1569581 combination zp[1]:8 [ print::i1#2 print::i1#1 ] -Attempting to uplift remaining variables inzp[1]:133 [ diff::return#1 ] -Uplifting [diff] best 1568981 combination reg byte a [ diff::return#1 ] -Attempting to uplift remaining variables inzp[1]:132 [ legal::$3 ] -Uplifting [legal] best 1568981 combination zp[1]:132 [ legal::$3 ] -Attempting to uplift remaining variables inzp[1]:83 [ legal::column#0 ] -Uplifting [legal] best 1568981 combination zp[1]:83 [ legal::column#0 ] -Attempting to uplift remaining variables inzp[1]:82 [ legal::row#0 ] -Uplifting [legal] best 1568981 combination zp[1]:82 [ legal::row#0 ] -Attempting to uplift remaining variables inzp[1]:69 [ utoa::digit#2 utoa::digit#1 ] -Uplifting [utoa] best 1568981 combination zp[1]:69 [ utoa::digit#2 utoa::digit#1 ] -Attempting to uplift remaining variables inzp[1]:2 [ queens::row#10 queens::row#1 queens::row#2 ] -Uplifting [queens] best 1568981 combination zp[1]:2 [ queens::row#10 queens::row#1 queens::row#2 ] -Attempting to uplift remaining variables inzp[1]:84 [ legal::return#0 ] -Uplifting [legal] best 1568921 combination reg byte a [ legal::return#0 ] +Uplifting [ultoa] best 1575507 combination zp[1]:51 [ ultoa::digit#2 ultoa::digit#1 ] +Attempting to uplift remaining variables inzp[1]:33 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] +Uplifting [printf_number_buffer] best 1575507 combination zp[1]:33 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] +Attempting to uplift remaining variables inzp[1]:30 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] +Uplifting [printf_number_buffer] best 1575507 combination zp[1]:30 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] +Attempting to uplift remaining variables inzp[1]:23 [ print::j#2 print::j#1 ] +Uplifting [print] best 1575507 combination zp[1]:23 [ print::j#2 print::j#1 ] +Attempting to uplift remaining variables inzp[1]:27 [ printf_number_buffer::format_zero_padding#10 ] +Uplifting [printf_number_buffer] best 1575507 combination zp[1]:27 [ printf_number_buffer::format_zero_padding#10 ] +Attempting to uplift remaining variables inzp[1]:26 [ printf_number_buffer::format_justify_left#10 ] +Uplifting [printf_number_buffer] best 1575507 combination zp[1]:26 [ printf_number_buffer::format_justify_left#10 ] +Attempting to uplift remaining variables inzp[1]:66 [ legal::diff1_return#2 legal::diff1_return#0 legal::diff1_return#1 ] +Uplifting [legal] best 1575507 combination zp[1]:66 [ legal::diff1_return#2 legal::diff1_return#0 legal::diff1_return#1 ] +Attempting to uplift remaining variables inzp[1]:31 [ printf_number_buffer::format_upper_case#10 ] +Uplifting [printf_number_buffer] best 1575507 combination zp[1]:31 [ printf_number_buffer::format_upper_case#10 ] +Attempting to uplift remaining variables inzp[1]:21 [ print::i#2 print::i#1 ] +Uplifting [print] best 1575507 combination zp[1]:21 [ print::i#2 print::i#1 ] +Attempting to uplift remaining variables inzp[1]:22 [ print::i1#2 print::i1#1 ] +Uplifting [print] best 1575507 combination zp[1]:22 [ print::i1#2 print::i1#1 ] +Attempting to uplift remaining variables inzp[1]:166 [ legal::diff1_a#0 ] +Uplifting [legal] best 1574507 combination reg byte a [ legal::diff1_a#0 ] +Attempting to uplift remaining variables inzp[1]:127 [ legal::column#0 ] +Uplifting [legal] best 1574507 combination zp[1]:127 [ legal::column#0 ] +Attempting to uplift remaining variables inzp[1]:126 [ legal::row#0 ] +Uplifting [legal] best 1574507 combination zp[1]:126 [ legal::row#0 ] +Attempting to uplift remaining variables inzp[1]:68 [ utoa::digit#2 utoa::digit#1 ] +Uplifting [utoa] best 1574507 combination zp[1]:68 [ utoa::digit#2 utoa::digit#1 ] +Attempting to uplift remaining variables inzp[1]:16 [ queens::row#10 queens::row#1 queens::row#2 ] +Uplifting [queens] best 1574507 combination zp[1]:16 [ queens::row#10 queens::row#1 queens::row#2 ] +Attempting to uplift remaining variables inzp[1]:128 [ legal::return#0 ] +Uplifting [legal] best 1574447 combination reg byte a [ legal::return#0 ] Attempting to uplift remaining variables inzp[1]:65 [ legal::return#4 ] -Uplifting [legal] best 1568885 combination reg byte a [ legal::return#4 ] -Coalescing zero page register [ zp[2]:80 [ printf_cursor_ptr ] ] with [ zp[2]:94 [ printf_scroll::$4 ] ] - score: 2 -Coalescing zero page register [ zp[1]:2 [ queens::row#10 queens::row#1 queens::row#2 ] ] with [ zp[1]:82 [ legal::row#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:3 [ count#11 count#13 ] ] with [ zp[4]:86 [ printf_ulong::uvalue#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:14 [ printf_number_buffer::buffer_digits#10 ] ] with [ zp[2]:35 [ printf_str::str#10 printf_str::str#11 printf_str::str#1 printf_str::str#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:24 [ memset::num#2 ] ] with [ zp[2]:96 [ memset::end#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:26 [ memset::str#3 ] ] with [ zp[2]:29 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:42 [ strlen::len#2 strlen::len#1 ] ] with [ zp[2]:90 [ strlen::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:47 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 ] ] with [ zp[2]:105 [ uctoa::buffer#3 ] ] - score: 1 -Coalescing zero page register [ zp[2]:47 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 ] ] with [ zp[2]:108 [ uctoa_append::buffer#0 ] ] - score: 1 +Uplifting [legal] best 1574411 combination reg byte a [ legal::return#4 ] +Attempting to uplift remaining variables inzp[1]:106 [ tod_str::$0 ] +Uplifting [tod_str] best 1574407 combination reg byte a [ tod_str::$0 ] +Attempting to uplift remaining variables inzp[1]:107 [ tod_str::$1 ] +Uplifting [tod_str] best 1574401 combination reg byte a [ tod_str::$1 ] +Attempting to uplift remaining variables inzp[1]:108 [ tod_str::$2 ] +Uplifting [tod_str] best 1574397 combination reg byte a [ tod_str::$2 ] +Attempting to uplift remaining variables inzp[1]:109 [ tod_str::$3 ] +Uplifting [tod_str] best 1574391 combination reg byte a [ tod_str::$3 ] +Attempting to uplift remaining variables inzp[1]:110 [ tod_str::$4 ] +Uplifting [tod_str] best 1574387 combination reg byte a [ tod_str::$4 ] +Attempting to uplift remaining variables inzp[1]:111 [ tod_str::$5 ] +Uplifting [tod_str] best 1574381 combination reg byte a [ tod_str::$5 ] +Attempting to uplift remaining variables inzp[1]:112 [ tod_str::$6 ] +Uplifting [tod_str] best 1574377 combination reg byte a [ tod_str::$6 ] +Attempting to uplift remaining variables inzp[1]:113 [ tod_str::$7 ] +Uplifting [tod_str] best 1574371 combination reg byte a [ tod_str::$7 ] +Attempting to uplift remaining variables inzp[1]:114 [ tod_str::$8 ] +Uplifting [tod_str] best 1574367 combination reg byte a [ tod_str::$8 ] +Attempting to uplift remaining variables inzp[1]:115 [ tod_str::$9 ] +Uplifting [tod_str] best 1574361 combination reg byte a [ tod_str::$9 ] +Attempting to uplift remaining variables inzp[1]:116 [ tod_str::$10 ] +Uplifting [tod_str] best 1574357 combination reg byte a [ tod_str::$10 ] +Attempting to uplift remaining variables inzp[1]:117 [ tod_str::$11 ] +Uplifting [tod_str] best 1574351 combination reg byte a [ tod_str::$11 ] +Attempting to uplift remaining variables inzp[1]:118 [ tod_str::$12 ] +Uplifting [tod_str] best 1574347 combination reg byte a [ tod_str::$12 ] +Attempting to uplift remaining variables inzp[1]:119 [ tod_str::$13 ] +Uplifting [tod_str] best 1574341 combination reg byte a [ tod_str::$13 ] +Attempting to uplift remaining variables inzp[1]:120 [ tod_str::$14 ] +Uplifting [tod_str] best 1574337 combination reg byte a [ tod_str::$14 ] +Attempting to uplift remaining variables inzp[1]:121 [ tod_str::$15 ] +Uplifting [tod_str] best 1574331 combination reg byte a [ tod_str::$15 ] +Attempting to uplift remaining variables inzp[1]:96 [ tod_str::tod_HOURS#0 ] +Uplifting [tod_str] best 1574326 combination reg byte x [ tod_str::tod_HOURS#0 ] +Attempting to uplift remaining variables inzp[1]:95 [ tod_str::tod_MIN#0 ] +Uplifting [tod_str] best 1574321 combination reg byte y [ tod_str::tod_MIN#0 ] +Attempting to uplift remaining variables inzp[1]:82 [ tod_init::tod_SEC#0 ] +Uplifting [tod_init] best 1574321 combination zp[1]:82 [ tod_init::tod_SEC#0 ] +Attempting to uplift remaining variables inzp[1]:81 [ tod_init::tod_TENTHS#0 ] +Uplifting [tod_init] best 1574321 combination zp[1]:81 [ tod_init::tod_TENTHS#0 ] +Attempting to uplift remaining variables inzp[1]:122 [ tod_read::return_HOURS#0 ] +Uplifting [tod_read] best 1574321 combination zp[1]:122 [ tod_read::return_HOURS#0 ] +Attempting to uplift remaining variables inzp[1]:94 [ tod_str::tod_SEC#0 ] +Uplifting [tod_str] best 1574321 combination zp[1]:94 [ tod_str::tod_SEC#0 ] +Attempting to uplift remaining variables inzp[1]:93 [ tod_str::tod_TENTHS#0 ] +Uplifting [tod_str] best 1574321 combination zp[1]:93 [ tod_str::tod_TENTHS#0 ] +Attempting to uplift remaining variables inzp[1]:85 [ tod_read::return_TENTHS#2 ] +Uplifting [tod_read] best 1574315 combination reg byte y [ tod_read::return_TENTHS#2 ] +Attempting to uplift remaining variables inzp[1]:86 [ tod_read::return_SEC#2 ] +Uplifting [tod_read] best 1574309 combination reg byte x [ tod_read::return_SEC#2 ] +Attempting to uplift remaining variables inzp[1]:87 [ tod_read::return_MIN#2 ] +Uplifting [tod_read] best 1574309 combination zp[1]:87 [ tod_read::return_MIN#2 ] +Attempting to uplift remaining variables inzp[1]:88 [ tod_read::return_HOURS#2 ] +Uplifting [tod_read] best 1574309 combination zp[1]:88 [ tod_read::return_HOURS#2 ] +Attempting to uplift remaining variables inzp[1]:91 [ main::tod_MIN#0 ] +Uplifting [main] best 1574309 combination zp[1]:91 [ main::tod_MIN#0 ] +Attempting to uplift remaining variables inzp[1]:92 [ main::tod_HOURS#0 ] +Uplifting [main] best 1574305 combination reg byte a [ main::tod_HOURS#0 ] +Coalescing zero page register [ zp[2]:79 [ printf_cursor_ptr ] ] with [ zp[2]:102 [ printf_scroll::$4 ] ] - score: 2 +Coalescing zero page register [ zp[2]:2 [ printf_str::str#11 printf_str::str#13 printf_str::str#1 printf_str::str#0 ] ] with [ zp[2]:28 [ printf_number_buffer::buffer_digits#10 ] ] - score: 1 +Coalescing zero page register [ zp[2]:4 [ memset::num#2 ] ] with [ zp[2]:104 [ memset::end#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:6 [ memset::str#3 ] ] with [ zp[2]:9 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 +Coalescing zero page register [ zp[1]:16 [ queens::row#10 queens::row#1 queens::row#2 ] ] with [ zp[1]:126 [ legal::row#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:17 [ count#14 count#22 ] ] with [ zp[4]:130 [ printf_ulong::uvalue#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:42 [ strlen::len#2 strlen::len#1 ] ] with [ zp[2]:134 [ strlen::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:47 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 ] ] with [ zp[2]:140 [ uctoa::buffer#3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:47 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 ] ] with [ zp[2]:143 [ uctoa_append::buffer#0 ] ] - score: 1 Coalescing zero page register [ zp[4]:52 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ] ] with [ zp[4]:59 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] ] - score: 1 -Coalescing zero page register [ zp[4]:52 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] ] with [ zp[4]:126 [ ultoa_append::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:57 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] ] with [ zp[2]:113 [ ultoa::buffer#3 ] ] - score: 1 -Coalescing zero page register [ zp[2]:57 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ] ] with [ zp[2]:120 [ ultoa_append::buffer#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:70 [ utoa::value#2 utoa::value#6 utoa::value#0 ] ] with [ zp[2]:75 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:70 [ utoa::value#2 utoa::value#6 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] ] with [ zp[2]:145 [ utoa_append::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:73 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] ] with [ zp[2]:136 [ utoa::buffer#3 ] ] - score: 1 -Coalescing zero page register [ zp[2]:73 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 ] ] with [ zp[2]:141 [ utoa_append::buffer#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:80 [ printf_cursor_ptr printf_scroll::$4 ] ] with [ zp[2]:99 [ printf_ln::$0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:80 [ printf_cursor_ptr printf_scroll::$4 printf_ln::$0 ] ] with [ zp[2]:101 [ printf_ln::$1 ] ] - score: 1 -Coalescing zero page register [ zp[1]:107 [ uctoa::digit_value#0 ] ] with [ zp[1]:110 [ uctoa_append::sub#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:116 [ ultoa::digit_value#0 ] ] with [ zp[4]:122 [ ultoa_append::sub#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:139 [ utoa::digit_value#0 ] ] with [ zp[2]:143 [ utoa_append::sub#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:42 [ strlen::len#2 strlen::len#1 strlen::return#2 ] ] with [ zp[2]:92 [ printf_number_buffer::$19 ] ] - score: 1 -Coalescing zero page register [ zp[2]:31 [ memcpy::src#2 memcpy::src#1 ] ] with [ zp[2]:24 [ memset::num#2 memset::end#0 ] ] -Coalescing zero page register [ zp[2]:33 [ memcpy::dst#2 memcpy::dst#1 ] ] with [ zp[2]:26 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] -Coalescing zero page register [ zp[2]:40 [ strlen::str#2 strlen::str#1 strlen::str#0 ] ] with [ zp[2]:37 [ strupr::src#2 strupr::str#0 strupr::src#1 ] ] -Coalescing zero page register [ zp[1]:44 [ uctoa::digit#2 uctoa::digit#1 ] ] with [ zp[1]:12 [ printf_number_buffer::format_justify_left#10 ] ] -Coalescing zero page register [ zp[1]:46 [ uctoa::started#2 uctoa::started#4 ] ] with [ zp[1]:13 [ printf_number_buffer::format_zero_padding#10 ] ] -Coalescing zero page register [ zp[2]:47 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 uctoa_append::buffer#0 ] ] with [ zp[2]:14 [ printf_number_buffer::buffer_digits#10 printf_str::str#10 printf_str::str#11 printf_str::str#1 printf_str::str#0 ] ] -Coalescing zero page register [ zp[1]:51 [ ultoa::digit#2 ultoa::digit#1 ] ] with [ zp[1]:16 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] ] +Coalescing zero page register [ zp[4]:52 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] ] with [ zp[4]:161 [ ultoa_append::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:57 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] ] with [ zp[2]:148 [ ultoa::buffer#3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:57 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ] ] with [ zp[2]:155 [ ultoa_append::buffer#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:69 [ utoa::value#2 utoa::value#6 utoa::value#0 ] ] with [ zp[2]:74 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:69 [ utoa::value#2 utoa::value#6 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] ] with [ zp[2]:177 [ utoa_append::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:72 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] ] with [ zp[2]:168 [ utoa::buffer#3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:72 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 ] ] with [ zp[2]:173 [ utoa_append::buffer#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:79 [ printf_cursor_ptr printf_scroll::$4 ] ] with [ zp[2]:98 [ printf_ln::$0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:79 [ printf_cursor_ptr printf_scroll::$4 printf_ln::$0 ] ] with [ zp[2]:100 [ printf_ln::$1 ] ] - score: 1 +Coalescing zero page register [ zp[1]:87 [ tod_read::return_MIN#2 ] ] with [ zp[1]:91 [ main::tod_MIN#0 ] ] - score: 1 +Coalescing zero page register [ zp[1]:88 [ tod_read::return_HOURS#2 ] ] with [ zp[1]:122 [ tod_read::return_HOURS#0 ] ] - score: 1 +Coalescing zero page register [ zp[1]:142 [ uctoa::digit_value#0 ] ] with [ zp[1]:145 [ uctoa_append::sub#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:151 [ ultoa::digit_value#0 ] ] with [ zp[4]:157 [ ultoa_append::sub#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:171 [ utoa::digit_value#0 ] ] with [ zp[2]:175 [ utoa_append::sub#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:42 [ strlen::len#2 strlen::len#1 strlen::return#2 ] ] with [ zp[2]:136 [ printf_number_buffer::$19 ] ] - score: 1 +Coalescing zero page register [ zp[2]:11 [ memcpy::src#2 memcpy::src#1 ] ] with [ zp[2]:4 [ memset::num#2 memset::end#0 ] ] +Coalescing zero page register [ zp[2]:13 [ memcpy::dst#2 memcpy::dst#1 ] ] with [ zp[2]:6 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] +Coalescing zero page register [ zp[2]:40 [ strlen::str#3 strlen::str#1 strlen::str#0 ] ] with [ zp[2]:37 [ strupr::src#2 strupr::str#0 strupr::src#1 ] ] +Coalescing zero page register [ zp[1]:44 [ uctoa::digit#2 uctoa::digit#1 ] ] with [ zp[1]:26 [ printf_number_buffer::format_justify_left#10 ] ] +Coalescing zero page register [ zp[1]:46 [ uctoa::started#2 uctoa::started#4 ] ] with [ zp[1]:27 [ printf_number_buffer::format_zero_padding#10 ] ] +Coalescing zero page register [ zp[2]:47 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 uctoa_append::buffer#0 ] ] with [ zp[2]:2 [ printf_str::str#11 printf_str::str#13 printf_str::str#1 printf_str::str#0 printf_number_buffer::buffer_digits#10 ] ] +Coalescing zero page register [ zp[1]:51 [ ultoa::digit#2 ultoa::digit#1 ] ] with [ zp[1]:30 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] ] Coalescing zero page register [ zp[2]:57 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 ] ] with [ zp[2]:42 [ strlen::len#2 strlen::len#1 strlen::return#2 printf_number_buffer::$19 ] ] -Coalescing zero page register [ zp[1]:69 [ utoa::digit#2 utoa::digit#1 ] ] with [ zp[1]:2 [ queens::row#10 queens::row#1 queens::row#2 legal::row#0 ] ] -Coalescing zero page register [ zp[1]:83 [ legal::column#0 ] ] with [ zp[1]:7 [ print::i#2 print::i#1 ] ] -Coalescing zero page register [ zp[1]:107 [ uctoa::digit_value#0 uctoa_append::sub#0 ] ] with [ zp[1]:17 [ printf_number_buffer::format_upper_case#10 ] ] -Coalescing zero page register [ zp[1]:132 [ legal::$3 ] ] with [ zp[1]:8 [ print::i1#2 print::i1#1 ] ] -Coalescing zero page register [ zp[2]:40 [ strlen::str#2 strlen::str#1 strlen::str#0 strupr::src#2 strupr::str#0 strupr::src#1 ] ] with [ zp[2]:31 [ memcpy::src#2 memcpy::src#1 memset::num#2 memset::end#0 ] ] -Coalescing zero page register [ zp[2]:57 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 strlen::len#2 strlen::len#1 strlen::return#2 printf_number_buffer::$19 ] ] with [ zp[2]:33 [ memcpy::dst#2 memcpy::dst#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] -Coalescing zero page register [ zp[2]:70 [ utoa::value#2 utoa::value#6 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 ] ] with [ zp[2]:47 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 uctoa_append::buffer#0 printf_number_buffer::buffer_digits#10 printf_str::str#10 printf_str::str#11 printf_str::str#1 printf_str::str#0 ] ] -Coalescing zero page register [ zp[2]:73 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] ] with [ zp[2]:40 [ strlen::str#2 strlen::str#1 strlen::str#0 strupr::src#2 strupr::str#0 strupr::src#1 memcpy::src#2 memcpy::src#1 memset::num#2 memset::end#0 ] ] -Coalescing zero page register [ zp[2]:139 [ utoa::digit_value#0 utoa_append::sub#0 ] ] with [ zp[2]:57 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 strlen::len#2 strlen::len#1 strlen::return#2 printf_number_buffer::$19 memcpy::dst#2 memcpy::dst#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] -Allocated (was zp[4]:3) zp[4]:2 [ count#11 count#13 printf_ulong::uvalue#0 ] -Allocated (was zp[1]:9) zp[1]:6 [ print::j#2 print::j#1 ] -Allocated (was zp[1]:19) zp[1]:7 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] -Allocated (was zp[1]:20) zp[1]:8 [ printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] -Allocated (was zp[1]:21) zp[1]:9 [ printf_padding::pad#5 ] -Allocated (was zp[1]:22) zp[1]:10 [ printf_padding::i#2 printf_padding::i#1 ] -Allocated (was zp[1]:44) zp[1]:11 [ uctoa::digit#2 uctoa::digit#1 printf_number_buffer::format_justify_left#10 ] -Allocated (was zp[1]:46) zp[1]:12 [ uctoa::started#2 uctoa::started#4 printf_number_buffer::format_zero_padding#10 ] -Allocated (was zp[1]:51) zp[1]:13 [ ultoa::digit#2 ultoa::digit#1 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] -Allocated (was zp[4]:52) zp[4]:14 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ultoa_append::return#0 ] -Allocated (was zp[1]:69) zp[1]:18 [ utoa::digit#2 utoa::digit#1 queens::row#10 queens::row#1 queens::row#2 legal::row#0 ] -Allocated (was zp[2]:70) zp[2]:19 [ utoa::value#2 utoa::value#6 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 uctoa_append::buffer#0 printf_number_buffer::buffer_digits#10 printf_str::str#10 printf_str::str#11 printf_str::str#1 printf_str::str#0 ] -Allocated (was zp[2]:73) zp[2]:21 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 strlen::str#2 strlen::str#1 strlen::str#0 strupr::src#2 strupr::str#0 strupr::src#1 memcpy::src#2 memcpy::src#1 memset::num#2 memset::end#0 ] -Allocated (was zp[1]:78) zp[1]:23 [ printf_cursor_x ] -Allocated (was zp[1]:79) zp[1]:24 [ printf_cursor_y ] -Allocated (was zp[2]:80) zp[2]:25 [ printf_cursor_ptr printf_scroll::$4 printf_ln::$0 printf_ln::$1 ] -Allocated (was zp[1]:83) zp[1]:27 [ legal::column#0 print::i#2 print::i#1 ] -Allocated (was zp[1]:107) zp[1]:28 [ uctoa::digit_value#0 uctoa_append::sub#0 printf_number_buffer::format_upper_case#10 ] -Allocated (was zp[4]:116) zp[4]:29 [ ultoa::digit_value#0 ultoa_append::sub#0 ] -Allocated (was zp[1]:132) zp[1]:33 [ legal::$3 print::i1#2 print::i1#1 ] -Allocated (was zp[2]:139) zp[2]:34 [ utoa::digit_value#0 utoa_append::sub#0 ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 strlen::len#2 strlen::len#1 strlen::return#2 printf_number_buffer::$19 memcpy::dst#2 memcpy::dst#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] +Coalescing zero page register [ zp[1]:66 [ legal::diff1_return#2 legal::diff1_return#0 legal::diff1_return#1 ] ] with [ zp[1]:21 [ print::i#2 print::i#1 ] ] +Coalescing zero page register [ zp[1]:68 [ utoa::digit#2 utoa::digit#1 ] ] with [ zp[1]:16 [ queens::row#10 queens::row#1 queens::row#2 legal::row#0 ] ] +Coalescing zero page register [ zp[1]:81 [ tod_init::tod_TENTHS#0 ] ] with [ zp[1]:22 [ print::i1#2 print::i1#1 ] ] +Coalescing zero page register [ zp[1]:82 [ tod_init::tod_SEC#0 ] ] with [ zp[1]:23 [ print::j#2 print::j#1 ] ] +Coalescing zero page register [ zp[1]:87 [ tod_read::return_MIN#2 main::tod_MIN#0 ] ] with [ zp[1]:31 [ printf_number_buffer::format_upper_case#10 ] ] +Coalescing zero page register [ zp[1]:88 [ tod_read::return_HOURS#2 tod_read::return_HOURS#0 ] ] with [ zp[1]:33 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] ] +Coalescing zero page register [ zp[1]:93 [ tod_str::tod_TENTHS#0 ] ] with [ zp[1]:34 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] ] +Coalescing zero page register [ zp[1]:94 [ tod_str::tod_SEC#0 ] ] with [ zp[1]:35 [ printf_padding::pad#7 ] ] +Coalescing zero page register [ zp[1]:127 [ legal::column#0 ] ] with [ zp[1]:36 [ printf_padding::i#2 printf_padding::i#1 ] ] +Coalescing zero page register [ zp[2]:40 [ strlen::str#3 strlen::str#1 strlen::str#0 strupr::src#2 strupr::str#0 strupr::src#1 ] ] with [ zp[2]:11 [ memcpy::src#2 memcpy::src#1 memset::num#2 memset::end#0 ] ] +Coalescing zero page register [ zp[2]:57 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 strlen::len#2 strlen::len#1 strlen::return#2 printf_number_buffer::$19 ] ] with [ zp[2]:13 [ memcpy::dst#2 memcpy::dst#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] +Coalescing zero page register [ zp[2]:69 [ utoa::value#2 utoa::value#6 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 ] ] with [ zp[2]:47 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 uctoa_append::buffer#0 printf_str::str#11 printf_str::str#13 printf_str::str#1 printf_str::str#0 printf_number_buffer::buffer_digits#10 ] ] +Coalescing zero page register [ zp[1]:82 [ tod_init::tod_SEC#0 print::j#2 print::j#1 ] ] with [ zp[1]:44 [ uctoa::digit#2 uctoa::digit#1 printf_number_buffer::format_justify_left#10 ] ] +Coalescing zero page register [ zp[1]:142 [ uctoa::digit_value#0 uctoa_append::sub#0 ] ] with [ zp[1]:51 [ ultoa::digit#2 ultoa::digit#1 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] ] +Coalescing zero page register [ zp[2]:72 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] ] with [ zp[2]:40 [ strlen::str#3 strlen::str#1 strlen::str#0 strupr::src#2 strupr::str#0 strupr::src#1 memcpy::src#2 memcpy::src#1 memset::num#2 memset::end#0 ] ] +Coalescing zero page register [ zp[2]:171 [ utoa::digit_value#0 utoa_append::sub#0 ] ] with [ zp[2]:57 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 strlen::len#2 strlen::len#1 strlen::return#2 printf_number_buffer::$19 memcpy::dst#2 memcpy::dst#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] +Allocated (was zp[4]:17) zp[4]:2 [ count#14 count#22 printf_ulong::uvalue#0 ] +Allocated (was zp[1]:46) zp[1]:6 [ uctoa::started#2 uctoa::started#4 printf_number_buffer::format_zero_padding#10 ] +Allocated (was zp[4]:52) zp[4]:7 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ultoa_append::return#0 ] +Allocated (was zp[1]:66) zp[1]:11 [ legal::diff1_return#2 legal::diff1_return#0 legal::diff1_return#1 print::i#2 print::i#1 ] +Allocated (was zp[1]:68) zp[1]:12 [ utoa::digit#2 utoa::digit#1 queens::row#10 queens::row#1 queens::row#2 legal::row#0 ] +Allocated (was zp[2]:69) zp[2]:13 [ utoa::value#2 utoa::value#6 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 uctoa_append::buffer#0 printf_str::str#11 printf_str::str#13 printf_str::str#1 printf_str::str#0 printf_number_buffer::buffer_digits#10 ] +Allocated (was zp[2]:72) zp[2]:15 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 strlen::str#3 strlen::str#1 strlen::str#0 strupr::src#2 strupr::str#0 strupr::src#1 memcpy::src#2 memcpy::src#1 memset::num#2 memset::end#0 ] +Allocated (was zp[1]:77) zp[1]:17 [ printf_cursor_x ] +Allocated (was zp[1]:78) zp[1]:18 [ printf_cursor_y ] +Allocated (was zp[2]:79) zp[2]:19 [ printf_cursor_ptr printf_scroll::$4 printf_ln::$0 printf_ln::$1 ] +Allocated (was zp[1]:81) zp[1]:21 [ tod_init::tod_TENTHS#0 print::i1#2 print::i1#1 ] +Allocated (was zp[1]:82) zp[1]:22 [ tod_init::tod_SEC#0 print::j#2 print::j#1 uctoa::digit#2 uctoa::digit#1 printf_number_buffer::format_justify_left#10 ] +Allocated (was zp[1]:87) zp[1]:23 [ tod_read::return_MIN#2 main::tod_MIN#0 printf_number_buffer::format_upper_case#10 ] +Allocated (was zp[1]:88) zp[1]:24 [ tod_read::return_HOURS#2 tod_read::return_HOURS#0 printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] +Allocated (was zp[1]:93) zp[1]:25 [ tod_str::tod_TENTHS#0 printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] +Allocated (was zp[1]:94) zp[1]:26 [ tod_str::tod_SEC#0 printf_padding::pad#7 ] +Allocated (was zp[1]:127) zp[1]:27 [ legal::column#0 printf_padding::i#2 printf_padding::i#1 ] +Allocated (was zp[1]:142) zp[1]:28 [ uctoa::digit_value#0 uctoa_append::sub#0 ultoa::digit#2 ultoa::digit#1 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] +Allocated (was zp[4]:151) zp[4]:29 [ ultoa::digit_value#0 ultoa_append::sub#0 ] +Allocated (was zp[2]:171) zp[2]:33 [ utoa::digit_value#0 utoa_append::sub#0 ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 strlen::len#2 strlen::len#1 strlen::return#2 printf_number_buffer::$19 memcpy::dst#2 memcpy::dst#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -8957,11 +10534,22 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 + .const OFFSET_STRUCT_TIME_OF_DAY_SEC = 1 + .const OFFSET_STRUCT_TIME_OF_DAY_MIN = 2 + .const OFFSET_STRUCT_TIME_OF_DAY_HOURS = 3 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f + .const OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS = $b + .const OFFSET_STRUCT_MOS6526_CIA_TOD_MIN = $a + .const OFFSET_STRUCT_MOS6526_CIA_TOD_SEC = 9 + .const OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = 8 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c - .label printf_cursor_x = $17 - .label printf_cursor_y = $18 - .label printf_cursor_ptr = $19 + .label printf_cursor_x = $11 + .label printf_cursor_y = $12 + .label printf_cursor_ptr = $13 // The number of found solutions .label count = 2 // @begin @@ -8999,8 +10587,9 @@ __bend_from___b2: __bend: // main main: { + .label tod_MIN = $17 // [8] call printf_cls - // [307] phi from main to printf_cls [phi:main->printf_cls] + // [365] phi from main to printf_cls [phi:main->printf_cls] printf_cls_from_main: jsr printf_cls // [9] phi from main to main::@1 [phi:main->main::@1] @@ -9009,9 +10598,9 @@ main: { // main::@1 __b1: // [10] call printf_str - // [148] phi from main::@1 to printf_str [phi:main::@1->printf_str] + // [46] phi from main::@1 to printf_str [phi:main::@1->printf_str] printf_str_from___b1: - // [148] phi (byte*) printf_str::str#11 = (const byte*) main::str [phi:main::@1->printf_str#0] -- pbuz1=pbuc1 + // [46] phi (byte*) printf_str::str#13 = (const byte*) main::str [phi:main::@1->printf_str#0] -- pbuz1=pbuc1 lda #str @@ -9023,9 +10612,9 @@ main: { // main::@2 __b2: // [12] call printf_str - // [148] phi from main::@2 to printf_str [phi:main::@2->printf_str] + // [46] phi from main::@2 to printf_str [phi:main::@2->printf_str] printf_str_from___b2: - // [148] phi (byte*) printf_str::str#11 = (const byte*) main::str1 [phi:main::@2->printf_str#0] -- pbuz1=pbuc1 + // [46] phi (byte*) printf_str::str#13 = (const byte*) main::str1 [phi:main::@2->printf_str#0] -- pbuz1=pbuc1 lda #str1 @@ -9037,27 +10626,533 @@ main: { // main::@3 __b3: // [14] call printf_uint - // [273] phi from main::@3 to printf_uint [phi:main::@3->printf_uint] + // [331] phi from main::@3 to printf_uint [phi:main::@3->printf_uint] printf_uint_from___b3: jsr printf_uint - // [15] phi from main::@3 to main::@4 [phi:main::@3->main::@4] - __b4_from___b3: jmp __b4 // main::@4 __b4: - // [16] call queens - // [18] phi from main::@4 to queens [phi:main::@4->queens] - queens_from___b4: + // [15] (byte) tod_init::tod_TENTHS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO) -- vbuz1=_deref_pbuc1 + lda TOD_ZERO + sta.z tod_init.tod_TENTHS + // [16] (byte) tod_init::tod_SEC#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC) -- vbuz1=_deref_pbuc1 + lda TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_SEC + sta.z tod_init.tod_SEC + // [17] (byte) tod_init::tod_MIN#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN) -- vbuxx=_deref_pbuc1 + ldx TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_MIN + // [18] (byte) tod_init::tod_HOURS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS) -- vbuyy=_deref_pbuc1 + ldy TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS + // [19] call tod_init + jsr tod_init + // [20] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + __b5_from___b4: + jmp __b5 + // main::@5 + __b5: + // [21] call queens + // [128] phi from main::@5 to queens [phi:main::@5->queens] + queens_from___b5: jsr queens + // [22] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + __b6_from___b5: + jmp __b6 + // main::@6 + __b6: + // [23] call tod_read + jsr tod_read + // [24] (byte) tod_read::return_TENTHS#2 ← (byte) tod_read::return_TENTHS#0 + // [25] (byte) tod_read::return_SEC#2 ← (byte) tod_read::return_SEC#0 + // [26] (byte) tod_read::return_MIN#2 ← (byte) tod_read::return_MIN#0 -- vbuz1=vbuaa + sta.z tod_read.return_MIN + // [27] (byte) tod_read::return_HOURS#2 ← (byte) tod_read::return_HOURS#0 + jmp __b7 + // main::@7 + __b7: + // [28] (byte) main::tod_TENTHS#0 ← (byte) tod_read::return_TENTHS#2 + // [29] (byte) main::tod_SEC#0 ← (byte) tod_read::return_SEC#2 + // [30] (byte) main::tod_MIN#0 ← (byte) tod_read::return_MIN#2 + // [31] (byte) main::tod_HOURS#0 ← (byte) tod_read::return_HOURS#2 -- vbuaa=vbuz1 + lda.z tod_read.return_HOURS + // [32] (byte) tod_str::tod_TENTHS#0 ← (byte) main::tod_TENTHS#0 -- vbuz1=vbuyy + sty.z tod_str.tod_TENTHS + // [33] (byte) tod_str::tod_SEC#0 ← (byte) main::tod_SEC#0 -- vbuz1=vbuxx + stx.z tod_str.tod_SEC + // [34] (byte) tod_str::tod_MIN#0 ← (byte) main::tod_MIN#0 -- vbuyy=vbuz1 + ldy.z tod_MIN + // [35] (byte) tod_str::tod_HOURS#0 ← (byte) main::tod_HOURS#0 -- vbuxx=vbuaa + tax + // [36] call tod_str + jsr tod_str + // [37] phi from main::@7 to main::@8 [phi:main::@7->main::@8] + __b8_from___b7: + jmp __b8 + // main::@8 + __b8: + // [38] call printf_str + // [46] phi from main::@8 to printf_str [phi:main::@8->printf_str] + printf_str_from___b8: + // [46] phi (byte*) printf_str::str#13 = (const byte*) main::str2 [phi:main::@8->printf_str#0] -- pbuz1=pbuc1 + lda #str2 + sta.z printf_str.str+1 + jsr printf_str + // [39] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + __b9_from___b8: + jmp __b9 + // main::@9 + __b9: + // [40] call printf_string + // [42] phi from main::@9 to printf_string [phi:main::@9->printf_string] + printf_string_from___b9: + jsr printf_string jmp __breturn // main::@return __breturn: - // [17] return + // [41] return rts str: .text " - n queens problem using backtracking -" .byte 0 - str1: .text @"\nNumber of queens:" + str1: .text @"\nnumber of queens:" .byte 0 + str2: .text @"\ntime: " + .byte 0 +} + // printf_string +// Print a string value using a specific format +// Handles justification and min length +printf_string: { + // [43] phi from printf_string to printf_string::@1 [phi:printf_string->printf_string::@1] + __b1_from_printf_string: + jmp __b1 + // printf_string::@1 + __b1: + // [44] call printf_str + // [46] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] + printf_str_from___b1: + // [46] phi (byte*) printf_str::str#13 = (const byte*) tod_buffer [phi:printf_string::@1->printf_str#0] -- pbuz1=pbuc1 + lda #tod_buffer + sta.z printf_str.str+1 + jsr printf_str + jmp __breturn + // printf_string::@return + __breturn: + // [45] return + rts +} + // printf_str +// Print a zero-terminated string +// Handles escape codes such as newline +// printf_str(byte* zp($d) str) +printf_str: { + .label str = $d + // [47] phi from printf_str printf_str::@4 printf_str::@5 to printf_str::@1 [phi:printf_str/printf_str::@4/printf_str::@5->printf_str::@1] + __b1_from_printf_str: + __b1_from___b4: + __b1_from___b5: + // [47] phi (byte*) printf_str::str#11 = (byte*) printf_str::str#13 [phi:printf_str/printf_str::@4/printf_str::@5->printf_str::@1#0] -- register_copy + jmp __b1 + // printf_str::@1 + __b1: + jmp __b2 + // printf_str::@2 + __b2: + // [48] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#11) -- vbuaa=_deref_pbuz1 + ldy #0 + lda (str),y + // [49] (byte*) printf_str::str#0 ← ++ (byte*) printf_str::str#11 -- pbuz1=_inc_pbuz1 + inc.z str + bne !+ + inc.z str+1 + !: + // [50] if((byte) printf_str::ch#0!=(byte) 0) goto printf_str::@3 -- vbuaa_neq_0_then_la1 + cmp #0 + bne __b3 + jmp __breturn + // printf_str::@return + __breturn: + // [51] return + rts + // printf_str::@3 + __b3: + // [52] if((byte) printf_str::ch#0==(byte) ' ') goto printf_str::@4 -- vbuaa_eq_vbuc1_then_la1 + cmp #'\n' + beq __b4_from___b3 + jmp __b5 + // printf_str::@5 + __b5: + // [53] (byte) printf_char::ch#1 ← (byte) printf_str::ch#0 + // [54] call printf_char + // [89] phi from printf_str::@5 to printf_char [phi:printf_str::@5->printf_char] + printf_char_from___b5: + // [89] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#1 [phi:printf_str::@5->printf_char#0] -- register_copy + jsr printf_char + jmp __b1_from___b5 + // [55] phi from printf_str::@3 to printf_str::@4 [phi:printf_str::@3->printf_str::@4] + __b4_from___b3: + jmp __b4 + // printf_str::@4 + __b4: + // [56] call printf_ln + jsr printf_ln + jmp __b1_from___b4 +} + // printf_ln +// Print a newline +printf_ln: { + .label __0 = $13 + .label __1 = $13 + // [57] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x -- pbuz1=pbuz1_minus_vbuz2 + sec + lda.z __0 + sbc.z printf_cursor_x + sta.z __0 + bcs !+ + dec.z __0+1 + !: + // [58] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z __1 + sta.z __1 + bcc !+ + inc.z __1+1 + !: + // [59] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1 + // [60] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 + lda #0 + sta.z printf_cursor_x + // [61] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y -- vbuz1=_inc_vbuz1 + inc.z printf_cursor_y + // [62] call printf_scroll + jsr printf_scroll + jmp __breturn + // printf_ln::@return + __breturn: + // [63] return + rts +} + // printf_scroll +// Scroll the entire screen if the cursor is on the last line +printf_scroll: { + .label __4 = $13 + // [64] if((byte) printf_cursor_y!=(byte) $19) goto printf_scroll::@return -- vbuz1_neq_vbuc1_then_la1 + lda #$19 + cmp.z printf_cursor_y + bne __breturn + // [65] phi from printf_scroll to printf_scroll::@1 [phi:printf_scroll->printf_scroll::@1] + __b1_from_printf_scroll: + jmp __b1 + // printf_scroll::@1 + __b1: + // [66] call memcpy + // [82] phi from printf_scroll::@1 to memcpy [phi:printf_scroll::@1->memcpy] + memcpy_from___b1: + jsr memcpy + // [67] phi from printf_scroll::@1 to printf_scroll::@2 [phi:printf_scroll::@1->printf_scroll::@2] + __b2_from___b1: + jmp __b2 + // printf_scroll::@2 + __b2: + // [68] call memset + // [73] phi from printf_scroll::@2 to memset [phi:printf_scroll::@2->memset] + memset_from___b2: + // [73] phi (byte) memset::c#4 = (byte) ' ' [phi:printf_scroll::@2->memset#0] -- vbuxx=vbuc1 + ldx #' ' + // [73] phi (void*) memset::str#3 = (void*)(number) $400+(number) $28*(number) $19-(number) $28 [phi:printf_scroll::@2->memset#1] -- pvoz1=pvoc1 + lda #<$400+$28*$19-$28 + sta.z memset.str + lda #>$400+$28*$19-$28 + sta.z memset.str+1 + // [73] phi (word) memset::num#2 = (byte) $28 [phi:printf_scroll::@2->memset#2] -- vwuz1=vbuc1 + lda #<$28 + sta.z memset.num + lda #>$28 + sta.z memset.num+1 + jsr memset + jmp __b3 + // printf_scroll::@3 + __b3: + // [69] (byte*~) printf_scroll::$4 ← (byte*) printf_cursor_ptr - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda.z __4 + sec + sbc #<$28 + sta.z __4 + lda.z __4+1 + sbc #>$28 + sta.z __4+1 + // [70] (byte*) printf_cursor_ptr ← (byte*~) printf_scroll::$4 + // [71] (byte) printf_cursor_y ← -- (byte) printf_cursor_y -- vbuz1=_dec_vbuz1 + dec.z printf_cursor_y + jmp __breturn + // printf_scroll::@return + __breturn: + // [72] return + rts +} + // memset +// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. +// memset(void* zp($21) str, byte register(X) c, word zp($f) num) +memset: { + .label end = $f + .label dst = $21 + .label num = $f + .label str = $21 + // [74] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 + lda.z num + bne !+ + lda.z num+1 + beq __breturn + !: + jmp __b1 + // memset::@1 + __b1: + // [75] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 + lda.z end + clc + adc.z str + sta.z end + lda.z end+1 + adc.z str+1 + sta.z end+1 + // [76] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + // [77] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + __b2_from___b1: + __b2_from___b3: + // [77] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + jmp __b2 + // memset::@2 + __b2: + // [78] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + lda.z dst+1 + cmp.z end+1 + bne __b3 + lda.z dst + cmp.z end + bne __b3 + jmp __breturn + // memset::@return + __breturn: + // [79] return + rts + // memset::@3 + __b3: + // [80] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx + txa + ldy #0 + sta (dst),y + // [81] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + inc.z dst + bne !+ + inc.z dst+1 + !: + jmp __b2_from___b3 +} + // memcpy +// Copy block of memory (forwards) +// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. +memcpy: { + .label destination = $400 + .label source = $400+$28 + .const num = $28*$19-$28 + .label src_end = source+num + .label dst = $21 + .label src = $f + // [83] phi from memcpy to memcpy::@1 [phi:memcpy->memcpy::@1] + __b1_from_memcpy: + // [83] phi (byte*) memcpy::dst#2 = (byte*)(const void*) memcpy::destination#0 [phi:memcpy->memcpy::@1#0] -- pbuz1=pbuc1 + lda #destination + sta.z dst+1 + // [83] phi (byte*) memcpy::src#2 = (byte*)(const void*) memcpy::source#0 [phi:memcpy->memcpy::@1#1] -- pbuz1=pbuc1 + lda #source + sta.z src+1 + jmp __b1 + // memcpy::@1 + __b1: + // [84] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuc1_then_la1 + lda.z src+1 + cmp #>src_end + bne __b2 + lda.z src + cmp #memcpy::@1] + __b1_from___b2: + // [83] phi (byte*) memcpy::dst#2 = (byte*) memcpy::dst#1 [phi:memcpy::@2->memcpy::@1#0] -- register_copy + // [83] phi (byte*) memcpy::src#2 = (byte*) memcpy::src#1 [phi:memcpy::@2->memcpy::@1#1] -- register_copy + jmp __b1 +} + // printf_char +// Print a single char +// If the end of the screen is reached scroll it up one char and place the cursor at the +// printf_char(byte register(A) ch) +printf_char: { + // [90] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#3 -- _deref_pbuz1=vbuaa + ldy #0 + sta (printf_cursor_ptr),y + // [91] (byte*) printf_cursor_ptr ← ++ (byte*) printf_cursor_ptr -- pbuz1=_inc_pbuz1 + inc.z printf_cursor_ptr + bne !+ + inc.z printf_cursor_ptr+1 + !: + // [92] (byte) printf_cursor_x ← ++ (byte) printf_cursor_x -- vbuz1=_inc_vbuz1 + inc.z printf_cursor_x + // [93] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return -- vbuz1_neq_vbuc1_then_la1 + lda #$28 + cmp.z printf_cursor_x + bne __breturn + jmp __b1 + // printf_char::@1 + __b1: + // [94] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 + lda #0 + sta.z printf_cursor_x + // [95] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y -- vbuz1=_inc_vbuz1 + inc.z printf_cursor_y + // [96] call printf_scroll + jsr printf_scroll + jmp __breturn + // printf_char::@return + __breturn: + // [97] return + rts +} + // tod_str +// Convert time of day to a human-readable string "hh:mm:ss:10" +// tod_str(byte zp($19) tod_TENTHS, byte zp($1a) tod_SEC, byte register(Y) tod_MIN, byte register(X) tod_HOURS) +tod_str: { + .label tod_TENTHS = $19 + .label tod_SEC = $1a + // [98] (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#0 >> (byte) 4 -- vbuaa=vbuxx_ror_4 + txa + lsr + lsr + lsr + lsr + // [99] (byte~) tod_str::$1 ← (byte) '0' + (byte~) tod_str::$0 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // [100] *((const byte*) tod_buffer) ← (byte~) tod_str::$1 -- _deref_pbuc1=vbuaa + sta tod_buffer + // [101] (byte~) tod_str::$2 ← (byte) tod_str::tod_HOURS#0 & (byte) $f -- vbuaa=vbuxx_band_vbuc1 + txa + and #$f + // [102] (byte~) tod_str::$3 ← (byte) '0' + (byte~) tod_str::$2 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // [103] *((const byte*) tod_buffer+(byte) 1) ← (byte~) tod_str::$3 -- _deref_pbuc1=vbuaa + sta tod_buffer+1 + // [104] (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#0 >> (byte) 4 -- vbuaa=vbuyy_ror_4 + tya + lsr + lsr + lsr + lsr + // [105] (byte~) tod_str::$5 ← (byte) '0' + (byte~) tod_str::$4 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // [106] *((const byte*) tod_buffer+(byte) 3) ← (byte~) tod_str::$5 -- _deref_pbuc1=vbuaa + sta tod_buffer+3 + // [107] (byte~) tod_str::$6 ← (byte) tod_str::tod_MIN#0 & (byte) $f -- vbuaa=vbuyy_band_vbuc1 + tya + and #$f + // [108] (byte~) tod_str::$7 ← (byte) '0' + (byte~) tod_str::$6 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // [109] *((const byte*) tod_buffer+(byte) 4) ← (byte~) tod_str::$7 -- _deref_pbuc1=vbuaa + sta tod_buffer+4 + // [110] (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#0 >> (byte) 4 -- vbuaa=vbuz1_ror_4 + lda.z tod_SEC + lsr + lsr + lsr + lsr + // [111] (byte~) tod_str::$9 ← (byte) '0' + (byte~) tod_str::$8 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // [112] *((const byte*) tod_buffer+(byte) 6) ← (byte~) tod_str::$9 -- _deref_pbuc1=vbuaa + sta tod_buffer+6 + // [113] (byte~) tod_str::$10 ← (byte) tod_str::tod_SEC#0 & (byte) $f -- vbuaa=vbuz1_band_vbuc1 + lda #$f + and.z tod_SEC + // [114] (byte~) tod_str::$11 ← (byte) '0' + (byte~) tod_str::$10 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // [115] *((const byte*) tod_buffer+(byte) 7) ← (byte~) tod_str::$11 -- _deref_pbuc1=vbuaa + sta tod_buffer+7 + // [116] (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#0 >> (byte) 4 -- vbuaa=vbuz1_ror_4 + lda.z tod_TENTHS + lsr + lsr + lsr + lsr + // [117] (byte~) tod_str::$13 ← (byte) '0' + (byte~) tod_str::$12 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // [118] *((const byte*) tod_buffer+(byte) 9) ← (byte~) tod_str::$13 -- _deref_pbuc1=vbuaa + sta tod_buffer+9 + // [119] (byte~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#0 & (byte) $f -- vbuaa=vbuz1_band_vbuc1 + lda #$f + and.z tod_TENTHS + // [120] (byte~) tod_str::$15 ← (byte) '0' + (byte~) tod_str::$14 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // [121] *((const byte*) tod_buffer+(byte) $a) ← (byte~) tod_str::$15 -- _deref_pbuc1=vbuaa + sta tod_buffer+$a + jmp __breturn + // tod_str::@return + __breturn: + // [122] return + rts +} + // tod_read +// Read time of day +tod_read: { + .label return_HOURS = $18 + .label return_MIN = $17 + // [123] (byte) tod_read::return_HOURS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) -- vbuz1=_deref_pbuc1 + // Reading sequence is important. TOD latches on reading hours until 10ths is read. + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS + sta.z return_HOURS + // [124] (byte) tod_read::return_MIN#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) -- vbuaa=_deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_MIN + // [125] (byte) tod_read::return_SEC#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) -- vbuxx=_deref_pbuc1 + ldx CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_SEC + // [126] (byte) tod_read::return_TENTHS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) -- vbuyy=_deref_pbuc1 + ldy CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_10THS + jmp __breturn + // tod_read::@return + __breturn: + // [127] return + rts } // queens // Generates all valid placements of queens on a NxN board without recursion @@ -9068,10 +11163,10 @@ main: { // When all columns on a row is exhausted move back down to the lower level and move forward one position until we are done with the last position on the first row queens: { // The current row where the queen is moving - .label row = $12 - // [19] phi from queens to queens::@1 [phi:queens->queens::@1] + .label row = $c + // [129] phi from queens to queens::@1 [phi:queens->queens::@1] __b1_from_queens: - // [19] phi (dword) count#11 = (dword) 0 [phi:queens->queens::@1#0] -- vduz1=vduc1 + // [129] phi (dword) count#14 = (dword) 0 [phi:queens->queens::@1#0] -- vduz1=vduc1 lda #<0 sta.z count lda #>0 @@ -9080,103 +11175,68 @@ queens: { sta.z count+2 lda #>0>>$10 sta.z count+3 - // [19] phi (byte) queens::row#10 = (byte) 1 [phi:queens->queens::@1#1] -- vbuz1=vbuc1 + // [129] phi (byte) queens::row#10 = (byte) 1 [phi:queens->queens::@1#1] -- vbuz1=vbuc1 lda #1 sta.z row jmp __b1 + // [129] phi from queens::@4 queens::@7 queens::@8 queens::@9 to queens::@1 [phi:queens::@4/queens::@7/queens::@8/queens::@9->queens::@1] + __b1_from___b4: + __b1_from___b7: + __b1_from___b8: + __b1_from___b9: + // [129] phi (dword) count#14 = (dword) count#22 [phi:queens::@4/queens::@7/queens::@8/queens::@9->queens::@1#0] -- register_copy + // [129] phi (byte) queens::row#10 = (byte) queens::row#10 [phi:queens::@4/queens::@7/queens::@8/queens::@9->queens::@1#1] -- register_copy + jmp __b1 // queens::@1 __b1: jmp __b2 // queens::@2 __b2: - // [20] *((const byte*) board + (byte) queens::row#10) ← ++ *((const byte*) board + (byte) queens::row#10) -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 + // [130] *((const byte*) board + (byte) queens::row#10) ← ++ *((const byte*) board + (byte) queens::row#10) -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 ldx.z row inc board,x - // [21] if(*((const byte*) board + (byte) queens::row#10)==(byte)(number) 8+(number) 1) goto queens::@3 -- pbuc1_derefidx_vbuz1_eq_vbuc2_then_la1 + // [131] if(*((const byte*) board + (byte) queens::row#10)==(byte)(number) 8+(number) 1) goto queens::@3 -- pbuc1_derefidx_vbuz1_eq_vbuc2_then_la1 ldy.z row lda board,y cmp #8+1 beq __b3 - jmp __b7 - // queens::@7 - __b7: - // [22] (byte) legal::row#0 ← (byte) queens::row#10 - // [23] (byte) legal::column#0 ← *((const byte*) board + (byte) queens::row#10) -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z row - lda board,y - sta.z legal.column - // [24] call legal - // [248] phi from queens::@7 to legal [phi:queens::@7->legal] - legal_from___b7: - jsr legal - // [25] (byte) legal::return#0 ← (byte) legal::return#4 - jmp __b9 - // queens::@9 - __b9: - // [26] (byte~) queens::$2 ← (byte) legal::return#0 - // [27] if((byte) 0!=(byte~) queens::$2) goto queens::@4 -- vbuc1_neq_vbuaa_then_la1 - // check if the current position on row 1-row is legal - cmp #0 - bne __b4 - // [19] phi from queens::@5 queens::@6 queens::@8 queens::@9 to queens::@1 [phi:queens::@5/queens::@6/queens::@8/queens::@9->queens::@1] - __b1_from___b5: - __b1_from___b6: - __b1_from___b8: - __b1_from___b9: - // [19] phi (dword) count#11 = (dword) count#13 [phi:queens::@5/queens::@6/queens::@8/queens::@9->queens::@1#0] -- register_copy - // [19] phi (byte) queens::row#10 = (byte) queens::row#10 [phi:queens::@5/queens::@6/queens::@8/queens::@9->queens::@1#1] -- register_copy - jmp __b1 - // queens::@4 - __b4: - // [28] if((byte) queens::row#10==(byte) 8) goto queens::@5 -- vbuz1_eq_vbuc1_then_la1 - // position is legal - move up to the next row - lda #8 - cmp.z row - beq __b5_from___b4 - jmp __b6 - // queens::@6 - __b6: - // [29] (byte) queens::row#1 ← ++ (byte) queens::row#10 -- vbuz1=_inc_vbuz1 - inc.z row - jmp __b1_from___b6 - // [30] phi from queens::@4 to queens::@5 [phi:queens::@4->queens::@5] - __b5_from___b4: jmp __b5 // queens::@5 __b5: - // [31] call print - // We have a complete legal board - print it! - jsr print - jmp __b1_from___b5 - // queens::@3 - __b3: - // [32] *((const byte*) board + (byte) queens::row#10) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 - // We moved past the end of the row - reset position and go down to the lower row - lda #0 + // [132] (byte) legal::row#0 ← (byte) queens::row#10 + // [133] (byte) legal::column#0 ← *((const byte*) board + (byte) queens::row#10) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z row - sta board,y - // [33] if((byte) queens::row#10==(byte) 1) goto queens::@return -- vbuz1_eq_vbuc1_then_la1 - lda #1 + lda board,y + sta.z legal.column + // [134] call legal + // [306] phi from queens::@5 to legal [phi:queens::@5->legal] + legal_from___b5: + jsr legal + // [135] (byte) legal::return#0 ← (byte) legal::return#4 + jmp __b9 + // queens::@9 + __b9: + // [136] (byte~) queens::$2 ← (byte) legal::return#0 + // [137] if((byte) 0==(byte~) queens::$2) goto queens::@1 -- vbuc1_eq_vbuaa_then_la1 + cmp #0 + beq __b1_from___b9 + jmp __b6 + // queens::@6 + __b6: + // [138] if((byte) queens::row#10==(byte) 8) goto queens::@4 -- vbuz1_eq_vbuc1_then_la1 + // position is legal - move up to the next row + lda #8 cmp.z row - beq __breturn - jmp __b8 - // queens::@8 - __b8: - // [34] (byte) queens::row#2 ← -- (byte) queens::row#10 -- vbuz1=_dec_vbuz1 - dec.z row - jmp __b1_from___b8 - // queens::@return - __breturn: - // [35] return - rts -} - // print -// Print the board with a legal placement. Also increments the solution count. -print: { - .label i = $1b - .label i1 = $21 - .label j = 6 - // [36] (dword) count#13 ← ++ (dword) count#11 -- vduz1=_inc_vduz1 + beq __b4 + jmp __b7 + // queens::@7 + __b7: + // [139] (byte) queens::row#1 ← ++ (byte) queens::row#10 -- vbuz1=_inc_vbuz1 + inc.z row + jmp __b1_from___b7 + // queens::@4 + __b4: + // [140] (dword) count#22 ← ++ (dword) count#14 -- vduz1=_inc_vduz1 inc.z count bne !+ inc.z count+1 @@ -9185,10 +11245,43 @@ print: { bne !+ inc.z count+3 !: - // [37] call printf_str - // [148] phi from print to printf_str [phi:print->printf_str] + // [141] call print + // [146] phi from queens::@4 to print [phi:queens::@4->print] + print_from___b4: + jsr print + jmp __b1_from___b4 + // queens::@3 + __b3: + // [142] *((const byte*) board + (byte) queens::row#10) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 + // We moved past the end of the row - reset position and go down to the lower row + lda #0 + ldy.z row + sta board,y + // [143] if((byte) queens::row#10==(byte) 1) goto queens::@return -- vbuz1_eq_vbuc1_then_la1 + lda #1 + cmp.z row + beq __breturn + jmp __b8 + // queens::@8 + __b8: + // [144] (byte) queens::row#2 ← -- (byte) queens::row#10 -- vbuz1=_dec_vbuz1 + dec.z row + jmp __b1_from___b8 + // queens::@return + __breturn: + // [145] return + rts +} + // print +// Print the board with a legal placement. +print: { + .label i = $b + .label i1 = $15 + .label j = $16 + // [147] call printf_str + // [46] phi from print to printf_str [phi:print->printf_str] printf_str_from_print: - // [148] phi (byte*) printf_str::str#11 = (const byte*) print::str [phi:print->printf_str#0] -- pbuz1=pbuc1 + // [46] phi (byte*) printf_str::str#13 = (const byte*) print::str [phi:print->printf_str#0] -- pbuz1=pbuc1 lda #str @@ -9197,63 +11290,63 @@ print: { jmp __b11 // print::@11 __b11: - // [38] (dword) printf_ulong::uvalue#0 ← (dword) count#13 - // [39] call printf_ulong - // [213] phi from print::@11 to printf_ulong [phi:print::@11->printf_ulong] + // [148] (dword) printf_ulong::uvalue#0 ← (dword) count#22 + // [149] call printf_ulong + // [271] phi from print::@11 to printf_ulong [phi:print::@11->printf_ulong] printf_ulong_from___b11: jsr printf_ulong - // [40] phi from print::@11 to print::@12 [phi:print::@11->print::@12] + // [150] phi from print::@11 to print::@12 [phi:print::@11->print::@12] __b12_from___b11: jmp __b12 // print::@12 __b12: - // [41] call printf_str - // [148] phi from print::@12 to printf_str [phi:print::@12->printf_str] + // [151] call printf_str + // [46] phi from print::@12 to printf_str [phi:print::@12->printf_str] printf_str_from___b12: - // [148] phi (byte*) printf_str::str#11 = (const byte*) print::str1 [phi:print::@12->printf_str#0] -- pbuz1=pbuc1 + // [46] phi (byte*) printf_str::str#13 = (const byte*) print::str1 [phi:print::@12->printf_str#0] -- pbuz1=pbuc1 lda #str1 sta.z printf_str.str+1 jsr printf_str - // [42] phi from print::@12 to print::@1 [phi:print::@12->print::@1] + // [152] phi from print::@12 to print::@1 [phi:print::@12->print::@1] __b1_from___b12: - // [42] phi (byte) print::i#2 = (byte) 1 [phi:print::@12->print::@1#0] -- vbuz1=vbuc1 + // [152] phi (byte) print::i#2 = (byte) 1 [phi:print::@12->print::@1#0] -- vbuz1=vbuc1 lda #1 sta.z i jmp __b1 // print::@1 __b1: - // [43] if((byte) print::i#2<(byte) 8+(byte) 1) goto print::@2 -- vbuz1_lt_vbuc1_then_la1 + // [153] if((byte) print::i#2<(byte) 8+(byte) 1) goto print::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z i cmp #8+1 bcc __b2 - // [44] phi from print::@1 to print::@3 [phi:print::@1->print::@3] + // [154] phi from print::@1 to print::@3 [phi:print::@1->print::@3] __b3_from___b1: - // [44] phi (byte) print::i1#2 = (byte) 1 [phi:print::@1->print::@3#0] -- vbuz1=vbuc1 + // [154] phi (byte) print::i1#2 = (byte) 1 [phi:print::@1->print::@3#0] -- vbuz1=vbuc1 lda #1 sta.z i1 jmp __b3 // print::@3 __b3: - // [45] if((byte) print::i1#2<(byte) 8+(byte) 1) goto print::@4 -- vbuz1_lt_vbuc1_then_la1 + // [155] if((byte) print::i1#2<(byte) 8+(byte) 1) goto print::@4 -- vbuz1_lt_vbuc1_then_la1 lda.z i1 cmp #8+1 bcc __b4_from___b3 jmp __breturn // print::@return __breturn: - // [46] return + // [156] return rts - // [47] phi from print::@3 to print::@4 [phi:print::@3->print::@4] + // [157] phi from print::@3 to print::@4 [phi:print::@3->print::@4] __b4_from___b3: jmp __b4 // print::@4 __b4: - // [48] call printf_str - // [148] phi from print::@4 to printf_str [phi:print::@4->printf_str] + // [158] call printf_str + // [46] phi from print::@4 to printf_str [phi:print::@4->printf_str] printf_str_from___b4: - // [148] phi (byte*) printf_str::str#11 = (const byte*) print::str2 [phi:print::@4->printf_str#0] -- pbuz1=pbuc1 + // [46] phi (byte*) printf_str::str#13 = (const byte*) print::str2 [phi:print::@4->printf_str#0] -- pbuz1=pbuc1 lda #str2 @@ -9262,50 +11355,50 @@ print: { jmp __b14 // print::@14 __b14: - // [49] (byte) printf_uchar::uvalue#1 ← (byte) print::i1#2 -- vbuxx=vbuz1 + // [159] (byte) printf_uchar::uvalue#1 ← (byte) print::i1#2 -- vbuxx=vbuz1 ldx.z i1 - // [50] call printf_uchar - // [63] phi from print::@14 to printf_uchar [phi:print::@14->printf_uchar] + // [160] call printf_uchar + // [173] phi from print::@14 to printf_uchar [phi:print::@14->printf_uchar] printf_uchar_from___b14: - // [63] phi (byte) printf_uchar::uvalue#2 = (byte) printf_uchar::uvalue#1 [phi:print::@14->printf_uchar#0] -- register_copy + // [173] phi (byte) printf_uchar::uvalue#2 = (byte) printf_uchar::uvalue#1 [phi:print::@14->printf_uchar#0] -- register_copy jsr printf_uchar - // [51] phi from print::@14 to print::@5 [phi:print::@14->print::@5] + // [161] phi from print::@14 to print::@5 [phi:print::@14->print::@5] __b5_from___b14: - // [51] phi (byte) print::j#2 = (byte) 1 [phi:print::@14->print::@5#0] -- vbuz1=vbuc1 + // [161] phi (byte) print::j#2 = (byte) 1 [phi:print::@14->print::@5#0] -- vbuz1=vbuc1 lda #1 sta.z j jmp __b5 // print::@5 __b5: - // [52] if((byte) print::j#2<(byte) 8+(byte) 1) goto print::@6 -- vbuz1_lt_vbuc1_then_la1 + // [162] if((byte) print::j#2<(byte) 8+(byte) 1) goto print::@6 -- vbuz1_lt_vbuc1_then_la1 lda.z j cmp #8+1 bcc __b6 jmp __b7 // print::@7 __b7: - // [53] (byte) print::i1#1 ← ++ (byte) print::i1#2 -- vbuz1=_inc_vbuz1 + // [163] (byte) print::i1#1 ← ++ (byte) print::i1#2 -- vbuz1=_inc_vbuz1 inc.z i1 - // [44] phi from print::@7 to print::@3 [phi:print::@7->print::@3] + // [154] phi from print::@7 to print::@3 [phi:print::@7->print::@3] __b3_from___b7: - // [44] phi (byte) print::i1#2 = (byte) print::i1#1 [phi:print::@7->print::@3#0] -- register_copy + // [154] phi (byte) print::i1#2 = (byte) print::i1#1 [phi:print::@7->print::@3#0] -- register_copy jmp __b3 // print::@6 __b6: - // [54] if(*((const byte*) board + (byte) print::i1#2)==(byte) print::j#2) goto print::@8 -- pbuc1_derefidx_vbuz1_eq_vbuz2_then_la1 + // [164] if(*((const byte*) board + (byte) print::i1#2)==(byte) print::j#2) goto print::@8 -- pbuc1_derefidx_vbuz1_eq_vbuz2_then_la1 ldy.z i1 lda board,y cmp.z j beq __b8_from___b6 - // [55] phi from print::@6 to print::@10 [phi:print::@6->print::@10] + // [165] phi from print::@6 to print::@10 [phi:print::@6->print::@10] __b10_from___b6: jmp __b10 // print::@10 __b10: - // [56] call printf_str - // [148] phi from print::@10 to printf_str [phi:print::@10->printf_str] + // [166] call printf_str + // [46] phi from print::@10 to printf_str [phi:print::@10->printf_str] printf_str_from___b10: - // [148] phi (byte*) printf_str::str#11 = (const byte*) print::str4 [phi:print::@10->printf_str#0] -- pbuz1=pbuc1 + // [46] phi (byte*) printf_str::str#13 = (const byte*) print::str4 [phi:print::@10->printf_str#0] -- pbuz1=pbuc1 lda #str4 @@ -9314,21 +11407,21 @@ print: { jmp __b9 // print::@9 __b9: - // [57] (byte) print::j#1 ← ++ (byte) print::j#2 -- vbuz1=_inc_vbuz1 + // [167] (byte) print::j#1 ← ++ (byte) print::j#2 -- vbuz1=_inc_vbuz1 inc.z j - // [51] phi from print::@9 to print::@5 [phi:print::@9->print::@5] + // [161] phi from print::@9 to print::@5 [phi:print::@9->print::@5] __b5_from___b9: - // [51] phi (byte) print::j#2 = (byte) print::j#1 [phi:print::@9->print::@5#0] -- register_copy + // [161] phi (byte) print::j#2 = (byte) print::j#1 [phi:print::@9->print::@5#0] -- register_copy jmp __b5 - // [58] phi from print::@6 to print::@8 [phi:print::@6->print::@8] + // [168] phi from print::@6 to print::@8 [phi:print::@6->print::@8] __b8_from___b6: jmp __b8 // print::@8 __b8: - // [59] call printf_str - // [148] phi from print::@8 to printf_str [phi:print::@8->printf_str] + // [169] call printf_str + // [46] phi from print::@8 to printf_str [phi:print::@8->printf_str] printf_str_from___b8: - // [148] phi (byte*) printf_str::str#11 = (const byte*) print::str3 [phi:print::@8->printf_str#0] -- pbuz1=pbuc1 + // [46] phi (byte*) printf_str::str#13 = (const byte*) print::str3 [phi:print::@8->printf_str#0] -- pbuz1=pbuc1 lda #str3 @@ -9337,21 +11430,21 @@ print: { jmp __b9 // print::@2 __b2: - // [60] (byte) printf_uchar::uvalue#0 ← (byte) print::i#2 -- vbuxx=vbuz1 + // [170] (byte) printf_uchar::uvalue#0 ← (byte) print::i#2 -- vbuxx=vbuz1 ldx.z i - // [61] call printf_uchar - // [63] phi from print::@2 to printf_uchar [phi:print::@2->printf_uchar] + // [171] call printf_uchar + // [173] phi from print::@2 to printf_uchar [phi:print::@2->printf_uchar] printf_uchar_from___b2: - // [63] phi (byte) printf_uchar::uvalue#2 = (byte) printf_uchar::uvalue#0 [phi:print::@2->printf_uchar#0] -- register_copy + // [173] phi (byte) printf_uchar::uvalue#2 = (byte) printf_uchar::uvalue#0 [phi:print::@2->printf_uchar#0] -- register_copy jsr printf_uchar jmp __b13 // print::@13 __b13: - // [62] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuz1=_inc_vbuz1 + // [172] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [42] phi from print::@13 to print::@1 [phi:print::@13->print::@1] + // [152] phi from print::@13 to print::@1 [phi:print::@13->print::@1] __b1_from___b13: - // [42] phi (byte) print::i#2 = (byte) print::i#1 [phi:print::@13->print::@1#0] -- register_copy + // [152] phi (byte) print::i#2 = (byte) print::i#1 [phi:print::@13->print::@1#0] -- register_copy jmp __b1 str: .text @"\n#" .byte 0 @@ -9371,636 +11464,333 @@ printf_uchar: { jmp __b1 // printf_uchar::@1 __b1: - // [64] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [174] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer - // [65] (byte) uctoa::value#1 ← (byte) printf_uchar::uvalue#2 - // [66] call uctoa + // [175] (byte) uctoa::value#1 ← (byte) printf_uchar::uvalue#2 + // [176] call uctoa // Format number into buffer - // [187] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] + // [245] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] uctoa_from___b1: jsr uctoa jmp __b2 // printf_uchar::@2 __b2: - // [67] (byte) printf_number_buffer::buffer_sign#2 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 + // [177] (byte) printf_number_buffer::buffer_sign#2 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [68] call printf_number_buffer + // [178] call printf_number_buffer // Print using format - // [70] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] + // [180] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] printf_number_buffer_from___b2: - // [70] phi (byte) printf_number_buffer::format_upper_case#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#0] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_upper_case#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#0] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_upper_case - // [70] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#2 [phi:printf_uchar::@2->printf_number_buffer#1] -- register_copy - // [70] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_uchar::@2->printf_number_buffer#2] -- pbuz1=pbuc1 + // [180] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#2 [phi:printf_uchar::@2->printf_number_buffer#1] -- register_copy + // [180] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_uchar::@2->printf_number_buffer#2] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z printf_number_buffer.buffer_digits+1 - // [70] phi (byte) printf_number_buffer::format_zero_padding#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#3] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_zero_padding#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#3] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_zero_padding - // [70] phi (byte) printf_number_buffer::format_justify_left#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#4] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_justify_left#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_justify_left - // [70] phi (byte) printf_number_buffer::format_min_length#3 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [180] phi (byte) printf_number_buffer::format_min_length#3 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #0 jsr printf_number_buffer jmp __breturn // printf_uchar::@return __breturn: - // [69] return + // [179] return rts } // printf_number_buffer // Print the contents of the number buffer using a specific format. // This handles minimum length, zero-filling, and left/right justification from the format -// printf_number_buffer(byte zp($d) buffer_sign, byte* zp($13) buffer_digits, byte register(X) format_min_length, byte zp($b) format_justify_left, byte zp($c) format_zero_padding, byte zp($1c) format_upper_case) +// printf_number_buffer(byte zp($1c) buffer_sign, byte* zp($d) buffer_digits, byte register(X) format_min_length, byte zp($16) format_justify_left, byte zp(6) format_zero_padding, byte zp($17) format_upper_case) printf_number_buffer: { - .label __19 = $22 - .label buffer_sign = $d - .label padding = 7 - .label format_zero_padding = $c - .label format_justify_left = $b - .label buffer_digits = $13 - .label format_upper_case = $1c - // [71] if((byte) 0==(byte) printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 -- vbuc1_eq_vbuxx_then_la1 + .label __19 = $21 + .label buffer_sign = $1c + .label padding = $18 + .label format_zero_padding = 6 + .label format_justify_left = $16 + .label buffer_digits = $d + .label format_upper_case = $17 + // [181] if((byte) 0==(byte) printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 -- vbuc1_eq_vbuxx_then_la1 cpx #0 beq __b1_from_printf_number_buffer jmp __b6 // printf_number_buffer::@6 __b6: - // [72] (byte*) strlen::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 -- pbuz1=pbuz2 + // [182] (byte*) strlen::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 -- pbuz1=pbuz2 lda.z buffer_digits sta.z strlen.str lda.z buffer_digits+1 sta.z strlen.str+1 - // [73] call strlen - // [181] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [183] call strlen + // [239] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] strlen_from___b6: jsr strlen - // [74] (word) strlen::return#2 ← (word) strlen::len#2 + // [184] (word) strlen::return#2 ← (word) strlen::len#2 jmp __b14 // printf_number_buffer::@14 __b14: - // [75] (word~) printf_number_buffer::$19 ← (word) strlen::return#2 - // [76] (signed byte) printf_number_buffer::len#0 ← (signed byte)(word~) printf_number_buffer::$19 -- vbsyy=_sbyte_vwuz1 + // [185] (word~) printf_number_buffer::$19 ← (word) strlen::return#2 + // [186] (signed byte) printf_number_buffer::len#0 ← (signed byte)(word~) printf_number_buffer::$19 -- vbsyy=_sbyte_vwuz1 // There is a minimum length - work out the padding lda.z __19 tay - // [77] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 -- vbuc1_eq_vbuz1_then_la1 + // [187] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z buffer_sign beq __b13_from___b14 jmp __b7 // printf_number_buffer::@7 __b7: - // [78] (signed byte) printf_number_buffer::len#1 ← ++ (signed byte) printf_number_buffer::len#0 -- vbsyy=_inc_vbsyy + // [188] (signed byte) printf_number_buffer::len#1 ← ++ (signed byte) printf_number_buffer::len#0 -- vbsyy=_inc_vbsyy iny - // [79] phi from printf_number_buffer::@14 printf_number_buffer::@7 to printf_number_buffer::@13 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13] + // [189] phi from printf_number_buffer::@14 printf_number_buffer::@7 to printf_number_buffer::@13 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13] __b13_from___b14: __b13_from___b7: - // [79] phi (signed byte) printf_number_buffer::len#2 = (signed byte) printf_number_buffer::len#0 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13#0] -- register_copy + // [189] phi (signed byte) printf_number_buffer::len#2 = (signed byte) printf_number_buffer::len#0 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13#0] -- register_copy jmp __b13 // printf_number_buffer::@13 __b13: - // [80] (signed byte) printf_number_buffer::padding#1 ← (signed byte)(byte) printf_number_buffer::format_min_length#3 - (signed byte) printf_number_buffer::len#2 -- vbsz1=vbsxx_minus_vbsyy + // [190] (signed byte) printf_number_buffer::padding#1 ← (signed byte)(byte) printf_number_buffer::format_min_length#3 - (signed byte) printf_number_buffer::len#2 -- vbsz1=vbsxx_minus_vbsyy txa sty.z $ff sec sbc.z $ff sta.z padding - // [81] if((signed byte) printf_number_buffer::padding#1>=(signed byte) 0) goto printf_number_buffer::@21 -- vbsz1_ge_0_then_la1 + // [191] if((signed byte) printf_number_buffer::padding#1>=(signed byte) 0) goto printf_number_buffer::@21 -- vbsz1_ge_0_then_la1 lda.z padding cmp #0 bpl __b21_from___b13 - // [83] phi from printf_number_buffer printf_number_buffer::@13 to printf_number_buffer::@1 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1] + // [193] phi from printf_number_buffer printf_number_buffer::@13 to printf_number_buffer::@1 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1] __b1_from_printf_number_buffer: __b1_from___b13: - // [83] phi (signed byte) printf_number_buffer::padding#10 = (signed byte) 0 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1#0] -- vbsz1=vbsc1 + // [193] phi (signed byte) printf_number_buffer::padding#10 = (signed byte) 0 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1#0] -- vbsz1=vbsc1 lda #0 sta.z padding jmp __b1 - // [82] phi from printf_number_buffer::@13 to printf_number_buffer::@21 [phi:printf_number_buffer::@13->printf_number_buffer::@21] + // [192] phi from printf_number_buffer::@13 to printf_number_buffer::@21 [phi:printf_number_buffer::@13->printf_number_buffer::@21] __b21_from___b13: jmp __b21 // printf_number_buffer::@21 __b21: - // [83] phi from printf_number_buffer::@21 to printf_number_buffer::@1 [phi:printf_number_buffer::@21->printf_number_buffer::@1] + // [193] phi from printf_number_buffer::@21 to printf_number_buffer::@1 [phi:printf_number_buffer::@21->printf_number_buffer::@1] __b1_from___b21: - // [83] phi (signed byte) printf_number_buffer::padding#10 = (signed byte) printf_number_buffer::padding#1 [phi:printf_number_buffer::@21->printf_number_buffer::@1#0] -- register_copy + // [193] phi (signed byte) printf_number_buffer::padding#10 = (signed byte) printf_number_buffer::padding#1 [phi:printf_number_buffer::@21->printf_number_buffer::@1#0] -- register_copy jmp __b1 // printf_number_buffer::@1 __b1: - // [84] if((byte) 0!=(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 -- vbuc1_neq_vbuz1_then_la1 + // [194] if((byte) 0!=(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 -- vbuc1_neq_vbuz1_then_la1 lda #0 cmp.z format_justify_left bne __b2 jmp __b17 // printf_number_buffer::@17 __b17: - // [85] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 -- vbuc1_neq_vbuz1_then_la1 + // [195] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 -- vbuc1_neq_vbuz1_then_la1 lda #0 cmp.z format_zero_padding bne __b2 jmp __b16 // printf_number_buffer::@16 __b16: - // [86] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@8 -- vbsc1_neq_vbsz1_then_la1 + // [196] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@8 -- vbsc1_neq_vbsz1_then_la1 lda #0 cmp.z padding bne __b8 jmp __b2 // printf_number_buffer::@8 __b8: - // [87] (byte) printf_padding::length#0 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [197] (byte) printf_padding::length#0 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [88] call printf_padding - // [107] phi from printf_number_buffer::@8 to printf_padding [phi:printf_number_buffer::@8->printf_padding] + // [198] call printf_padding + // [217] phi from printf_number_buffer::@8 to printf_padding [phi:printf_number_buffer::@8->printf_padding] printf_padding_from___b8: - // [107] phi (byte) printf_padding::pad#5 = (byte) ' ' [phi:printf_number_buffer::@8->printf_padding#0] -- vbuz1=vbuc1 + // [217] phi (byte) printf_padding::pad#7 = (byte) ' ' [phi:printf_number_buffer::@8->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [107] phi (byte) printf_padding::length#4 = (byte) printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#1] -- register_copy + // [217] phi (byte) printf_padding::length#6 = (byte) printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#1] -- register_copy jsr printf_padding jmp __b2 // printf_number_buffer::@2 __b2: - // [89] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 -- vbuc1_eq_vbuz1_then_la1 + // [199] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z buffer_sign beq __b3 jmp __b9 // printf_number_buffer::@9 __b9: - // [90] (byte) printf_char::ch#2 ← (byte) printf_number_buffer::buffer_sign#10 -- vbuaa=vbuz1 + // [200] (byte) printf_char::ch#2 ← (byte) printf_number_buffer::buffer_sign#10 -- vbuaa=vbuz1 lda.z buffer_sign - // [91] call printf_char - // [114] phi from printf_number_buffer::@9 to printf_char [phi:printf_number_buffer::@9->printf_char] + // [201] call printf_char + // [89] phi from printf_number_buffer::@9 to printf_char [phi:printf_number_buffer::@9->printf_char] printf_char_from___b9: - // [114] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#2 [phi:printf_number_buffer::@9->printf_char#0] -- register_copy + // [89] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#2 [phi:printf_number_buffer::@9->printf_char#0] -- register_copy jsr printf_char jmp __b3 // printf_number_buffer::@3 __b3: - // [92] if((byte) 0==(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 -- vbuc1_eq_vbuz1_then_la1 + // [202] if((byte) 0==(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z format_zero_padding beq __b4 jmp __b18 // printf_number_buffer::@18 __b18: - // [93] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@10 -- vbsc1_neq_vbsz1_then_la1 + // [203] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@10 -- vbsc1_neq_vbsz1_then_la1 lda #0 cmp.z padding bne __b10 jmp __b4 // printf_number_buffer::@10 __b10: - // [94] (byte) printf_padding::length#1 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [204] (byte) printf_padding::length#1 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [95] call printf_padding - // [107] phi from printf_number_buffer::@10 to printf_padding [phi:printf_number_buffer::@10->printf_padding] + // [205] call printf_padding + // [217] phi from printf_number_buffer::@10 to printf_padding [phi:printf_number_buffer::@10->printf_padding] printf_padding_from___b10: - // [107] phi (byte) printf_padding::pad#5 = (byte) '0' [phi:printf_number_buffer::@10->printf_padding#0] -- vbuz1=vbuc1 + // [217] phi (byte) printf_padding::pad#7 = (byte) '0' [phi:printf_number_buffer::@10->printf_padding#0] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [107] phi (byte) printf_padding::length#4 = (byte) printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#1] -- register_copy + // [217] phi (byte) printf_padding::length#6 = (byte) printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#1] -- register_copy jsr printf_padding jmp __b4 // printf_number_buffer::@4 __b4: - // [96] if((byte) 0==(byte) printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 -- vbuc1_eq_vbuz1_then_la1 + // [206] if((byte) 0==(byte) printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z format_upper_case beq __b5 jmp __b11 // printf_number_buffer::@11 __b11: - // [97] (byte*) strupr::str#0 ← (byte*) printf_number_buffer::buffer_digits#10 -- pbuz1=pbuz2 + // [207] (byte*) strupr::str#0 ← (byte*) printf_number_buffer::buffer_digits#10 -- pbuz1=pbuz2 lda.z buffer_digits sta.z strupr.str lda.z buffer_digits+1 sta.z strupr.str+1 - // [98] call strupr - // [166] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [208] call strupr + // [224] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] strupr_from___b11: jsr strupr jmp __b5 // printf_number_buffer::@5 __b5: - // [99] (byte*) printf_str::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 - // [100] call printf_str - // [148] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] + // [209] (byte*) printf_str::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 + // [210] call printf_str + // [46] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] printf_str_from___b5: - // [148] phi (byte*) printf_str::str#11 = (byte*) printf_str::str#1 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy + // [46] phi (byte*) printf_str::str#13 = (byte*) printf_str::str#1 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy jsr printf_str jmp __b15 // printf_number_buffer::@15 __b15: - // [101] if((byte) 0==(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return -- vbuc1_eq_vbuz1_then_la1 + // [211] if((byte) 0==(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z format_justify_left beq __breturn jmp __b20 // printf_number_buffer::@20 __b20: - // [102] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return -- vbuc1_neq_vbuz1_then_la1 + // [212] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return -- vbuc1_neq_vbuz1_then_la1 lda #0 cmp.z format_zero_padding bne __breturn jmp __b19 // printf_number_buffer::@19 __b19: - // [103] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@12 -- vbsc1_neq_vbsz1_then_la1 + // [213] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@12 -- vbsc1_neq_vbsz1_then_la1 lda #0 cmp.z padding bne __b12 jmp __breturn // printf_number_buffer::@12 __b12: - // [104] (byte) printf_padding::length#2 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [214] (byte) printf_padding::length#2 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [105] call printf_padding - // [107] phi from printf_number_buffer::@12 to printf_padding [phi:printf_number_buffer::@12->printf_padding] + // [215] call printf_padding + // [217] phi from printf_number_buffer::@12 to printf_padding [phi:printf_number_buffer::@12->printf_padding] printf_padding_from___b12: - // [107] phi (byte) printf_padding::pad#5 = (byte) ' ' [phi:printf_number_buffer::@12->printf_padding#0] -- vbuz1=vbuc1 + // [217] phi (byte) printf_padding::pad#7 = (byte) ' ' [phi:printf_number_buffer::@12->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [107] phi (byte) printf_padding::length#4 = (byte) printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#1] -- register_copy + // [217] phi (byte) printf_padding::length#6 = (byte) printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#1] -- register_copy jsr printf_padding jmp __breturn // printf_number_buffer::@return __breturn: - // [106] return + // [216] return rts } // printf_padding // Print a padding char a number of times -// printf_padding(byte zp(9) pad, byte zp(8) length) +// printf_padding(byte zp($1a) pad, byte zp($19) length) printf_padding: { - .label i = $a - .label length = 8 - .label pad = 9 - // [108] phi from printf_padding to printf_padding::@1 [phi:printf_padding->printf_padding::@1] + .label i = $1b + .label length = $19 + .label pad = $1a + // [218] phi from printf_padding to printf_padding::@1 [phi:printf_padding->printf_padding::@1] __b1_from_printf_padding: - // [108] phi (byte) printf_padding::i#2 = (byte) 0 [phi:printf_padding->printf_padding::@1#0] -- vbuz1=vbuc1 + // [218] phi (byte) printf_padding::i#2 = (byte) 0 [phi:printf_padding->printf_padding::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b1 // printf_padding::@1 __b1: - // [109] if((byte) printf_padding::i#2<(byte) printf_padding::length#4) goto printf_padding::@2 -- vbuz1_lt_vbuz2_then_la1 + // [219] if((byte) printf_padding::i#2<(byte) printf_padding::length#6) goto printf_padding::@2 -- vbuz1_lt_vbuz2_then_la1 lda.z i cmp.z length bcc __b2 jmp __breturn // printf_padding::@return __breturn: - // [110] return + // [220] return rts // printf_padding::@2 __b2: - // [111] (byte) printf_char::ch#0 ← (byte) printf_padding::pad#5 -- vbuaa=vbuz1 + // [221] (byte) printf_char::ch#0 ← (byte) printf_padding::pad#7 -- vbuaa=vbuz1 lda.z pad - // [112] call printf_char - // [114] phi from printf_padding::@2 to printf_char [phi:printf_padding::@2->printf_char] + // [222] call printf_char + // [89] phi from printf_padding::@2 to printf_char [phi:printf_padding::@2->printf_char] printf_char_from___b2: - // [114] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#0 [phi:printf_padding::@2->printf_char#0] -- register_copy + // [89] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#0 [phi:printf_padding::@2->printf_char#0] -- register_copy jsr printf_char jmp __b3 // printf_padding::@3 __b3: - // [113] (byte) printf_padding::i#1 ← ++ (byte) printf_padding::i#2 -- vbuz1=_inc_vbuz1 + // [223] (byte) printf_padding::i#1 ← ++ (byte) printf_padding::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [108] phi from printf_padding::@3 to printf_padding::@1 [phi:printf_padding::@3->printf_padding::@1] + // [218] phi from printf_padding::@3 to printf_padding::@1 [phi:printf_padding::@3->printf_padding::@1] __b1_from___b3: - // [108] phi (byte) printf_padding::i#2 = (byte) printf_padding::i#1 [phi:printf_padding::@3->printf_padding::@1#0] -- register_copy + // [218] phi (byte) printf_padding::i#2 = (byte) printf_padding::i#1 [phi:printf_padding::@3->printf_padding::@1#0] -- register_copy jmp __b1 -} - // printf_char -// Print a single char -// If the end of the screen is reached scroll it up one char and place the cursor at the -// printf_char(byte register(A) ch) -printf_char: { - // [115] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#3 -- _deref_pbuz1=vbuaa - ldy #0 - sta (printf_cursor_ptr),y - // [116] (byte*) printf_cursor_ptr ← ++ (byte*) printf_cursor_ptr -- pbuz1=_inc_pbuz1 - inc.z printf_cursor_ptr - bne !+ - inc.z printf_cursor_ptr+1 - !: - // [117] (byte) printf_cursor_x ← ++ (byte) printf_cursor_x -- vbuz1=_inc_vbuz1 - inc.z printf_cursor_x - // [118] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return -- vbuz1_neq_vbuc1_then_la1 - lda #$28 - cmp.z printf_cursor_x - bne __breturn - jmp __b1 - // printf_char::@1 - __b1: - // [119] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 - lda #0 - sta.z printf_cursor_x - // [120] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y -- vbuz1=_inc_vbuz1 - inc.z printf_cursor_y - // [121] call printf_scroll - jsr printf_scroll - jmp __breturn - // printf_char::@return - __breturn: - // [122] return - rts -} - // printf_scroll -// Scroll the entire screen if the cursor is on the last line -printf_scroll: { - .label __4 = $19 - // [123] if((byte) printf_cursor_y!=(byte) $19) goto printf_scroll::@return -- vbuz1_neq_vbuc1_then_la1 - lda #$19 - cmp.z printf_cursor_y - bne __breturn - // [124] phi from printf_scroll to printf_scroll::@1 [phi:printf_scroll->printf_scroll::@1] - __b1_from_printf_scroll: - jmp __b1 - // printf_scroll::@1 - __b1: - // [125] call memcpy - // [141] phi from printf_scroll::@1 to memcpy [phi:printf_scroll::@1->memcpy] - memcpy_from___b1: - jsr memcpy - // [126] phi from printf_scroll::@1 to printf_scroll::@2 [phi:printf_scroll::@1->printf_scroll::@2] - __b2_from___b1: - jmp __b2 - // printf_scroll::@2 - __b2: - // [127] call memset - // [132] phi from printf_scroll::@2 to memset [phi:printf_scroll::@2->memset] - memset_from___b2: - // [132] phi (byte) memset::c#4 = (byte) ' ' [phi:printf_scroll::@2->memset#0] -- vbuxx=vbuc1 - ldx #' ' - // [132] phi (void*) memset::str#3 = (void*)(number) $400+(number) $28*(number) $19-(number) $28 [phi:printf_scroll::@2->memset#1] -- pvoz1=pvoc1 - lda #<$400+$28*$19-$28 - sta.z memset.str - lda #>$400+$28*$19-$28 - sta.z memset.str+1 - // [132] phi (word) memset::num#2 = (byte) $28 [phi:printf_scroll::@2->memset#2] -- vwuz1=vbuc1 - lda #<$28 - sta.z memset.num - lda #>$28 - sta.z memset.num+1 - jsr memset - jmp __b3 - // printf_scroll::@3 - __b3: - // [128] (byte*~) printf_scroll::$4 ← (byte*) printf_cursor_ptr - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda.z __4 - sec - sbc #<$28 - sta.z __4 - lda.z __4+1 - sbc #>$28 - sta.z __4+1 - // [129] (byte*) printf_cursor_ptr ← (byte*~) printf_scroll::$4 - // [130] (byte) printf_cursor_y ← -- (byte) printf_cursor_y -- vbuz1=_dec_vbuz1 - dec.z printf_cursor_y - jmp __breturn - // printf_scroll::@return - __breturn: - // [131] return - rts -} - // memset -// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// memset(void* zp($22) str, byte register(X) c, word zp($15) num) -memset: { - .label end = $15 - .label dst = $22 - .label num = $15 - .label str = $22 - // [133] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 - lda.z num - bne !+ - lda.z num+1 - beq __breturn - !: - jmp __b1 - // memset::@1 - __b1: - // [134] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 - lda.z end - clc - adc.z str - sta.z end - lda.z end+1 - adc.z str+1 - sta.z end+1 - // [135] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 - // [136] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] - __b2_from___b1: - __b2_from___b3: - // [136] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy - jmp __b2 - // memset::@2 - __b2: - // [137] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 - lda.z dst+1 - cmp.z end+1 - bne __b3 - lda.z dst - cmp.z end - bne __b3 - jmp __breturn - // memset::@return - __breturn: - // [138] return - rts - // memset::@3 - __b3: - // [139] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (dst),y - // [140] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc.z dst - bne !+ - inc.z dst+1 - !: - jmp __b2_from___b3 -} - // memcpy -// Copy block of memory (forwards) -// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. -memcpy: { - .label destination = $400 - .label source = $400+$28 - .const num = $28*$19-$28 - .label src_end = source+num - .label dst = $22 - .label src = $15 - // [142] phi from memcpy to memcpy::@1 [phi:memcpy->memcpy::@1] - __b1_from_memcpy: - // [142] phi (byte*) memcpy::dst#2 = (byte*)(const void*) memcpy::destination#0 [phi:memcpy->memcpy::@1#0] -- pbuz1=pbuc1 - lda #destination - sta.z dst+1 - // [142] phi (byte*) memcpy::src#2 = (byte*)(const void*) memcpy::source#0 [phi:memcpy->memcpy::@1#1] -- pbuz1=pbuc1 - lda #source - sta.z src+1 - jmp __b1 - // memcpy::@1 - __b1: - // [143] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuc1_then_la1 - lda.z src+1 - cmp #>src_end - bne __b2 - lda.z src - cmp #memcpy::@1] - __b1_from___b2: - // [142] phi (byte*) memcpy::dst#2 = (byte*) memcpy::dst#1 [phi:memcpy::@2->memcpy::@1#0] -- register_copy - // [142] phi (byte*) memcpy::src#2 = (byte*) memcpy::src#1 [phi:memcpy::@2->memcpy::@1#1] -- register_copy - jmp __b1 -} - // printf_str -// Print a zero-terminated string -// Handles escape codes such as newline -// printf_str(byte* zp($13) str) -printf_str: { - .label str = $13 - // [149] phi from printf_str printf_str::@4 printf_str::@5 to printf_str::@1 [phi:printf_str/printf_str::@4/printf_str::@5->printf_str::@1] - __b1_from_printf_str: - __b1_from___b4: - __b1_from___b5: - // [149] phi (byte*) printf_str::str#10 = (byte*) printf_str::str#11 [phi:printf_str/printf_str::@4/printf_str::@5->printf_str::@1#0] -- register_copy - jmp __b1 - // printf_str::@1 - __b1: - jmp __b2 - // printf_str::@2 - __b2: - // [150] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#10) -- vbuaa=_deref_pbuz1 - ldy #0 - lda (str),y - // [151] (byte*) printf_str::str#0 ← ++ (byte*) printf_str::str#10 -- pbuz1=_inc_pbuz1 - inc.z str - bne !+ - inc.z str+1 - !: - // [152] if((byte) printf_str::ch#0!=(byte) 0) goto printf_str::@3 -- vbuaa_neq_0_then_la1 - cmp #0 - bne __b3 - jmp __breturn - // printf_str::@return - __breturn: - // [153] return - rts - // printf_str::@3 - __b3: - // [154] if((byte) printf_str::ch#0==(byte) ' ') goto printf_str::@4 -- vbuaa_eq_vbuc1_then_la1 - cmp #'\n' - beq __b4_from___b3 - jmp __b5 - // printf_str::@5 - __b5: - // [155] (byte) printf_char::ch#1 ← (byte) printf_str::ch#0 - // [156] call printf_char - // [114] phi from printf_str::@5 to printf_char [phi:printf_str::@5->printf_char] - printf_char_from___b5: - // [114] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#1 [phi:printf_str::@5->printf_char#0] -- register_copy - jsr printf_char - jmp __b1_from___b5 - // [157] phi from printf_str::@3 to printf_str::@4 [phi:printf_str::@3->printf_str::@4] - __b4_from___b3: - jmp __b4 - // printf_str::@4 - __b4: - // [158] call printf_ln - jsr printf_ln - jmp __b1_from___b4 -} - // printf_ln -// Print a newline -printf_ln: { - .label __0 = $19 - .label __1 = $19 - // [159] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x -- pbuz1=pbuz1_minus_vbuz2 - sec - lda.z __0 - sbc.z printf_cursor_x - sta.z __0 - bcs !+ - dec.z __0+1 - !: - // [160] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc.z __1 - sta.z __1 - bcc !+ - inc.z __1+1 - !: - // [161] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1 - // [162] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 - lda #0 - sta.z printf_cursor_x - // [163] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y -- vbuz1=_inc_vbuz1 - inc.z printf_cursor_y - // [164] call printf_scroll - jsr printf_scroll - jmp __breturn - // printf_ln::@return - __breturn: - // [165] return - rts } // strupr // Converts a string to uppercase. -// strupr(byte* zp($15) str) +// strupr(byte* zp($f) str) strupr: { - .label src = $15 - .label str = $15 - // [167] phi from strupr strupr::@3 to strupr::@1 [phi:strupr/strupr::@3->strupr::@1] + .label src = $f + .label str = $f + // [225] phi from strupr strupr::@3 to strupr::@1 [phi:strupr/strupr::@3->strupr::@1] __b1_from_strupr: __b1_from___b3: - // [167] phi (byte*) strupr::src#2 = (byte*) strupr::str#0 [phi:strupr/strupr::@3->strupr::@1#0] -- register_copy + // [225] phi (byte*) strupr::src#2 = (byte*) strupr::str#0 [phi:strupr/strupr::@3->strupr::@1#0] -- register_copy jmp __b1 // strupr::@1 __b1: - // [168] if((byte) 0!=*((byte*) strupr::src#2)) goto strupr::@2 -- vbuc1_neq__deref_pbuz1_then_la1 + // [226] if((byte) 0!=*((byte*) strupr::src#2)) goto strupr::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (src),y cmp #0 @@ -10008,24 +11798,24 @@ strupr: { jmp __breturn // strupr::@return __breturn: - // [169] return + // [227] return rts // strupr::@2 __b2: - // [170] (byte) toupper::ch#0 ← *((byte*) strupr::src#2) -- vbuaa=_deref_pbuz1 + // [228] (byte) toupper::ch#0 ← *((byte*) strupr::src#2) -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [171] call toupper + // [229] call toupper jsr toupper - // [172] (byte) toupper::return#3 ← (byte) toupper::return#2 + // [230] (byte) toupper::return#3 ← (byte) toupper::return#2 jmp __b3 // strupr::@3 __b3: - // [173] (byte~) strupr::$0 ← (byte) toupper::return#3 - // [174] *((byte*) strupr::src#2) ← (byte~) strupr::$0 -- _deref_pbuz1=vbuaa + // [231] (byte~) strupr::$0 ← (byte) toupper::return#3 + // [232] *((byte*) strupr::src#2) ← (byte~) strupr::$0 -- _deref_pbuz1=vbuaa ldy #0 sta (src),y - // [175] (byte*) strupr::src#1 ← ++ (byte*) strupr::src#2 -- pbuz1=_inc_pbuz1 + // [233] (byte*) strupr::src#1 ← ++ (byte*) strupr::src#2 -- pbuz1=_inc_pbuz1 inc.z src bne !+ inc.z src+1 @@ -10037,52 +11827,52 @@ strupr: { // Returns uppercase equivalent to c, if such value exists, else c remains unchanged // toupper(byte register(A) ch) toupper: { - // [176] if((byte) toupper::ch#0<(byte) 'a') goto toupper::@return -- vbuaa_lt_vbuc1_then_la1 + // [234] if((byte) toupper::ch#0<(byte) 'a') goto toupper::@return -- vbuaa_lt_vbuc1_then_la1 cmp #'a' bcc __breturn_from_toupper jmp __b2 // toupper::@2 __b2: - // [177] if((byte) toupper::ch#0<=(byte) 'z') goto toupper::@1 -- vbuaa_le_vbuc1_then_la1 + // [235] if((byte) toupper::ch#0<=(byte) 'z') goto toupper::@1 -- vbuaa_le_vbuc1_then_la1 cmp #'z' bcc __b1 beq __b1 - // [179] phi from toupper toupper::@1 toupper::@2 to toupper::@return [phi:toupper/toupper::@1/toupper::@2->toupper::@return] + // [237] phi from toupper toupper::@1 toupper::@2 to toupper::@return [phi:toupper/toupper::@1/toupper::@2->toupper::@return] __breturn_from_toupper: __breturn_from___b1: __breturn_from___b2: - // [179] phi (byte) toupper::return#2 = (byte) toupper::ch#0 [phi:toupper/toupper::@1/toupper::@2->toupper::@return#0] -- register_copy + // [237] phi (byte) toupper::return#2 = (byte) toupper::ch#0 [phi:toupper/toupper::@1/toupper::@2->toupper::@return#0] -- register_copy jmp __breturn // toupper::@1 __b1: - // [178] (byte) toupper::return#0 ← (byte) toupper::ch#0 + (byte) 'A'-(byte) 'a' -- vbuaa=vbuaa_plus_vbuc1 + // [236] (byte) toupper::return#0 ← (byte) toupper::ch#0 + (byte) 'A'-(byte) 'a' -- vbuaa=vbuaa_plus_vbuc1 clc adc #'A'-'a' jmp __breturn_from___b1 // toupper::@return __breturn: - // [180] return + // [238] return rts } // strlen // Computes the length of the string str up to but not including the terminating null character. -// strlen(byte* zp($15) str) +// strlen(byte* zp($f) str) strlen: { - .label len = $22 - .label str = $15 - .label return = $22 - // [182] phi from strlen to strlen::@1 [phi:strlen->strlen::@1] + .label len = $21 + .label str = $f + .label return = $21 + // [240] phi from strlen to strlen::@1 [phi:strlen->strlen::@1] __b1_from_strlen: - // [182] phi (word) strlen::len#2 = (word) 0 [phi:strlen->strlen::@1#0] -- vwuz1=vwuc1 + // [240] phi (word) strlen::len#2 = (word) 0 [phi:strlen->strlen::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z len lda #>0 sta.z len+1 - // [182] phi (byte*) strlen::str#2 = (byte*) strlen::str#1 [phi:strlen->strlen::@1#1] -- register_copy + // [240] phi (byte*) strlen::str#3 = (byte*) strlen::str#1 [phi:strlen->strlen::@1#1] -- register_copy jmp __b1 // strlen::@1 __b1: - // [183] if((byte) 0!=*((byte*) strlen::str#2)) goto strlen::@2 -- vbuc1_neq__deref_pbuz1_then_la1 + // [241] if((byte) 0!=*((byte*) strlen::str#3)) goto strlen::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y cmp #0 @@ -10090,24 +11880,24 @@ strlen: { jmp __breturn // strlen::@return __breturn: - // [184] return + // [242] return rts // strlen::@2 __b2: - // [185] (word) strlen::len#1 ← ++ (word) strlen::len#2 -- vwuz1=_inc_vwuz1 + // [243] (word) strlen::len#1 ← ++ (word) strlen::len#2 -- vwuz1=_inc_vwuz1 inc.z len bne !+ inc.z len+1 !: - // [186] (byte*) strlen::str#0 ← ++ (byte*) strlen::str#2 -- pbuz1=_inc_pbuz1 + // [244] (byte*) strlen::str#0 ← ++ (byte*) strlen::str#3 -- pbuz1=_inc_pbuz1 inc.z str bne !+ inc.z str+1 !: - // [182] phi from strlen::@2 to strlen::@1 [phi:strlen::@2->strlen::@1] + // [240] phi from strlen::@2 to strlen::@1 [phi:strlen::@2->strlen::@1] __b1_from___b2: - // [182] phi (word) strlen::len#2 = (word) strlen::len#1 [phi:strlen::@2->strlen::@1#0] -- register_copy - // [182] phi (byte*) strlen::str#2 = (byte*) strlen::str#0 [phi:strlen::@2->strlen::@1#1] -- register_copy + // [240] phi (word) strlen::len#2 = (word) strlen::len#1 [phi:strlen::@2->strlen::@1#0] -- register_copy + // [240] phi (byte*) strlen::str#3 = (byte*) strlen::str#0 [phi:strlen::@2->strlen::@1#1] -- register_copy jmp __b1 } // uctoa @@ -10116,113 +11906,113 @@ strlen: { // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// uctoa(byte register(X) value, byte* zp($13) buffer) +// uctoa(byte register(X) value, byte* zp($d) buffer) uctoa: { .label digit_value = $1c - .label buffer = $13 - .label digit = $b - .label started = $c - // [188] phi from uctoa to uctoa::@1 [phi:uctoa->uctoa::@1] + .label buffer = $d + .label digit = $16 + .label started = 6 + // [246] phi from uctoa to uctoa::@1 [phi:uctoa->uctoa::@1] __b1_from_uctoa: - // [188] phi (byte*) uctoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:uctoa->uctoa::@1#0] -- pbuz1=pbuc1 + // [246] phi (byte*) uctoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:uctoa->uctoa::@1#0] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z buffer+1 - // [188] phi (byte) uctoa::started#2 = (byte) 0 [phi:uctoa->uctoa::@1#1] -- vbuz1=vbuc1 + // [246] phi (byte) uctoa::started#2 = (byte) 0 [phi:uctoa->uctoa::@1#1] -- vbuz1=vbuc1 lda #0 sta.z started - // [188] phi (byte) uctoa::value#2 = (byte) uctoa::value#1 [phi:uctoa->uctoa::@1#2] -- register_copy - // [188] phi (byte) uctoa::digit#2 = (byte) 0 [phi:uctoa->uctoa::@1#3] -- vbuz1=vbuc1 + // [246] phi (byte) uctoa::value#2 = (byte) uctoa::value#1 [phi:uctoa->uctoa::@1#2] -- register_copy + // [246] phi (byte) uctoa::digit#2 = (byte) 0 [phi:uctoa->uctoa::@1#3] -- vbuz1=vbuc1 lda #0 sta.z digit jmp __b1 // uctoa::@1 __b1: - // [189] if((byte) uctoa::digit#2<(byte) 2-(byte) 1) goto uctoa::@2 -- vbuz1_lt_vbuc1_then_la1 + // [247] if((byte) uctoa::digit#2<(byte) 2-(byte) 1) goto uctoa::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z digit cmp #2-1 bcc __b2 jmp __b3 // uctoa::@3 __b3: - // [190] *((byte*) uctoa::buffer#11) ← *((const byte*) DIGITS + (byte) uctoa::value#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [248] *((byte*) uctoa::buffer#11) ← *((const byte*) DIGITS + (byte) uctoa::value#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda DIGITS,x ldy #0 sta (buffer),y - // [191] (byte*) uctoa::buffer#3 ← ++ (byte*) uctoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [249] (byte*) uctoa::buffer#3 ← ++ (byte*) uctoa::buffer#11 -- pbuz1=_inc_pbuz1 inc.z buffer bne !+ inc.z buffer+1 !: - // [192] *((byte*) uctoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [250] *((byte*) uctoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (buffer),y jmp __breturn // uctoa::@return __breturn: - // [193] return + // [251] return rts // uctoa::@2 __b2: - // [194] (byte) uctoa::digit_value#0 ← *((const byte*) RADIX_HEXADECIMAL_VALUES_CHAR + (byte) uctoa::digit#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [252] (byte) uctoa::digit_value#0 ← *((const byte*) RADIX_HEXADECIMAL_VALUES_CHAR + (byte) uctoa::digit#2) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z digit lda RADIX_HEXADECIMAL_VALUES_CHAR,y sta.z digit_value - // [195] if((byte) 0!=(byte) uctoa::started#2) goto uctoa::@5 -- vbuc1_neq_vbuz1_then_la1 + // [253] if((byte) 0!=(byte) uctoa::started#2) goto uctoa::@5 -- vbuc1_neq_vbuz1_then_la1 lda #0 cmp.z started bne __b5 jmp __b7 // uctoa::@7 __b7: - // [196] if((byte) uctoa::value#2>=(byte) uctoa::digit_value#0) goto uctoa::@5 -- vbuxx_ge_vbuz1_then_la1 + // [254] if((byte) uctoa::value#2>=(byte) uctoa::digit_value#0) goto uctoa::@5 -- vbuxx_ge_vbuz1_then_la1 cpx.z digit_value bcs __b5 - // [197] phi from uctoa::@7 to uctoa::@4 [phi:uctoa::@7->uctoa::@4] + // [255] phi from uctoa::@7 to uctoa::@4 [phi:uctoa::@7->uctoa::@4] __b4_from___b7: - // [197] phi (byte*) uctoa::buffer#14 = (byte*) uctoa::buffer#11 [phi:uctoa::@7->uctoa::@4#0] -- register_copy - // [197] phi (byte) uctoa::started#4 = (byte) uctoa::started#2 [phi:uctoa::@7->uctoa::@4#1] -- register_copy - // [197] phi (byte) uctoa::value#6 = (byte) uctoa::value#2 [phi:uctoa::@7->uctoa::@4#2] -- register_copy + // [255] phi (byte*) uctoa::buffer#14 = (byte*) uctoa::buffer#11 [phi:uctoa::@7->uctoa::@4#0] -- register_copy + // [255] phi (byte) uctoa::started#4 = (byte) uctoa::started#2 [phi:uctoa::@7->uctoa::@4#1] -- register_copy + // [255] phi (byte) uctoa::value#6 = (byte) uctoa::value#2 [phi:uctoa::@7->uctoa::@4#2] -- register_copy jmp __b4 // uctoa::@4 __b4: - // [198] (byte) uctoa::digit#1 ← ++ (byte) uctoa::digit#2 -- vbuz1=_inc_vbuz1 + // [256] (byte) uctoa::digit#1 ← ++ (byte) uctoa::digit#2 -- vbuz1=_inc_vbuz1 inc.z digit - // [188] phi from uctoa::@4 to uctoa::@1 [phi:uctoa::@4->uctoa::@1] + // [246] phi from uctoa::@4 to uctoa::@1 [phi:uctoa::@4->uctoa::@1] __b1_from___b4: - // [188] phi (byte*) uctoa::buffer#11 = (byte*) uctoa::buffer#14 [phi:uctoa::@4->uctoa::@1#0] -- register_copy - // [188] phi (byte) uctoa::started#2 = (byte) uctoa::started#4 [phi:uctoa::@4->uctoa::@1#1] -- register_copy - // [188] phi (byte) uctoa::value#2 = (byte) uctoa::value#6 [phi:uctoa::@4->uctoa::@1#2] -- register_copy - // [188] phi (byte) uctoa::digit#2 = (byte) uctoa::digit#1 [phi:uctoa::@4->uctoa::@1#3] -- register_copy + // [246] phi (byte*) uctoa::buffer#11 = (byte*) uctoa::buffer#14 [phi:uctoa::@4->uctoa::@1#0] -- register_copy + // [246] phi (byte) uctoa::started#2 = (byte) uctoa::started#4 [phi:uctoa::@4->uctoa::@1#1] -- register_copy + // [246] phi (byte) uctoa::value#2 = (byte) uctoa::value#6 [phi:uctoa::@4->uctoa::@1#2] -- register_copy + // [246] phi (byte) uctoa::digit#2 = (byte) uctoa::digit#1 [phi:uctoa::@4->uctoa::@1#3] -- register_copy jmp __b1 // uctoa::@5 __b5: - // [199] (byte*) uctoa_append::buffer#0 ← (byte*) uctoa::buffer#11 - // [200] (byte) uctoa_append::value#0 ← (byte) uctoa::value#2 - // [201] (byte) uctoa_append::sub#0 ← (byte) uctoa::digit_value#0 - // [202] call uctoa_append - // [206] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [257] (byte*) uctoa_append::buffer#0 ← (byte*) uctoa::buffer#11 + // [258] (byte) uctoa_append::value#0 ← (byte) uctoa::value#2 + // [259] (byte) uctoa_append::sub#0 ← (byte) uctoa::digit_value#0 + // [260] call uctoa_append + // [264] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] uctoa_append_from___b5: jsr uctoa_append - // [203] (byte) uctoa_append::return#0 ← (byte) uctoa_append::value#2 + // [261] (byte) uctoa_append::return#0 ← (byte) uctoa_append::value#2 jmp __b6 // uctoa::@6 __b6: - // [204] (byte) uctoa::value#0 ← (byte) uctoa_append::return#0 - // [205] (byte*) uctoa::buffer#4 ← ++ (byte*) uctoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [262] (byte) uctoa::value#0 ← (byte) uctoa_append::return#0 + // [263] (byte*) uctoa::buffer#4 ← ++ (byte*) uctoa::buffer#11 -- pbuz1=_inc_pbuz1 inc.z buffer bne !+ inc.z buffer+1 !: - // [197] phi from uctoa::@6 to uctoa::@4 [phi:uctoa::@6->uctoa::@4] + // [255] phi from uctoa::@6 to uctoa::@4 [phi:uctoa::@6->uctoa::@4] __b4_from___b6: - // [197] phi (byte*) uctoa::buffer#14 = (byte*) uctoa::buffer#4 [phi:uctoa::@6->uctoa::@4#0] -- register_copy - // [197] phi (byte) uctoa::started#4 = (byte) 1 [phi:uctoa::@6->uctoa::@4#1] -- vbuz1=vbuc1 + // [255] phi (byte*) uctoa::buffer#14 = (byte*) uctoa::buffer#4 [phi:uctoa::@6->uctoa::@4#0] -- register_copy + // [255] phi (byte) uctoa::started#4 = (byte) 1 [phi:uctoa::@6->uctoa::@4#1] -- vbuz1=vbuc1 lda #1 sta.z started - // [197] phi (byte) uctoa::value#6 = (byte) uctoa::value#0 [phi:uctoa::@6->uctoa::@4#2] -- register_copy + // [255] phi (byte) uctoa::value#6 = (byte) uctoa::value#0 [phi:uctoa::@6->uctoa::@4#2] -- register_copy jmp __b4 } // uctoa_append @@ -10234,46 +12024,46 @@ uctoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// uctoa_append(byte* zp($13) buffer, byte register(X) value, byte zp($1c) sub) +// uctoa_append(byte* zp($d) buffer, byte register(X) value, byte zp($1c) sub) uctoa_append: { - .label buffer = $13 + .label buffer = $d .label sub = $1c - // [207] phi from uctoa_append to uctoa_append::@1 [phi:uctoa_append->uctoa_append::@1] + // [265] phi from uctoa_append to uctoa_append::@1 [phi:uctoa_append->uctoa_append::@1] __b1_from_uctoa_append: - // [207] phi (byte) uctoa_append::digit#2 = (byte) 0 [phi:uctoa_append->uctoa_append::@1#0] -- vbuyy=vbuc1 + // [265] phi (byte) uctoa_append::digit#2 = (byte) 0 [phi:uctoa_append->uctoa_append::@1#0] -- vbuyy=vbuc1 ldy #0 - // [207] phi (byte) uctoa_append::value#2 = (byte) uctoa_append::value#0 [phi:uctoa_append->uctoa_append::@1#1] -- register_copy + // [265] phi (byte) uctoa_append::value#2 = (byte) uctoa_append::value#0 [phi:uctoa_append->uctoa_append::@1#1] -- register_copy jmp __b1 // uctoa_append::@1 __b1: - // [208] if((byte) uctoa_append::value#2>=(byte) uctoa_append::sub#0) goto uctoa_append::@2 -- vbuxx_ge_vbuz1_then_la1 + // [266] if((byte) uctoa_append::value#2>=(byte) uctoa_append::sub#0) goto uctoa_append::@2 -- vbuxx_ge_vbuz1_then_la1 cpx.z sub bcs __b2 jmp __b3 // uctoa_append::@3 __b3: - // [209] *((byte*) uctoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) uctoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuyy + // [267] *((byte*) uctoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) uctoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuyy lda DIGITS,y ldy #0 sta (buffer),y jmp __breturn // uctoa_append::@return __breturn: - // [210] return + // [268] return rts // uctoa_append::@2 __b2: - // [211] (byte) uctoa_append::digit#1 ← ++ (byte) uctoa_append::digit#2 -- vbuyy=_inc_vbuyy + // [269] (byte) uctoa_append::digit#1 ← ++ (byte) uctoa_append::digit#2 -- vbuyy=_inc_vbuyy iny - // [212] (byte) uctoa_append::value#1 ← (byte) uctoa_append::value#2 - (byte) uctoa_append::sub#0 -- vbuxx=vbuxx_minus_vbuz1 + // [270] (byte) uctoa_append::value#1 ← (byte) uctoa_append::value#2 - (byte) uctoa_append::sub#0 -- vbuxx=vbuxx_minus_vbuz1 txa sec sbc.z sub tax - // [207] phi from uctoa_append::@2 to uctoa_append::@1 [phi:uctoa_append::@2->uctoa_append::@1] + // [265] phi from uctoa_append::@2 to uctoa_append::@1 [phi:uctoa_append::@2->uctoa_append::@1] __b1_from___b2: - // [207] phi (byte) uctoa_append::digit#2 = (byte) uctoa_append::digit#1 [phi:uctoa_append::@2->uctoa_append::@1#0] -- register_copy - // [207] phi (byte) uctoa_append::value#2 = (byte) uctoa_append::value#1 [phi:uctoa_append::@2->uctoa_append::@1#1] -- register_copy + // [265] phi (byte) uctoa_append::digit#2 = (byte) uctoa_append::digit#1 [phi:uctoa_append::@2->uctoa_append::@1#0] -- register_copy + // [265] phi (byte) uctoa_append::value#2 = (byte) uctoa_append::value#1 [phi:uctoa_append::@2->uctoa_append::@1#1] -- register_copy jmp __b1 } // printf_ulong @@ -10288,11 +12078,11 @@ printf_ulong: { jmp __b1 // printf_ulong::@1 __b1: - // [214] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [272] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer - // [215] (dword) ultoa::value#1 ← (dword) printf_ulong::uvalue#0 -- vduz1=vduz2 + // [273] (dword) ultoa::value#1 ← (dword) printf_ulong::uvalue#0 -- vduz1=vduz2 lda.z uvalue sta.z ultoa.value lda.z uvalue+1 @@ -10301,43 +12091,43 @@ printf_ulong: { sta.z ultoa.value+2 lda.z uvalue+3 sta.z ultoa.value+3 - // [216] call ultoa + // [274] call ultoa // Format number into buffer - // [220] phi from printf_ulong::@1 to ultoa [phi:printf_ulong::@1->ultoa] + // [278] phi from printf_ulong::@1 to ultoa [phi:printf_ulong::@1->ultoa] ultoa_from___b1: jsr ultoa jmp __b2 // printf_ulong::@2 __b2: - // [217] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 + // [275] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [218] call printf_number_buffer + // [276] call printf_number_buffer // Print using format - // [70] phi from printf_ulong::@2 to printf_number_buffer [phi:printf_ulong::@2->printf_number_buffer] + // [180] phi from printf_ulong::@2 to printf_number_buffer [phi:printf_ulong::@2->printf_number_buffer] printf_number_buffer_from___b2: - // [70] phi (byte) printf_number_buffer::format_upper_case#10 = (const byte) printf_ulong::format_upper_case#0 [phi:printf_ulong::@2->printf_number_buffer#0] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_upper_case#10 = (const byte) printf_ulong::format_upper_case#0 [phi:printf_ulong::@2->printf_number_buffer#0] -- vbuz1=vbuc1 lda #format_upper_case sta.z printf_number_buffer.format_upper_case - // [70] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#0 [phi:printf_ulong::@2->printf_number_buffer#1] -- register_copy - // [70] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_ulong::@2->printf_number_buffer#2] -- pbuz1=pbuc1 + // [180] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#0 [phi:printf_ulong::@2->printf_number_buffer#1] -- register_copy + // [180] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_ulong::@2->printf_number_buffer#2] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z printf_number_buffer.buffer_digits+1 - // [70] phi (byte) printf_number_buffer::format_zero_padding#10 = (const byte) printf_ulong::format_zero_padding#0 [phi:printf_ulong::@2->printf_number_buffer#3] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_zero_padding#10 = (const byte) printf_ulong::format_zero_padding#0 [phi:printf_ulong::@2->printf_number_buffer#3] -- vbuz1=vbuc1 lda #format_zero_padding sta.z printf_number_buffer.format_zero_padding - // [70] phi (byte) printf_number_buffer::format_justify_left#10 = (const byte) printf_ulong::format_justify_left#0 [phi:printf_ulong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_justify_left#10 = (const byte) printf_ulong::format_justify_left#0 [phi:printf_ulong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [70] phi (byte) printf_number_buffer::format_min_length#3 = (const byte) printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [180] phi (byte) printf_number_buffer::format_min_length#3 = (const byte) printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn // printf_ulong::@return __breturn: - // [219] return + // [277] return rts } // ultoa @@ -10346,64 +12136,64 @@ printf_ulong: { // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// ultoa(dword zp($e) value, byte* zp($22) buffer) +// ultoa(dword zp(7) value, byte* zp($21) buffer) ultoa: { .const max_digits = $a .label digit_value = $1d - .label buffer = $22 - .label digit = $d - .label value = $e - // [221] phi from ultoa to ultoa::@1 [phi:ultoa->ultoa::@1] + .label buffer = $21 + .label digit = $1c + .label value = 7 + // [279] phi from ultoa to ultoa::@1 [phi:ultoa->ultoa::@1] __b1_from_ultoa: - // [221] phi (byte*) ultoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:ultoa->ultoa::@1#0] -- pbuz1=pbuc1 + // [279] phi (byte*) ultoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:ultoa->ultoa::@1#0] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z buffer+1 - // [221] phi (byte) ultoa::started#2 = (byte) 0 [phi:ultoa->ultoa::@1#1] -- vbuxx=vbuc1 + // [279] phi (byte) ultoa::started#2 = (byte) 0 [phi:ultoa->ultoa::@1#1] -- vbuxx=vbuc1 ldx #0 - // [221] phi (dword) ultoa::value#2 = (dword) ultoa::value#1 [phi:ultoa->ultoa::@1#2] -- register_copy - // [221] phi (byte) ultoa::digit#2 = (byte) 0 [phi:ultoa->ultoa::@1#3] -- vbuz1=vbuc1 + // [279] phi (dword) ultoa::value#2 = (dword) ultoa::value#1 [phi:ultoa->ultoa::@1#2] -- register_copy + // [279] phi (byte) ultoa::digit#2 = (byte) 0 [phi:ultoa->ultoa::@1#3] -- vbuz1=vbuc1 lda #0 sta.z digit jmp __b1 // ultoa::@1 __b1: - // [222] if((byte) ultoa::digit#2<(const byte) ultoa::max_digits#1-(byte) 1) goto ultoa::@2 -- vbuz1_lt_vbuc1_then_la1 + // [280] if((byte) ultoa::digit#2<(const byte) ultoa::max_digits#1-(byte) 1) goto ultoa::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z digit cmp #max_digits-1 bcc __b2 jmp __b3 // ultoa::@3 __b3: - // [223] (byte~) ultoa::$11 ← (byte)(dword) ultoa::value#2 -- vbuaa=_byte_vduz1 + // [281] (byte~) ultoa::$11 ← (byte)(dword) ultoa::value#2 -- vbuaa=_byte_vduz1 lda.z value - // [224] *((byte*) ultoa::buffer#11) ← *((const byte*) DIGITS + (byte~) ultoa::$11) -- _deref_pbuz1=pbuc1_derefidx_vbuaa + // [282] *((byte*) ultoa::buffer#11) ← *((const byte*) DIGITS + (byte~) ultoa::$11) -- _deref_pbuz1=pbuc1_derefidx_vbuaa tay lda DIGITS,y ldy #0 sta (buffer),y - // [225] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [283] (byte*) ultoa::buffer#3 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz1 inc.z buffer bne !+ inc.z buffer+1 !: - // [226] *((byte*) ultoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [284] *((byte*) ultoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (buffer),y jmp __breturn // ultoa::@return __breturn: - // [227] return + // [285] return rts // ultoa::@2 __b2: - // [228] (byte~) ultoa::$10 ← (byte) ultoa::digit#2 << (byte) 2 -- vbuaa=vbuz1_rol_2 + // [286] (byte~) ultoa::$10 ← (byte) ultoa::digit#2 << (byte) 2 -- vbuaa=vbuz1_rol_2 lda.z digit asl asl - // [229] (dword) ultoa::digit_value#0 ← *((const dword*) RADIX_DECIMAL_VALUES_LONG + (byte~) ultoa::$10) -- vduz1=pduc1_derefidx_vbuaa + // [287] (dword) ultoa::digit_value#0 ← *((const dword*) RADIX_DECIMAL_VALUES_LONG + (byte~) ultoa::$10) -- vduz1=pduc1_derefidx_vbuaa tay lda RADIX_DECIMAL_VALUES_LONG,y sta.z digit_value @@ -10413,13 +12203,13 @@ ultoa: { sta.z digit_value+2 lda RADIX_DECIMAL_VALUES_LONG+3,y sta.z digit_value+3 - // [230] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 -- vbuc1_neq_vbuxx_then_la1 + // [288] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 -- vbuc1_neq_vbuxx_then_la1 cpx #0 bne __b5 jmp __b7 // ultoa::@7 __b7: - // [231] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 -- vduz1_ge_vduz2_then_la1 + // [289] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 -- vduz1_ge_vduz2_then_la1 lda.z value+3 cmp.z digit_value+3 bcc !+ @@ -10436,48 +12226,48 @@ ultoa: { cmp.z digit_value bcs __b5 !: - // [232] phi from ultoa::@7 to ultoa::@4 [phi:ultoa::@7->ultoa::@4] + // [290] phi from ultoa::@7 to ultoa::@4 [phi:ultoa::@7->ultoa::@4] __b4_from___b7: - // [232] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#11 [phi:ultoa::@7->ultoa::@4#0] -- register_copy - // [232] phi (byte) ultoa::started#4 = (byte) ultoa::started#2 [phi:ultoa::@7->ultoa::@4#1] -- register_copy - // [232] phi (dword) ultoa::value#6 = (dword) ultoa::value#2 [phi:ultoa::@7->ultoa::@4#2] -- register_copy + // [290] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#11 [phi:ultoa::@7->ultoa::@4#0] -- register_copy + // [290] phi (byte) ultoa::started#4 = (byte) ultoa::started#2 [phi:ultoa::@7->ultoa::@4#1] -- register_copy + // [290] phi (dword) ultoa::value#6 = (dword) ultoa::value#2 [phi:ultoa::@7->ultoa::@4#2] -- register_copy jmp __b4 // ultoa::@4 __b4: - // [233] (byte) ultoa::digit#1 ← ++ (byte) ultoa::digit#2 -- vbuz1=_inc_vbuz1 + // [291] (byte) ultoa::digit#1 ← ++ (byte) ultoa::digit#2 -- vbuz1=_inc_vbuz1 inc.z digit - // [221] phi from ultoa::@4 to ultoa::@1 [phi:ultoa::@4->ultoa::@1] + // [279] phi from ultoa::@4 to ultoa::@1 [phi:ultoa::@4->ultoa::@1] __b1_from___b4: - // [221] phi (byte*) ultoa::buffer#11 = (byte*) ultoa::buffer#14 [phi:ultoa::@4->ultoa::@1#0] -- register_copy - // [221] phi (byte) ultoa::started#2 = (byte) ultoa::started#4 [phi:ultoa::@4->ultoa::@1#1] -- register_copy - // [221] phi (dword) ultoa::value#2 = (dword) ultoa::value#6 [phi:ultoa::@4->ultoa::@1#2] -- register_copy - // [221] phi (byte) ultoa::digit#2 = (byte) ultoa::digit#1 [phi:ultoa::@4->ultoa::@1#3] -- register_copy + // [279] phi (byte*) ultoa::buffer#11 = (byte*) ultoa::buffer#14 [phi:ultoa::@4->ultoa::@1#0] -- register_copy + // [279] phi (byte) ultoa::started#2 = (byte) ultoa::started#4 [phi:ultoa::@4->ultoa::@1#1] -- register_copy + // [279] phi (dword) ultoa::value#2 = (dword) ultoa::value#6 [phi:ultoa::@4->ultoa::@1#2] -- register_copy + // [279] phi (byte) ultoa::digit#2 = (byte) ultoa::digit#1 [phi:ultoa::@4->ultoa::@1#3] -- register_copy jmp __b1 // ultoa::@5 __b5: - // [234] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 - // [235] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 - // [236] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 - // [237] call ultoa_append - // [241] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [292] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 + // [293] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 + // [294] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 + // [295] call ultoa_append + // [299] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] ultoa_append_from___b5: jsr ultoa_append - // [238] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 + // [296] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 jmp __b6 // ultoa::@6 __b6: - // [239] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 - // [240] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [297] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 + // [298] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz1 inc.z buffer bne !+ inc.z buffer+1 !: - // [232] phi from ultoa::@6 to ultoa::@4 [phi:ultoa::@6->ultoa::@4] + // [290] phi from ultoa::@6 to ultoa::@4 [phi:ultoa::@6->ultoa::@4] __b4_from___b6: - // [232] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#4 [phi:ultoa::@6->ultoa::@4#0] -- register_copy - // [232] phi (byte) ultoa::started#4 = (byte) 1 [phi:ultoa::@6->ultoa::@4#1] -- vbuxx=vbuc1 + // [290] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#4 [phi:ultoa::@6->ultoa::@4#0] -- register_copy + // [290] phi (byte) ultoa::started#4 = (byte) 1 [phi:ultoa::@6->ultoa::@4#1] -- vbuxx=vbuc1 ldx #1 - // [232] phi (dword) ultoa::value#6 = (dword) ultoa::value#0 [phi:ultoa::@6->ultoa::@4#2] -- register_copy + // [290] phi (dword) ultoa::value#6 = (dword) ultoa::value#0 [phi:ultoa::@6->ultoa::@4#2] -- register_copy jmp __b4 } // ultoa_append @@ -10489,21 +12279,21 @@ ultoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// ultoa_append(byte* zp($22) buffer, dword zp($e) value, dword zp($1d) sub) +// ultoa_append(byte* zp($21) buffer, dword zp(7) value, dword zp($1d) sub) ultoa_append: { - .label buffer = $22 - .label value = $e + .label buffer = $21 + .label value = 7 .label sub = $1d - .label return = $e - // [242] phi from ultoa_append to ultoa_append::@1 [phi:ultoa_append->ultoa_append::@1] + .label return = 7 + // [300] phi from ultoa_append to ultoa_append::@1 [phi:ultoa_append->ultoa_append::@1] __b1_from_ultoa_append: - // [242] phi (byte) ultoa_append::digit#2 = (byte) 0 [phi:ultoa_append->ultoa_append::@1#0] -- vbuxx=vbuc1 + // [300] phi (byte) ultoa_append::digit#2 = (byte) 0 [phi:ultoa_append->ultoa_append::@1#0] -- vbuxx=vbuc1 ldx #0 - // [242] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#0 [phi:ultoa_append->ultoa_append::@1#1] -- register_copy + // [300] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#0 [phi:ultoa_append->ultoa_append::@1#1] -- register_copy jmp __b1 // ultoa_append::@1 __b1: - // [243] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 -- vduz1_ge_vduz2_then_la1 + // [301] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 -- vduz1_ge_vduz2_then_la1 lda.z value+3 cmp.z sub+3 bcc !+ @@ -10523,20 +12313,20 @@ ultoa_append: { jmp __b3 // ultoa_append::@3 __b3: - // [244] *((byte*) ultoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) ultoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [302] *((byte*) ultoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) ultoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda DIGITS,x ldy #0 sta (buffer),y jmp __breturn // ultoa_append::@return __breturn: - // [245] return + // [303] return rts // ultoa_append::@2 __b2: - // [246] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 -- vbuxx=_inc_vbuxx + // [304] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 -- vbuxx=_inc_vbuxx inx - // [247] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 -- vduz1=vduz1_minus_vduz2 + // [305] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 -- vduz1=vduz1_minus_vduz2 lda.z value sec sbc.z sub @@ -10550,135 +12340,167 @@ ultoa_append: { lda.z value+3 sbc.z sub+3 sta.z value+3 - // [242] phi from ultoa_append::@2 to ultoa_append::@1 [phi:ultoa_append::@2->ultoa_append::@1] + // [300] phi from ultoa_append::@2 to ultoa_append::@1 [phi:ultoa_append::@2->ultoa_append::@1] __b1_from___b2: - // [242] phi (byte) ultoa_append::digit#2 = (byte) ultoa_append::digit#1 [phi:ultoa_append::@2->ultoa_append::@1#0] -- register_copy - // [242] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#1 [phi:ultoa_append::@2->ultoa_append::@1#1] -- register_copy + // [300] phi (byte) ultoa_append::digit#2 = (byte) ultoa_append::digit#1 [phi:ultoa_append::@2->ultoa_append::@1#0] -- register_copy + // [300] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#1 [phi:ultoa_append::@2->ultoa_append::@1#1] -- register_copy jmp __b1 } // legal // Checks is a placement of the queen on the board is legal. // Checks the passed (row, column) against all queens placed on the board on lower rows. // If no conflict for desired position returns 1 otherwise returns 0 -// legal(byte zp($12) row, byte zp($1b) column) +// legal(byte zp($c) row, byte zp($1b) column) legal: { - .label __3 = $21 - .label row = $12 + .label row = $c .label column = $1b - // [249] phi from legal to legal::@1 [phi:legal->legal::@1] + .label diff1_return = $b + // [307] phi from legal to legal::@1 [phi:legal->legal::@1] __b1_from_legal: - // [249] phi (byte) legal::i#2 = (byte) 1 [phi:legal->legal::@1#0] -- vbuyy=vbuc1 + // [307] phi (byte) legal::i#10 = (byte) 1 [phi:legal->legal::@1#0] -- vbuyy=vbuc1 ldy #1 jmp __b1 // legal::@1 __b1: - // [250] (byte~) legal::$0 ← (byte) legal::row#0 - (byte) 1 -- vbuxx=vbuz1_minus_1 + // [308] (byte~) legal::$0 ← (byte) legal::row#0 - (byte) 1 -- vbuxx=vbuz1_minus_1 ldx.z row dex - // [251] if((byte) legal::i#2<=(byte~) legal::$0) goto legal::@2 -- vbuyy_le_vbuxx_then_la1 + // [309] if((byte) legal::i#10<=(byte~) legal::$0) goto legal::@2 -- vbuyy_le_vbuxx_then_la1 sty.z $ff cpx.z $ff bcs __b2 - // [252] phi from legal::@1 to legal::@return [phi:legal::@1->legal::@return] + // [310] phi from legal::@1 to legal::@return [phi:legal::@1->legal::@return] __breturn_from___b1: - // [252] phi (byte) legal::return#4 = (byte) 1 [phi:legal::@1->legal::@return#0] -- vbuaa=vbuc1 + // [310] phi (byte) legal::return#4 = (byte) 1 [phi:legal::@1->legal::@return#0] -- vbuaa=vbuc1 lda #1 jmp __breturn - // [252] phi from legal::@2 legal::@6 to legal::@return [phi:legal::@2/legal::@6->legal::@return] + // [310] phi from legal::@2 legal::@5 to legal::@return [phi:legal::@2/legal::@5->legal::@return] __breturn_from___b2: - __breturn_from___b6: - // [252] phi (byte) legal::return#4 = (byte) 0 [phi:legal::@2/legal::@6->legal::@return#0] -- vbuaa=vbuc1 + __breturn_from___b5: + // [310] phi (byte) legal::return#4 = (byte) 0 [phi:legal::@2/legal::@5->legal::@return#0] -- vbuaa=vbuc1 lda #0 jmp __breturn // legal::@return __breturn: - // [253] return + // [311] return rts // legal::@2 __b2: - // [254] if(*((const byte*) board + (byte) legal::i#2)==(byte) legal::column#0) goto legal::@return -- pbuc1_derefidx_vbuyy_eq_vbuz1_then_la1 + // [312] if(*((const byte*) board + (byte) legal::i#10)==(byte) legal::column#0) goto legal::@return -- pbuc1_derefidx_vbuyy_eq_vbuz1_then_la1 lda board,y cmp.z column beq __breturn_from___b2 jmp __b4 // legal::@4 __b4: - // [255] (byte) diff::a#0 ← *((const byte*) board + (byte) legal::i#2) -- vbuaa=pbuc1_derefidx_vbuyy + // [313] (byte) legal::diff1_a#0 ← *((const byte*) board + (byte) legal::i#10) -- vbuaa=pbuc1_derefidx_vbuyy lda board,y - // [256] (byte) diff::b#0 ← (byte) legal::column#0 -- vbuxx=vbuz1 - ldx.z column - // [257] call diff - // [267] phi from legal::@4 to diff [phi:legal::@4->diff] - diff_from___b4: - // [267] phi (byte) diff::b#2 = (byte) diff::b#0 [phi:legal::@4->diff#0] -- register_copy - // [267] phi (byte) diff::a#2 = (byte) diff::a#0 [phi:legal::@4->diff#1] -- register_copy - jsr diff - // [258] (byte) diff::return#0 ← (byte) diff::return#4 + jmp diff1 + // legal::diff1 + diff1: + // [314] if((byte) legal::diff1_a#0<(byte) legal::column#0) goto legal::diff1_@1 -- vbuaa_lt_vbuz1_then_la1 + cmp.z column + bcc diff1___b1 + jmp diff1___b3 + // legal::diff1_@3 + diff1___b3: + // [315] (byte) legal::diff1_return#1 ← (byte) legal::diff1_a#0 - (byte) legal::column#0 -- vbuz1=vbuaa_minus_vbuz2 + sec + sbc.z column + sta.z diff1_return + // [316] phi from legal::diff1_@1 legal::diff1_@3 to legal::diff1_@return [phi:legal::diff1_@1/legal::diff1_@3->legal::diff1_@return] + diff1___breturn_from_diff1___b1: + diff1___breturn_from_diff1___b3: + // [316] phi (byte) legal::diff1_return#2 = (byte) legal::diff1_return#0 [phi:legal::diff1_@1/legal::diff1_@3->legal::diff1_@return#0] -- register_copy + jmp diff1___breturn + // legal::diff1_@return + diff1___breturn: + jmp diff2 + // legal::diff2 + diff2: + // [317] if((byte) legal::i#10<(byte) legal::row#0) goto legal::diff2_@1 -- vbuyy_lt_vbuz1_then_la1 + cpy.z row + bcc diff2___b1 + jmp diff2___b3 + // legal::diff2_@3 + diff2___b3: + // [318] (byte) legal::diff2_return#1 ← (byte) legal::i#10 - (byte) legal::row#0 -- vbuaa=vbuyy_minus_vbuz1 + tya + sec + sbc.z row + // [319] phi from legal::diff2_@1 legal::diff2_@3 to legal::diff2_@return [phi:legal::diff2_@1/legal::diff2_@3->legal::diff2_@return] + diff2___breturn_from_diff2___b1: + diff2___breturn_from_diff2___b3: + // [319] phi (byte) legal::diff2_return#2 = (byte) legal::diff2_return#0 [phi:legal::diff2_@1/legal::diff2_@3->legal::diff2_@return#0] -- register_copy + jmp diff2___breturn + // legal::diff2_@return + diff2___breturn: jmp __b5 // legal::@5 __b5: - // [259] (byte~) legal::$3 ← (byte) diff::return#0 -- vbuz1=vbuaa - sta.z __3 - // [260] (byte) diff::a#1 ← (byte) legal::i#2 -- vbuaa=vbuyy - tya - // [261] (byte) diff::b#1 ← (byte) legal::row#0 -- vbuxx=vbuz1 - ldx.z row - // [262] call diff - // [267] phi from legal::@5 to diff [phi:legal::@5->diff] - diff_from___b5: - // [267] phi (byte) diff::b#2 = (byte) diff::b#1 [phi:legal::@5->diff#0] -- register_copy - // [267] phi (byte) diff::a#2 = (byte) diff::a#1 [phi:legal::@5->diff#1] -- register_copy - jsr diff - // [263] (byte) diff::return#1 ← (byte) diff::return#4 - jmp __b6 - // legal::@6 - __b6: - // [264] (byte~) legal::$4 ← (byte) diff::return#1 - // [265] if((byte~) legal::$3!=(byte~) legal::$4) goto legal::@3 -- vbuz1_neq_vbuaa_then_la1 - cmp.z __3 + // [320] if((byte) legal::diff1_return#2!=(byte) legal::diff2_return#2) goto legal::@3 -- vbuz1_neq_vbuaa_then_la1 + cmp.z diff1_return bne __b3 - jmp __breturn_from___b6 + jmp __breturn_from___b5 // legal::@3 __b3: - // [266] (byte) legal::i#1 ← ++ (byte) legal::i#2 -- vbuyy=_inc_vbuyy + // [321] (byte) legal::i#1 ← ++ (byte) legal::i#10 -- vbuyy=_inc_vbuyy iny - // [249] phi from legal::@3 to legal::@1 [phi:legal::@3->legal::@1] + // [307] phi from legal::@3 to legal::@1 [phi:legal::@3->legal::@1] __b1_from___b3: - // [249] phi (byte) legal::i#2 = (byte) legal::i#1 [phi:legal::@3->legal::@1#0] -- register_copy + // [307] phi (byte) legal::i#10 = (byte) legal::i#1 [phi:legal::@3->legal::@1#0] -- register_copy jmp __b1 + // legal::diff2_@1 + diff2___b1: + // [322] (byte) legal::diff2_return#0 ← (byte) legal::row#0 - (byte) legal::i#10 -- vbuaa=vbuz1_minus_vbuyy + tya + eor #$ff + sec + adc.z row + jmp diff2___breturn_from_diff2___b1 + // legal::diff1_@1 + diff1___b1: + // [323] (byte) legal::diff1_return#0 ← (byte) legal::column#0 - (byte) legal::diff1_a#0 -- vbuz1=vbuz2_minus_vbuaa + eor #$ff + sec + adc.z column + sta.z diff1_return + jmp diff1___breturn_from_diff1___b1 } - // diff -// Find the absolute difference between two unsigned chars -// diff(byte register(A) a, byte register(X) b) -diff: { - // [268] if((byte) diff::a#2<(byte) diff::b#2) goto diff::@1 -- vbuaa_lt_vbuxx_then_la1 - stx.z $ff - cmp.z $ff - bcc __b1 - jmp __b2 - // diff::@2 - __b2: - // [269] (byte) diff::return#3 ← (byte) diff::a#2 - (byte) diff::b#2 -- vbuaa=vbuaa_minus_vbuxx - stx.z $ff - sec - sbc.z $ff - // [270] phi from diff::@1 diff::@2 to diff::@return [phi:diff::@1/diff::@2->diff::@return] - __breturn_from___b1: - __breturn_from___b2: - // [270] phi (byte) diff::return#4 = (byte) diff::return#2 [phi:diff::@1/diff::@2->diff::@return#0] -- register_copy + // tod_init +// Initialize time-of-day clock +// This uses the MOS6526 CIA#1 +// tod_init(byte zp($15) tod_TENTHS, byte zp($16) tod_SEC, byte register(X) tod_MIN, byte register(Y) tod_HOURS) +tod_init: { + .label tod_TENTHS = $15 + .label tod_SEC = $16 + // [324] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc2_bor_vbuc3 + // Set 50hz (this assumes PAL!) (bit7=1) + lda #$80 + ora CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // [325] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc2_band_vbuc3 + // Writing TOD clock (bit7=0) + lda #$7f + and CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // [326] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) ← (byte) tod_init::tod_HOURS#0 -- _deref_pbuc1=vbuyy + // Reset TOD clock + // Writing sequence is important. TOD stops when hours is written and starts when 10ths is written. + sty CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS + // [327] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) ← (byte) tod_init::tod_MIN#0 -- _deref_pbuc1=vbuxx + stx CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_MIN + // [328] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) ← (byte) tod_init::tod_SEC#0 -- _deref_pbuc1=vbuz1 + lda.z tod_SEC + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_SEC + // [329] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) ← (byte) tod_init::tod_TENTHS#0 -- _deref_pbuc1=vbuz1 + lda.z tod_TENTHS + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_10THS jmp __breturn - // diff::@return + // tod_init::@return __breturn: - // [271] return + // [330] return rts - // diff::@1 - __b1: - // [272] (byte) diff::return#2 ← (byte) diff::b#2 - (byte) diff::a#2 -- vbuaa=vbuxx_minus_vbuaa - sta.z $ff - txa - sec - sbc.z $ff - jmp __breturn_from___b1 } // printf_uint // Print an unsigned int using a specific format @@ -10691,47 +12513,47 @@ printf_uint: { jmp __b1 // printf_uint::@1 __b1: - // [274] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [332] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer - // [275] call utoa + // [333] call utoa // Format number into buffer - // [279] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] + // [337] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] utoa_from___b1: jsr utoa jmp __b2 // printf_uint::@2 __b2: - // [276] (byte) printf_number_buffer::buffer_sign#1 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 + // [334] (byte) printf_number_buffer::buffer_sign#1 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [277] call printf_number_buffer + // [335] call printf_number_buffer // Print using format - // [70] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] + // [180] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] printf_number_buffer_from___b2: - // [70] phi (byte) printf_number_buffer::format_upper_case#10 = (const byte) printf_uint::format_upper_case#0 [phi:printf_uint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_upper_case#10 = (const byte) printf_uint::format_upper_case#0 [phi:printf_uint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 lda #format_upper_case sta.z printf_number_buffer.format_upper_case - // [70] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#1 [phi:printf_uint::@2->printf_number_buffer#1] -- register_copy - // [70] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_uint::@2->printf_number_buffer#2] -- pbuz1=pbuc1 + // [180] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#1 [phi:printf_uint::@2->printf_number_buffer#1] -- register_copy + // [180] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_uint::@2->printf_number_buffer#2] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z printf_number_buffer.buffer_digits+1 - // [70] phi (byte) printf_number_buffer::format_zero_padding#10 = (const byte) printf_uint::format_zero_padding#0 [phi:printf_uint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_zero_padding#10 = (const byte) printf_uint::format_zero_padding#0 [phi:printf_uint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 lda #format_zero_padding sta.z printf_number_buffer.format_zero_padding - // [70] phi (byte) printf_number_buffer::format_justify_left#10 = (const byte) printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_justify_left#10 = (const byte) printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [70] phi (byte) printf_number_buffer::format_min_length#3 = (const byte) printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [180] phi (byte) printf_number_buffer::format_min_length#3 = (const byte) printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn // printf_uint::@return __breturn: - // [278] return + // [336] return rts } // utoa @@ -10740,79 +12562,79 @@ printf_uint: { // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// utoa(word zp($13) value, byte* zp($15) buffer) +// utoa(word zp($d) value, byte* zp($f) buffer) utoa: { .const max_digits = 5 - .label digit_value = $22 - .label buffer = $15 - .label digit = $12 - .label value = $13 - // [280] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] + .label digit_value = $21 + .label buffer = $f + .label digit = $c + .label value = $d + // [338] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] __b1_from_utoa: - // [280] phi (byte*) utoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1 + // [338] phi (byte*) utoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z buffer+1 - // [280] phi (byte) utoa::started#2 = (byte) 0 [phi:utoa->utoa::@1#1] -- vbuxx=vbuc1 + // [338] phi (byte) utoa::started#2 = (byte) 0 [phi:utoa->utoa::@1#1] -- vbuxx=vbuc1 ldx #0 - // [280] phi (word) utoa::value#2 = (const word) printf_uint::uvalue#0 [phi:utoa->utoa::@1#2] -- vwuz1=vwuc1 + // [338] phi (word) utoa::value#2 = (const word) printf_uint::uvalue#0 [phi:utoa->utoa::@1#2] -- vwuz1=vwuc1 lda #printf_uint.uvalue sta.z value+1 - // [280] phi (byte) utoa::digit#2 = (byte) 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1 + // [338] phi (byte) utoa::digit#2 = (byte) 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1 lda #0 sta.z digit jmp __b1 // utoa::@1 __b1: - // [281] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 -- vbuz1_lt_vbuc1_then_la1 + // [339] if((byte) utoa::digit#2<(const byte) utoa::max_digits#1-(byte) 1) goto utoa::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z digit cmp #max_digits-1 bcc __b2 jmp __b3 // utoa::@3 __b3: - // [282] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 -- vbuaa=_byte_vwuz1 + // [340] (byte~) utoa::$11 ← (byte)(word) utoa::value#2 -- vbuaa=_byte_vwuz1 lda.z value - // [283] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) -- _deref_pbuz1=pbuc1_derefidx_vbuaa + // [341] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11) -- _deref_pbuz1=pbuc1_derefidx_vbuaa tay lda DIGITS,y ldy #0 sta (buffer),y - // [284] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [342] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 inc.z buffer bne !+ inc.z buffer+1 !: - // [285] *((byte*) utoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 + // [343] *((byte*) utoa::buffer#3) ← (byte) 0 -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (buffer),y jmp __breturn // utoa::@return __breturn: - // [286] return + // [344] return rts // utoa::@2 __b2: - // [287] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [345] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z digit asl - // [288] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) -- vwuz1=pwuc1_derefidx_vbuaa + // [346] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10) -- vwuz1=pwuc1_derefidx_vbuaa tay lda RADIX_DECIMAL_VALUES,y sta.z digit_value lda RADIX_DECIMAL_VALUES+1,y sta.z digit_value+1 - // [289] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuxx_then_la1 + // [347] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuxx_then_la1 cpx #0 bne __b5 jmp __b7 // utoa::@7 __b7: - // [290] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 + // [348] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 lda.z digit_value+1 cmp.z value+1 bne !+ @@ -10821,48 +12643,48 @@ utoa: { beq __b5 !: bcc __b5 - // [291] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] + // [349] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] __b4_from___b7: - // [291] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#11 [phi:utoa::@7->utoa::@4#0] -- register_copy - // [291] phi (byte) utoa::started#4 = (byte) utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy - // [291] phi (word) utoa::value#6 = (word) utoa::value#2 [phi:utoa::@7->utoa::@4#2] -- register_copy + // [349] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#11 [phi:utoa::@7->utoa::@4#0] -- register_copy + // [349] phi (byte) utoa::started#4 = (byte) utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy + // [349] phi (word) utoa::value#6 = (word) utoa::value#2 [phi:utoa::@7->utoa::@4#2] -- register_copy jmp __b4 // utoa::@4 __b4: - // [292] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 -- vbuz1=_inc_vbuz1 + // [350] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2 -- vbuz1=_inc_vbuz1 inc.z digit - // [280] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] + // [338] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] __b1_from___b4: - // [280] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#14 [phi:utoa::@4->utoa::@1#0] -- register_copy - // [280] phi (byte) utoa::started#2 = (byte) utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy - // [280] phi (word) utoa::value#2 = (word) utoa::value#6 [phi:utoa::@4->utoa::@1#2] -- register_copy - // [280] phi (byte) utoa::digit#2 = (byte) utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy + // [338] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#14 [phi:utoa::@4->utoa::@1#0] -- register_copy + // [338] phi (byte) utoa::started#2 = (byte) utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy + // [338] phi (word) utoa::value#2 = (word) utoa::value#6 [phi:utoa::@4->utoa::@1#2] -- register_copy + // [338] phi (byte) utoa::digit#2 = (byte) utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy jmp __b1 // utoa::@5 __b5: - // [293] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 - // [294] (word) utoa_append::value#0 ← (word) utoa::value#2 - // [295] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 - // [296] call utoa_append - // [300] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [351] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 + // [352] (word) utoa_append::value#0 ← (word) utoa::value#2 + // [353] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 + // [354] call utoa_append + // [358] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] utoa_append_from___b5: jsr utoa_append - // [297] (word) utoa_append::return#0 ← (word) utoa_append::value#2 + // [355] (word) utoa_append::return#0 ← (word) utoa_append::value#2 jmp __b6 // utoa::@6 __b6: - // [298] (word) utoa::value#0 ← (word) utoa_append::return#0 - // [299] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [356] (word) utoa::value#0 ← (word) utoa_append::return#0 + // [357] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 inc.z buffer bne !+ inc.z buffer+1 !: - // [291] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] + // [349] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] __b4_from___b6: - // [291] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy - // [291] phi (byte) utoa::started#4 = (byte) 1 [phi:utoa::@6->utoa::@4#1] -- vbuxx=vbuc1 + // [349] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy + // [349] phi (byte) utoa::started#4 = (byte) 1 [phi:utoa::@6->utoa::@4#1] -- vbuxx=vbuc1 ldx #1 - // [291] phi (word) utoa::value#6 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy + // [349] phi (word) utoa::value#6 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy jmp __b4 } // utoa_append @@ -10874,21 +12696,21 @@ utoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// utoa_append(byte* zp($15) buffer, word zp($13) value, word zp($22) sub) +// utoa_append(byte* zp($f) buffer, word zp($d) value, word zp($21) sub) utoa_append: { - .label buffer = $15 - .label value = $13 - .label sub = $22 - .label return = $13 - // [301] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] + .label buffer = $f + .label value = $d + .label sub = $21 + .label return = $d + // [359] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] __b1_from_utoa_append: - // [301] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 + // [359] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 ldx #0 - // [301] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy + // [359] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy jmp __b1 // utoa_append::@1 __b1: - // [302] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 + // [360] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 lda.z sub+1 cmp.z value+1 bne !+ @@ -10900,20 +12722,20 @@ utoa_append: { jmp __b3 // utoa_append::@3 __b3: - // [303] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [361] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda DIGITS,x ldy #0 sta (buffer),y jmp __breturn // utoa_append::@return __breturn: - // [304] return + // [362] return rts // utoa_append::@2 __b2: - // [305] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuxx=_inc_vbuxx + // [363] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuxx=_inc_vbuxx inx - // [306] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 + // [364] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 lda.z value sec sbc.z sub @@ -10921,26 +12743,26 @@ utoa_append: { lda.z value+1 sbc.z sub+1 sta.z value+1 - // [301] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] + // [359] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] __b1_from___b2: - // [301] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy - // [301] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy + // [359] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy + // [359] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy jmp __b1 } // printf_cls // Clear the screen. Also resets current line/char cursor. printf_cls: { - // [308] call memset - // [132] phi from printf_cls to memset [phi:printf_cls->memset] + // [366] call memset + // [73] phi from printf_cls to memset [phi:printf_cls->memset] memset_from_printf_cls: - // [132] phi (byte) memset::c#4 = (byte) ' ' [phi:printf_cls->memset#0] -- vbuxx=vbuc1 + // [73] phi (byte) memset::c#4 = (byte) ' ' [phi:printf_cls->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [132] phi (void*) memset::str#3 = (void*) 1024 [phi:printf_cls->memset#1] -- pvoz1=pvoc1 + // [73] phi (void*) memset::str#3 = (void*) 1024 [phi:printf_cls->memset#1] -- pvoz1=pvoc1 lda #<$400 sta.z memset.str lda #>$400 sta.z memset.str+1 - // [132] phi (word) memset::num#2 = (word)(number) $28*(number) $19 [phi:printf_cls->memset#2] -- vwuz1=vwuc1 + // [73] phi (word) memset::num#2 = (word)(number) $28*(number) $19 [phi:printf_cls->memset#2] -- vwuz1=vwuc1 lda #<$28*$19 sta.z memset.num lda #>$28*$19 @@ -10949,21 +12771,21 @@ printf_cls: { jmp __b1 // printf_cls::@1 __b1: - // [309] (byte*) printf_cursor_ptr ← (byte*) 1024 -- pbuz1=pbuc1 + // [367] (byte*) printf_cursor_ptr ← (byte*) 1024 -- pbuz1=pbuc1 lda #<$400 sta.z printf_cursor_ptr lda #>$400 sta.z printf_cursor_ptr+1 - // [310] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 + // [368] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta.z printf_cursor_x - // [311] (byte) printf_cursor_y ← (byte) 0 -- vbuz1=vbuc1 + // [369] (byte) printf_cursor_y ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta.z printf_cursor_y jmp __breturn // printf_cls::@return __breturn: - // [312] return + // [370] return rts } // File Data @@ -10975,10 +12797,15 @@ printf_cls: { RADIX_DECIMAL_VALUES: .word $2710, $3e8, $64, $a // Values of decimal digits RADIX_DECIMAL_VALUES_LONG: .dword $3b9aca00, $5f5e100, $989680, $f4240, $186a0, $2710, $3e8, $64, $a + // The buffer used by tod_str() + tod_buffer: .text "00:00:00:00" + .byte 0 // The board. board[i] holds the column position of the queen on row i. board: .fill $14, 0 // Buffer used for stringified number being printed printf_buffer: .fill SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER, 0 + // Time of Day 00:00:00:00 + TOD_ZERO: .byte 0, 0, 0, 0 ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 @@ -10988,13 +12815,39 @@ Removing instruction jmp __b1 Removing instruction jmp __b2 Removing instruction jmp __b3 Removing instruction jmp __b4 +Removing instruction jmp __b5 +Removing instruction jmp __b6 +Removing instruction jmp __b7 +Removing instruction jmp __b8 +Removing instruction jmp __b9 +Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __b2 -Removing instruction jmp __b7 +Removing instruction jmp __breturn +Removing instruction jmp __b5 +Removing instruction jmp __b4 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __b3 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __b5 Removing instruction jmp __b9 Removing instruction jmp __b6 -Removing instruction jmp __b5 +Removing instruction jmp __b7 Removing instruction jmp __b8 Removing instruction jmp __b11 Removing instruction jmp __b12 @@ -11036,23 +12889,6 @@ Removing instruction jmp __breturn Removing instruction jmp __b3 Removing instruction jmp __b1 Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b2 -Removing instruction jmp __b3 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b2 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b2 -Removing instruction jmp __breturn -Removing instruction jmp __b5 -Removing instruction jmp __b4 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn Removing instruction jmp __b3 Removing instruction jmp __b2 Removing instruction jmp __b1 @@ -11081,9 +12917,13 @@ Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b4 +Removing instruction jmp diff1 +Removing instruction jmp diff1___b3 +Removing instruction jmp diff1___breturn +Removing instruction jmp diff2 +Removing instruction jmp diff2___b3 +Removing instruction jmp diff2___breturn Removing instruction jmp __b5 -Removing instruction jmp __b6 -Removing instruction jmp __b2 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __b2 @@ -11101,11 +12941,11 @@ Removing instruction jmp __b1 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #0 +Removing instruction ldy #0 Removing instruction lda #>0 Removing instruction lda #0 Replacing instruction ldx #0 with TAX Removing instruction lda.z padding -Removing instruction ldy #0 Removing instruction lda #>0 Removing instruction lda #0 Replacing instruction ldy #0 with TAY @@ -11115,25 +12955,26 @@ Replacing instruction lda #0 with TXA Replacing instruction ldy #0 with TAY Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label __b4_from___b3 with __b4 +Replacing label __b1_from___b5 with __b2 +Replacing label __b1_from___b4 with __b2 +Replacing label __b2_from___b3 with __b2 Replacing label __b1 with __b2 -Replacing label __b5_from___b4 with __b5 -Replacing label __b1_from___b6 with __b1_from___b9 -Replacing label __b1_from___b5 with __b1_from___b9 -Replacing label __b1_from___b8 with __b1_from___b9 +Replacing label __b1_from___b9 with __b2 +Replacing label __b1_from___b7 with __b2 +Replacing label __b1_from___b4 with __b2 +Replacing label __b1_from___b8 with __b2 Replacing label __b4_from___b3 with __b4 Replacing label __b8_from___b6 with __b8 Replacing label __b1_from_printf_number_buffer with __b1_from___b13 Replacing label __b13_from___b14 with __b13 Replacing label __b21_from___b13 with __b1 -Replacing label __b2_from___b3 with __b2 -Replacing label __b4_from___b3 with __b4 -Replacing label __b1_from___b5 with __b2 -Replacing label __b1_from___b4 with __b2 Replacing label __b1_from___b3 with __b1 Replacing label __breturn_from_toupper with __breturn_from___b2 Replacing label __breturn_from___b1 with __breturn_from___b2 -Replacing label __breturn_from___b2 with __breturn_from___b6 -Replacing label __breturn_from___b1 with __breturn +Replacing label __breturn_from___b2 with __breturn_from___b5 +Replacing label diff2___breturn_from_diff2___b1 with __b5 +Replacing label diff1___breturn_from_diff1___b1 with diff2 Removing instruction __b1: Removing instruction __b2_from___b1: Removing instruction main_from___b2: @@ -11144,13 +12985,32 @@ Removing instruction __b2_from___b1: Removing instruction printf_str_from___b2: Removing instruction __b3_from___b2: Removing instruction printf_uint_from___b3: -Removing instruction __b4_from___b3: -Removing instruction queens_from___b4: -Removing instruction __b1: -Removing instruction __b1_from___b5: -Removing instruction __b1_from___b6: -Removing instruction __b1_from___b8: Removing instruction __b5_from___b4: +Removing instruction queens_from___b5: +Removing instruction __b6_from___b5: +Removing instruction __b8_from___b7: +Removing instruction printf_str_from___b8: +Removing instruction __b9_from___b8: +Removing instruction printf_string_from___b9: +Removing instruction __b1_from_printf_string: +Removing instruction printf_str_from___b1: +Removing instruction __b1_from_printf_str: +Removing instruction __b1_from___b4: +Removing instruction __b1_from___b5: +Removing instruction __b1: +Removing instruction printf_char_from___b5: +Removing instruction __b4_from___b3: +Removing instruction __b1_from_printf_scroll: +Removing instruction memcpy_from___b1: +Removing instruction __b2_from___b1: +Removing instruction memset_from___b2: +Removing instruction __b2_from___b1: +Removing instruction __b2_from___b3: +Removing instruction __b1_from___b4: +Removing instruction __b1_from___b7: +Removing instruction __b1_from___b8: +Removing instruction __b1_from___b9: +Removing instruction __b1: Removing instruction printf_ulong_from___b11: Removing instruction __b12_from___b11: Removing instruction printf_str_from___b12: @@ -11167,18 +13027,6 @@ Removing instruction __b21_from___b13: Removing instruction __b21: Removing instruction __b1_from___b21: Removing instruction printf_str_from___b5: -Removing instruction __b1_from_printf_scroll: -Removing instruction memcpy_from___b1: -Removing instruction __b2_from___b1: -Removing instruction memset_from___b2: -Removing instruction __b2_from___b1: -Removing instruction __b2_from___b3: -Removing instruction __b1_from_printf_str: -Removing instruction __b1_from___b4: -Removing instruction __b1_from___b5: -Removing instruction __b1: -Removing instruction printf_char_from___b5: -Removing instruction __b4_from___b3: Removing instruction __b1_from_strupr: Removing instruction __b1_from___b3: Removing instruction __breturn_from_toupper: @@ -11188,8 +13036,12 @@ Removing instruction uctoa_append_from___b5: Removing instruction __b4_from___b7: Removing instruction ultoa_append_from___b5: Removing instruction __breturn_from___b2: -Removing instruction __breturn_from___b1: -Removing instruction __breturn_from___b2: +Removing instruction diff1___breturn_from_diff1___b1: +Removing instruction diff1___breturn_from_diff1___b3: +Removing instruction diff1___breturn: +Removing instruction diff2___breturn_from_diff2___b1: +Removing instruction diff2___breturn_from_diff2___b3: +Removing instruction diff2___breturn: Removing instruction __b4_from___b7: Removing instruction utoa_append_from___b5: Succesful ASM optimization Pass5RedundantLabelElimination @@ -11200,12 +13052,34 @@ Removing instruction __b1: Removing instruction __b2: Removing instruction __b3: Removing instruction __b4: +Removing instruction __b5: +Removing instruction __b6: +Removing instruction __b7: +Removing instruction __b8: +Removing instruction __b9: +Removing instruction __breturn: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b5: +Removing instruction __breturn: +Removing instruction __b1: +Removing instruction __b2: +Removing instruction __b3: +Removing instruction __b1: +Removing instruction __b1_from_memcpy: +Removing instruction __breturn: +Removing instruction __b1_from___b2: +Removing instruction __b1: +Removing instruction __breturn: Removing instruction __breturn: Removing instruction __b1_from_queens: -Removing instruction __b7: -Removing instruction legal_from___b7: +Removing instruction __b5: +Removing instruction legal_from___b5: Removing instruction __b9: Removing instruction __b6: +Removing instruction __b7: +Removing instruction print_from___b4: Removing instruction __b8: Removing instruction printf_str_from_print: Removing instruction __b11: @@ -11250,17 +13124,6 @@ Removing instruction __breturn: Removing instruction printf_char_from___b2: Removing instruction __b3: Removing instruction __b1_from___b3: -Removing instruction __b1: -Removing instruction __b1: -Removing instruction __b2: -Removing instruction __b3: -Removing instruction __b1: -Removing instruction __b1_from_memcpy: -Removing instruction __breturn: -Removing instruction __b1_from___b2: -Removing instruction __breturn: -Removing instruction __b5: -Removing instruction __breturn: Removing instruction __breturn: Removing instruction __b3: Removing instruction __b2: @@ -11297,12 +13160,11 @@ Removing instruction __b1_from___b2: Removing instruction __b1_from_legal: Removing instruction __breturn_from___b1: Removing instruction __b4: -Removing instruction diff_from___b4: -Removing instruction __b5: -Removing instruction diff_from___b5: -Removing instruction __b6: +Removing instruction diff1: +Removing instruction diff1___b3: +Removing instruction diff2___b3: Removing instruction __b1_from___b3: -Removing instruction __b2: +Removing instruction __breturn: Removing instruction __b1: Removing instruction utoa_from___b1: Removing instruction __b2: @@ -11323,23 +13185,19 @@ Removing instruction memset_from_printf_cls: Removing instruction __b1: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Skipping double jump to __b2 in jmp __b1_from___b9 -Skipping double jump to __b2 in jmp __b1_from___b9 -Skipping double jump to __b2 in jmp __b1_from___b9 Replacing jump to rts with rts in jmp __breturn Skipping double jump to __breturn in bcc __breturn_from___b2 Replacing jump to rts with rts in jmp __breturn Skipping double jump to __breturn in jmp __breturn_from___b2 Replacing jump to rts with rts in jmp __breturn -Replacing jump to rts with rts in jmp __breturn Succesful ASM optimization Pass5DoubleJumpElimination -Relabelling long label __b1_from___b9 to __b1 Relabelling long label __b1_from___b13 to __b6 Relabelling long label __breturn_from___b2 to __b2 -Relabelling long label __breturn_from___b6 to __b4 +Relabelling long label __breturn_from___b5 to __b4 Succesful ASM optimization Pass5RelabelLongLabels Adding RTS to root block Succesful ASM optimization Pass5AddMainRts +Removing instruction jmp __b2 Removing instruction jmp __b1 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination @@ -11351,10 +13209,8 @@ Removing instruction lda #0 Removing instruction lda #0 Removing instruction lda.z digit_value+1 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Removing instruction __b1: Removing instruction __b2: Removing instruction __breturn: -Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE @@ -11362,8 +13218,32 @@ FINAL SYMBOL TABLE (label) @2 (label) @begin (label) @end +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const byte*) DIGITS[] = (byte*) "0123456789abcdef"z +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = (byte) 8 +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS = (byte) $b +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN = (byte) $a +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC = (byte) 9 (const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = (byte) 1 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS = (byte) 3 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN = (byte) 2 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC = (byte) 1 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -11372,58 +13252,78 @@ FINAL SYMBOL TABLE (const dword*) RADIX_DECIMAL_VALUES_LONG[] = { (dword) $3b9aca00, (dword) $5f5e100, (dword) $989680, (dword) $f4240, (dword) $186a0, (dword) $2710, (dword) $3e8, (dword) $64, (dword) $a } (const byte*) RADIX_HEXADECIMAL_VALUES_CHAR[] = { (byte) $10 } (const byte) SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = (byte) $c +(byte) TIME_OF_DAY::HOURS +(byte) TIME_OF_DAY::MIN +(byte) TIME_OF_DAY::SEC +(byte) TIME_OF_DAY::TENTHS +(struct TIME_OF_DAY) TOD_ZERO loadstore mem[4] = { TENTHS: (byte) 0, SEC: (byte) 0, MIN: (byte) 0, HOURS: (byte) 0 } (const byte*) board[(number) $14] = { fill( $14, 0) } (dword) count -(dword) count#11 count zp[4]:2 1133.8666666666668 -(dword) count#13 count zp[4]:2 750.1071428571429 -(byte()) diff((byte) diff::a , (byte) diff::b) -(label) diff::@1 -(label) diff::@2 -(label) diff::@return -(byte) diff::a -(byte) diff::a#0 reg byte a 1000001.0 -(byte) diff::a#1 reg byte a 1000001.0 -(byte) diff::a#2 reg byte a 1.60000025E7 -(byte) diff::b -(byte) diff::b#0 reg byte x 2000002.0 -(byte) diff::b#1 reg byte x 2000002.0 -(byte) diff::b#2 reg byte x 1.60000025E7 -(byte) diff::return -(byte) diff::return#0 reg byte a 2000002.0 -(byte) diff::return#1 reg byte a 2000002.0 -(byte) diff::return#2 reg byte a 2.0000002E7 -(byte) diff::return#3 reg byte a 2.0000002E7 -(byte) diff::return#4 reg byte a 5500001.0 +(dword) count#14 count zp[4]:2 572.0 +(dword) count#22 count zp[4]:2 413.89655172413796 (byte()) legal((byte) legal::row , (byte) legal::column) (byte~) legal::$0 reg byte x 2000002.0 -(byte~) legal::$3 zp[1]:33 333333.6666666667 -(byte~) legal::$4 reg byte a 2000002.0 (label) legal::@1 (label) legal::@2 (label) legal::@3 (label) legal::@4 (label) legal::@5 -(label) legal::@6 (label) legal::@return (byte) legal::column -(byte) legal::column#0 column zp[1]:27 111166.83333333333 +(byte) legal::column#0 column zp[1]:27 235353.23529411765 +(label) legal::diff1 +(label) legal::diff1_@1 +(label) legal::diff1_@3 +(label) legal::diff1_@return +(byte) legal::diff1_a +(byte) legal::diff1_a#0 reg byte a 2000002.0 +(byte) legal::diff1_b +(byte) legal::diff1_return +(byte) legal::diff1_return#0 diff1_return zp[1]:11 2000002.0 +(byte) legal::diff1_return#1 diff1_return zp[1]:11 2000002.0 +(byte) legal::diff1_return#2 diff1_return zp[1]:11 600000.6000000001 +(label) legal::diff2 +(label) legal::diff2_@1 +(label) legal::diff2_@3 +(label) legal::diff2_@return +(byte) legal::diff2_a +(byte) legal::diff2_b +(byte) legal::diff2_return +(byte) legal::diff2_return#0 reg byte a 2000002.0 +(byte) legal::diff2_return#1 reg byte a 2000002.0 +(byte) legal::diff2_return#2 reg byte a 3000003.0 (byte) legal::i (byte) legal::i#1 reg byte y 2000002.0 -(byte) legal::i#2 reg byte y 400000.4 +(byte) legal::i#10 reg byte y 571429.1428571428 (byte) legal::return (byte) legal::return#0 reg byte a 2002.0 (byte) legal::return#4 reg byte a 333.6666666666667 (byte) legal::row -(byte) legal::row#0 row zp[1]:18 105315.94736842104 +(byte) legal::row#0 row zp[1]:12 222278.05555555556 (void()) main() (label) main::@1 (label) main::@2 (label) main::@3 (label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@7 +(label) main::@8 +(label) main::@9 (label) main::@return (const byte*) main::str[(byte) $29] = (byte*) " - n queens problem using backtracking -" (const byte*) main::str1[(byte) $13] = (byte*) " -Number of queens:" +number of queens:" +(const byte*) main::str2[(byte) 8] = (byte*) " +time: " +(byte) main::tod_HOURS +(byte) main::tod_HOURS#0 reg byte a 5.5 +(byte) main::tod_MIN +(byte) main::tod_MIN#0 tod_MIN zp[1]:23 5.5 +(byte) main::tod_SEC +(byte) main::tod_SEC#0 reg byte x 5.5 +(byte) main::tod_TENTHS +(byte) main::tod_TENTHS#0 reg byte y 5.5 (void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) (label) memcpy::@1 (label) memcpy::@2 @@ -11431,16 +13331,16 @@ Number of queens:" (void*) memcpy::destination (const void*) memcpy::destination#0 destination = (void*) 1024 (byte*) memcpy::dst -(byte*) memcpy::dst#1 dst zp[2]:34 1.0E19 -(byte*) memcpy::dst#2 dst zp[2]:34 1.0E19 +(byte*) memcpy::dst#1 dst zp[2]:33 1.0E19 +(byte*) memcpy::dst#2 dst zp[2]:33 1.0E19 (word) memcpy::num (const word) memcpy::num#0 num = (word)(number) $28*(number) $19-(number) $28 (void*) memcpy::return (void*) memcpy::source (const void*) memcpy::source#0 source = (void*)(number) $400+(number) $28 (byte*) memcpy::src -(byte*) memcpy::src#1 src zp[2]:21 2.0E19 -(byte*) memcpy::src#2 src zp[2]:21 1.0E19 +(byte*) memcpy::src#1 src zp[2]:15 2.0E19 +(byte*) memcpy::src#2 src zp[2]:15 1.0E19 (byte*) memcpy::src_end (const byte*) memcpy::src_end#0 src_end = (byte*)(const void*) memcpy::source#0+(const word) memcpy::num#0 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) @@ -11451,16 +13351,16 @@ Number of queens:" (byte) memset::c (byte) memset::c#4 reg byte x 1.25E16 (byte*) memset::dst -(byte*) memset::dst#1 dst zp[2]:34 2.0E17 -(byte*) memset::dst#2 dst zp[2]:34 1.33666666666666656E17 -(byte*) memset::dst#4 dst zp[2]:34 2.000000000000002E15 +(byte*) memset::dst#1 dst zp[2]:33 2.0E17 +(byte*) memset::dst#2 dst zp[2]:33 1.33666666666666656E17 +(byte*) memset::dst#4 dst zp[2]:33 2.000000000000002E15 (byte*) memset::end -(byte*) memset::end#0 end zp[2]:21 1.6833333333333332E16 +(byte*) memset::end#0 end zp[2]:15 1.6833333333333332E16 (word) memset::num -(word) memset::num#2 num zp[2]:21 1.000000000000001E15 +(word) memset::num#2 num zp[2]:15 1.000000000000001E15 (void*) memset::return (void*) memset::str -(void*) memset::str#3 str zp[2]:34 +(void*) memset::str#3 str zp[2]:33 (void()) print() (label) print::@1 (label) print::@10 @@ -11478,14 +13378,14 @@ Number of queens:" (label) print::@9 (label) print::@return (byte) print::i -(byte) print::i#1 i zp[1]:27 2000002.0 -(byte) print::i#2 i zp[1]:27 1000001.0 +(byte) print::i#1 i zp[1]:11 2000002.0 +(byte) print::i#2 i zp[1]:11 1000001.0 (byte) print::i1 -(byte) print::i1#1 i1 zp[1]:33 2000002.0 -(byte) print::i1#2 i1 zp[1]:33 1000000.357142857 +(byte) print::i1#1 i1 zp[1]:21 2000002.0 +(byte) print::i1#2 i1 zp[1]:21 1000000.357142857 (byte) print::j -(byte) print::j#1 j zp[1]:6 2.0000002E7 -(byte) print::j#2 j zp[1]:6 5714286.285714285 +(byte) print::j#1 j zp[1]:22 2.0000002E7 +(byte) print::j#2 j zp[1]:22 5714286.285714285 (const byte*) print::str[(byte) 3] = (byte*) " #" (const byte*) print::str1[(byte) 4] = (byte*) ": @@ -11508,9 +13408,9 @@ Number of queens:" (void()) printf_cls() (label) printf_cls::@1 (label) printf_cls::@return -(byte*) printf_cursor_ptr loadstore zp[2]:25 1.5045751633994116E12 -(byte) printf_cursor_x loadstore zp[1]:23 2.811188811196433E11 -(byte) printf_cursor_y loadstore zp[1]:24 2.0792207792214937E12 +(byte*) printf_cursor_ptr loadstore zp[2]:19 1.2788888888894998E12 +(byte) printf_cursor_x loadstore zp[1]:17 2.3647058823593533E11 +(byte) printf_cursor_y loadstore zp[1]:18 1.769060773481271E12 (byte) printf_format_number::justify_left (byte) printf_format_number::min_length (byte) printf_format_number::radix @@ -11520,11 +13420,11 @@ Number of queens:" (byte) printf_format_string::justify_left (byte) printf_format_string::min_length (void()) printf_ln() -(byte*~) printf_ln::$0 zp[2]:25 2.00000000002E11 -(byte*~) printf_ln::$1 zp[2]:25 2.00000000002E11 +(byte*~) printf_ln::$0 zp[2]:19 2.00000000002E11 +(byte*~) printf_ln::$1 zp[2]:19 2.00000000002E11 (label) printf_ln::@return (void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) -(word~) printf_number_buffer::$19 zp[2]:34 1.00000001E8 +(word~) printf_number_buffer::$19 zp[2]:33 1.00000001E8 (label) printf_number_buffer::@1 (label) printf_number_buffer::@10 (label) printf_number_buffer::@11 @@ -11549,47 +13449,47 @@ Number of queens:" (label) printf_number_buffer::@return (struct printf_buffer_number) printf_number_buffer::buffer (byte*) printf_number_buffer::buffer_digits -(byte*) printf_number_buffer::buffer_digits#10 buffer_digits zp[2]:19 1.0344827689655172E7 +(byte*) printf_number_buffer::buffer_digits#10 buffer_digits zp[2]:13 1.0344827689655172E7 (byte) printf_number_buffer::buffer_sign -(byte) printf_number_buffer::buffer_sign#0 buffer_sign zp[1]:13 200002.0 -(byte) printf_number_buffer::buffer_sign#1 buffer_sign zp[1]:13 202.0 -(byte) printf_number_buffer::buffer_sign#10 buffer_sign zp[1]:13 1.55050053E7 -(byte) printf_number_buffer::buffer_sign#2 buffer_sign zp[1]:13 2.0000002E7 +(byte) printf_number_buffer::buffer_sign#0 buffer_sign zp[1]:28 200002.0 +(byte) printf_number_buffer::buffer_sign#1 buffer_sign zp[1]:28 202.0 +(byte) printf_number_buffer::buffer_sign#10 buffer_sign zp[1]:28 1.55050053E7 +(byte) printf_number_buffer::buffer_sign#2 buffer_sign zp[1]:28 2.0000002E7 (struct printf_format_number) printf_number_buffer::format (byte) printf_number_buffer::format_justify_left -(byte) printf_number_buffer::format_justify_left#10 format_justify_left zp[1]:11 6451612.9677419355 +(byte) printf_number_buffer::format_justify_left#10 format_justify_left zp[1]:22 6451612.9677419355 (byte) printf_number_buffer::format_min_length (byte) printf_number_buffer::format_min_length#3 reg byte x 1.00000001E7 (byte) printf_number_buffer::format_radix (byte) printf_number_buffer::format_sign_always (byte) printf_number_buffer::format_upper_case -(byte) printf_number_buffer::format_upper_case#10 format_upper_case zp[1]:28 3846153.8846153845 +(byte) printf_number_buffer::format_upper_case#10 format_upper_case zp[1]:23 3846153.8846153845 (byte) printf_number_buffer::format_zero_padding -(byte) printf_number_buffer::format_zero_padding#10 format_zero_padding zp[1]:12 9375000.09375 +(byte) printf_number_buffer::format_zero_padding#10 format_zero_padding zp[1]:6 9375000.09375 (signed byte) printf_number_buffer::len (signed byte) printf_number_buffer::len#0 reg byte y 1.500000015E8 (signed byte) printf_number_buffer::len#1 reg byte y 2.00000002E8 (signed byte) printf_number_buffer::len#2 reg byte y 3.00000003E8 (signed byte) printf_number_buffer::padding -(signed byte) printf_number_buffer::padding#1 padding zp[1]:7 1.00000001E8 -(signed byte) printf_number_buffer::padding#10 padding zp[1]:7 1.904761923809524E7 +(signed byte) printf_number_buffer::padding#1 padding zp[1]:24 1.00000001E8 +(signed byte) printf_number_buffer::padding#10 padding zp[1]:24 1.904761923809524E7 (void()) printf_padding((byte) printf_padding::pad , (byte) printf_padding::length) (label) printf_padding::@1 (label) printf_padding::@2 (label) printf_padding::@3 (label) printf_padding::@return (byte) printf_padding::i -(byte) printf_padding::i#1 i zp[1]:10 2.000000000002E12 -(byte) printf_padding::i#2 i zp[1]:10 7.5000000000075E11 +(byte) printf_padding::i#1 i zp[1]:27 2.000000000002E12 +(byte) printf_padding::i#2 i zp[1]:27 7.5000000000075E11 (byte) printf_padding::length -(byte) printf_padding::length#0 length zp[1]:8 2.00000002E8 -(byte) printf_padding::length#1 length zp[1]:8 2.00000002E8 -(byte) printf_padding::length#2 length zp[1]:8 2.00000002E8 -(byte) printf_padding::length#4 length zp[1]:8 1.6671666666733334E11 +(byte) printf_padding::length#0 length zp[1]:25 2.00000002E8 +(byte) printf_padding::length#1 length zp[1]:25 2.00000002E8 +(byte) printf_padding::length#2 length zp[1]:25 2.00000002E8 +(byte) printf_padding::length#6 length zp[1]:25 1.6671666666733334E11 (byte) printf_padding::pad -(byte) printf_padding::pad#5 pad zp[1]:9 1.6666666666683334E11 +(byte) printf_padding::pad#7 pad zp[1]:26 1.6666666666683334E11 (void()) printf_scroll() -(byte*~) printf_scroll::$4 zp[2]:25 2.00000000000002E14 +(byte*~) printf_scroll::$4 zp[2]:19 2.00000000000002E14 (label) printf_scroll::@1 (label) printf_scroll::@2 (label) printf_scroll::@3 @@ -11604,10 +13504,19 @@ Number of queens:" (byte) printf_str::ch (byte) printf_str::ch#0 reg byte a 1.0000000001E10 (byte*) printf_str::str -(byte*) printf_str::str#0 str zp[2]:19 4.2857142861428566E9 -(byte*) printf_str::str#1 str zp[2]:19 2.00000002E8 -(byte*) printf_str::str#10 str zp[2]:19 2.05000000025E10 -(byte*) printf_str::str#11 str zp[2]:19 1.100000002E9 +(byte*) printf_str::str#0 str zp[2]:13 4.2857142861428566E9 +(byte*) printf_str::str#1 str zp[2]:13 2.00000002E8 +(byte*) printf_str::str#11 str zp[2]:13 2.05000000025E10 +(byte*) printf_str::str#13 str zp[2]:13 1.100000002E9 +(void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) +(label) printf_string::@1 +(label) printf_string::@return +(struct printf_format_string) printf_string::format +(byte) printf_string::format_justify_left +(byte) printf_string::format_min_length +(signed byte) printf_string::len +(signed byte) printf_string::padding +(byte*) printf_string::str (void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) (label) printf_uchar::@1 (label) printf_uchar::@2 @@ -11670,22 +13579,22 @@ Number of queens:" (label) queens::@9 (label) queens::@return (byte) queens::row -(byte) queens::row#1 row zp[1]:18 2002.0 -(byte) queens::row#10 row zp[1]:18 1144.0 -(byte) queens::row#2 row zp[1]:18 2002.0 +(byte) queens::row#1 row zp[1]:12 2002.0 +(byte) queens::row#10 row zp[1]:12 1144.0 +(byte) queens::row#2 row zp[1]:12 2002.0 (word()) strlen((byte*) strlen::str) (label) strlen::@1 (label) strlen::@2 (label) strlen::@return (word) strlen::len -(word) strlen::len#1 len zp[2]:34 1.000000000001E12 -(word) strlen::len#2 len zp[2]:34 5.0002500000075E11 +(word) strlen::len#1 len zp[2]:33 1.000000000001E12 +(word) strlen::len#2 len zp[2]:33 5.0002500000075E11 (word) strlen::return -(word) strlen::return#2 return zp[2]:34 2.00000002E8 +(word) strlen::return#2 return zp[2]:33 2.00000002E8 (byte*) strlen::str -(byte*) strlen::str#0 str zp[2]:21 2.000000000002E12 -(byte*) strlen::str#1 str zp[2]:21 5.50000001E8 -(byte*) strlen::str#2 str zp[2]:21 1.0003333333346667E12 +(byte*) strlen::str#0 str zp[2]:15 2.000000000002E12 +(byte*) strlen::str#1 str zp[2]:15 5.50000001E8 +(byte*) strlen::str#3 str zp[2]:15 1.0003333333346667E12 (byte*()) strupr((byte*) strupr::str) (byte~) strupr::$0 reg byte a 2.000000000002E12 (label) strupr::@1 @@ -11694,10 +13603,73 @@ Number of queens:" (label) strupr::@return (byte*) strupr::return (byte*) strupr::src -(byte*) strupr::src#1 src zp[2]:21 2.000000000002E12 -(byte*) strupr::src#2 src zp[2]:21 7.144285714294285E11 +(byte*) strupr::src#1 src zp[2]:15 2.000000000002E12 +(byte*) strupr::src#2 src zp[2]:15 7.144285714294285E11 (byte*) strupr::str -(byte*) strupr::str#0 str zp[2]:21 5.50000001E8 +(byte*) strupr::str#0 str zp[2]:15 5.50000001E8 +(const byte*) tod_buffer[] = (byte*) "00:00:00:00" +(void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) +(label) tod_init::@return +(struct TIME_OF_DAY) tod_init::tod +(byte) tod_init::tod_HOURS +(byte) tod_init::tod_HOURS#0 reg byte y 37.33333333333333 +(byte) tod_init::tod_MIN +(byte) tod_init::tod_MIN#0 reg byte x 22.4 +(byte) tod_init::tod_SEC +(byte) tod_init::tod_SEC#0 tod_SEC zp[1]:22 16.0 +(byte) tod_init::tod_TENTHS +(byte) tod_init::tod_TENTHS#0 tod_TENTHS zp[1]:21 12.444444444444443 +(struct TIME_OF_DAY()) tod_read() +(label) tod_read::@return +(byte) tod_read::hours +(byte) tod_read::mins +(struct TIME_OF_DAY) tod_read::return +(byte) tod_read::return_HOURS +(byte) tod_read::return_HOURS#0 return_HOURS zp[1]:24 12.444444444444443 +(byte) tod_read::return_HOURS#2 return_HOURS zp[1]:24 5.5 +(byte) tod_read::return_MIN +(byte) tod_read::return_MIN#0 reg byte a 16.0 +(byte) tod_read::return_MIN#2 return_MIN zp[1]:23 5.5 +(byte) tod_read::return_SEC +(byte) tod_read::return_SEC#0 reg byte x 22.4 +(byte) tod_read::return_SEC#2 reg byte x 5.5 +(byte) tod_read::return_TENTHS +(byte) tod_read::return_TENTHS#0 reg byte y 37.33333333333333 +(byte) tod_read::return_TENTHS#2 reg byte y 5.5 +(byte) tod_read::secs +(byte) tod_read::tenths +(byte) tod_read::tod_HOURS +(byte) tod_read::tod_MIN +(byte) tod_read::tod_SEC +(byte) tod_read::tod_TENTHS +(byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) +(byte~) tod_str::$0 reg byte a 202.0 +(byte~) tod_str::$1 reg byte a 202.0 +(byte~) tod_str::$10 reg byte a 202.0 +(byte~) tod_str::$11 reg byte a 202.0 +(byte~) tod_str::$12 reg byte a 202.0 +(byte~) tod_str::$13 reg byte a 202.0 +(byte~) tod_str::$14 reg byte a 202.0 +(byte~) tod_str::$15 reg byte a 202.0 +(byte~) tod_str::$2 reg byte a 202.0 +(byte~) tod_str::$3 reg byte a 202.0 +(byte~) tod_str::$4 reg byte a 202.0 +(byte~) tod_str::$5 reg byte a 202.0 +(byte~) tod_str::$6 reg byte a 202.0 +(byte~) tod_str::$7 reg byte a 202.0 +(byte~) tod_str::$8 reg byte a 202.0 +(byte~) tod_str::$9 reg byte a 202.0 +(label) tod_str::@return +(byte*) tod_str::return +(struct TIME_OF_DAY) tod_str::tod +(byte) tod_str::tod_HOURS +(byte) tod_str::tod_HOURS#0 reg byte x 53.25 +(byte) tod_str::tod_MIN +(byte) tod_str::tod_MIN#0 reg byte y 19.363636363636363 +(byte) tod_str::tod_SEC +(byte) tod_str::tod_SEC#0 tod_SEC zp[1]:26 11.833333333333332 +(byte) tod_str::tod_TENTHS +(byte) tod_str::tod_TENTHS#0 tod_TENTHS zp[1]:25 8.52 (byte()) toupper((byte) toupper::ch) (label) toupper::@1 (label) toupper::@2 @@ -11718,21 +13690,21 @@ Number of queens:" (label) uctoa::@7 (label) uctoa::@return (byte*) uctoa::buffer -(byte*) uctoa::buffer#11 buffer zp[2]:19 3.3350000000500004E10 -(byte*) uctoa::buffer#14 buffer zp[2]:19 1.500000000015E11 -(byte*) uctoa::buffer#3 buffer zp[2]:19 2.00000002E8 -(byte*) uctoa::buffer#4 buffer zp[2]:19 2.00000000002E11 +(byte*) uctoa::buffer#11 buffer zp[2]:13 3.3350000000500004E10 +(byte*) uctoa::buffer#14 buffer zp[2]:13 1.500000000015E11 +(byte*) uctoa::buffer#3 buffer zp[2]:13 2.00000002E8 +(byte*) uctoa::buffer#4 buffer zp[2]:13 2.00000000002E11 (byte) uctoa::digit -(byte) uctoa::digit#1 digit zp[1]:11 2.00000000002E11 -(byte) uctoa::digit#2 digit zp[1]:11 3.076923076953846E10 +(byte) uctoa::digit#1 digit zp[1]:22 2.00000000002E11 +(byte) uctoa::digit#2 digit zp[1]:22 3.076923076953846E10 (byte) uctoa::digit_value (byte) uctoa::digit_value#0 digit_value zp[1]:28 6.0000000000600006E10 (byte*) uctoa::digit_values (byte) uctoa::max_digits (byte) uctoa::radix (byte) uctoa::started -(byte) uctoa::started#2 started zp[1]:12 6.0000000000600006E10 -(byte) uctoa::started#4 started zp[1]:12 1.00000000001E11 +(byte) uctoa::started#2 started zp[1]:6 6.0000000000600006E10 +(byte) uctoa::started#4 started zp[1]:6 1.00000000001E11 (byte) uctoa::value (byte) uctoa::value#0 reg byte x 1.00000000001E11 (byte) uctoa::value#1 reg byte x 5.5000001E7 @@ -11744,7 +13716,7 @@ Number of queens:" (label) uctoa_append::@3 (label) uctoa_append::@return (byte*) uctoa_append::buffer -(byte*) uctoa_append::buffer#0 buffer zp[2]:19 1.3750000000025E11 +(byte*) uctoa_append::buffer#0 buffer zp[2]:13 1.3750000000025E11 (byte) uctoa_append::digit (byte) uctoa_append::digit#1 reg byte y 1.0E16 (byte) uctoa_append::digit#2 reg byte y 1.00005E16 @@ -11768,13 +13740,13 @@ Number of queens:" (label) ultoa::@7 (label) ultoa::@return (byte*) ultoa::buffer -(byte*) ultoa::buffer#11 buffer zp[2]:34 2.871428614285714E7 -(byte*) ultoa::buffer#14 buffer zp[2]:34 1.500000015E8 -(byte*) ultoa::buffer#3 buffer zp[2]:34 2000002.0 -(byte*) ultoa::buffer#4 buffer zp[2]:34 2.00000002E8 +(byte*) ultoa::buffer#11 buffer zp[2]:33 2.871428614285714E7 +(byte*) ultoa::buffer#14 buffer zp[2]:33 1.500000015E8 +(byte*) ultoa::buffer#3 buffer zp[2]:33 2000002.0 +(byte*) ultoa::buffer#4 buffer zp[2]:33 2.00000002E8 (byte) ultoa::digit -(byte) ultoa::digit#1 digit zp[1]:13 2.00000002E8 -(byte) ultoa::digit#2 digit zp[1]:13 2.857142885714286E7 +(byte) ultoa::digit#1 digit zp[1]:28 2.00000002E8 +(byte) ultoa::digit#2 digit zp[1]:28 2.857142885714286E7 (dword) ultoa::digit_value (dword) ultoa::digit_value#0 digit_value zp[4]:29 6.0000000599999994E7 (dword*) ultoa::digit_values @@ -11785,28 +13757,28 @@ Number of queens:" (byte) ultoa::started#2 reg byte x 5.00000005E7 (byte) ultoa::started#4 reg byte x 1.00000001E8 (dword) ultoa::value -(dword) ultoa::value#0 value zp[4]:14 1.00000001E8 -(dword) ultoa::value#1 value zp[4]:14 550001.0 -(dword) ultoa::value#2 value zp[4]:14 5.7285715E7 -(dword) ultoa::value#6 value zp[4]:14 1.500000015E8 +(dword) ultoa::value#0 value zp[4]:7 1.00000001E8 +(dword) ultoa::value#1 value zp[4]:7 550001.0 +(dword) ultoa::value#2 value zp[4]:7 5.7285715E7 +(dword) ultoa::value#6 value zp[4]:7 1.500000015E8 (dword()) ultoa_append((byte*) ultoa_append::buffer , (dword) ultoa_append::value , (dword) ultoa_append::sub) (label) ultoa_append::@1 (label) ultoa_append::@2 (label) ultoa_append::@3 (label) ultoa_append::@return (byte*) ultoa_append::buffer -(byte*) ultoa_append::buffer#0 buffer zp[2]:34 1.3750000025E8 +(byte*) ultoa_append::buffer#0 buffer zp[2]:33 1.3750000025E8 (byte) ultoa_append::digit (byte) ultoa_append::digit#1 reg byte x 1.000000000001E12 (byte) ultoa_append::digit#2 reg byte x 1.0005000000015E12 (dword) ultoa_append::return -(dword) ultoa_append::return#0 return zp[4]:14 2.00000002E8 +(dword) ultoa_append::return#0 return zp[4]:7 2.00000002E8 (dword) ultoa_append::sub (dword) ultoa_append::sub#0 sub zp[4]:29 3.333500000005E11 (dword) ultoa_append::value -(dword) ultoa_append::value#0 value zp[4]:14 3.666666673333334E8 -(dword) ultoa_append::value#1 value zp[4]:14 2.000000000002E12 -(dword) ultoa_append::value#2 value zp[4]:14 5.0018333333416675E11 +(dword) ultoa_append::value#0 value zp[4]:7 3.666666673333334E8 +(dword) ultoa_append::value#1 value zp[4]:7 2.000000000002E12 +(dword) ultoa_append::value#2 value zp[4]:7 5.0018333333416675E11 (void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix) (byte~) utoa::$10 reg byte a 20002.0 (byte~) utoa::$11 reg byte a 2002.0 @@ -11819,15 +13791,15 @@ Number of queens:" (label) utoa::@7 (label) utoa::@return (byte*) utoa::buffer -(byte*) utoa::buffer#11 buffer zp[2]:21 3000.4285714285716 -(byte*) utoa::buffer#14 buffer zp[2]:21 15001.5 -(byte*) utoa::buffer#3 buffer zp[2]:21 2002.0 -(byte*) utoa::buffer#4 buffer zp[2]:21 20002.0 +(byte*) utoa::buffer#11 buffer zp[2]:15 3000.4285714285716 +(byte*) utoa::buffer#14 buffer zp[2]:15 15001.5 +(byte*) utoa::buffer#3 buffer zp[2]:15 2002.0 +(byte*) utoa::buffer#4 buffer zp[2]:15 20002.0 (byte) utoa::digit -(byte) utoa::digit#1 digit zp[1]:18 20002.0 -(byte) utoa::digit#2 digit zp[1]:18 2857.4285714285716 +(byte) utoa::digit#1 digit zp[1]:12 20002.0 +(byte) utoa::digit#2 digit zp[1]:12 2857.4285714285716 (word) utoa::digit_value -(word) utoa::digit_value#0 digit_value zp[2]:34 6000.6 +(word) utoa::digit_value#0 digit_value zp[2]:33 6000.6 (word*) utoa::digit_values (byte) utoa::max_digits (const byte) utoa::max_digits#1 max_digits = (byte) 5 @@ -11836,86 +13808,110 @@ Number of queens:" (byte) utoa::started#2 reg byte x 5000.5 (byte) utoa::started#4 reg byte x 10001.0 (word) utoa::value -(word) utoa::value#0 value zp[2]:19 10001.0 -(word) utoa::value#2 value zp[2]:19 5714.857142857143 -(word) utoa::value#6 value zp[2]:19 15001.5 +(word) utoa::value#0 value zp[2]:13 10001.0 +(word) utoa::value#2 value zp[2]:13 5714.857142857143 +(word) utoa::value#6 value zp[2]:13 15001.5 (word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub) (label) utoa_append::@1 (label) utoa_append::@2 (label) utoa_append::@3 (label) utoa_append::@return (byte*) utoa_append::buffer -(byte*) utoa_append::buffer#0 buffer zp[2]:21 13750.25 +(byte*) utoa_append::buffer#0 buffer zp[2]:15 13750.25 (byte) utoa_append::digit (byte) utoa_append::digit#1 reg byte x 1.0000001E7 (byte) utoa_append::digit#2 reg byte x 1.00500015E7 (word) utoa_append::return -(word) utoa_append::return#0 return zp[2]:19 20002.0 +(word) utoa_append::return#0 return zp[2]:13 20002.0 (word) utoa_append::sub -(word) utoa_append::sub#0 sub zp[2]:34 3335000.5 +(word) utoa_append::sub#0 sub zp[2]:33 3335000.5 (word) utoa_append::value -(word) utoa_append::value#0 value zp[2]:19 36667.33333333333 -(word) utoa_append::value#1 value zp[2]:19 2.0000002E7 -(word) utoa_append::value#2 value zp[2]:19 5018334.166666666 +(word) utoa_append::value#0 value zp[2]:13 36667.33333333333 +(word) utoa_append::value#1 value zp[2]:13 2.0000002E7 +(word) utoa_append::value#2 value zp[2]:13 5018334.166666666 -zp[4]:2 [ count#11 count#13 printf_ulong::uvalue#0 ] -zp[1]:6 [ print::j#2 print::j#1 ] +reg byte x [ memset::c#4 ] +reg byte a [ printf_char::ch#3 printf_char::ch#2 printf_char::ch#0 printf_char::ch#1 ] +zp[4]:2 [ count#14 count#22 printf_ulong::uvalue#0 ] reg byte x [ printf_uchar::uvalue#2 printf_uchar::uvalue#1 printf_uchar::uvalue#0 ] reg byte x [ printf_number_buffer::format_min_length#3 ] reg byte y [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] -zp[1]:7 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] -zp[1]:8 [ printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] -zp[1]:9 [ printf_padding::pad#5 ] -zp[1]:10 [ printf_padding::i#2 printf_padding::i#1 ] -reg byte a [ printf_char::ch#3 printf_char::ch#2 printf_char::ch#0 printf_char::ch#1 ] -reg byte x [ memset::c#4 ] reg byte a [ toupper::return#2 toupper::return#0 toupper::ch#0 ] -zp[1]:11 [ uctoa::digit#2 uctoa::digit#1 printf_number_buffer::format_justify_left#10 ] reg byte x [ uctoa::value#2 uctoa::value#6 uctoa::value#1 uctoa::value#0 ] -zp[1]:12 [ uctoa::started#2 uctoa::started#4 printf_number_buffer::format_zero_padding#10 ] +zp[1]:6 [ uctoa::started#2 uctoa::started#4 printf_number_buffer::format_zero_padding#10 ] reg byte x [ uctoa_append::value#2 uctoa_append::value#0 uctoa_append::value#1 ] reg byte y [ uctoa_append::digit#2 uctoa_append::digit#1 ] -zp[1]:13 [ ultoa::digit#2 ultoa::digit#1 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] -zp[4]:14 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ultoa_append::return#0 ] +zp[4]:7 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ultoa_append::return#0 ] reg byte x [ ultoa::started#2 ultoa::started#4 ] reg byte x [ ultoa_append::digit#2 ultoa_append::digit#1 ] -reg byte y [ legal::i#2 legal::i#1 ] +reg byte y [ legal::i#10 legal::i#1 ] reg byte a [ legal::return#4 ] -reg byte a [ diff::a#2 diff::a#0 diff::a#1 ] -reg byte x [ diff::b#2 diff::b#0 diff::b#1 ] -reg byte a [ diff::return#4 diff::return#2 diff::return#3 ] -zp[1]:18 [ utoa::digit#2 utoa::digit#1 queens::row#10 queens::row#1 queens::row#2 legal::row#0 ] -zp[2]:19 [ utoa::value#2 utoa::value#6 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 uctoa_append::buffer#0 printf_number_buffer::buffer_digits#10 printf_str::str#10 printf_str::str#11 printf_str::str#1 printf_str::str#0 ] +zp[1]:11 [ legal::diff1_return#2 legal::diff1_return#0 legal::diff1_return#1 print::i#2 print::i#1 ] +reg byte a [ legal::diff2_return#2 legal::diff2_return#0 legal::diff2_return#1 ] +zp[1]:12 [ utoa::digit#2 utoa::digit#1 queens::row#10 queens::row#1 queens::row#2 legal::row#0 ] +zp[2]:13 [ utoa::value#2 utoa::value#6 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 uctoa_append::buffer#0 printf_str::str#11 printf_str::str#13 printf_str::str#1 printf_str::str#0 printf_number_buffer::buffer_digits#10 ] reg byte x [ utoa::started#2 utoa::started#4 ] -zp[2]:21 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 strlen::str#2 strlen::str#1 strlen::str#0 strupr::src#2 strupr::str#0 strupr::src#1 memcpy::src#2 memcpy::src#1 memset::num#2 memset::end#0 ] +zp[2]:15 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 strlen::str#3 strlen::str#1 strlen::str#0 strupr::src#2 strupr::str#0 strupr::src#1 memcpy::src#2 memcpy::src#1 memset::num#2 memset::end#0 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] -zp[1]:23 [ printf_cursor_x ] -zp[1]:24 [ printf_cursor_y ] -zp[2]:25 [ printf_cursor_ptr printf_scroll::$4 printf_ln::$0 printf_ln::$1 ] -zp[1]:27 [ legal::column#0 print::i#2 print::i#1 ] +zp[1]:17 [ printf_cursor_x ] +zp[1]:18 [ printf_cursor_y ] +zp[2]:19 [ printf_cursor_ptr printf_scroll::$4 printf_ln::$0 printf_ln::$1 ] +zp[1]:21 [ tod_init::tod_TENTHS#0 print::i1#2 print::i1#1 ] +zp[1]:22 [ tod_init::tod_SEC#0 print::j#2 print::j#1 uctoa::digit#2 uctoa::digit#1 printf_number_buffer::format_justify_left#10 ] +reg byte x [ tod_init::tod_MIN#0 ] +reg byte y [ tod_init::tod_HOURS#0 ] +reg byte y [ tod_read::return_TENTHS#2 ] +reg byte x [ tod_read::return_SEC#2 ] +zp[1]:23 [ tod_read::return_MIN#2 main::tod_MIN#0 printf_number_buffer::format_upper_case#10 ] +zp[1]:24 [ tod_read::return_HOURS#2 tod_read::return_HOURS#0 printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] +reg byte y [ main::tod_TENTHS#0 ] +reg byte x [ main::tod_SEC#0 ] +reg byte a [ main::tod_HOURS#0 ] +zp[1]:25 [ tod_str::tod_TENTHS#0 printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] +zp[1]:26 [ tod_str::tod_SEC#0 printf_padding::pad#7 ] +reg byte y [ tod_str::tod_MIN#0 ] +reg byte x [ tod_str::tod_HOURS#0 ] +reg byte a [ printf_str::ch#0 ] +reg byte a [ tod_str::$0 ] +reg byte a [ tod_str::$1 ] +reg byte a [ tod_str::$2 ] +reg byte a [ tod_str::$3 ] +reg byte a [ tod_str::$4 ] +reg byte a [ tod_str::$5 ] +reg byte a [ tod_str::$6 ] +reg byte a [ tod_str::$7 ] +reg byte a [ tod_str::$8 ] +reg byte a [ tod_str::$9 ] +reg byte a [ tod_str::$10 ] +reg byte a [ tod_str::$11 ] +reg byte a [ tod_str::$12 ] +reg byte a [ tod_str::$13 ] +reg byte a [ tod_str::$14 ] +reg byte a [ tod_str::$15 ] +reg byte a [ tod_read::return_MIN#0 ] +reg byte x [ tod_read::return_SEC#0 ] +reg byte y [ tod_read::return_TENTHS#0 ] +zp[1]:27 [ legal::column#0 printf_padding::i#2 printf_padding::i#1 ] reg byte a [ legal::return#0 ] reg byte a [ queens::$2 ] -reg byte a [ printf_str::ch#0 ] reg byte a [ toupper::return#3 ] reg byte a [ strupr::$0 ] -zp[1]:28 [ uctoa::digit_value#0 uctoa_append::sub#0 printf_number_buffer::format_upper_case#10 ] +zp[1]:28 [ uctoa::digit_value#0 uctoa_append::sub#0 ultoa::digit#2 ultoa::digit#1 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] reg byte x [ uctoa_append::return#0 ] reg byte a [ ultoa::$11 ] reg byte a [ ultoa::$10 ] zp[4]:29 [ ultoa::digit_value#0 ultoa_append::sub#0 ] reg byte x [ legal::$0 ] -reg byte a [ diff::return#0 ] -zp[1]:33 [ legal::$3 print::i1#2 print::i1#1 ] -reg byte a [ diff::return#1 ] -reg byte a [ legal::$4 ] +reg byte a [ legal::diff1_a#0 ] reg byte a [ utoa::$11 ] reg byte a [ utoa::$10 ] -zp[2]:34 [ utoa::digit_value#0 utoa_append::sub#0 ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 strlen::len#2 strlen::len#1 strlen::return#2 printf_number_buffer::$19 memcpy::dst#2 memcpy::dst#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] +zp[2]:33 [ utoa::digit_value#0 utoa_append::sub#0 ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 strlen::len#2 strlen::len#1 strlen::return#2 printf_number_buffer::$19 memcpy::dst#2 memcpy::dst#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] mem[12] [ printf_buffer ] +mem[4] [ TOD_ZERO ] FINAL ASSEMBLER -Score: 1335318 +Score: 1339709 // File Comments // N Queens Problem in C Using Backtracking @@ -11928,11 +13924,22 @@ Score: 1335318 :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 + .const OFFSET_STRUCT_TIME_OF_DAY_SEC = 1 + .const OFFSET_STRUCT_TIME_OF_DAY_MIN = 2 + .const OFFSET_STRUCT_TIME_OF_DAY_HOURS = 3 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f + .const OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS = $b + .const OFFSET_STRUCT_MOS6526_CIA_TOD_MIN = $a + .const OFFSET_STRUCT_MOS6526_CIA_TOD_SEC = 9 + .const OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = 8 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c - .label printf_cursor_x = $17 - .label printf_cursor_y = $18 - .label printf_cursor_ptr = $19 + .label printf_cursor_x = $11 + .label printf_cursor_y = $12 + .label printf_cursor_ptr = $13 // The number of found solutions .label count = 2 // @begin @@ -11964,16 +13971,17 @@ __bbegin: // @end // main main: { + .label tod_MIN = $17 // printf_cls() // [8] call printf_cls - // [307] phi from main to printf_cls [phi:main->printf_cls] + // [365] phi from main to printf_cls [phi:main->printf_cls] jsr printf_cls // [9] phi from main to main::@1 [phi:main->main::@1] // main::@1 // printf(" - n queens problem using backtracking -") // [10] call printf_str - // [148] phi from main::@1 to printf_str [phi:main::@1->printf_str] - // [148] phi (byte*) printf_str::str#11 = (const byte*) main::str [phi:main::@1->printf_str#0] -- pbuz1=pbuc1 + // [46] phi from main::@1 to printf_str [phi:main::@1->printf_str] + // [46] phi (byte*) printf_str::str#13 = (const byte*) main::str [phi:main::@1->printf_str#0] -- pbuz1=pbuc1 lda #str @@ -11981,10 +13989,10 @@ main: { jsr printf_str // [11] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 - // printf("\nNumber of queens:%u",QUEENS) + // printf("\nnumber of queens:%u",QUEENS) // [12] call printf_str - // [148] phi from main::@2 to printf_str [phi:main::@2->printf_str] - // [148] phi (byte*) printf_str::str#11 = (const byte*) main::str1 [phi:main::@2->printf_str#0] -- pbuz1=pbuc1 + // [46] phi from main::@2 to printf_str [phi:main::@2->printf_str] + // [46] phi (byte*) printf_str::str#13 = (const byte*) main::str1 [phi:main::@2->printf_str#0] -- pbuz1=pbuc1 lda #str1 @@ -11992,24 +14000,539 @@ main: { jsr printf_str // [13] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 - // printf("\nNumber of queens:%u",QUEENS) + // printf("\nnumber of queens:%u",QUEENS) // [14] call printf_uint - // [273] phi from main::@3 to printf_uint [phi:main::@3->printf_uint] + // [331] phi from main::@3 to printf_uint [phi:main::@3->printf_uint] jsr printf_uint - // [15] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 + // tod_init(TOD_ZERO) + // [15] (byte) tod_init::tod_TENTHS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO) -- vbuz1=_deref_pbuc1 + lda TOD_ZERO + sta.z tod_init.tod_TENTHS + // [16] (byte) tod_init::tod_SEC#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC) -- vbuz1=_deref_pbuc1 + lda TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_SEC + sta.z tod_init.tod_SEC + // [17] (byte) tod_init::tod_MIN#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN) -- vbuxx=_deref_pbuc1 + ldx TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_MIN + // [18] (byte) tod_init::tod_HOURS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS) -- vbuyy=_deref_pbuc1 + ldy TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS + // [19] call tod_init + jsr tod_init + // [20] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + // main::@5 // queens() - // [16] call queens - // [18] phi from main::@4 to queens [phi:main::@4->queens] + // [21] call queens + // [128] phi from main::@5 to queens [phi:main::@5->queens] jsr queens + // [22] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + // main::@6 + // tod_read() + // [23] call tod_read + jsr tod_read + // [24] (byte) tod_read::return_TENTHS#2 ← (byte) tod_read::return_TENTHS#0 + // [25] (byte) tod_read::return_SEC#2 ← (byte) tod_read::return_SEC#0 + // [26] (byte) tod_read::return_MIN#2 ← (byte) tod_read::return_MIN#0 -- vbuz1=vbuaa + sta.z tod_read.return_MIN + // [27] (byte) tod_read::return_HOURS#2 ← (byte) tod_read::return_HOURS#0 + // main::@7 + // tod = tod_read() + // [28] (byte) main::tod_TENTHS#0 ← (byte) tod_read::return_TENTHS#2 + // [29] (byte) main::tod_SEC#0 ← (byte) tod_read::return_SEC#2 + // [30] (byte) main::tod_MIN#0 ← (byte) tod_read::return_MIN#2 + // [31] (byte) main::tod_HOURS#0 ← (byte) tod_read::return_HOURS#2 -- vbuaa=vbuz1 + lda.z tod_read.return_HOURS + // tod_str(tod) + // [32] (byte) tod_str::tod_TENTHS#0 ← (byte) main::tod_TENTHS#0 -- vbuz1=vbuyy + sty.z tod_str.tod_TENTHS + // [33] (byte) tod_str::tod_SEC#0 ← (byte) main::tod_SEC#0 -- vbuz1=vbuxx + stx.z tod_str.tod_SEC + // [34] (byte) tod_str::tod_MIN#0 ← (byte) main::tod_MIN#0 -- vbuyy=vbuz1 + ldy.z tod_MIN + // [35] (byte) tod_str::tod_HOURS#0 ← (byte) main::tod_HOURS#0 -- vbuxx=vbuaa + tax + // [36] call tod_str + jsr tod_str + // [37] phi from main::@7 to main::@8 [phi:main::@7->main::@8] + // main::@8 + // printf("\ntime: %s",tod_str(tod)) + // [38] call printf_str + // [46] phi from main::@8 to printf_str [phi:main::@8->printf_str] + // [46] phi (byte*) printf_str::str#13 = (const byte*) main::str2 [phi:main::@8->printf_str#0] -- pbuz1=pbuc1 + lda #str2 + sta.z printf_str.str+1 + jsr printf_str + // [39] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // main::@9 + // printf("\ntime: %s",tod_str(tod)) + // [40] call printf_string + // [42] phi from main::@9 to printf_string [phi:main::@9->printf_string] + jsr printf_string // main::@return // } - // [17] return + // [41] return rts str: .text " - n queens problem using backtracking -" .byte 0 - str1: .text @"\nNumber of queens:" + str1: .text @"\nnumber of queens:" .byte 0 + str2: .text @"\ntime: " + .byte 0 +} + // printf_string +// Print a string value using a specific format +// Handles justification and min length +printf_string: { + // [43] phi from printf_string to printf_string::@1 [phi:printf_string->printf_string::@1] + // printf_string::@1 + // printf_str(str) + // [44] call printf_str + // [46] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] + // [46] phi (byte*) printf_str::str#13 = (const byte*) tod_buffer [phi:printf_string::@1->printf_str#0] -- pbuz1=pbuc1 + lda #tod_buffer + sta.z printf_str.str+1 + jsr printf_str + // printf_string::@return + // } + // [45] return + rts +} + // printf_str +// Print a zero-terminated string +// Handles escape codes such as newline +// printf_str(byte* zp($d) str) +printf_str: { + .label str = $d + // [47] phi from printf_str printf_str::@4 printf_str::@5 to printf_str::@1 [phi:printf_str/printf_str::@4/printf_str::@5->printf_str::@1] + // [47] phi (byte*) printf_str::str#11 = (byte*) printf_str::str#13 [phi:printf_str/printf_str::@4/printf_str::@5->printf_str::@1#0] -- register_copy + // printf_str::@1 + // printf_str::@2 + __b2: + // ch = *str++ + // [48] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#11) -- vbuaa=_deref_pbuz1 + ldy #0 + lda (str),y + // [49] (byte*) printf_str::str#0 ← ++ (byte*) printf_str::str#11 -- pbuz1=_inc_pbuz1 + inc.z str + bne !+ + inc.z str+1 + !: + // if(ch==0) + // [50] if((byte) printf_str::ch#0!=(byte) 0) goto printf_str::@3 -- vbuaa_neq_0_then_la1 + cmp #0 + bne __b3 + // printf_str::@return + // } + // [51] return + rts + // printf_str::@3 + __b3: + // if(ch=='\n') + // [52] if((byte) printf_str::ch#0==(byte) ' ') goto printf_str::@4 -- vbuaa_eq_vbuc1_then_la1 + cmp #'\n' + beq __b4 + // printf_str::@5 + // printf_char(ch) + // [53] (byte) printf_char::ch#1 ← (byte) printf_str::ch#0 + // [54] call printf_char + // [89] phi from printf_str::@5 to printf_char [phi:printf_str::@5->printf_char] + // [89] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#1 [phi:printf_str::@5->printf_char#0] -- register_copy + jsr printf_char + jmp __b2 + // [55] phi from printf_str::@3 to printf_str::@4 [phi:printf_str::@3->printf_str::@4] + // printf_str::@4 + __b4: + // printf_ln() + // [56] call printf_ln + jsr printf_ln + jmp __b2 +} + // printf_ln +// Print a newline +printf_ln: { + .label __0 = $13 + .label __1 = $13 + // printf_cursor_ptr - printf_cursor_x + // [57] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x -- pbuz1=pbuz1_minus_vbuz2 + sec + lda.z __0 + sbc.z printf_cursor_x + sta.z __0 + bcs !+ + dec.z __0+1 + !: + // printf_cursor_ptr - printf_cursor_x + PRINTF_SCREEN_WIDTH + // [58] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z __1 + sta.z __1 + bcc !+ + inc.z __1+1 + !: + // printf_cursor_ptr = printf_cursor_ptr - printf_cursor_x + PRINTF_SCREEN_WIDTH + // [59] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1 + // printf_cursor_x = 0 + // [60] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 + lda #0 + sta.z printf_cursor_x + // printf_cursor_y++; + // [61] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y -- vbuz1=_inc_vbuz1 + inc.z printf_cursor_y + // printf_scroll() + // [62] call printf_scroll + jsr printf_scroll + // printf_ln::@return + // } + // [63] return + rts +} + // printf_scroll +// Scroll the entire screen if the cursor is on the last line +printf_scroll: { + .label __4 = $13 + // if(printf_cursor_y==PRINTF_SCREEN_HEIGHT) + // [64] if((byte) printf_cursor_y!=(byte) $19) goto printf_scroll::@return -- vbuz1_neq_vbuc1_then_la1 + lda #$19 + cmp.z printf_cursor_y + bne __breturn + // [65] phi from printf_scroll to printf_scroll::@1 [phi:printf_scroll->printf_scroll::@1] + // printf_scroll::@1 + // memcpy(PRINTF_SCREEN_ADDRESS, PRINTF_SCREEN_ADDRESS+PRINTF_SCREEN_WIDTH, PRINTF_SCREEN_BYTES-PRINTF_SCREEN_WIDTH) + // [66] call memcpy + // [82] phi from printf_scroll::@1 to memcpy [phi:printf_scroll::@1->memcpy] + jsr memcpy + // [67] phi from printf_scroll::@1 to printf_scroll::@2 [phi:printf_scroll::@1->printf_scroll::@2] + // printf_scroll::@2 + // memset(PRINTF_SCREEN_ADDRESS+PRINTF_SCREEN_BYTES-PRINTF_SCREEN_WIDTH, ' ', PRINTF_SCREEN_WIDTH) + // [68] call memset + // [73] phi from printf_scroll::@2 to memset [phi:printf_scroll::@2->memset] + // [73] phi (byte) memset::c#4 = (byte) ' ' [phi:printf_scroll::@2->memset#0] -- vbuxx=vbuc1 + ldx #' ' + // [73] phi (void*) memset::str#3 = (void*)(number) $400+(number) $28*(number) $19-(number) $28 [phi:printf_scroll::@2->memset#1] -- pvoz1=pvoc1 + lda #<$400+$28*$19-$28 + sta.z memset.str + lda #>$400+$28*$19-$28 + sta.z memset.str+1 + // [73] phi (word) memset::num#2 = (byte) $28 [phi:printf_scroll::@2->memset#2] -- vwuz1=vbuc1 + lda #<$28 + sta.z memset.num + lda #>$28 + sta.z memset.num+1 + jsr memset + // printf_scroll::@3 + // printf_cursor_ptr-PRINTF_SCREEN_WIDTH + // [69] (byte*~) printf_scroll::$4 ← (byte*) printf_cursor_ptr - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + lda.z __4 + sec + sbc #<$28 + sta.z __4 + lda.z __4+1 + sbc #>$28 + sta.z __4+1 + // printf_cursor_ptr = printf_cursor_ptr-PRINTF_SCREEN_WIDTH + // [70] (byte*) printf_cursor_ptr ← (byte*~) printf_scroll::$4 + // printf_cursor_y--; + // [71] (byte) printf_cursor_y ← -- (byte) printf_cursor_y -- vbuz1=_dec_vbuz1 + dec.z printf_cursor_y + // printf_scroll::@return + __breturn: + // } + // [72] return + rts +} + // memset +// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. +// memset(void* zp($21) str, byte register(X) c, word zp($f) num) +memset: { + .label end = $f + .label dst = $21 + .label num = $f + .label str = $21 + // if(num>0) + // [74] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 + lda.z num + bne !+ + lda.z num+1 + beq __breturn + !: + // memset::@1 + // end = (char*)str + num + // [75] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 + lda.z end + clc + adc.z str + sta.z end + lda.z end+1 + adc.z str+1 + sta.z end+1 + // [76] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + // [77] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [77] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // memset::@2 + __b2: + // for(char* dst = str; dst!=end; dst++) + // [78] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + lda.z dst+1 + cmp.z end+1 + bne __b3 + lda.z dst + cmp.z end + bne __b3 + // memset::@return + __breturn: + // } + // [79] return + rts + // memset::@3 + __b3: + // *dst = c + // [80] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx + txa + ldy #0 + sta (dst),y + // for(char* dst = str; dst!=end; dst++) + // [81] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + inc.z dst + bne !+ + inc.z dst+1 + !: + jmp __b2 +} + // memcpy +// Copy block of memory (forwards) +// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. +memcpy: { + .label destination = $400 + .label source = $400+$28 + .const num = $28*$19-$28 + .label src_end = source+num + .label dst = $21 + .label src = $f + // [83] phi from memcpy to memcpy::@1 [phi:memcpy->memcpy::@1] + // [83] phi (byte*) memcpy::dst#2 = (byte*)(const void*) memcpy::destination#0 [phi:memcpy->memcpy::@1#0] -- pbuz1=pbuc1 + lda #destination + sta.z dst+1 + // [83] phi (byte*) memcpy::src#2 = (byte*)(const void*) memcpy::source#0 [phi:memcpy->memcpy::@1#1] -- pbuz1=pbuc1 + lda #source + sta.z src+1 + // memcpy::@1 + __b1: + // while(src!=src_end) + // [84] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuc1_then_la1 + lda.z src+1 + cmp #>src_end + bne __b2 + lda.z src + cmp #memcpy::@1] + // [83] phi (byte*) memcpy::dst#2 = (byte*) memcpy::dst#1 [phi:memcpy::@2->memcpy::@1#0] -- register_copy + // [83] phi (byte*) memcpy::src#2 = (byte*) memcpy::src#1 [phi:memcpy::@2->memcpy::@1#1] -- register_copy + jmp __b1 +} + // printf_char +// Print a single char +// If the end of the screen is reached scroll it up one char and place the cursor at the +// printf_char(byte register(A) ch) +printf_char: { + // *(printf_cursor_ptr++) = ch + // [90] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#3 -- _deref_pbuz1=vbuaa + ldy #0 + sta (printf_cursor_ptr),y + // *(printf_cursor_ptr++) = ch; + // [91] (byte*) printf_cursor_ptr ← ++ (byte*) printf_cursor_ptr -- pbuz1=_inc_pbuz1 + inc.z printf_cursor_ptr + bne !+ + inc.z printf_cursor_ptr+1 + !: + // if(++printf_cursor_x==PRINTF_SCREEN_WIDTH) + // [92] (byte) printf_cursor_x ← ++ (byte) printf_cursor_x -- vbuz1=_inc_vbuz1 + inc.z printf_cursor_x + // [93] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return -- vbuz1_neq_vbuc1_then_la1 + lda #$28 + cmp.z printf_cursor_x + bne __breturn + // printf_char::@1 + // printf_cursor_x = 0 + // [94] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 + lda #0 + sta.z printf_cursor_x + // ++printf_cursor_y; + // [95] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y -- vbuz1=_inc_vbuz1 + inc.z printf_cursor_y + // printf_scroll() + // [96] call printf_scroll + jsr printf_scroll + // printf_char::@return + __breturn: + // } + // [97] return + rts +} + // tod_str +// Convert time of day to a human-readable string "hh:mm:ss:10" +// tod_str(byte zp($19) tod_TENTHS, byte zp($1a) tod_SEC, byte register(Y) tod_MIN, byte register(X) tod_HOURS) +tod_str: { + .label tod_TENTHS = $19 + .label tod_SEC = $1a + // tod.HOURS>>4 + // [98] (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#0 >> (byte) 4 -- vbuaa=vbuxx_ror_4 + txa + lsr + lsr + lsr + lsr + // '0'+(tod.HOURS>>4) + // [99] (byte~) tod_str::$1 ← (byte) '0' + (byte~) tod_str::$0 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // tod_buffer[0] = '0'+(tod.HOURS>>4) + // [100] *((const byte*) tod_buffer) ← (byte~) tod_str::$1 -- _deref_pbuc1=vbuaa + sta tod_buffer + // tod.HOURS&0x0f + // [101] (byte~) tod_str::$2 ← (byte) tod_str::tod_HOURS#0 & (byte) $f -- vbuaa=vbuxx_band_vbuc1 + txa + and #$f + // '0'+(tod.HOURS&0x0f) + // [102] (byte~) tod_str::$3 ← (byte) '0' + (byte~) tod_str::$2 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // tod_buffer[1] = '0'+(tod.HOURS&0x0f) + // [103] *((const byte*) tod_buffer+(byte) 1) ← (byte~) tod_str::$3 -- _deref_pbuc1=vbuaa + sta tod_buffer+1 + // tod.MIN>>4 + // [104] (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#0 >> (byte) 4 -- vbuaa=vbuyy_ror_4 + tya + lsr + lsr + lsr + lsr + // '0'+(tod.MIN>>4) + // [105] (byte~) tod_str::$5 ← (byte) '0' + (byte~) tod_str::$4 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // tod_buffer[3] = '0'+(tod.MIN>>4) + // [106] *((const byte*) tod_buffer+(byte) 3) ← (byte~) tod_str::$5 -- _deref_pbuc1=vbuaa + sta tod_buffer+3 + // tod.MIN&0x0f + // [107] (byte~) tod_str::$6 ← (byte) tod_str::tod_MIN#0 & (byte) $f -- vbuaa=vbuyy_band_vbuc1 + tya + and #$f + // '0'+(tod.MIN&0x0f) + // [108] (byte~) tod_str::$7 ← (byte) '0' + (byte~) tod_str::$6 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // tod_buffer[4] = '0'+(tod.MIN&0x0f) + // [109] *((const byte*) tod_buffer+(byte) 4) ← (byte~) tod_str::$7 -- _deref_pbuc1=vbuaa + sta tod_buffer+4 + // tod.SEC>>4 + // [110] (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#0 >> (byte) 4 -- vbuaa=vbuz1_ror_4 + lda.z tod_SEC + lsr + lsr + lsr + lsr + // '0'+(tod.SEC>>4) + // [111] (byte~) tod_str::$9 ← (byte) '0' + (byte~) tod_str::$8 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // tod_buffer[6] = '0'+(tod.SEC>>4) + // [112] *((const byte*) tod_buffer+(byte) 6) ← (byte~) tod_str::$9 -- _deref_pbuc1=vbuaa + sta tod_buffer+6 + // tod.SEC&0x0f + // [113] (byte~) tod_str::$10 ← (byte) tod_str::tod_SEC#0 & (byte) $f -- vbuaa=vbuz1_band_vbuc1 + lda #$f + and.z tod_SEC + // '0'+(tod.SEC&0x0f) + // [114] (byte~) tod_str::$11 ← (byte) '0' + (byte~) tod_str::$10 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // tod_buffer[7] = '0'+(tod.SEC&0x0f) + // [115] *((const byte*) tod_buffer+(byte) 7) ← (byte~) tod_str::$11 -- _deref_pbuc1=vbuaa + sta tod_buffer+7 + // tod.TENTHS>>4 + // [116] (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#0 >> (byte) 4 -- vbuaa=vbuz1_ror_4 + lda.z tod_TENTHS + lsr + lsr + lsr + lsr + // '0'+(tod.TENTHS>>4) + // [117] (byte~) tod_str::$13 ← (byte) '0' + (byte~) tod_str::$12 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // tod_buffer[9] = '0'+(tod.TENTHS>>4) + // [118] *((const byte*) tod_buffer+(byte) 9) ← (byte~) tod_str::$13 -- _deref_pbuc1=vbuaa + sta tod_buffer+9 + // tod.TENTHS&0x0f + // [119] (byte~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#0 & (byte) $f -- vbuaa=vbuz1_band_vbuc1 + lda #$f + and.z tod_TENTHS + // '0'+(tod.TENTHS&0x0f) + // [120] (byte~) tod_str::$15 ← (byte) '0' + (byte~) tod_str::$14 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // tod_buffer[10] = '0'+(tod.TENTHS&0x0f) + // [121] *((const byte*) tod_buffer+(byte) $a) ← (byte~) tod_str::$15 -- _deref_pbuc1=vbuaa + sta tod_buffer+$a + // tod_str::@return + // } + // [122] return + rts +} + // tod_read +// Read time of day +tod_read: { + .label return_HOURS = $18 + .label return_MIN = $17 + // hours = CIA1->TOD_HOURS + // [123] (byte) tod_read::return_HOURS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) -- vbuz1=_deref_pbuc1 + // Reading sequence is important. TOD latches on reading hours until 10ths is read. + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS + sta.z return_HOURS + // mins = CIA1->TOD_MIN + // [124] (byte) tod_read::return_MIN#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) -- vbuaa=_deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_MIN + // secs = CIA1->TOD_SEC + // [125] (byte) tod_read::return_SEC#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) -- vbuxx=_deref_pbuc1 + ldx CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_SEC + // tenths = CIA1->TOD_10THS + // [126] (byte) tod_read::return_TENTHS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) -- vbuyy=_deref_pbuc1 + ldy CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_10THS + // tod_read::@return + // } + // [127] return + rts } // queens // Generates all valid placements of queens on a NxN board without recursion @@ -12020,9 +14543,9 @@ main: { // When all columns on a row is exhausted move back down to the lower level and move forward one position until we are done with the last position on the first row queens: { // The current row where the queen is moving - .label row = $12 - // [19] phi from queens to queens::@1 [phi:queens->queens::@1] - // [19] phi (dword) count#11 = (dword) 0 [phi:queens->queens::@1#0] -- vduz1=vduc1 + .label row = $c + // [129] phi from queens to queens::@1 [phi:queens->queens::@1] + // [129] phi (dword) count#14 = (dword) 0 [phi:queens->queens::@1#0] -- vduz1=vduc1 lda #<0 sta.z count sta.z count+1 @@ -12030,97 +14553,58 @@ queens: { sta.z count+2 lda #>0>>$10 sta.z count+3 - // [19] phi (byte) queens::row#10 = (byte) 1 [phi:queens->queens::@1#1] -- vbuz1=vbuc1 + // [129] phi (byte) queens::row#10 = (byte) 1 [phi:queens->queens::@1#1] -- vbuz1=vbuc1 lda #1 sta.z row + // [129] phi from queens::@4 queens::@7 queens::@8 queens::@9 to queens::@1 [phi:queens::@4/queens::@7/queens::@8/queens::@9->queens::@1] + // [129] phi (dword) count#14 = (dword) count#22 [phi:queens::@4/queens::@7/queens::@8/queens::@9->queens::@1#0] -- register_copy + // [129] phi (byte) queens::row#10 = (byte) queens::row#10 [phi:queens::@4/queens::@7/queens::@8/queens::@9->queens::@1#1] -- register_copy // queens::@1 // queens::@2 __b2: // board[row]++; - // [20] *((const byte*) board + (byte) queens::row#10) ← ++ *((const byte*) board + (byte) queens::row#10) -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 + // [130] *((const byte*) board + (byte) queens::row#10) ← ++ *((const byte*) board + (byte) queens::row#10) -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 ldx.z row inc board,x // if(board[row]==QUEENS+1) - // [21] if(*((const byte*) board + (byte) queens::row#10)==(byte)(number) 8+(number) 1) goto queens::@3 -- pbuc1_derefidx_vbuz1_eq_vbuc2_then_la1 + // [131] if(*((const byte*) board + (byte) queens::row#10)==(byte)(number) 8+(number) 1) goto queens::@3 -- pbuc1_derefidx_vbuz1_eq_vbuc2_then_la1 ldy.z row lda board,y cmp #8+1 beq __b3 - // queens::@7 + // queens::@5 // legal(row, board[row]) - // [22] (byte) legal::row#0 ← (byte) queens::row#10 - // [23] (byte) legal::column#0 ← *((const byte*) board + (byte) queens::row#10) -- vbuz1=pbuc1_derefidx_vbuz2 + // [132] (byte) legal::row#0 ← (byte) queens::row#10 + // [133] (byte) legal::column#0 ← *((const byte*) board + (byte) queens::row#10) -- vbuz1=pbuc1_derefidx_vbuz2 lda board,y sta.z legal.column - // [24] call legal - // [248] phi from queens::@7 to legal [phi:queens::@7->legal] + // [134] call legal + // [306] phi from queens::@5 to legal [phi:queens::@5->legal] jsr legal // legal(row, board[row]) - // [25] (byte) legal::return#0 ← (byte) legal::return#4 + // [135] (byte) legal::return#0 ← (byte) legal::return#4 // queens::@9 - // [26] (byte~) queens::$2 ← (byte) legal::return#0 + // [136] (byte~) queens::$2 ← (byte) legal::return#0 // if(legal(row, board[row])) - // [27] if((byte) 0!=(byte~) queens::$2) goto queens::@4 -- vbuc1_neq_vbuaa_then_la1 - // check if the current position on row 1-row is legal + // [137] if((byte) 0==(byte~) queens::$2) goto queens::@1 -- vbuc1_eq_vbuaa_then_la1 cmp #0 - bne __b4 - // [19] phi from queens::@5 queens::@6 queens::@8 queens::@9 to queens::@1 [phi:queens::@5/queens::@6/queens::@8/queens::@9->queens::@1] - // [19] phi (dword) count#11 = (dword) count#13 [phi:queens::@5/queens::@6/queens::@8/queens::@9->queens::@1#0] -- register_copy - // [19] phi (byte) queens::row#10 = (byte) queens::row#10 [phi:queens::@5/queens::@6/queens::@8/queens::@9->queens::@1#1] -- register_copy - jmp __b2 - // queens::@4 - __b4: + beq __b2 + // queens::@6 // if(row==QUEENS) - // [28] if((byte) queens::row#10==(byte) 8) goto queens::@5 -- vbuz1_eq_vbuc1_then_la1 + // [138] if((byte) queens::row#10==(byte) 8) goto queens::@4 -- vbuz1_eq_vbuc1_then_la1 // position is legal - move up to the next row lda #8 cmp.z row - beq __b5 - // queens::@6 + beq __b4 + // queens::@7 // row++; - // [29] (byte) queens::row#1 ← ++ (byte) queens::row#10 -- vbuz1=_inc_vbuz1 + // [139] (byte) queens::row#1 ← ++ (byte) queens::row#10 -- vbuz1=_inc_vbuz1 inc.z row jmp __b2 - // [30] phi from queens::@4 to queens::@5 [phi:queens::@4->queens::@5] - // queens::@5 - __b5: - // print() - // [31] call print - // We have a complete legal board - print it! - jsr print - jmp __b2 - // queens::@3 - __b3: - // board[row] = 0 - // [32] *((const byte*) board + (byte) queens::row#10) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 - // We moved past the end of the row - reset position and go down to the lower row - lda #0 - ldy.z row - sta board,y - // if(row==1) - // [33] if((byte) queens::row#10==(byte) 1) goto queens::@return -- vbuz1_eq_vbuc1_then_la1 - lda #1 - cmp.z row - beq __breturn - // queens::@8 - // row--; - // [34] (byte) queens::row#2 ← -- (byte) queens::row#10 -- vbuz1=_dec_vbuz1 - dec.z row - jmp __b2 - // queens::@return - __breturn: - // } - // [35] return - rts -} - // print -// Print the board with a legal placement. Also increments the solution count. -print: { - .label i = $1b - .label i1 = $21 - .label j = 6 - // printf("\n#%lu:\n ",++count); - // [36] (dword) count#13 ← ++ (dword) count#11 -- vduz1=_inc_vduz1 + // queens::@4 + __b4: + // ++count; + // [140] (dword) count#22 ← ++ (dword) count#14 -- vduz1=_inc_vduz1 inc.z count bne !+ inc.z count+1 @@ -12129,65 +14613,100 @@ print: { bne !+ inc.z count+3 !: - // printf("\n#%lu:\n ",++count) - // [37] call printf_str - // [148] phi from print to printf_str [phi:print->printf_str] - // [148] phi (byte*) printf_str::str#11 = (const byte*) print::str [phi:print->printf_str#0] -- pbuz1=pbuc1 + // print() + // [141] call print + // [146] phi from queens::@4 to print [phi:queens::@4->print] + jsr print + jmp __b2 + // queens::@3 + __b3: + // board[row] = 0 + // [142] *((const byte*) board + (byte) queens::row#10) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 + // We moved past the end of the row - reset position and go down to the lower row + lda #0 + ldy.z row + sta board,y + // if(row==1) + // [143] if((byte) queens::row#10==(byte) 1) goto queens::@return -- vbuz1_eq_vbuc1_then_la1 + lda #1 + cmp.z row + beq __breturn + // queens::@8 + // row--; + // [144] (byte) queens::row#2 ← -- (byte) queens::row#10 -- vbuz1=_dec_vbuz1 + dec.z row + jmp __b2 + // queens::@return + __breturn: + // } + // [145] return + rts +} + // print +// Print the board with a legal placement. +print: { + .label i = $b + .label i1 = $15 + .label j = $16 + // printf("\n#%lu:\n ",count) + // [147] call printf_str + // [46] phi from print to printf_str [phi:print->printf_str] + // [46] phi (byte*) printf_str::str#13 = (const byte*) print::str [phi:print->printf_str#0] -- pbuz1=pbuc1 lda #str sta.z printf_str.str+1 jsr printf_str // print::@11 - // printf("\n#%lu:\n ",++count) - // [38] (dword) printf_ulong::uvalue#0 ← (dword) count#13 - // [39] call printf_ulong - // [213] phi from print::@11 to printf_ulong [phi:print::@11->printf_ulong] + // printf("\n#%lu:\n ",count) + // [148] (dword) printf_ulong::uvalue#0 ← (dword) count#22 + // [149] call printf_ulong + // [271] phi from print::@11 to printf_ulong [phi:print::@11->printf_ulong] jsr printf_ulong - // [40] phi from print::@11 to print::@12 [phi:print::@11->print::@12] + // [150] phi from print::@11 to print::@12 [phi:print::@11->print::@12] // print::@12 - // printf("\n#%lu:\n ",++count) - // [41] call printf_str - // [148] phi from print::@12 to printf_str [phi:print::@12->printf_str] - // [148] phi (byte*) printf_str::str#11 = (const byte*) print::str1 [phi:print::@12->printf_str#0] -- pbuz1=pbuc1 + // printf("\n#%lu:\n ",count) + // [151] call printf_str + // [46] phi from print::@12 to printf_str [phi:print::@12->printf_str] + // [46] phi (byte*) printf_str::str#13 = (const byte*) print::str1 [phi:print::@12->printf_str#0] -- pbuz1=pbuc1 lda #str1 sta.z printf_str.str+1 jsr printf_str - // [42] phi from print::@12 to print::@1 [phi:print::@12->print::@1] - // [42] phi (byte) print::i#2 = (byte) 1 [phi:print::@12->print::@1#0] -- vbuz1=vbuc1 + // [152] phi from print::@12 to print::@1 [phi:print::@12->print::@1] + // [152] phi (byte) print::i#2 = (byte) 1 [phi:print::@12->print::@1#0] -- vbuz1=vbuc1 lda #1 sta.z i // print::@1 __b1: // for(char i=1;i<=QUEENS;++i) - // [43] if((byte) print::i#2<(byte) 8+(byte) 1) goto print::@2 -- vbuz1_lt_vbuc1_then_la1 + // [153] if((byte) print::i#2<(byte) 8+(byte) 1) goto print::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z i cmp #8+1 bcc __b2 - // [44] phi from print::@1 to print::@3 [phi:print::@1->print::@3] - // [44] phi (byte) print::i1#2 = (byte) 1 [phi:print::@1->print::@3#0] -- vbuz1=vbuc1 + // [154] phi from print::@1 to print::@3 [phi:print::@1->print::@3] + // [154] phi (byte) print::i1#2 = (byte) 1 [phi:print::@1->print::@3#0] -- vbuz1=vbuc1 lda #1 sta.z i1 // print::@3 __b3: // for(char i=1;i<=QUEENS;++i) - // [45] if((byte) print::i1#2<(byte) 8+(byte) 1) goto print::@4 -- vbuz1_lt_vbuc1_then_la1 + // [155] if((byte) print::i1#2<(byte) 8+(byte) 1) goto print::@4 -- vbuz1_lt_vbuc1_then_la1 lda.z i1 cmp #8+1 bcc __b4 // print::@return // } - // [46] return + // [156] return rts - // [47] phi from print::@3 to print::@4 [phi:print::@3->print::@4] + // [157] phi from print::@3 to print::@4 [phi:print::@3->print::@4] // print::@4 __b4: // printf("\n%x",i) - // [48] call printf_str - // [148] phi from print::@4 to printf_str [phi:print::@4->printf_str] - // [148] phi (byte*) printf_str::str#11 = (const byte*) print::str2 [phi:print::@4->printf_str#0] -- pbuz1=pbuc1 + // [158] call printf_str + // [46] phi from print::@4 to printf_str [phi:print::@4->printf_str] + // [46] phi (byte*) printf_str::str#13 = (const byte*) print::str2 [phi:print::@4->printf_str#0] -- pbuz1=pbuc1 lda #str2 @@ -12195,44 +14714,44 @@ print: { jsr printf_str // print::@14 // printf("\n%x",i) - // [49] (byte) printf_uchar::uvalue#1 ← (byte) print::i1#2 -- vbuxx=vbuz1 + // [159] (byte) printf_uchar::uvalue#1 ← (byte) print::i1#2 -- vbuxx=vbuz1 ldx.z i1 - // [50] call printf_uchar - // [63] phi from print::@14 to printf_uchar [phi:print::@14->printf_uchar] - // [63] phi (byte) printf_uchar::uvalue#2 = (byte) printf_uchar::uvalue#1 [phi:print::@14->printf_uchar#0] -- register_copy + // [160] call printf_uchar + // [173] phi from print::@14 to printf_uchar [phi:print::@14->printf_uchar] + // [173] phi (byte) printf_uchar::uvalue#2 = (byte) printf_uchar::uvalue#1 [phi:print::@14->printf_uchar#0] -- register_copy jsr printf_uchar - // [51] phi from print::@14 to print::@5 [phi:print::@14->print::@5] - // [51] phi (byte) print::j#2 = (byte) 1 [phi:print::@14->print::@5#0] -- vbuz1=vbuc1 + // [161] phi from print::@14 to print::@5 [phi:print::@14->print::@5] + // [161] phi (byte) print::j#2 = (byte) 1 [phi:print::@14->print::@5#0] -- vbuz1=vbuc1 lda #1 sta.z j // print::@5 __b5: // for(char j=1;j<=QUEENS;++j) - // [52] if((byte) print::j#2<(byte) 8+(byte) 1) goto print::@6 -- vbuz1_lt_vbuc1_then_la1 + // [162] if((byte) print::j#2<(byte) 8+(byte) 1) goto print::@6 -- vbuz1_lt_vbuc1_then_la1 lda.z j cmp #8+1 bcc __b6 // print::@7 // for(char i=1;i<=QUEENS;++i) - // [53] (byte) print::i1#1 ← ++ (byte) print::i1#2 -- vbuz1=_inc_vbuz1 + // [163] (byte) print::i1#1 ← ++ (byte) print::i1#2 -- vbuz1=_inc_vbuz1 inc.z i1 - // [44] phi from print::@7 to print::@3 [phi:print::@7->print::@3] - // [44] phi (byte) print::i1#2 = (byte) print::i1#1 [phi:print::@7->print::@3#0] -- register_copy + // [154] phi from print::@7 to print::@3 [phi:print::@7->print::@3] + // [154] phi (byte) print::i1#2 = (byte) print::i1#1 [phi:print::@7->print::@3#0] -- register_copy jmp __b3 // print::@6 __b6: // if(board[i]==j) - // [54] if(*((const byte*) board + (byte) print::i1#2)==(byte) print::j#2) goto print::@8 -- pbuc1_derefidx_vbuz1_eq_vbuz2_then_la1 + // [164] if(*((const byte*) board + (byte) print::i1#2)==(byte) print::j#2) goto print::@8 -- pbuc1_derefidx_vbuz1_eq_vbuz2_then_la1 ldy.z i1 lda board,y cmp.z j beq __b8 - // [55] phi from print::@6 to print::@10 [phi:print::@6->print::@10] + // [165] phi from print::@6 to print::@10 [phi:print::@6->print::@10] // print::@10 // printf("-") - // [56] call printf_str - // [148] phi from print::@10 to printf_str [phi:print::@10->printf_str] - // [148] phi (byte*) printf_str::str#11 = (const byte*) print::str4 [phi:print::@10->printf_str#0] -- pbuz1=pbuc1 + // [166] call printf_str + // [46] phi from print::@10 to printf_str [phi:print::@10->printf_str] + // [46] phi (byte*) printf_str::str#13 = (const byte*) print::str4 [phi:print::@10->printf_str#0] -- pbuz1=pbuc1 lda #str4 @@ -12241,18 +14760,18 @@ print: { // print::@9 __b9: // for(char j=1;j<=QUEENS;++j) - // [57] (byte) print::j#1 ← ++ (byte) print::j#2 -- vbuz1=_inc_vbuz1 + // [167] (byte) print::j#1 ← ++ (byte) print::j#2 -- vbuz1=_inc_vbuz1 inc.z j - // [51] phi from print::@9 to print::@5 [phi:print::@9->print::@5] - // [51] phi (byte) print::j#2 = (byte) print::j#1 [phi:print::@9->print::@5#0] -- register_copy + // [161] phi from print::@9 to print::@5 [phi:print::@9->print::@5] + // [161] phi (byte) print::j#2 = (byte) print::j#1 [phi:print::@9->print::@5#0] -- register_copy jmp __b5 - // [58] phi from print::@6 to print::@8 [phi:print::@6->print::@8] + // [168] phi from print::@6 to print::@8 [phi:print::@6->print::@8] // print::@8 __b8: // printf("Q") - // [59] call printf_str - // [148] phi from print::@8 to printf_str [phi:print::@8->printf_str] - // [148] phi (byte*) printf_str::str#11 = (const byte*) print::str3 [phi:print::@8->printf_str#0] -- pbuz1=pbuc1 + // [169] call printf_str + // [46] phi from print::@8 to printf_str [phi:print::@8->printf_str] + // [46] phi (byte*) printf_str::str#13 = (const byte*) print::str3 [phi:print::@8->printf_str#0] -- pbuz1=pbuc1 lda #str3 @@ -12262,18 +14781,18 @@ print: { // print::@2 __b2: // printf("%x",i) - // [60] (byte) printf_uchar::uvalue#0 ← (byte) print::i#2 -- vbuxx=vbuz1 + // [170] (byte) printf_uchar::uvalue#0 ← (byte) print::i#2 -- vbuxx=vbuz1 ldx.z i - // [61] call printf_uchar - // [63] phi from print::@2 to printf_uchar [phi:print::@2->printf_uchar] - // [63] phi (byte) printf_uchar::uvalue#2 = (byte) printf_uchar::uvalue#0 [phi:print::@2->printf_uchar#0] -- register_copy + // [171] call printf_uchar + // [173] phi from print::@2 to printf_uchar [phi:print::@2->printf_uchar] + // [173] phi (byte) printf_uchar::uvalue#2 = (byte) printf_uchar::uvalue#0 [phi:print::@2->printf_uchar#0] -- register_copy jsr printf_uchar // print::@13 // for(char i=1;i<=QUEENS;++i) - // [62] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuz1=_inc_vbuz1 + // [172] (byte) print::i#1 ← ++ (byte) print::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [42] phi from print::@13 to print::@1 [phi:print::@13->print::@1] - // [42] phi (byte) print::i#2 = (byte) print::i#1 [phi:print::@13->print::@1#0] -- register_copy + // [152] phi from print::@13 to print::@1 [phi:print::@13->print::@1] + // [152] phi (byte) print::i#2 = (byte) print::i#1 [phi:print::@13->print::@1#0] -- register_copy jmp __b1 str: .text @"\n#" .byte 0 @@ -12292,617 +14811,318 @@ print: { printf_uchar: { // printf_uchar::@1 // printf_buffer.sign = format.sign_always?'+':0 - // [64] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [174] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer // uctoa(uvalue, printf_buffer.digits, format.radix) - // [65] (byte) uctoa::value#1 ← (byte) printf_uchar::uvalue#2 - // [66] call uctoa + // [175] (byte) uctoa::value#1 ← (byte) printf_uchar::uvalue#2 + // [176] call uctoa // Format number into buffer - // [187] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] + // [245] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] jsr uctoa // printf_uchar::@2 // printf_number_buffer(printf_buffer, format) - // [67] (byte) printf_number_buffer::buffer_sign#2 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 + // [177] (byte) printf_number_buffer::buffer_sign#2 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [68] call printf_number_buffer + // [178] call printf_number_buffer // Print using format - // [70] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] - // [70] phi (byte) printf_number_buffer::format_upper_case#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#0] -- vbuz1=vbuc1 + // [180] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] + // [180] phi (byte) printf_number_buffer::format_upper_case#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#0] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_upper_case - // [70] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#2 [phi:printf_uchar::@2->printf_number_buffer#1] -- register_copy - // [70] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_uchar::@2->printf_number_buffer#2] -- pbuz1=pbuc1 + // [180] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#2 [phi:printf_uchar::@2->printf_number_buffer#1] -- register_copy + // [180] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_uchar::@2->printf_number_buffer#2] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z printf_number_buffer.buffer_digits+1 - // [70] phi (byte) printf_number_buffer::format_zero_padding#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#3] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_zero_padding#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#3] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_zero_padding - // [70] phi (byte) printf_number_buffer::format_justify_left#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#4] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_justify_left#10 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#4] -- vbuz1=vbuc1 sta.z printf_number_buffer.format_justify_left - // [70] phi (byte) printf_number_buffer::format_min_length#3 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [180] phi (byte) printf_number_buffer::format_min_length#3 = (byte) 0 [phi:printf_uchar::@2->printf_number_buffer#5] -- vbuxx=vbuc1 tax jsr printf_number_buffer // printf_uchar::@return // } - // [69] return + // [179] return rts } // printf_number_buffer // Print the contents of the number buffer using a specific format. // This handles minimum length, zero-filling, and left/right justification from the format -// printf_number_buffer(byte zp($d) buffer_sign, byte* zp($13) buffer_digits, byte register(X) format_min_length, byte zp($b) format_justify_left, byte zp($c) format_zero_padding, byte zp($1c) format_upper_case) +// printf_number_buffer(byte zp($1c) buffer_sign, byte* zp($d) buffer_digits, byte register(X) format_min_length, byte zp($16) format_justify_left, byte zp(6) format_zero_padding, byte zp($17) format_upper_case) printf_number_buffer: { - .label __19 = $22 - .label buffer_sign = $d - .label padding = 7 - .label format_zero_padding = $c - .label format_justify_left = $b - .label buffer_digits = $13 - .label format_upper_case = $1c + .label __19 = $21 + .label buffer_sign = $1c + .label padding = $18 + .label format_zero_padding = 6 + .label format_justify_left = $16 + .label buffer_digits = $d + .label format_upper_case = $17 // if(format.min_length) - // [71] if((byte) 0==(byte) printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 -- vbuc1_eq_vbuxx_then_la1 + // [181] if((byte) 0==(byte) printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 -- vbuc1_eq_vbuxx_then_la1 cpx #0 beq __b6 // printf_number_buffer::@6 // strlen(buffer.digits) - // [72] (byte*) strlen::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 -- pbuz1=pbuz2 + // [182] (byte*) strlen::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 -- pbuz1=pbuz2 lda.z buffer_digits sta.z strlen.str lda.z buffer_digits+1 sta.z strlen.str+1 - // [73] call strlen - // [181] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [183] call strlen + // [239] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] jsr strlen // strlen(buffer.digits) - // [74] (word) strlen::return#2 ← (word) strlen::len#2 + // [184] (word) strlen::return#2 ← (word) strlen::len#2 // printf_number_buffer::@14 - // [75] (word~) printf_number_buffer::$19 ← (word) strlen::return#2 + // [185] (word~) printf_number_buffer::$19 ← (word) strlen::return#2 // len = (signed char)strlen(buffer.digits) - // [76] (signed byte) printf_number_buffer::len#0 ← (signed byte)(word~) printf_number_buffer::$19 -- vbsyy=_sbyte_vwuz1 + // [186] (signed byte) printf_number_buffer::len#0 ← (signed byte)(word~) printf_number_buffer::$19 -- vbsyy=_sbyte_vwuz1 // There is a minimum length - work out the padding lda.z __19 tay // if(buffer.sign) - // [77] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 -- vbuc1_eq_vbuz1_then_la1 + // [187] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z buffer_sign beq __b13 // printf_number_buffer::@7 // len++; - // [78] (signed byte) printf_number_buffer::len#1 ← ++ (signed byte) printf_number_buffer::len#0 -- vbsyy=_inc_vbsyy + // [188] (signed byte) printf_number_buffer::len#1 ← ++ (signed byte) printf_number_buffer::len#0 -- vbsyy=_inc_vbsyy iny - // [79] phi from printf_number_buffer::@14 printf_number_buffer::@7 to printf_number_buffer::@13 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13] - // [79] phi (signed byte) printf_number_buffer::len#2 = (signed byte) printf_number_buffer::len#0 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13#0] -- register_copy + // [189] phi from printf_number_buffer::@14 printf_number_buffer::@7 to printf_number_buffer::@13 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13] + // [189] phi (signed byte) printf_number_buffer::len#2 = (signed byte) printf_number_buffer::len#0 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13#0] -- register_copy // printf_number_buffer::@13 __b13: // padding = (signed char)format.min_length - len - // [80] (signed byte) printf_number_buffer::padding#1 ← (signed byte)(byte) printf_number_buffer::format_min_length#3 - (signed byte) printf_number_buffer::len#2 -- vbsz1=vbsxx_minus_vbsyy + // [190] (signed byte) printf_number_buffer::padding#1 ← (signed byte)(byte) printf_number_buffer::format_min_length#3 - (signed byte) printf_number_buffer::len#2 -- vbsz1=vbsxx_minus_vbsyy txa sty.z $ff sec sbc.z $ff sta.z padding // if(padding<0) - // [81] if((signed byte) printf_number_buffer::padding#1>=(signed byte) 0) goto printf_number_buffer::@21 -- vbsz1_ge_0_then_la1 + // [191] if((signed byte) printf_number_buffer::padding#1>=(signed byte) 0) goto printf_number_buffer::@21 -- vbsz1_ge_0_then_la1 cmp #0 bpl __b1 - // [83] phi from printf_number_buffer printf_number_buffer::@13 to printf_number_buffer::@1 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1] + // [193] phi from printf_number_buffer printf_number_buffer::@13 to printf_number_buffer::@1 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1] __b6: - // [83] phi (signed byte) printf_number_buffer::padding#10 = (signed byte) 0 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1#0] -- vbsz1=vbsc1 + // [193] phi (signed byte) printf_number_buffer::padding#10 = (signed byte) 0 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1#0] -- vbsz1=vbsc1 lda #0 sta.z padding - // [82] phi from printf_number_buffer::@13 to printf_number_buffer::@21 [phi:printf_number_buffer::@13->printf_number_buffer::@21] + // [192] phi from printf_number_buffer::@13 to printf_number_buffer::@21 [phi:printf_number_buffer::@13->printf_number_buffer::@21] // printf_number_buffer::@21 - // [83] phi from printf_number_buffer::@21 to printf_number_buffer::@1 [phi:printf_number_buffer::@21->printf_number_buffer::@1] - // [83] phi (signed byte) printf_number_buffer::padding#10 = (signed byte) printf_number_buffer::padding#1 [phi:printf_number_buffer::@21->printf_number_buffer::@1#0] -- register_copy + // [193] phi from printf_number_buffer::@21 to printf_number_buffer::@1 [phi:printf_number_buffer::@21->printf_number_buffer::@1] + // [193] phi (signed byte) printf_number_buffer::padding#10 = (signed byte) printf_number_buffer::padding#1 [phi:printf_number_buffer::@21->printf_number_buffer::@1#0] -- register_copy // printf_number_buffer::@1 __b1: // if(!format.justify_left && !format.zero_padding && padding) - // [84] if((byte) 0!=(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 -- vbuc1_neq_vbuz1_then_la1 + // [194] if((byte) 0!=(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 -- vbuc1_neq_vbuz1_then_la1 lda #0 cmp.z format_justify_left bne __b2 // printf_number_buffer::@17 - // [85] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 -- vbuc1_neq_vbuz1_then_la1 + // [195] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 -- vbuc1_neq_vbuz1_then_la1 cmp.z format_zero_padding bne __b2 // printf_number_buffer::@16 - // [86] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@8 -- vbsc1_neq_vbsz1_then_la1 + // [196] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@8 -- vbsc1_neq_vbsz1_then_la1 cmp.z padding bne __b8 jmp __b2 // printf_number_buffer::@8 __b8: // printf_padding(' ',(char)padding) - // [87] (byte) printf_padding::length#0 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [197] (byte) printf_padding::length#0 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [88] call printf_padding - // [107] phi from printf_number_buffer::@8 to printf_padding [phi:printf_number_buffer::@8->printf_padding] - // [107] phi (byte) printf_padding::pad#5 = (byte) ' ' [phi:printf_number_buffer::@8->printf_padding#0] -- vbuz1=vbuc1 + // [198] call printf_padding + // [217] phi from printf_number_buffer::@8 to printf_padding [phi:printf_number_buffer::@8->printf_padding] + // [217] phi (byte) printf_padding::pad#7 = (byte) ' ' [phi:printf_number_buffer::@8->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [107] phi (byte) printf_padding::length#4 = (byte) printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#1] -- register_copy + // [217] phi (byte) printf_padding::length#6 = (byte) printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#1] -- register_copy jsr printf_padding // printf_number_buffer::@2 __b2: // if(buffer.sign) - // [89] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 -- vbuc1_eq_vbuz1_then_la1 + // [199] if((byte) 0==(byte) printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z buffer_sign beq __b3 // printf_number_buffer::@9 // printf_char(buffer.sign) - // [90] (byte) printf_char::ch#2 ← (byte) printf_number_buffer::buffer_sign#10 -- vbuaa=vbuz1 + // [200] (byte) printf_char::ch#2 ← (byte) printf_number_buffer::buffer_sign#10 -- vbuaa=vbuz1 lda.z buffer_sign - // [91] call printf_char - // [114] phi from printf_number_buffer::@9 to printf_char [phi:printf_number_buffer::@9->printf_char] - // [114] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#2 [phi:printf_number_buffer::@9->printf_char#0] -- register_copy + // [201] call printf_char + // [89] phi from printf_number_buffer::@9 to printf_char [phi:printf_number_buffer::@9->printf_char] + // [89] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#2 [phi:printf_number_buffer::@9->printf_char#0] -- register_copy jsr printf_char // printf_number_buffer::@3 __b3: // if(format.zero_padding && padding) - // [92] if((byte) 0==(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 -- vbuc1_eq_vbuz1_then_la1 + // [202] if((byte) 0==(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z format_zero_padding beq __b4 // printf_number_buffer::@18 - // [93] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@10 -- vbsc1_neq_vbsz1_then_la1 + // [203] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@10 -- vbsc1_neq_vbsz1_then_la1 cmp.z padding bne __b10 jmp __b4 // printf_number_buffer::@10 __b10: // printf_padding('0',(char)padding) - // [94] (byte) printf_padding::length#1 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [204] (byte) printf_padding::length#1 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [95] call printf_padding - // [107] phi from printf_number_buffer::@10 to printf_padding [phi:printf_number_buffer::@10->printf_padding] - // [107] phi (byte) printf_padding::pad#5 = (byte) '0' [phi:printf_number_buffer::@10->printf_padding#0] -- vbuz1=vbuc1 + // [205] call printf_padding + // [217] phi from printf_number_buffer::@10 to printf_padding [phi:printf_number_buffer::@10->printf_padding] + // [217] phi (byte) printf_padding::pad#7 = (byte) '0' [phi:printf_number_buffer::@10->printf_padding#0] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [107] phi (byte) printf_padding::length#4 = (byte) printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#1] -- register_copy + // [217] phi (byte) printf_padding::length#6 = (byte) printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#1] -- register_copy jsr printf_padding // printf_number_buffer::@4 __b4: // if(format.upper_case) - // [96] if((byte) 0==(byte) printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 -- vbuc1_eq_vbuz1_then_la1 + // [206] if((byte) 0==(byte) printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z format_upper_case beq __b5 // printf_number_buffer::@11 // strupr(buffer.digits) - // [97] (byte*) strupr::str#0 ← (byte*) printf_number_buffer::buffer_digits#10 -- pbuz1=pbuz2 + // [207] (byte*) strupr::str#0 ← (byte*) printf_number_buffer::buffer_digits#10 -- pbuz1=pbuz2 lda.z buffer_digits sta.z strupr.str lda.z buffer_digits+1 sta.z strupr.str+1 - // [98] call strupr - // [166] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [208] call strupr + // [224] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] jsr strupr // printf_number_buffer::@5 __b5: // printf_str(buffer.digits) - // [99] (byte*) printf_str::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 - // [100] call printf_str - // [148] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] - // [148] phi (byte*) printf_str::str#11 = (byte*) printf_str::str#1 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy + // [209] (byte*) printf_str::str#1 ← (byte*) printf_number_buffer::buffer_digits#10 + // [210] call printf_str + // [46] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] + // [46] phi (byte*) printf_str::str#13 = (byte*) printf_str::str#1 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy jsr printf_str // printf_number_buffer::@15 // if(format.justify_left && !format.zero_padding && padding) - // [101] if((byte) 0==(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return -- vbuc1_eq_vbuz1_then_la1 + // [211] if((byte) 0==(byte) printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z format_justify_left beq __breturn // printf_number_buffer::@20 - // [102] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return -- vbuc1_neq_vbuz1_then_la1 + // [212] if((byte) 0!=(byte) printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return -- vbuc1_neq_vbuz1_then_la1 cmp.z format_zero_padding bne __breturn // printf_number_buffer::@19 - // [103] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@12 -- vbsc1_neq_vbsz1_then_la1 + // [213] if((signed byte) 0!=(signed byte) printf_number_buffer::padding#10) goto printf_number_buffer::@12 -- vbsc1_neq_vbsz1_then_la1 cmp.z padding bne __b12 rts // printf_number_buffer::@12 __b12: // printf_padding(' ',(char)padding) - // [104] (byte) printf_padding::length#2 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [214] (byte) printf_padding::length#2 ← (byte)(signed byte) printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [105] call printf_padding - // [107] phi from printf_number_buffer::@12 to printf_padding [phi:printf_number_buffer::@12->printf_padding] - // [107] phi (byte) printf_padding::pad#5 = (byte) ' ' [phi:printf_number_buffer::@12->printf_padding#0] -- vbuz1=vbuc1 + // [215] call printf_padding + // [217] phi from printf_number_buffer::@12 to printf_padding [phi:printf_number_buffer::@12->printf_padding] + // [217] phi (byte) printf_padding::pad#7 = (byte) ' ' [phi:printf_number_buffer::@12->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [107] phi (byte) printf_padding::length#4 = (byte) printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#1] -- register_copy + // [217] phi (byte) printf_padding::length#6 = (byte) printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#1] -- register_copy jsr printf_padding // printf_number_buffer::@return __breturn: // } - // [106] return + // [216] return rts } // printf_padding // Print a padding char a number of times -// printf_padding(byte zp(9) pad, byte zp(8) length) +// printf_padding(byte zp($1a) pad, byte zp($19) length) printf_padding: { - .label i = $a - .label length = 8 - .label pad = 9 - // [108] phi from printf_padding to printf_padding::@1 [phi:printf_padding->printf_padding::@1] - // [108] phi (byte) printf_padding::i#2 = (byte) 0 [phi:printf_padding->printf_padding::@1#0] -- vbuz1=vbuc1 + .label i = $1b + .label length = $19 + .label pad = $1a + // [218] phi from printf_padding to printf_padding::@1 [phi:printf_padding->printf_padding::@1] + // [218] phi (byte) printf_padding::i#2 = (byte) 0 [phi:printf_padding->printf_padding::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i // printf_padding::@1 __b1: // for(char i=0;iprintf_char] - // [114] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#0 [phi:printf_padding::@2->printf_char#0] -- register_copy + // [222] call printf_char + // [89] phi from printf_padding::@2 to printf_char [phi:printf_padding::@2->printf_char] + // [89] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#0 [phi:printf_padding::@2->printf_char#0] -- register_copy jsr printf_char // printf_padding::@3 // for(char i=0;iprintf_padding::@1] - // [108] phi (byte) printf_padding::i#2 = (byte) printf_padding::i#1 [phi:printf_padding::@3->printf_padding::@1#0] -- register_copy + // [218] phi from printf_padding::@3 to printf_padding::@1 [phi:printf_padding::@3->printf_padding::@1] + // [218] phi (byte) printf_padding::i#2 = (byte) printf_padding::i#1 [phi:printf_padding::@3->printf_padding::@1#0] -- register_copy jmp __b1 -} - // printf_char -// Print a single char -// If the end of the screen is reached scroll it up one char and place the cursor at the -// printf_char(byte register(A) ch) -printf_char: { - // *(printf_cursor_ptr++) = ch - // [115] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#3 -- _deref_pbuz1=vbuaa - ldy #0 - sta (printf_cursor_ptr),y - // *(printf_cursor_ptr++) = ch; - // [116] (byte*) printf_cursor_ptr ← ++ (byte*) printf_cursor_ptr -- pbuz1=_inc_pbuz1 - inc.z printf_cursor_ptr - bne !+ - inc.z printf_cursor_ptr+1 - !: - // if(++printf_cursor_x==PRINTF_SCREEN_WIDTH) - // [117] (byte) printf_cursor_x ← ++ (byte) printf_cursor_x -- vbuz1=_inc_vbuz1 - inc.z printf_cursor_x - // [118] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return -- vbuz1_neq_vbuc1_then_la1 - lda #$28 - cmp.z printf_cursor_x - bne __breturn - // printf_char::@1 - // printf_cursor_x = 0 - // [119] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 - lda #0 - sta.z printf_cursor_x - // ++printf_cursor_y; - // [120] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y -- vbuz1=_inc_vbuz1 - inc.z printf_cursor_y - // printf_scroll() - // [121] call printf_scroll - jsr printf_scroll - // printf_char::@return - __breturn: - // } - // [122] return - rts -} - // printf_scroll -// Scroll the entire screen if the cursor is on the last line -printf_scroll: { - .label __4 = $19 - // if(printf_cursor_y==PRINTF_SCREEN_HEIGHT) - // [123] if((byte) printf_cursor_y!=(byte) $19) goto printf_scroll::@return -- vbuz1_neq_vbuc1_then_la1 - lda #$19 - cmp.z printf_cursor_y - bne __breturn - // [124] phi from printf_scroll to printf_scroll::@1 [phi:printf_scroll->printf_scroll::@1] - // printf_scroll::@1 - // memcpy(PRINTF_SCREEN_ADDRESS, PRINTF_SCREEN_ADDRESS+PRINTF_SCREEN_WIDTH, PRINTF_SCREEN_BYTES-PRINTF_SCREEN_WIDTH) - // [125] call memcpy - // [141] phi from printf_scroll::@1 to memcpy [phi:printf_scroll::@1->memcpy] - jsr memcpy - // [126] phi from printf_scroll::@1 to printf_scroll::@2 [phi:printf_scroll::@1->printf_scroll::@2] - // printf_scroll::@2 - // memset(PRINTF_SCREEN_ADDRESS+PRINTF_SCREEN_BYTES-PRINTF_SCREEN_WIDTH, ' ', PRINTF_SCREEN_WIDTH) - // [127] call memset - // [132] phi from printf_scroll::@2 to memset [phi:printf_scroll::@2->memset] - // [132] phi (byte) memset::c#4 = (byte) ' ' [phi:printf_scroll::@2->memset#0] -- vbuxx=vbuc1 - ldx #' ' - // [132] phi (void*) memset::str#3 = (void*)(number) $400+(number) $28*(number) $19-(number) $28 [phi:printf_scroll::@2->memset#1] -- pvoz1=pvoc1 - lda #<$400+$28*$19-$28 - sta.z memset.str - lda #>$400+$28*$19-$28 - sta.z memset.str+1 - // [132] phi (word) memset::num#2 = (byte) $28 [phi:printf_scroll::@2->memset#2] -- vwuz1=vbuc1 - lda #<$28 - sta.z memset.num - lda #>$28 - sta.z memset.num+1 - jsr memset - // printf_scroll::@3 - // printf_cursor_ptr-PRINTF_SCREEN_WIDTH - // [128] (byte*~) printf_scroll::$4 ← (byte*) printf_cursor_ptr - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 - lda.z __4 - sec - sbc #<$28 - sta.z __4 - lda.z __4+1 - sbc #>$28 - sta.z __4+1 - // printf_cursor_ptr = printf_cursor_ptr-PRINTF_SCREEN_WIDTH - // [129] (byte*) printf_cursor_ptr ← (byte*~) printf_scroll::$4 - // printf_cursor_y--; - // [130] (byte) printf_cursor_y ← -- (byte) printf_cursor_y -- vbuz1=_dec_vbuz1 - dec.z printf_cursor_y - // printf_scroll::@return - __breturn: - // } - // [131] return - rts -} - // memset -// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// memset(void* zp($22) str, byte register(X) c, word zp($15) num) -memset: { - .label end = $15 - .label dst = $22 - .label num = $15 - .label str = $22 - // if(num>0) - // [133] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 - lda.z num - bne !+ - lda.z num+1 - beq __breturn - !: - // memset::@1 - // end = (char*)str + num - // [134] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 - lda.z end - clc - adc.z str - sta.z end - lda.z end+1 - adc.z str+1 - sta.z end+1 - // [135] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 - // [136] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] - // [136] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy - // memset::@2 - __b2: - // for(char* dst = str; dst!=end; dst++) - // [137] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 - lda.z dst+1 - cmp.z end+1 - bne __b3 - lda.z dst - cmp.z end - bne __b3 - // memset::@return - __breturn: - // } - // [138] return - rts - // memset::@3 - __b3: - // *dst = c - // [139] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (dst),y - // for(char* dst = str; dst!=end; dst++) - // [140] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 - inc.z dst - bne !+ - inc.z dst+1 - !: - jmp __b2 -} - // memcpy -// Copy block of memory (forwards) -// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. -memcpy: { - .label destination = $400 - .label source = $400+$28 - .const num = $28*$19-$28 - .label src_end = source+num - .label dst = $22 - .label src = $15 - // [142] phi from memcpy to memcpy::@1 [phi:memcpy->memcpy::@1] - // [142] phi (byte*) memcpy::dst#2 = (byte*)(const void*) memcpy::destination#0 [phi:memcpy->memcpy::@1#0] -- pbuz1=pbuc1 - lda #destination - sta.z dst+1 - // [142] phi (byte*) memcpy::src#2 = (byte*)(const void*) memcpy::source#0 [phi:memcpy->memcpy::@1#1] -- pbuz1=pbuc1 - lda #source - sta.z src+1 - // memcpy::@1 - __b1: - // while(src!=src_end) - // [143] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuc1_then_la1 - lda.z src+1 - cmp #>src_end - bne __b2 - lda.z src - cmp #memcpy::@1] - // [142] phi (byte*) memcpy::dst#2 = (byte*) memcpy::dst#1 [phi:memcpy::@2->memcpy::@1#0] -- register_copy - // [142] phi (byte*) memcpy::src#2 = (byte*) memcpy::src#1 [phi:memcpy::@2->memcpy::@1#1] -- register_copy - jmp __b1 -} - // printf_str -// Print a zero-terminated string -// Handles escape codes such as newline -// printf_str(byte* zp($13) str) -printf_str: { - .label str = $13 - // [149] phi from printf_str printf_str::@4 printf_str::@5 to printf_str::@1 [phi:printf_str/printf_str::@4/printf_str::@5->printf_str::@1] - // [149] phi (byte*) printf_str::str#10 = (byte*) printf_str::str#11 [phi:printf_str/printf_str::@4/printf_str::@5->printf_str::@1#0] -- register_copy - // printf_str::@1 - // printf_str::@2 - __b2: - // ch = *str++ - // [150] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#10) -- vbuaa=_deref_pbuz1 - ldy #0 - lda (str),y - // [151] (byte*) printf_str::str#0 ← ++ (byte*) printf_str::str#10 -- pbuz1=_inc_pbuz1 - inc.z str - bne !+ - inc.z str+1 - !: - // if(ch==0) - // [152] if((byte) printf_str::ch#0!=(byte) 0) goto printf_str::@3 -- vbuaa_neq_0_then_la1 - cmp #0 - bne __b3 - // printf_str::@return - // } - // [153] return - rts - // printf_str::@3 - __b3: - // if(ch=='\n') - // [154] if((byte) printf_str::ch#0==(byte) ' ') goto printf_str::@4 -- vbuaa_eq_vbuc1_then_la1 - cmp #'\n' - beq __b4 - // printf_str::@5 - // printf_char(ch) - // [155] (byte) printf_char::ch#1 ← (byte) printf_str::ch#0 - // [156] call printf_char - // [114] phi from printf_str::@5 to printf_char [phi:printf_str::@5->printf_char] - // [114] phi (byte) printf_char::ch#3 = (byte) printf_char::ch#1 [phi:printf_str::@5->printf_char#0] -- register_copy - jsr printf_char - jmp __b2 - // [157] phi from printf_str::@3 to printf_str::@4 [phi:printf_str::@3->printf_str::@4] - // printf_str::@4 - __b4: - // printf_ln() - // [158] call printf_ln - jsr printf_ln - jmp __b2 -} - // printf_ln -// Print a newline -printf_ln: { - .label __0 = $19 - .label __1 = $19 - // printf_cursor_ptr - printf_cursor_x - // [159] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x -- pbuz1=pbuz1_minus_vbuz2 - sec - lda.z __0 - sbc.z printf_cursor_x - sta.z __0 - bcs !+ - dec.z __0+1 - !: - // printf_cursor_ptr - printf_cursor_x + PRINTF_SCREEN_WIDTH - // [160] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 - lda #$28 - clc - adc.z __1 - sta.z __1 - bcc !+ - inc.z __1+1 - !: - // printf_cursor_ptr = printf_cursor_ptr - printf_cursor_x + PRINTF_SCREEN_WIDTH - // [161] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1 - // printf_cursor_x = 0 - // [162] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 - lda #0 - sta.z printf_cursor_x - // printf_cursor_y++; - // [163] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y -- vbuz1=_inc_vbuz1 - inc.z printf_cursor_y - // printf_scroll() - // [164] call printf_scroll - jsr printf_scroll - // printf_ln::@return - // } - // [165] return - rts } // strupr // Converts a string to uppercase. -// strupr(byte* zp($15) str) +// strupr(byte* zp($f) str) strupr: { - .label src = $15 - .label str = $15 - // [167] phi from strupr strupr::@3 to strupr::@1 [phi:strupr/strupr::@3->strupr::@1] - // [167] phi (byte*) strupr::src#2 = (byte*) strupr::str#0 [phi:strupr/strupr::@3->strupr::@1#0] -- register_copy + .label src = $f + .label str = $f + // [225] phi from strupr strupr::@3 to strupr::@1 [phi:strupr/strupr::@3->strupr::@1] + // [225] phi (byte*) strupr::src#2 = (byte*) strupr::str#0 [phi:strupr/strupr::@3->strupr::@1#0] -- register_copy // strupr::@1 __b1: // while(*src) - // [168] if((byte) 0!=*((byte*) strupr::src#2)) goto strupr::@2 -- vbuc1_neq__deref_pbuz1_then_la1 + // [226] if((byte) 0!=*((byte*) strupr::src#2)) goto strupr::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (src),y cmp #0 bne __b2 // strupr::@return // } - // [169] return + // [227] return rts // strupr::@2 __b2: // toupper(*src) - // [170] (byte) toupper::ch#0 ← *((byte*) strupr::src#2) -- vbuaa=_deref_pbuz1 + // [228] (byte) toupper::ch#0 ← *((byte*) strupr::src#2) -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [171] call toupper + // [229] call toupper jsr toupper - // [172] (byte) toupper::return#3 ← (byte) toupper::return#2 + // [230] (byte) toupper::return#3 ← (byte) toupper::return#2 // strupr::@3 - // [173] (byte~) strupr::$0 ← (byte) toupper::return#3 + // [231] (byte~) strupr::$0 ← (byte) toupper::return#3 // *src = toupper(*src) - // [174] *((byte*) strupr::src#2) ← (byte~) strupr::$0 -- _deref_pbuz1=vbuaa + // [232] *((byte*) strupr::src#2) ← (byte~) strupr::$0 -- _deref_pbuz1=vbuaa ldy #0 sta (src),y // src++; - // [175] (byte*) strupr::src#1 ← ++ (byte*) strupr::src#2 -- pbuz1=_inc_pbuz1 + // [233] (byte*) strupr::src#1 ← ++ (byte*) strupr::src#2 -- pbuz1=_inc_pbuz1 inc.z src bne !+ inc.z src+1 @@ -12915,71 +15135,71 @@ strupr: { // toupper(byte register(A) ch) toupper: { // if(ch>='a' && ch<='z') - // [176] if((byte) toupper::ch#0<(byte) 'a') goto toupper::@return -- vbuaa_lt_vbuc1_then_la1 + // [234] if((byte) toupper::ch#0<(byte) 'a') goto toupper::@return -- vbuaa_lt_vbuc1_then_la1 cmp #'a' bcc __breturn // toupper::@2 - // [177] if((byte) toupper::ch#0<=(byte) 'z') goto toupper::@1 -- vbuaa_le_vbuc1_then_la1 + // [235] if((byte) toupper::ch#0<=(byte) 'z') goto toupper::@1 -- vbuaa_le_vbuc1_then_la1 cmp #'z' bcc __b1 beq __b1 - // [179] phi from toupper toupper::@1 toupper::@2 to toupper::@return [phi:toupper/toupper::@1/toupper::@2->toupper::@return] - // [179] phi (byte) toupper::return#2 = (byte) toupper::ch#0 [phi:toupper/toupper::@1/toupper::@2->toupper::@return#0] -- register_copy + // [237] phi from toupper toupper::@1 toupper::@2 to toupper::@return [phi:toupper/toupper::@1/toupper::@2->toupper::@return] + // [237] phi (byte) toupper::return#2 = (byte) toupper::ch#0 [phi:toupper/toupper::@1/toupper::@2->toupper::@return#0] -- register_copy rts // toupper::@1 __b1: // return ch + ('A'-'a'); - // [178] (byte) toupper::return#0 ← (byte) toupper::ch#0 + (byte) 'A'-(byte) 'a' -- vbuaa=vbuaa_plus_vbuc1 + // [236] (byte) toupper::return#0 ← (byte) toupper::ch#0 + (byte) 'A'-(byte) 'a' -- vbuaa=vbuaa_plus_vbuc1 clc adc #'A'-'a' // toupper::@return __breturn: // } - // [180] return + // [238] return rts } // strlen // Computes the length of the string str up to but not including the terminating null character. -// strlen(byte* zp($15) str) +// strlen(byte* zp($f) str) strlen: { - .label len = $22 - .label str = $15 - .label return = $22 - // [182] phi from strlen to strlen::@1 [phi:strlen->strlen::@1] - // [182] phi (word) strlen::len#2 = (word) 0 [phi:strlen->strlen::@1#0] -- vwuz1=vwuc1 + .label len = $21 + .label str = $f + .label return = $21 + // [240] phi from strlen to strlen::@1 [phi:strlen->strlen::@1] + // [240] phi (word) strlen::len#2 = (word) 0 [phi:strlen->strlen::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z len sta.z len+1 - // [182] phi (byte*) strlen::str#2 = (byte*) strlen::str#1 [phi:strlen->strlen::@1#1] -- register_copy + // [240] phi (byte*) strlen::str#3 = (byte*) strlen::str#1 [phi:strlen->strlen::@1#1] -- register_copy // strlen::@1 __b1: // while(*str) - // [183] if((byte) 0!=*((byte*) strlen::str#2)) goto strlen::@2 -- vbuc1_neq__deref_pbuz1_then_la1 + // [241] if((byte) 0!=*((byte*) strlen::str#3)) goto strlen::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y cmp #0 bne __b2 // strlen::@return // } - // [184] return + // [242] return rts // strlen::@2 __b2: // len++; - // [185] (word) strlen::len#1 ← ++ (word) strlen::len#2 -- vwuz1=_inc_vwuz1 + // [243] (word) strlen::len#1 ← ++ (word) strlen::len#2 -- vwuz1=_inc_vwuz1 inc.z len bne !+ inc.z len+1 !: // str++; - // [186] (byte*) strlen::str#0 ← ++ (byte*) strlen::str#2 -- pbuz1=_inc_pbuz1 + // [244] (byte*) strlen::str#0 ← ++ (byte*) strlen::str#3 -- pbuz1=_inc_pbuz1 inc.z str bne !+ inc.z str+1 !: - // [182] phi from strlen::@2 to strlen::@1 [phi:strlen::@2->strlen::@1] - // [182] phi (word) strlen::len#2 = (word) strlen::len#1 [phi:strlen::@2->strlen::@1#0] -- register_copy - // [182] phi (byte*) strlen::str#2 = (byte*) strlen::str#0 [phi:strlen::@2->strlen::@1#1] -- register_copy + // [240] phi from strlen::@2 to strlen::@1 [phi:strlen::@2->strlen::@1] + // [240] phi (word) strlen::len#2 = (word) strlen::len#1 [phi:strlen::@2->strlen::@1#0] -- register_copy + // [240] phi (byte*) strlen::str#3 = (byte*) strlen::str#0 [phi:strlen::@2->strlen::@1#1] -- register_copy jmp __b1 } // uctoa @@ -12988,109 +15208,109 @@ strlen: { // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// uctoa(byte register(X) value, byte* zp($13) buffer) +// uctoa(byte register(X) value, byte* zp($d) buffer) uctoa: { .label digit_value = $1c - .label buffer = $13 - .label digit = $b - .label started = $c - // [188] phi from uctoa to uctoa::@1 [phi:uctoa->uctoa::@1] - // [188] phi (byte*) uctoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:uctoa->uctoa::@1#0] -- pbuz1=pbuc1 + .label buffer = $d + .label digit = $16 + .label started = 6 + // [246] phi from uctoa to uctoa::@1 [phi:uctoa->uctoa::@1] + // [246] phi (byte*) uctoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:uctoa->uctoa::@1#0] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z buffer+1 - // [188] phi (byte) uctoa::started#2 = (byte) 0 [phi:uctoa->uctoa::@1#1] -- vbuz1=vbuc1 + // [246] phi (byte) uctoa::started#2 = (byte) 0 [phi:uctoa->uctoa::@1#1] -- vbuz1=vbuc1 lda #0 sta.z started - // [188] phi (byte) uctoa::value#2 = (byte) uctoa::value#1 [phi:uctoa->uctoa::@1#2] -- register_copy - // [188] phi (byte) uctoa::digit#2 = (byte) 0 [phi:uctoa->uctoa::@1#3] -- vbuz1=vbuc1 + // [246] phi (byte) uctoa::value#2 = (byte) uctoa::value#1 [phi:uctoa->uctoa::@1#2] -- register_copy + // [246] phi (byte) uctoa::digit#2 = (byte) 0 [phi:uctoa->uctoa::@1#3] -- vbuz1=vbuc1 sta.z digit // uctoa::@1 __b1: // for( char digit=0; digit= digit_value) - // [195] if((byte) 0!=(byte) uctoa::started#2) goto uctoa::@5 -- vbuc1_neq_vbuz1_then_la1 + // [253] if((byte) 0!=(byte) uctoa::started#2) goto uctoa::@5 -- vbuc1_neq_vbuz1_then_la1 lda #0 cmp.z started bne __b5 // uctoa::@7 - // [196] if((byte) uctoa::value#2>=(byte) uctoa::digit_value#0) goto uctoa::@5 -- vbuxx_ge_vbuz1_then_la1 + // [254] if((byte) uctoa::value#2>=(byte) uctoa::digit_value#0) goto uctoa::@5 -- vbuxx_ge_vbuz1_then_la1 cpx.z digit_value bcs __b5 - // [197] phi from uctoa::@7 to uctoa::@4 [phi:uctoa::@7->uctoa::@4] - // [197] phi (byte*) uctoa::buffer#14 = (byte*) uctoa::buffer#11 [phi:uctoa::@7->uctoa::@4#0] -- register_copy - // [197] phi (byte) uctoa::started#4 = (byte) uctoa::started#2 [phi:uctoa::@7->uctoa::@4#1] -- register_copy - // [197] phi (byte) uctoa::value#6 = (byte) uctoa::value#2 [phi:uctoa::@7->uctoa::@4#2] -- register_copy + // [255] phi from uctoa::@7 to uctoa::@4 [phi:uctoa::@7->uctoa::@4] + // [255] phi (byte*) uctoa::buffer#14 = (byte*) uctoa::buffer#11 [phi:uctoa::@7->uctoa::@4#0] -- register_copy + // [255] phi (byte) uctoa::started#4 = (byte) uctoa::started#2 [phi:uctoa::@7->uctoa::@4#1] -- register_copy + // [255] phi (byte) uctoa::value#6 = (byte) uctoa::value#2 [phi:uctoa::@7->uctoa::@4#2] -- register_copy // uctoa::@4 __b4: // for( char digit=0; digituctoa::@1] - // [188] phi (byte*) uctoa::buffer#11 = (byte*) uctoa::buffer#14 [phi:uctoa::@4->uctoa::@1#0] -- register_copy - // [188] phi (byte) uctoa::started#2 = (byte) uctoa::started#4 [phi:uctoa::@4->uctoa::@1#1] -- register_copy - // [188] phi (byte) uctoa::value#2 = (byte) uctoa::value#6 [phi:uctoa::@4->uctoa::@1#2] -- register_copy - // [188] phi (byte) uctoa::digit#2 = (byte) uctoa::digit#1 [phi:uctoa::@4->uctoa::@1#3] -- register_copy + // [246] phi from uctoa::@4 to uctoa::@1 [phi:uctoa::@4->uctoa::@1] + // [246] phi (byte*) uctoa::buffer#11 = (byte*) uctoa::buffer#14 [phi:uctoa::@4->uctoa::@1#0] -- register_copy + // [246] phi (byte) uctoa::started#2 = (byte) uctoa::started#4 [phi:uctoa::@4->uctoa::@1#1] -- register_copy + // [246] phi (byte) uctoa::value#2 = (byte) uctoa::value#6 [phi:uctoa::@4->uctoa::@1#2] -- register_copy + // [246] phi (byte) uctoa::digit#2 = (byte) uctoa::digit#1 [phi:uctoa::@4->uctoa::@1#3] -- register_copy jmp __b1 // uctoa::@5 __b5: // uctoa_append(buffer++, value, digit_value) - // [199] (byte*) uctoa_append::buffer#0 ← (byte*) uctoa::buffer#11 - // [200] (byte) uctoa_append::value#0 ← (byte) uctoa::value#2 - // [201] (byte) uctoa_append::sub#0 ← (byte) uctoa::digit_value#0 - // [202] call uctoa_append - // [206] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [257] (byte*) uctoa_append::buffer#0 ← (byte*) uctoa::buffer#11 + // [258] (byte) uctoa_append::value#0 ← (byte) uctoa::value#2 + // [259] (byte) uctoa_append::sub#0 ← (byte) uctoa::digit_value#0 + // [260] call uctoa_append + // [264] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] jsr uctoa_append // uctoa_append(buffer++, value, digit_value) - // [203] (byte) uctoa_append::return#0 ← (byte) uctoa_append::value#2 + // [261] (byte) uctoa_append::return#0 ← (byte) uctoa_append::value#2 // uctoa::@6 // value = uctoa_append(buffer++, value, digit_value) - // [204] (byte) uctoa::value#0 ← (byte) uctoa_append::return#0 + // [262] (byte) uctoa::value#0 ← (byte) uctoa_append::return#0 // value = uctoa_append(buffer++, value, digit_value); - // [205] (byte*) uctoa::buffer#4 ← ++ (byte*) uctoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [263] (byte*) uctoa::buffer#4 ← ++ (byte*) uctoa::buffer#11 -- pbuz1=_inc_pbuz1 inc.z buffer bne !+ inc.z buffer+1 !: - // [197] phi from uctoa::@6 to uctoa::@4 [phi:uctoa::@6->uctoa::@4] - // [197] phi (byte*) uctoa::buffer#14 = (byte*) uctoa::buffer#4 [phi:uctoa::@6->uctoa::@4#0] -- register_copy - // [197] phi (byte) uctoa::started#4 = (byte) 1 [phi:uctoa::@6->uctoa::@4#1] -- vbuz1=vbuc1 + // [255] phi from uctoa::@6 to uctoa::@4 [phi:uctoa::@6->uctoa::@4] + // [255] phi (byte*) uctoa::buffer#14 = (byte*) uctoa::buffer#4 [phi:uctoa::@6->uctoa::@4#0] -- register_copy + // [255] phi (byte) uctoa::started#4 = (byte) 1 [phi:uctoa::@6->uctoa::@4#1] -- vbuz1=vbuc1 lda #1 sta.z started - // [197] phi (byte) uctoa::value#6 = (byte) uctoa::value#0 [phi:uctoa::@6->uctoa::@4#2] -- register_copy + // [255] phi (byte) uctoa::value#6 = (byte) uctoa::value#0 [phi:uctoa::@6->uctoa::@4#2] -- register_copy jmp __b4 } // uctoa_append @@ -13102,44 +15322,44 @@ uctoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// uctoa_append(byte* zp($13) buffer, byte register(X) value, byte zp($1c) sub) +// uctoa_append(byte* zp($d) buffer, byte register(X) value, byte zp($1c) sub) uctoa_append: { - .label buffer = $13 + .label buffer = $d .label sub = $1c - // [207] phi from uctoa_append to uctoa_append::@1 [phi:uctoa_append->uctoa_append::@1] - // [207] phi (byte) uctoa_append::digit#2 = (byte) 0 [phi:uctoa_append->uctoa_append::@1#0] -- vbuyy=vbuc1 + // [265] phi from uctoa_append to uctoa_append::@1 [phi:uctoa_append->uctoa_append::@1] + // [265] phi (byte) uctoa_append::digit#2 = (byte) 0 [phi:uctoa_append->uctoa_append::@1#0] -- vbuyy=vbuc1 ldy #0 - // [207] phi (byte) uctoa_append::value#2 = (byte) uctoa_append::value#0 [phi:uctoa_append->uctoa_append::@1#1] -- register_copy + // [265] phi (byte) uctoa_append::value#2 = (byte) uctoa_append::value#0 [phi:uctoa_append->uctoa_append::@1#1] -- register_copy // uctoa_append::@1 __b1: // while (value >= sub) - // [208] if((byte) uctoa_append::value#2>=(byte) uctoa_append::sub#0) goto uctoa_append::@2 -- vbuxx_ge_vbuz1_then_la1 + // [266] if((byte) uctoa_append::value#2>=(byte) uctoa_append::sub#0) goto uctoa_append::@2 -- vbuxx_ge_vbuz1_then_la1 cpx.z sub bcs __b2 // uctoa_append::@3 // *buffer = DIGITS[digit] - // [209] *((byte*) uctoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) uctoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuyy + // [267] *((byte*) uctoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) uctoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuyy lda DIGITS,y ldy #0 sta (buffer),y // uctoa_append::@return // } - // [210] return + // [268] return rts // uctoa_append::@2 __b2: // digit++; - // [211] (byte) uctoa_append::digit#1 ← ++ (byte) uctoa_append::digit#2 -- vbuyy=_inc_vbuyy + // [269] (byte) uctoa_append::digit#1 ← ++ (byte) uctoa_append::digit#2 -- vbuyy=_inc_vbuyy iny // value -= sub - // [212] (byte) uctoa_append::value#1 ← (byte) uctoa_append::value#2 - (byte) uctoa_append::sub#0 -- vbuxx=vbuxx_minus_vbuz1 + // [270] (byte) uctoa_append::value#1 ← (byte) uctoa_append::value#2 - (byte) uctoa_append::sub#0 -- vbuxx=vbuxx_minus_vbuz1 txa sec sbc.z sub tax - // [207] phi from uctoa_append::@2 to uctoa_append::@1 [phi:uctoa_append::@2->uctoa_append::@1] - // [207] phi (byte) uctoa_append::digit#2 = (byte) uctoa_append::digit#1 [phi:uctoa_append::@2->uctoa_append::@1#0] -- register_copy - // [207] phi (byte) uctoa_append::value#2 = (byte) uctoa_append::value#1 [phi:uctoa_append::@2->uctoa_append::@1#1] -- register_copy + // [265] phi from uctoa_append::@2 to uctoa_append::@1 [phi:uctoa_append::@2->uctoa_append::@1] + // [265] phi (byte) uctoa_append::digit#2 = (byte) uctoa_append::digit#1 [phi:uctoa_append::@2->uctoa_append::@1#0] -- register_copy + // [265] phi (byte) uctoa_append::value#2 = (byte) uctoa_append::value#1 [phi:uctoa_append::@2->uctoa_append::@1#1] -- register_copy jmp __b1 } // printf_ulong @@ -13153,12 +15373,12 @@ printf_ulong: { .label uvalue = 2 // printf_ulong::@1 // printf_buffer.sign = format.sign_always?'+':0 - // [214] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [272] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer // ultoa(uvalue, printf_buffer.digits, format.radix) - // [215] (dword) ultoa::value#1 ← (dword) printf_ulong::uvalue#0 -- vduz1=vduz2 + // [273] (dword) ultoa::value#1 ← (dword) printf_ulong::uvalue#0 -- vduz1=vduz2 lda.z uvalue sta.z ultoa.value lda.z uvalue+1 @@ -13167,39 +15387,39 @@ printf_ulong: { sta.z ultoa.value+2 lda.z uvalue+3 sta.z ultoa.value+3 - // [216] call ultoa + // [274] call ultoa // Format number into buffer - // [220] phi from printf_ulong::@1 to ultoa [phi:printf_ulong::@1->ultoa] + // [278] phi from printf_ulong::@1 to ultoa [phi:printf_ulong::@1->ultoa] jsr ultoa // printf_ulong::@2 // printf_number_buffer(printf_buffer, format) - // [217] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 + // [275] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [218] call printf_number_buffer + // [276] call printf_number_buffer // Print using format - // [70] phi from printf_ulong::@2 to printf_number_buffer [phi:printf_ulong::@2->printf_number_buffer] - // [70] phi (byte) printf_number_buffer::format_upper_case#10 = (const byte) printf_ulong::format_upper_case#0 [phi:printf_ulong::@2->printf_number_buffer#0] -- vbuz1=vbuc1 + // [180] phi from printf_ulong::@2 to printf_number_buffer [phi:printf_ulong::@2->printf_number_buffer] + // [180] phi (byte) printf_number_buffer::format_upper_case#10 = (const byte) printf_ulong::format_upper_case#0 [phi:printf_ulong::@2->printf_number_buffer#0] -- vbuz1=vbuc1 lda #format_upper_case sta.z printf_number_buffer.format_upper_case - // [70] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#0 [phi:printf_ulong::@2->printf_number_buffer#1] -- register_copy - // [70] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_ulong::@2->printf_number_buffer#2] -- pbuz1=pbuc1 + // [180] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#0 [phi:printf_ulong::@2->printf_number_buffer#1] -- register_copy + // [180] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_ulong::@2->printf_number_buffer#2] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z printf_number_buffer.buffer_digits+1 - // [70] phi (byte) printf_number_buffer::format_zero_padding#10 = (const byte) printf_ulong::format_zero_padding#0 [phi:printf_ulong::@2->printf_number_buffer#3] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_zero_padding#10 = (const byte) printf_ulong::format_zero_padding#0 [phi:printf_ulong::@2->printf_number_buffer#3] -- vbuz1=vbuc1 lda #format_zero_padding sta.z printf_number_buffer.format_zero_padding - // [70] phi (byte) printf_number_buffer::format_justify_left#10 = (const byte) printf_ulong::format_justify_left#0 [phi:printf_ulong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_justify_left#10 = (const byte) printf_ulong::format_justify_left#0 [phi:printf_ulong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [70] phi (byte) printf_number_buffer::format_min_length#3 = (const byte) printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [180] phi (byte) printf_number_buffer::format_min_length#3 = (const byte) printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_ulong::@return // } - // [219] return + // [277] return rts } // ultoa @@ -13208,64 +15428,64 @@ printf_ulong: { // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// ultoa(dword zp($e) value, byte* zp($22) buffer) +// ultoa(dword zp(7) value, byte* zp($21) buffer) ultoa: { .const max_digits = $a .label digit_value = $1d - .label buffer = $22 - .label digit = $d - .label value = $e - // [221] phi from ultoa to ultoa::@1 [phi:ultoa->ultoa::@1] - // [221] phi (byte*) ultoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:ultoa->ultoa::@1#0] -- pbuz1=pbuc1 + .label buffer = $21 + .label digit = $1c + .label value = 7 + // [279] phi from ultoa to ultoa::@1 [phi:ultoa->ultoa::@1] + // [279] phi (byte*) ultoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:ultoa->ultoa::@1#0] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z buffer+1 - // [221] phi (byte) ultoa::started#2 = (byte) 0 [phi:ultoa->ultoa::@1#1] -- vbuxx=vbuc1 + // [279] phi (byte) ultoa::started#2 = (byte) 0 [phi:ultoa->ultoa::@1#1] -- vbuxx=vbuc1 ldx #0 - // [221] phi (dword) ultoa::value#2 = (dword) ultoa::value#1 [phi:ultoa->ultoa::@1#2] -- register_copy - // [221] phi (byte) ultoa::digit#2 = (byte) 0 [phi:ultoa->ultoa::@1#3] -- vbuz1=vbuc1 + // [279] phi (dword) ultoa::value#2 = (dword) ultoa::value#1 [phi:ultoa->ultoa::@1#2] -- register_copy + // [279] phi (byte) ultoa::digit#2 = (byte) 0 [phi:ultoa->ultoa::@1#3] -- vbuz1=vbuc1 txa sta.z digit // ultoa::@1 __b1: // for( char digit=0; digit= digit_value) - // [230] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 -- vbuc1_neq_vbuxx_then_la1 + // [288] if((byte) 0!=(byte) ultoa::started#2) goto ultoa::@5 -- vbuc1_neq_vbuxx_then_la1 cpx #0 bne __b5 // ultoa::@7 - // [231] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 -- vduz1_ge_vduz2_then_la1 + // [289] if((dword) ultoa::value#2>=(dword) ultoa::digit_value#0) goto ultoa::@5 -- vduz1_ge_vduz2_then_la1 lda.z value+3 cmp.z digit_value+3 bcc !+ @@ -13297,46 +15517,46 @@ ultoa: { cmp.z digit_value bcs __b5 !: - // [232] phi from ultoa::@7 to ultoa::@4 [phi:ultoa::@7->ultoa::@4] - // [232] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#11 [phi:ultoa::@7->ultoa::@4#0] -- register_copy - // [232] phi (byte) ultoa::started#4 = (byte) ultoa::started#2 [phi:ultoa::@7->ultoa::@4#1] -- register_copy - // [232] phi (dword) ultoa::value#6 = (dword) ultoa::value#2 [phi:ultoa::@7->ultoa::@4#2] -- register_copy + // [290] phi from ultoa::@7 to ultoa::@4 [phi:ultoa::@7->ultoa::@4] + // [290] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#11 [phi:ultoa::@7->ultoa::@4#0] -- register_copy + // [290] phi (byte) ultoa::started#4 = (byte) ultoa::started#2 [phi:ultoa::@7->ultoa::@4#1] -- register_copy + // [290] phi (dword) ultoa::value#6 = (dword) ultoa::value#2 [phi:ultoa::@7->ultoa::@4#2] -- register_copy // ultoa::@4 __b4: // for( char digit=0; digitultoa::@1] - // [221] phi (byte*) ultoa::buffer#11 = (byte*) ultoa::buffer#14 [phi:ultoa::@4->ultoa::@1#0] -- register_copy - // [221] phi (byte) ultoa::started#2 = (byte) ultoa::started#4 [phi:ultoa::@4->ultoa::@1#1] -- register_copy - // [221] phi (dword) ultoa::value#2 = (dword) ultoa::value#6 [phi:ultoa::@4->ultoa::@1#2] -- register_copy - // [221] phi (byte) ultoa::digit#2 = (byte) ultoa::digit#1 [phi:ultoa::@4->ultoa::@1#3] -- register_copy + // [279] phi from ultoa::@4 to ultoa::@1 [phi:ultoa::@4->ultoa::@1] + // [279] phi (byte*) ultoa::buffer#11 = (byte*) ultoa::buffer#14 [phi:ultoa::@4->ultoa::@1#0] -- register_copy + // [279] phi (byte) ultoa::started#2 = (byte) ultoa::started#4 [phi:ultoa::@4->ultoa::@1#1] -- register_copy + // [279] phi (dword) ultoa::value#2 = (dword) ultoa::value#6 [phi:ultoa::@4->ultoa::@1#2] -- register_copy + // [279] phi (byte) ultoa::digit#2 = (byte) ultoa::digit#1 [phi:ultoa::@4->ultoa::@1#3] -- register_copy jmp __b1 // ultoa::@5 __b5: // ultoa_append(buffer++, value, digit_value) - // [234] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 - // [235] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 - // [236] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 - // [237] call ultoa_append - // [241] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [292] (byte*) ultoa_append::buffer#0 ← (byte*) ultoa::buffer#11 + // [293] (dword) ultoa_append::value#0 ← (dword) ultoa::value#2 + // [294] (dword) ultoa_append::sub#0 ← (dword) ultoa::digit_value#0 + // [295] call ultoa_append + // [299] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] jsr ultoa_append // ultoa_append(buffer++, value, digit_value) - // [238] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 + // [296] (dword) ultoa_append::return#0 ← (dword) ultoa_append::value#2 // ultoa::@6 // value = ultoa_append(buffer++, value, digit_value) - // [239] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 + // [297] (dword) ultoa::value#0 ← (dword) ultoa_append::return#0 // value = ultoa_append(buffer++, value, digit_value); - // [240] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [298] (byte*) ultoa::buffer#4 ← ++ (byte*) ultoa::buffer#11 -- pbuz1=_inc_pbuz1 inc.z buffer bne !+ inc.z buffer+1 !: - // [232] phi from ultoa::@6 to ultoa::@4 [phi:ultoa::@6->ultoa::@4] - // [232] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#4 [phi:ultoa::@6->ultoa::@4#0] -- register_copy - // [232] phi (byte) ultoa::started#4 = (byte) 1 [phi:ultoa::@6->ultoa::@4#1] -- vbuxx=vbuc1 + // [290] phi from ultoa::@6 to ultoa::@4 [phi:ultoa::@6->ultoa::@4] + // [290] phi (byte*) ultoa::buffer#14 = (byte*) ultoa::buffer#4 [phi:ultoa::@6->ultoa::@4#0] -- register_copy + // [290] phi (byte) ultoa::started#4 = (byte) 1 [phi:ultoa::@6->ultoa::@4#1] -- vbuxx=vbuc1 ldx #1 - // [232] phi (dword) ultoa::value#6 = (dword) ultoa::value#0 [phi:ultoa::@6->ultoa::@4#2] -- register_copy + // [290] phi (dword) ultoa::value#6 = (dword) ultoa::value#0 [phi:ultoa::@6->ultoa::@4#2] -- register_copy jmp __b4 } // ultoa_append @@ -13348,20 +15568,20 @@ ultoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// ultoa_append(byte* zp($22) buffer, dword zp($e) value, dword zp($1d) sub) +// ultoa_append(byte* zp($21) buffer, dword zp(7) value, dword zp($1d) sub) ultoa_append: { - .label buffer = $22 - .label value = $e + .label buffer = $21 + .label value = 7 .label sub = $1d - .label return = $e - // [242] phi from ultoa_append to ultoa_append::@1 [phi:ultoa_append->ultoa_append::@1] - // [242] phi (byte) ultoa_append::digit#2 = (byte) 0 [phi:ultoa_append->ultoa_append::@1#0] -- vbuxx=vbuc1 + .label return = 7 + // [300] phi from ultoa_append to ultoa_append::@1 [phi:ultoa_append->ultoa_append::@1] + // [300] phi (byte) ultoa_append::digit#2 = (byte) 0 [phi:ultoa_append->ultoa_append::@1#0] -- vbuxx=vbuc1 ldx #0 - // [242] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#0 [phi:ultoa_append->ultoa_append::@1#1] -- register_copy + // [300] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#0 [phi:ultoa_append->ultoa_append::@1#1] -- register_copy // ultoa_append::@1 __b1: // while (value >= sub) - // [243] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 -- vduz1_ge_vduz2_then_la1 + // [301] if((dword) ultoa_append::value#2>=(dword) ultoa_append::sub#0) goto ultoa_append::@2 -- vduz1_ge_vduz2_then_la1 lda.z value+3 cmp.z sub+3 bcc !+ @@ -13380,21 +15600,21 @@ ultoa_append: { !: // ultoa_append::@3 // *buffer = DIGITS[digit] - // [244] *((byte*) ultoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) ultoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [302] *((byte*) ultoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) ultoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda DIGITS,x ldy #0 sta (buffer),y // ultoa_append::@return // } - // [245] return + // [303] return rts // ultoa_append::@2 __b2: // digit++; - // [246] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 -- vbuxx=_inc_vbuxx + // [304] (byte) ultoa_append::digit#1 ← ++ (byte) ultoa_append::digit#2 -- vbuxx=_inc_vbuxx inx // value -= sub - // [247] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 -- vduz1=vduz1_minus_vduz2 + // [305] (dword) ultoa_append::value#1 ← (dword) ultoa_append::value#2 - (dword) ultoa_append::sub#0 -- vduz1=vduz1_minus_vduz2 lda.z value sec sbc.z sub @@ -13408,126 +15628,157 @@ ultoa_append: { lda.z value+3 sbc.z sub+3 sta.z value+3 - // [242] phi from ultoa_append::@2 to ultoa_append::@1 [phi:ultoa_append::@2->ultoa_append::@1] - // [242] phi (byte) ultoa_append::digit#2 = (byte) ultoa_append::digit#1 [phi:ultoa_append::@2->ultoa_append::@1#0] -- register_copy - // [242] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#1 [phi:ultoa_append::@2->ultoa_append::@1#1] -- register_copy + // [300] phi from ultoa_append::@2 to ultoa_append::@1 [phi:ultoa_append::@2->ultoa_append::@1] + // [300] phi (byte) ultoa_append::digit#2 = (byte) ultoa_append::digit#1 [phi:ultoa_append::@2->ultoa_append::@1#0] -- register_copy + // [300] phi (dword) ultoa_append::value#2 = (dword) ultoa_append::value#1 [phi:ultoa_append::@2->ultoa_append::@1#1] -- register_copy jmp __b1 } // legal // Checks is a placement of the queen on the board is legal. // Checks the passed (row, column) against all queens placed on the board on lower rows. // If no conflict for desired position returns 1 otherwise returns 0 -// legal(byte zp($12) row, byte zp($1b) column) +// legal(byte zp($c) row, byte zp($1b) column) legal: { - .label __3 = $21 - .label row = $12 + .label row = $c .label column = $1b - // [249] phi from legal to legal::@1 [phi:legal->legal::@1] - // [249] phi (byte) legal::i#2 = (byte) 1 [phi:legal->legal::@1#0] -- vbuyy=vbuc1 + .label diff1_return = $b + // [307] phi from legal to legal::@1 [phi:legal->legal::@1] + // [307] phi (byte) legal::i#10 = (byte) 1 [phi:legal->legal::@1#0] -- vbuyy=vbuc1 ldy #1 // legal::@1 __b1: // row-1 - // [250] (byte~) legal::$0 ← (byte) legal::row#0 - (byte) 1 -- vbuxx=vbuz1_minus_1 + // [308] (byte~) legal::$0 ← (byte) legal::row#0 - (byte) 1 -- vbuxx=vbuz1_minus_1 ldx.z row dex // for(char i=1;i<=row-1;++i) - // [251] if((byte) legal::i#2<=(byte~) legal::$0) goto legal::@2 -- vbuyy_le_vbuxx_then_la1 + // [309] if((byte) legal::i#10<=(byte~) legal::$0) goto legal::@2 -- vbuyy_le_vbuxx_then_la1 sty.z $ff cpx.z $ff bcs __b2 - // [252] phi from legal::@1 to legal::@return [phi:legal::@1->legal::@return] - // [252] phi (byte) legal::return#4 = (byte) 1 [phi:legal::@1->legal::@return#0] -- vbuaa=vbuc1 + // [310] phi from legal::@1 to legal::@return [phi:legal::@1->legal::@return] + // [310] phi (byte) legal::return#4 = (byte) 1 [phi:legal::@1->legal::@return#0] -- vbuaa=vbuc1 lda #1 rts - // [252] phi from legal::@2 legal::@6 to legal::@return [phi:legal::@2/legal::@6->legal::@return] + // [310] phi from legal::@2 legal::@5 to legal::@return [phi:legal::@2/legal::@5->legal::@return] __b4: - // [252] phi (byte) legal::return#4 = (byte) 0 [phi:legal::@2/legal::@6->legal::@return#0] -- vbuaa=vbuc1 + // [310] phi (byte) legal::return#4 = (byte) 0 [phi:legal::@2/legal::@5->legal::@return#0] -- vbuaa=vbuc1 lda #0 // legal::@return // } - // [253] return + // [311] return rts // legal::@2 __b2: // if(board[i]==column) - // [254] if(*((const byte*) board + (byte) legal::i#2)==(byte) legal::column#0) goto legal::@return -- pbuc1_derefidx_vbuyy_eq_vbuz1_then_la1 + // [312] if(*((const byte*) board + (byte) legal::i#10)==(byte) legal::column#0) goto legal::@return -- pbuc1_derefidx_vbuyy_eq_vbuz1_then_la1 lda board,y cmp.z column beq __b4 // legal::@4 // diff(board[i],column) - // [255] (byte) diff::a#0 ← *((const byte*) board + (byte) legal::i#2) -- vbuaa=pbuc1_derefidx_vbuyy + // [313] (byte) legal::diff1_a#0 ← *((const byte*) board + (byte) legal::i#10) -- vbuaa=pbuc1_derefidx_vbuyy lda board,y - // [256] (byte) diff::b#0 ← (byte) legal::column#0 -- vbuxx=vbuz1 - ldx.z column - // [257] call diff - // [267] phi from legal::@4 to diff [phi:legal::@4->diff] - // [267] phi (byte) diff::b#2 = (byte) diff::b#0 [phi:legal::@4->diff#0] -- register_copy - // [267] phi (byte) diff::a#2 = (byte) diff::a#0 [phi:legal::@4->diff#1] -- register_copy - jsr diff - // diff(board[i],column) - // [258] (byte) diff::return#0 ← (byte) diff::return#4 - // legal::@5 - // [259] (byte~) legal::$3 ← (byte) diff::return#0 -- vbuz1=vbuaa - sta.z __3 - // diff(i,row) - // [260] (byte) diff::a#1 ← (byte) legal::i#2 -- vbuaa=vbuyy + // legal::diff1 + // if(alegal::diff1_@return] + // [316] phi (byte) legal::diff1_return#2 = (byte) legal::diff1_return#0 [phi:legal::diff1_@1/legal::diff1_@3->legal::diff1_@return#0] -- register_copy + // legal::diff1_@return + // legal::diff2 + diff2: + // if(adiff] - // [267] phi (byte) diff::b#2 = (byte) diff::b#1 [phi:legal::@5->diff#0] -- register_copy - // [267] phi (byte) diff::a#2 = (byte) diff::a#1 [phi:legal::@5->diff#1] -- register_copy - jsr diff - // diff(i,row) - // [263] (byte) diff::return#1 ← (byte) diff::return#4 - // legal::@6 - // [264] (byte~) legal::$4 ← (byte) diff::return#1 + sec + sbc.z row + // [319] phi from legal::diff2_@1 legal::diff2_@3 to legal::diff2_@return [phi:legal::diff2_@1/legal::diff2_@3->legal::diff2_@return] + // [319] phi (byte) legal::diff2_return#2 = (byte) legal::diff2_return#0 [phi:legal::diff2_@1/legal::diff2_@3->legal::diff2_@return#0] -- register_copy + // legal::diff2_@return + // legal::@5 + __b5: // if(diff(board[i],column)==diff(i,row)) - // [265] if((byte~) legal::$3!=(byte~) legal::$4) goto legal::@3 -- vbuz1_neq_vbuaa_then_la1 - cmp.z __3 + // [320] if((byte) legal::diff1_return#2!=(byte) legal::diff2_return#2) goto legal::@3 -- vbuz1_neq_vbuaa_then_la1 + cmp.z diff1_return bne __b3 jmp __b4 // legal::@3 __b3: // for(char i=1;i<=row-1;++i) - // [266] (byte) legal::i#1 ← ++ (byte) legal::i#2 -- vbuyy=_inc_vbuyy + // [321] (byte) legal::i#1 ← ++ (byte) legal::i#10 -- vbuyy=_inc_vbuyy iny - // [249] phi from legal::@3 to legal::@1 [phi:legal::@3->legal::@1] - // [249] phi (byte) legal::i#2 = (byte) legal::i#1 [phi:legal::@3->legal::@1#0] -- register_copy + // [307] phi from legal::@3 to legal::@1 [phi:legal::@3->legal::@1] + // [307] phi (byte) legal::i#10 = (byte) legal::i#1 [phi:legal::@3->legal::@1#0] -- register_copy jmp __b1 -} - // diff -// Find the absolute difference between two unsigned chars -// diff(byte register(A) a, byte register(X) b) -diff: { - // if(adiff::@return] - // [270] phi (byte) diff::return#4 = (byte) diff::return#2 [phi:diff::@1/diff::@2->diff::@return#0] -- register_copy - // diff::@return - // } - // [271] return - rts - // diff::@1 - __b1: + // legal::diff2_@1 + diff2___b1: // return b-a; - // [272] (byte) diff::return#2 ← (byte) diff::b#2 - (byte) diff::a#2 -- vbuaa=vbuxx_minus_vbuaa - sta.z $ff - txa + // [322] (byte) legal::diff2_return#0 ← (byte) legal::row#0 - (byte) legal::i#10 -- vbuaa=vbuz1_minus_vbuyy + tya + eor #$ff sec - sbc.z $ff + adc.z row + jmp __b5 + // legal::diff1_@1 + diff1___b1: + // [323] (byte) legal::diff1_return#0 ← (byte) legal::column#0 - (byte) legal::diff1_a#0 -- vbuz1=vbuz2_minus_vbuaa + eor #$ff + sec + adc.z column + sta.z diff1_return + jmp diff2 +} + // tod_init +// Initialize time-of-day clock +// This uses the MOS6526 CIA#1 +// tod_init(byte zp($15) tod_TENTHS, byte zp($16) tod_SEC, byte register(X) tod_MIN, byte register(Y) tod_HOURS) +tod_init: { + .label tod_TENTHS = $15 + .label tod_SEC = $16 + // CIA1->TIMER_A_CONTROL |= 0x80 + // [324] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc2_bor_vbuc3 + // Set 50hz (this assumes PAL!) (bit7=1) + lda #$80 + ora CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // CIA1->TIMER_B_CONTROL &= 0x7f + // [325] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc2_band_vbuc3 + // Writing TOD clock (bit7=0) + lda #$7f + and CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // CIA1->TOD_HOURS = tod.HOURS + // [326] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) ← (byte) tod_init::tod_HOURS#0 -- _deref_pbuc1=vbuyy + // Reset TOD clock + // Writing sequence is important. TOD stops when hours is written and starts when 10ths is written. + sty CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS + // CIA1->TOD_MIN = tod.MIN + // [327] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) ← (byte) tod_init::tod_MIN#0 -- _deref_pbuc1=vbuxx + stx CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_MIN + // CIA1->TOD_SEC = tod.SEC + // [328] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) ← (byte) tod_init::tod_SEC#0 -- _deref_pbuc1=vbuz1 + lda.z tod_SEC + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_SEC + // CIA1->TOD_10THS = tod.TENTHS + // [329] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) ← (byte) tod_init::tod_TENTHS#0 -- _deref_pbuc1=vbuz1 + lda.z tod_TENTHS + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_10THS + // tod_init::@return + // } + // [330] return rts } // printf_uint @@ -13540,44 +15791,44 @@ printf_uint: { .const format_upper_case = 0 // printf_uint::@1 // printf_buffer.sign = format.sign_always?'+':0 - // [274] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [332] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer // utoa(uvalue, printf_buffer.digits, format.radix) - // [275] call utoa + // [333] call utoa // Format number into buffer - // [279] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] + // [337] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] jsr utoa // printf_uint::@2 // printf_number_buffer(printf_buffer, format) - // [276] (byte) printf_number_buffer::buffer_sign#1 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 + // [334] (byte) printf_number_buffer::buffer_sign#1 ← *((byte*)&(struct printf_buffer_number) printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [277] call printf_number_buffer + // [335] call printf_number_buffer // Print using format - // [70] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] - // [70] phi (byte) printf_number_buffer::format_upper_case#10 = (const byte) printf_uint::format_upper_case#0 [phi:printf_uint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 + // [180] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] + // [180] phi (byte) printf_number_buffer::format_upper_case#10 = (const byte) printf_uint::format_upper_case#0 [phi:printf_uint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 lda #format_upper_case sta.z printf_number_buffer.format_upper_case - // [70] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#1 [phi:printf_uint::@2->printf_number_buffer#1] -- register_copy - // [70] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_uint::@2->printf_number_buffer#2] -- pbuz1=pbuc1 + // [180] phi (byte) printf_number_buffer::buffer_sign#10 = (byte) printf_number_buffer::buffer_sign#1 [phi:printf_uint::@2->printf_number_buffer#1] -- register_copy + // [180] phi (byte*) printf_number_buffer::buffer_digits#10 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_uint::@2->printf_number_buffer#2] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z printf_number_buffer.buffer_digits+1 - // [70] phi (byte) printf_number_buffer::format_zero_padding#10 = (const byte) printf_uint::format_zero_padding#0 [phi:printf_uint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_zero_padding#10 = (const byte) printf_uint::format_zero_padding#0 [phi:printf_uint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 lda #format_zero_padding sta.z printf_number_buffer.format_zero_padding - // [70] phi (byte) printf_number_buffer::format_justify_left#10 = (const byte) printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 + // [180] phi (byte) printf_number_buffer::format_justify_left#10 = (const byte) printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [70] phi (byte) printf_number_buffer::format_min_length#3 = (const byte) printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [180] phi (byte) printf_number_buffer::format_min_length#3 = (const byte) printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_uint::@return // } - // [278] return + // [336] return rts } // utoa @@ -13586,78 +15837,78 @@ printf_uint: { // - value : The number to be converted to RADIX // - buffer : receives the string representing the number and zero-termination. // - radix : The radix to convert the number to (from the enum RADIX) -// utoa(word zp($13) value, byte* zp($15) buffer) +// utoa(word zp($d) value, byte* zp($f) buffer) utoa: { .const max_digits = 5 - .label digit_value = $22 - .label buffer = $15 - .label digit = $12 - .label value = $13 - // [280] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] - // [280] phi (byte*) utoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1 + .label digit_value = $21 + .label buffer = $f + .label digit = $c + .label value = $d + // [338] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] + // [338] phi (byte*) utoa::buffer#11 = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z buffer+1 - // [280] phi (byte) utoa::started#2 = (byte) 0 [phi:utoa->utoa::@1#1] -- vbuxx=vbuc1 + // [338] phi (byte) utoa::started#2 = (byte) 0 [phi:utoa->utoa::@1#1] -- vbuxx=vbuc1 ldx #0 - // [280] phi (word) utoa::value#2 = (const word) printf_uint::uvalue#0 [phi:utoa->utoa::@1#2] -- vwuz1=vwuc1 + // [338] phi (word) utoa::value#2 = (const word) printf_uint::uvalue#0 [phi:utoa->utoa::@1#2] -- vwuz1=vwuc1 lda #printf_uint.uvalue sta.z value+1 - // [280] phi (byte) utoa::digit#2 = (byte) 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1 + // [338] phi (byte) utoa::digit#2 = (byte) 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1 txa sta.z digit // utoa::@1 __b1: // for( char digit=0; digit= digit_value) - // [289] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuxx_then_la1 + // [347] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5 -- vbuc1_neq_vbuxx_then_la1 cpx #0 bne __b5 // utoa::@7 - // [290] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 + // [348] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 cmp.z value+1 bne !+ lda.z digit_value @@ -13665,46 +15916,46 @@ utoa: { beq __b5 !: bcc __b5 - // [291] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] - // [291] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#11 [phi:utoa::@7->utoa::@4#0] -- register_copy - // [291] phi (byte) utoa::started#4 = (byte) utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy - // [291] phi (word) utoa::value#6 = (word) utoa::value#2 [phi:utoa::@7->utoa::@4#2] -- register_copy + // [349] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] + // [349] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#11 [phi:utoa::@7->utoa::@4#0] -- register_copy + // [349] phi (byte) utoa::started#4 = (byte) utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy + // [349] phi (word) utoa::value#6 = (word) utoa::value#2 [phi:utoa::@7->utoa::@4#2] -- register_copy // utoa::@4 __b4: // for( char digit=0; digitutoa::@1] - // [280] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#14 [phi:utoa::@4->utoa::@1#0] -- register_copy - // [280] phi (byte) utoa::started#2 = (byte) utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy - // [280] phi (word) utoa::value#2 = (word) utoa::value#6 [phi:utoa::@4->utoa::@1#2] -- register_copy - // [280] phi (byte) utoa::digit#2 = (byte) utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy + // [338] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] + // [338] phi (byte*) utoa::buffer#11 = (byte*) utoa::buffer#14 [phi:utoa::@4->utoa::@1#0] -- register_copy + // [338] phi (byte) utoa::started#2 = (byte) utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy + // [338] phi (word) utoa::value#2 = (word) utoa::value#6 [phi:utoa::@4->utoa::@1#2] -- register_copy + // [338] phi (byte) utoa::digit#2 = (byte) utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy jmp __b1 // utoa::@5 __b5: // utoa_append(buffer++, value, digit_value) - // [293] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 - // [294] (word) utoa_append::value#0 ← (word) utoa::value#2 - // [295] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 - // [296] call utoa_append - // [300] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [351] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11 + // [352] (word) utoa_append::value#0 ← (word) utoa::value#2 + // [353] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0 + // [354] call utoa_append + // [358] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) - // [297] (word) utoa_append::return#0 ← (word) utoa_append::value#2 + // [355] (word) utoa_append::return#0 ← (word) utoa_append::value#2 // utoa::@6 // value = utoa_append(buffer++, value, digit_value) - // [298] (word) utoa::value#0 ← (word) utoa_append::return#0 + // [356] (word) utoa::value#0 ← (word) utoa_append::return#0 // value = utoa_append(buffer++, value, digit_value); - // [299] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [357] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11 -- pbuz1=_inc_pbuz1 inc.z buffer bne !+ inc.z buffer+1 !: - // [291] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] - // [291] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy - // [291] phi (byte) utoa::started#4 = (byte) 1 [phi:utoa::@6->utoa::@4#1] -- vbuxx=vbuc1 + // [349] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] + // [349] phi (byte*) utoa::buffer#14 = (byte*) utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy + // [349] phi (byte) utoa::started#4 = (byte) 1 [phi:utoa::@6->utoa::@4#1] -- vbuxx=vbuc1 ldx #1 - // [291] phi (word) utoa::value#6 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy + // [349] phi (word) utoa::value#6 = (word) utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy jmp __b4 } // utoa_append @@ -13716,20 +15967,20 @@ utoa: { // - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. // (For decimal the subs used are 10000, 1000, 100, 10, 1) // returns : the value reduced by sub * digit so that it is less than sub. -// utoa_append(byte* zp($15) buffer, word zp($13) value, word zp($22) sub) +// utoa_append(byte* zp($f) buffer, word zp($d) value, word zp($21) sub) utoa_append: { - .label buffer = $15 - .label value = $13 - .label sub = $22 - .label return = $13 - // [301] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] - // [301] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 + .label buffer = $f + .label value = $d + .label sub = $21 + .label return = $d + // [359] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] + // [359] phi (byte) utoa_append::digit#2 = (byte) 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 ldx #0 - // [301] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy + // [359] phi (word) utoa_append::value#2 = (word) utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy // utoa_append::@1 __b1: // while (value >= sub) - // [302] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 + // [360] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 lda.z sub+1 cmp.z value+1 bne !+ @@ -13740,21 +15991,21 @@ utoa_append: { bcc __b2 // utoa_append::@3 // *buffer = DIGITS[digit] - // [303] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [361] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda DIGITS,x ldy #0 sta (buffer),y // utoa_append::@return // } - // [304] return + // [362] return rts // utoa_append::@2 __b2: // digit++; - // [305] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuxx=_inc_vbuxx + // [363] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2 -- vbuxx=_inc_vbuxx inx // value -= sub - // [306] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 + // [364] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 lda.z value sec sbc.z sub @@ -13762,25 +16013,25 @@ utoa_append: { lda.z value+1 sbc.z sub+1 sta.z value+1 - // [301] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] - // [301] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy - // [301] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy + // [359] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] + // [359] phi (byte) utoa_append::digit#2 = (byte) utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy + // [359] phi (word) utoa_append::value#2 = (word) utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy jmp __b1 } // printf_cls // Clear the screen. Also resets current line/char cursor. printf_cls: { // memset(PRINTF_SCREEN_ADDRESS, ' ', PRINTF_SCREEN_BYTES) - // [308] call memset - // [132] phi from printf_cls to memset [phi:printf_cls->memset] - // [132] phi (byte) memset::c#4 = (byte) ' ' [phi:printf_cls->memset#0] -- vbuxx=vbuc1 + // [366] call memset + // [73] phi from printf_cls to memset [phi:printf_cls->memset] + // [73] phi (byte) memset::c#4 = (byte) ' ' [phi:printf_cls->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [132] phi (void*) memset::str#3 = (void*) 1024 [phi:printf_cls->memset#1] -- pvoz1=pvoc1 + // [73] phi (void*) memset::str#3 = (void*) 1024 [phi:printf_cls->memset#1] -- pvoz1=pvoc1 lda #<$400 sta.z memset.str lda #>$400 sta.z memset.str+1 - // [132] phi (word) memset::num#2 = (word)(number) $28*(number) $19 [phi:printf_cls->memset#2] -- vwuz1=vwuc1 + // [73] phi (word) memset::num#2 = (word)(number) $28*(number) $19 [phi:printf_cls->memset#2] -- vwuz1=vwuc1 lda #<$28*$19 sta.z memset.num lda #>$28*$19 @@ -13788,21 +16039,21 @@ printf_cls: { jsr memset // printf_cls::@1 // printf_cursor_ptr = PRINTF_SCREEN_ADDRESS - // [309] (byte*) printf_cursor_ptr ← (byte*) 1024 -- pbuz1=pbuc1 + // [367] (byte*) printf_cursor_ptr ← (byte*) 1024 -- pbuz1=pbuc1 lda #<$400 sta.z printf_cursor_ptr lda #>$400 sta.z printf_cursor_ptr+1 // printf_cursor_x = 0 - // [310] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 + // [368] (byte) printf_cursor_x ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta.z printf_cursor_x // printf_cursor_y = 0 - // [311] (byte) printf_cursor_y ← (byte) 0 -- vbuz1=vbuc1 + // [369] (byte) printf_cursor_y ← (byte) 0 -- vbuz1=vbuc1 sta.z printf_cursor_y // printf_cls::@return // } - // [312] return + // [370] return rts } // File Data @@ -13814,8 +16065,13 @@ printf_cls: { RADIX_DECIMAL_VALUES: .word $2710, $3e8, $64, $a // Values of decimal digits RADIX_DECIMAL_VALUES_LONG: .dword $3b9aca00, $5f5e100, $989680, $f4240, $186a0, $2710, $3e8, $64, $a + // The buffer used by tod_str() + tod_buffer: .text "00:00:00:00" + .byte 0 // The board. board[i] holds the column position of the queen on row i. board: .fill $14, 0 // Buffer used for stringified number being printed printf_buffer: .fill SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER, 0 + // Time of Day 00:00:00:00 + TOD_ZERO: .byte 0, 0, 0, 0 diff --git a/src/test/ref/examples/eightqueens/eightqueens.sym b/src/test/ref/examples/eightqueens/eightqueens.sym index 054c742e7..115df5c61 100644 --- a/src/test/ref/examples/eightqueens/eightqueens.sym +++ b/src/test/ref/examples/eightqueens/eightqueens.sym @@ -2,8 +2,32 @@ (label) @2 (label) @begin (label) @end +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const byte*) DIGITS[] = (byte*) "0123456789abcdef"z +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = (byte) 8 +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS = (byte) $b +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN = (byte) $a +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC = (byte) 9 (const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = (byte) 1 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS = (byte) 3 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN = (byte) 2 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC = (byte) 1 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -12,58 +36,78 @@ (const dword*) RADIX_DECIMAL_VALUES_LONG[] = { (dword) $3b9aca00, (dword) $5f5e100, (dword) $989680, (dword) $f4240, (dword) $186a0, (dword) $2710, (dword) $3e8, (dword) $64, (dword) $a } (const byte*) RADIX_HEXADECIMAL_VALUES_CHAR[] = { (byte) $10 } (const byte) SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = (byte) $c +(byte) TIME_OF_DAY::HOURS +(byte) TIME_OF_DAY::MIN +(byte) TIME_OF_DAY::SEC +(byte) TIME_OF_DAY::TENTHS +(struct TIME_OF_DAY) TOD_ZERO loadstore mem[4] = { TENTHS: (byte) 0, SEC: (byte) 0, MIN: (byte) 0, HOURS: (byte) 0 } (const byte*) board[(number) $14] = { fill( $14, 0) } (dword) count -(dword) count#11 count zp[4]:2 1133.8666666666668 -(dword) count#13 count zp[4]:2 750.1071428571429 -(byte()) diff((byte) diff::a , (byte) diff::b) -(label) diff::@1 -(label) diff::@2 -(label) diff::@return -(byte) diff::a -(byte) diff::a#0 reg byte a 1000001.0 -(byte) diff::a#1 reg byte a 1000001.0 -(byte) diff::a#2 reg byte a 1.60000025E7 -(byte) diff::b -(byte) diff::b#0 reg byte x 2000002.0 -(byte) diff::b#1 reg byte x 2000002.0 -(byte) diff::b#2 reg byte x 1.60000025E7 -(byte) diff::return -(byte) diff::return#0 reg byte a 2000002.0 -(byte) diff::return#1 reg byte a 2000002.0 -(byte) diff::return#2 reg byte a 2.0000002E7 -(byte) diff::return#3 reg byte a 2.0000002E7 -(byte) diff::return#4 reg byte a 5500001.0 +(dword) count#14 count zp[4]:2 572.0 +(dword) count#22 count zp[4]:2 413.89655172413796 (byte()) legal((byte) legal::row , (byte) legal::column) (byte~) legal::$0 reg byte x 2000002.0 -(byte~) legal::$3 zp[1]:33 333333.6666666667 -(byte~) legal::$4 reg byte a 2000002.0 (label) legal::@1 (label) legal::@2 (label) legal::@3 (label) legal::@4 (label) legal::@5 -(label) legal::@6 (label) legal::@return (byte) legal::column -(byte) legal::column#0 column zp[1]:27 111166.83333333333 +(byte) legal::column#0 column zp[1]:27 235353.23529411765 +(label) legal::diff1 +(label) legal::diff1_@1 +(label) legal::diff1_@3 +(label) legal::diff1_@return +(byte) legal::diff1_a +(byte) legal::diff1_a#0 reg byte a 2000002.0 +(byte) legal::diff1_b +(byte) legal::diff1_return +(byte) legal::diff1_return#0 diff1_return zp[1]:11 2000002.0 +(byte) legal::diff1_return#1 diff1_return zp[1]:11 2000002.0 +(byte) legal::diff1_return#2 diff1_return zp[1]:11 600000.6000000001 +(label) legal::diff2 +(label) legal::diff2_@1 +(label) legal::diff2_@3 +(label) legal::diff2_@return +(byte) legal::diff2_a +(byte) legal::diff2_b +(byte) legal::diff2_return +(byte) legal::diff2_return#0 reg byte a 2000002.0 +(byte) legal::diff2_return#1 reg byte a 2000002.0 +(byte) legal::diff2_return#2 reg byte a 3000003.0 (byte) legal::i (byte) legal::i#1 reg byte y 2000002.0 -(byte) legal::i#2 reg byte y 400000.4 +(byte) legal::i#10 reg byte y 571429.1428571428 (byte) legal::return (byte) legal::return#0 reg byte a 2002.0 (byte) legal::return#4 reg byte a 333.6666666666667 (byte) legal::row -(byte) legal::row#0 row zp[1]:18 105315.94736842104 +(byte) legal::row#0 row zp[1]:12 222278.05555555556 (void()) main() (label) main::@1 (label) main::@2 (label) main::@3 (label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@7 +(label) main::@8 +(label) main::@9 (label) main::@return (const byte*) main::str[(byte) $29] = (byte*) " - n queens problem using backtracking -" (const byte*) main::str1[(byte) $13] = (byte*) " -Number of queens:" +number of queens:" +(const byte*) main::str2[(byte) 8] = (byte*) " +time: " +(byte) main::tod_HOURS +(byte) main::tod_HOURS#0 reg byte a 5.5 +(byte) main::tod_MIN +(byte) main::tod_MIN#0 tod_MIN zp[1]:23 5.5 +(byte) main::tod_SEC +(byte) main::tod_SEC#0 reg byte x 5.5 +(byte) main::tod_TENTHS +(byte) main::tod_TENTHS#0 reg byte y 5.5 (void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) (label) memcpy::@1 (label) memcpy::@2 @@ -71,16 +115,16 @@ Number of queens:" (void*) memcpy::destination (const void*) memcpy::destination#0 destination = (void*) 1024 (byte*) memcpy::dst -(byte*) memcpy::dst#1 dst zp[2]:34 1.0E19 -(byte*) memcpy::dst#2 dst zp[2]:34 1.0E19 +(byte*) memcpy::dst#1 dst zp[2]:33 1.0E19 +(byte*) memcpy::dst#2 dst zp[2]:33 1.0E19 (word) memcpy::num (const word) memcpy::num#0 num = (word)(number) $28*(number) $19-(number) $28 (void*) memcpy::return (void*) memcpy::source (const void*) memcpy::source#0 source = (void*)(number) $400+(number) $28 (byte*) memcpy::src -(byte*) memcpy::src#1 src zp[2]:21 2.0E19 -(byte*) memcpy::src#2 src zp[2]:21 1.0E19 +(byte*) memcpy::src#1 src zp[2]:15 2.0E19 +(byte*) memcpy::src#2 src zp[2]:15 1.0E19 (byte*) memcpy::src_end (const byte*) memcpy::src_end#0 src_end = (byte*)(const void*) memcpy::source#0+(const word) memcpy::num#0 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) @@ -91,16 +135,16 @@ Number of queens:" (byte) memset::c (byte) memset::c#4 reg byte x 1.25E16 (byte*) memset::dst -(byte*) memset::dst#1 dst zp[2]:34 2.0E17 -(byte*) memset::dst#2 dst zp[2]:34 1.33666666666666656E17 -(byte*) memset::dst#4 dst zp[2]:34 2.000000000000002E15 +(byte*) memset::dst#1 dst zp[2]:33 2.0E17 +(byte*) memset::dst#2 dst zp[2]:33 1.33666666666666656E17 +(byte*) memset::dst#4 dst zp[2]:33 2.000000000000002E15 (byte*) memset::end -(byte*) memset::end#0 end zp[2]:21 1.6833333333333332E16 +(byte*) memset::end#0 end zp[2]:15 1.6833333333333332E16 (word) memset::num -(word) memset::num#2 num zp[2]:21 1.000000000000001E15 +(word) memset::num#2 num zp[2]:15 1.000000000000001E15 (void*) memset::return (void*) memset::str -(void*) memset::str#3 str zp[2]:34 +(void*) memset::str#3 str zp[2]:33 (void()) print() (label) print::@1 (label) print::@10 @@ -118,14 +162,14 @@ Number of queens:" (label) print::@9 (label) print::@return (byte) print::i -(byte) print::i#1 i zp[1]:27 2000002.0 -(byte) print::i#2 i zp[1]:27 1000001.0 +(byte) print::i#1 i zp[1]:11 2000002.0 +(byte) print::i#2 i zp[1]:11 1000001.0 (byte) print::i1 -(byte) print::i1#1 i1 zp[1]:33 2000002.0 -(byte) print::i1#2 i1 zp[1]:33 1000000.357142857 +(byte) print::i1#1 i1 zp[1]:21 2000002.0 +(byte) print::i1#2 i1 zp[1]:21 1000000.357142857 (byte) print::j -(byte) print::j#1 j zp[1]:6 2.0000002E7 -(byte) print::j#2 j zp[1]:6 5714286.285714285 +(byte) print::j#1 j zp[1]:22 2.0000002E7 +(byte) print::j#2 j zp[1]:22 5714286.285714285 (const byte*) print::str[(byte) 3] = (byte*) " #" (const byte*) print::str1[(byte) 4] = (byte*) ": @@ -148,9 +192,9 @@ Number of queens:" (void()) printf_cls() (label) printf_cls::@1 (label) printf_cls::@return -(byte*) printf_cursor_ptr loadstore zp[2]:25 1.5045751633994116E12 -(byte) printf_cursor_x loadstore zp[1]:23 2.811188811196433E11 -(byte) printf_cursor_y loadstore zp[1]:24 2.0792207792214937E12 +(byte*) printf_cursor_ptr loadstore zp[2]:19 1.2788888888894998E12 +(byte) printf_cursor_x loadstore zp[1]:17 2.3647058823593533E11 +(byte) printf_cursor_y loadstore zp[1]:18 1.769060773481271E12 (byte) printf_format_number::justify_left (byte) printf_format_number::min_length (byte) printf_format_number::radix @@ -160,11 +204,11 @@ Number of queens:" (byte) printf_format_string::justify_left (byte) printf_format_string::min_length (void()) printf_ln() -(byte*~) printf_ln::$0 zp[2]:25 2.00000000002E11 -(byte*~) printf_ln::$1 zp[2]:25 2.00000000002E11 +(byte*~) printf_ln::$0 zp[2]:19 2.00000000002E11 +(byte*~) printf_ln::$1 zp[2]:19 2.00000000002E11 (label) printf_ln::@return (void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) -(word~) printf_number_buffer::$19 zp[2]:34 1.00000001E8 +(word~) printf_number_buffer::$19 zp[2]:33 1.00000001E8 (label) printf_number_buffer::@1 (label) printf_number_buffer::@10 (label) printf_number_buffer::@11 @@ -189,47 +233,47 @@ Number of queens:" (label) printf_number_buffer::@return (struct printf_buffer_number) printf_number_buffer::buffer (byte*) printf_number_buffer::buffer_digits -(byte*) printf_number_buffer::buffer_digits#10 buffer_digits zp[2]:19 1.0344827689655172E7 +(byte*) printf_number_buffer::buffer_digits#10 buffer_digits zp[2]:13 1.0344827689655172E7 (byte) printf_number_buffer::buffer_sign -(byte) printf_number_buffer::buffer_sign#0 buffer_sign zp[1]:13 200002.0 -(byte) printf_number_buffer::buffer_sign#1 buffer_sign zp[1]:13 202.0 -(byte) printf_number_buffer::buffer_sign#10 buffer_sign zp[1]:13 1.55050053E7 -(byte) printf_number_buffer::buffer_sign#2 buffer_sign zp[1]:13 2.0000002E7 +(byte) printf_number_buffer::buffer_sign#0 buffer_sign zp[1]:28 200002.0 +(byte) printf_number_buffer::buffer_sign#1 buffer_sign zp[1]:28 202.0 +(byte) printf_number_buffer::buffer_sign#10 buffer_sign zp[1]:28 1.55050053E7 +(byte) printf_number_buffer::buffer_sign#2 buffer_sign zp[1]:28 2.0000002E7 (struct printf_format_number) printf_number_buffer::format (byte) printf_number_buffer::format_justify_left -(byte) printf_number_buffer::format_justify_left#10 format_justify_left zp[1]:11 6451612.9677419355 +(byte) printf_number_buffer::format_justify_left#10 format_justify_left zp[1]:22 6451612.9677419355 (byte) printf_number_buffer::format_min_length (byte) printf_number_buffer::format_min_length#3 reg byte x 1.00000001E7 (byte) printf_number_buffer::format_radix (byte) printf_number_buffer::format_sign_always (byte) printf_number_buffer::format_upper_case -(byte) printf_number_buffer::format_upper_case#10 format_upper_case zp[1]:28 3846153.8846153845 +(byte) printf_number_buffer::format_upper_case#10 format_upper_case zp[1]:23 3846153.8846153845 (byte) printf_number_buffer::format_zero_padding -(byte) printf_number_buffer::format_zero_padding#10 format_zero_padding zp[1]:12 9375000.09375 +(byte) printf_number_buffer::format_zero_padding#10 format_zero_padding zp[1]:6 9375000.09375 (signed byte) printf_number_buffer::len (signed byte) printf_number_buffer::len#0 reg byte y 1.500000015E8 (signed byte) printf_number_buffer::len#1 reg byte y 2.00000002E8 (signed byte) printf_number_buffer::len#2 reg byte y 3.00000003E8 (signed byte) printf_number_buffer::padding -(signed byte) printf_number_buffer::padding#1 padding zp[1]:7 1.00000001E8 -(signed byte) printf_number_buffer::padding#10 padding zp[1]:7 1.904761923809524E7 +(signed byte) printf_number_buffer::padding#1 padding zp[1]:24 1.00000001E8 +(signed byte) printf_number_buffer::padding#10 padding zp[1]:24 1.904761923809524E7 (void()) printf_padding((byte) printf_padding::pad , (byte) printf_padding::length) (label) printf_padding::@1 (label) printf_padding::@2 (label) printf_padding::@3 (label) printf_padding::@return (byte) printf_padding::i -(byte) printf_padding::i#1 i zp[1]:10 2.000000000002E12 -(byte) printf_padding::i#2 i zp[1]:10 7.5000000000075E11 +(byte) printf_padding::i#1 i zp[1]:27 2.000000000002E12 +(byte) printf_padding::i#2 i zp[1]:27 7.5000000000075E11 (byte) printf_padding::length -(byte) printf_padding::length#0 length zp[1]:8 2.00000002E8 -(byte) printf_padding::length#1 length zp[1]:8 2.00000002E8 -(byte) printf_padding::length#2 length zp[1]:8 2.00000002E8 -(byte) printf_padding::length#4 length zp[1]:8 1.6671666666733334E11 +(byte) printf_padding::length#0 length zp[1]:25 2.00000002E8 +(byte) printf_padding::length#1 length zp[1]:25 2.00000002E8 +(byte) printf_padding::length#2 length zp[1]:25 2.00000002E8 +(byte) printf_padding::length#6 length zp[1]:25 1.6671666666733334E11 (byte) printf_padding::pad -(byte) printf_padding::pad#5 pad zp[1]:9 1.6666666666683334E11 +(byte) printf_padding::pad#7 pad zp[1]:26 1.6666666666683334E11 (void()) printf_scroll() -(byte*~) printf_scroll::$4 zp[2]:25 2.00000000000002E14 +(byte*~) printf_scroll::$4 zp[2]:19 2.00000000000002E14 (label) printf_scroll::@1 (label) printf_scroll::@2 (label) printf_scroll::@3 @@ -244,10 +288,19 @@ Number of queens:" (byte) printf_str::ch (byte) printf_str::ch#0 reg byte a 1.0000000001E10 (byte*) printf_str::str -(byte*) printf_str::str#0 str zp[2]:19 4.2857142861428566E9 -(byte*) printf_str::str#1 str zp[2]:19 2.00000002E8 -(byte*) printf_str::str#10 str zp[2]:19 2.05000000025E10 -(byte*) printf_str::str#11 str zp[2]:19 1.100000002E9 +(byte*) printf_str::str#0 str zp[2]:13 4.2857142861428566E9 +(byte*) printf_str::str#1 str zp[2]:13 2.00000002E8 +(byte*) printf_str::str#11 str zp[2]:13 2.05000000025E10 +(byte*) printf_str::str#13 str zp[2]:13 1.100000002E9 +(void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) +(label) printf_string::@1 +(label) printf_string::@return +(struct printf_format_string) printf_string::format +(byte) printf_string::format_justify_left +(byte) printf_string::format_min_length +(signed byte) printf_string::len +(signed byte) printf_string::padding +(byte*) printf_string::str (void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) (label) printf_uchar::@1 (label) printf_uchar::@2 @@ -310,22 +363,22 @@ Number of queens:" (label) queens::@9 (label) queens::@return (byte) queens::row -(byte) queens::row#1 row zp[1]:18 2002.0 -(byte) queens::row#10 row zp[1]:18 1144.0 -(byte) queens::row#2 row zp[1]:18 2002.0 +(byte) queens::row#1 row zp[1]:12 2002.0 +(byte) queens::row#10 row zp[1]:12 1144.0 +(byte) queens::row#2 row zp[1]:12 2002.0 (word()) strlen((byte*) strlen::str) (label) strlen::@1 (label) strlen::@2 (label) strlen::@return (word) strlen::len -(word) strlen::len#1 len zp[2]:34 1.000000000001E12 -(word) strlen::len#2 len zp[2]:34 5.0002500000075E11 +(word) strlen::len#1 len zp[2]:33 1.000000000001E12 +(word) strlen::len#2 len zp[2]:33 5.0002500000075E11 (word) strlen::return -(word) strlen::return#2 return zp[2]:34 2.00000002E8 +(word) strlen::return#2 return zp[2]:33 2.00000002E8 (byte*) strlen::str -(byte*) strlen::str#0 str zp[2]:21 2.000000000002E12 -(byte*) strlen::str#1 str zp[2]:21 5.50000001E8 -(byte*) strlen::str#2 str zp[2]:21 1.0003333333346667E12 +(byte*) strlen::str#0 str zp[2]:15 2.000000000002E12 +(byte*) strlen::str#1 str zp[2]:15 5.50000001E8 +(byte*) strlen::str#3 str zp[2]:15 1.0003333333346667E12 (byte*()) strupr((byte*) strupr::str) (byte~) strupr::$0 reg byte a 2.000000000002E12 (label) strupr::@1 @@ -334,10 +387,73 @@ Number of queens:" (label) strupr::@return (byte*) strupr::return (byte*) strupr::src -(byte*) strupr::src#1 src zp[2]:21 2.000000000002E12 -(byte*) strupr::src#2 src zp[2]:21 7.144285714294285E11 +(byte*) strupr::src#1 src zp[2]:15 2.000000000002E12 +(byte*) strupr::src#2 src zp[2]:15 7.144285714294285E11 (byte*) strupr::str -(byte*) strupr::str#0 str zp[2]:21 5.50000001E8 +(byte*) strupr::str#0 str zp[2]:15 5.50000001E8 +(const byte*) tod_buffer[] = (byte*) "00:00:00:00" +(void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) +(label) tod_init::@return +(struct TIME_OF_DAY) tod_init::tod +(byte) tod_init::tod_HOURS +(byte) tod_init::tod_HOURS#0 reg byte y 37.33333333333333 +(byte) tod_init::tod_MIN +(byte) tod_init::tod_MIN#0 reg byte x 22.4 +(byte) tod_init::tod_SEC +(byte) tod_init::tod_SEC#0 tod_SEC zp[1]:22 16.0 +(byte) tod_init::tod_TENTHS +(byte) tod_init::tod_TENTHS#0 tod_TENTHS zp[1]:21 12.444444444444443 +(struct TIME_OF_DAY()) tod_read() +(label) tod_read::@return +(byte) tod_read::hours +(byte) tod_read::mins +(struct TIME_OF_DAY) tod_read::return +(byte) tod_read::return_HOURS +(byte) tod_read::return_HOURS#0 return_HOURS zp[1]:24 12.444444444444443 +(byte) tod_read::return_HOURS#2 return_HOURS zp[1]:24 5.5 +(byte) tod_read::return_MIN +(byte) tod_read::return_MIN#0 reg byte a 16.0 +(byte) tod_read::return_MIN#2 return_MIN zp[1]:23 5.5 +(byte) tod_read::return_SEC +(byte) tod_read::return_SEC#0 reg byte x 22.4 +(byte) tod_read::return_SEC#2 reg byte x 5.5 +(byte) tod_read::return_TENTHS +(byte) tod_read::return_TENTHS#0 reg byte y 37.33333333333333 +(byte) tod_read::return_TENTHS#2 reg byte y 5.5 +(byte) tod_read::secs +(byte) tod_read::tenths +(byte) tod_read::tod_HOURS +(byte) tod_read::tod_MIN +(byte) tod_read::tod_SEC +(byte) tod_read::tod_TENTHS +(byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) +(byte~) tod_str::$0 reg byte a 202.0 +(byte~) tod_str::$1 reg byte a 202.0 +(byte~) tod_str::$10 reg byte a 202.0 +(byte~) tod_str::$11 reg byte a 202.0 +(byte~) tod_str::$12 reg byte a 202.0 +(byte~) tod_str::$13 reg byte a 202.0 +(byte~) tod_str::$14 reg byte a 202.0 +(byte~) tod_str::$15 reg byte a 202.0 +(byte~) tod_str::$2 reg byte a 202.0 +(byte~) tod_str::$3 reg byte a 202.0 +(byte~) tod_str::$4 reg byte a 202.0 +(byte~) tod_str::$5 reg byte a 202.0 +(byte~) tod_str::$6 reg byte a 202.0 +(byte~) tod_str::$7 reg byte a 202.0 +(byte~) tod_str::$8 reg byte a 202.0 +(byte~) tod_str::$9 reg byte a 202.0 +(label) tod_str::@return +(byte*) tod_str::return +(struct TIME_OF_DAY) tod_str::tod +(byte) tod_str::tod_HOURS +(byte) tod_str::tod_HOURS#0 reg byte x 53.25 +(byte) tod_str::tod_MIN +(byte) tod_str::tod_MIN#0 reg byte y 19.363636363636363 +(byte) tod_str::tod_SEC +(byte) tod_str::tod_SEC#0 tod_SEC zp[1]:26 11.833333333333332 +(byte) tod_str::tod_TENTHS +(byte) tod_str::tod_TENTHS#0 tod_TENTHS zp[1]:25 8.52 (byte()) toupper((byte) toupper::ch) (label) toupper::@1 (label) toupper::@2 @@ -358,21 +474,21 @@ Number of queens:" (label) uctoa::@7 (label) uctoa::@return (byte*) uctoa::buffer -(byte*) uctoa::buffer#11 buffer zp[2]:19 3.3350000000500004E10 -(byte*) uctoa::buffer#14 buffer zp[2]:19 1.500000000015E11 -(byte*) uctoa::buffer#3 buffer zp[2]:19 2.00000002E8 -(byte*) uctoa::buffer#4 buffer zp[2]:19 2.00000000002E11 +(byte*) uctoa::buffer#11 buffer zp[2]:13 3.3350000000500004E10 +(byte*) uctoa::buffer#14 buffer zp[2]:13 1.500000000015E11 +(byte*) uctoa::buffer#3 buffer zp[2]:13 2.00000002E8 +(byte*) uctoa::buffer#4 buffer zp[2]:13 2.00000000002E11 (byte) uctoa::digit -(byte) uctoa::digit#1 digit zp[1]:11 2.00000000002E11 -(byte) uctoa::digit#2 digit zp[1]:11 3.076923076953846E10 +(byte) uctoa::digit#1 digit zp[1]:22 2.00000000002E11 +(byte) uctoa::digit#2 digit zp[1]:22 3.076923076953846E10 (byte) uctoa::digit_value (byte) uctoa::digit_value#0 digit_value zp[1]:28 6.0000000000600006E10 (byte*) uctoa::digit_values (byte) uctoa::max_digits (byte) uctoa::radix (byte) uctoa::started -(byte) uctoa::started#2 started zp[1]:12 6.0000000000600006E10 -(byte) uctoa::started#4 started zp[1]:12 1.00000000001E11 +(byte) uctoa::started#2 started zp[1]:6 6.0000000000600006E10 +(byte) uctoa::started#4 started zp[1]:6 1.00000000001E11 (byte) uctoa::value (byte) uctoa::value#0 reg byte x 1.00000000001E11 (byte) uctoa::value#1 reg byte x 5.5000001E7 @@ -384,7 +500,7 @@ Number of queens:" (label) uctoa_append::@3 (label) uctoa_append::@return (byte*) uctoa_append::buffer -(byte*) uctoa_append::buffer#0 buffer zp[2]:19 1.3750000000025E11 +(byte*) uctoa_append::buffer#0 buffer zp[2]:13 1.3750000000025E11 (byte) uctoa_append::digit (byte) uctoa_append::digit#1 reg byte y 1.0E16 (byte) uctoa_append::digit#2 reg byte y 1.00005E16 @@ -408,13 +524,13 @@ Number of queens:" (label) ultoa::@7 (label) ultoa::@return (byte*) ultoa::buffer -(byte*) ultoa::buffer#11 buffer zp[2]:34 2.871428614285714E7 -(byte*) ultoa::buffer#14 buffer zp[2]:34 1.500000015E8 -(byte*) ultoa::buffer#3 buffer zp[2]:34 2000002.0 -(byte*) ultoa::buffer#4 buffer zp[2]:34 2.00000002E8 +(byte*) ultoa::buffer#11 buffer zp[2]:33 2.871428614285714E7 +(byte*) ultoa::buffer#14 buffer zp[2]:33 1.500000015E8 +(byte*) ultoa::buffer#3 buffer zp[2]:33 2000002.0 +(byte*) ultoa::buffer#4 buffer zp[2]:33 2.00000002E8 (byte) ultoa::digit -(byte) ultoa::digit#1 digit zp[1]:13 2.00000002E8 -(byte) ultoa::digit#2 digit zp[1]:13 2.857142885714286E7 +(byte) ultoa::digit#1 digit zp[1]:28 2.00000002E8 +(byte) ultoa::digit#2 digit zp[1]:28 2.857142885714286E7 (dword) ultoa::digit_value (dword) ultoa::digit_value#0 digit_value zp[4]:29 6.0000000599999994E7 (dword*) ultoa::digit_values @@ -425,28 +541,28 @@ Number of queens:" (byte) ultoa::started#2 reg byte x 5.00000005E7 (byte) ultoa::started#4 reg byte x 1.00000001E8 (dword) ultoa::value -(dword) ultoa::value#0 value zp[4]:14 1.00000001E8 -(dword) ultoa::value#1 value zp[4]:14 550001.0 -(dword) ultoa::value#2 value zp[4]:14 5.7285715E7 -(dword) ultoa::value#6 value zp[4]:14 1.500000015E8 +(dword) ultoa::value#0 value zp[4]:7 1.00000001E8 +(dword) ultoa::value#1 value zp[4]:7 550001.0 +(dword) ultoa::value#2 value zp[4]:7 5.7285715E7 +(dword) ultoa::value#6 value zp[4]:7 1.500000015E8 (dword()) ultoa_append((byte*) ultoa_append::buffer , (dword) ultoa_append::value , (dword) ultoa_append::sub) (label) ultoa_append::@1 (label) ultoa_append::@2 (label) ultoa_append::@3 (label) ultoa_append::@return (byte*) ultoa_append::buffer -(byte*) ultoa_append::buffer#0 buffer zp[2]:34 1.3750000025E8 +(byte*) ultoa_append::buffer#0 buffer zp[2]:33 1.3750000025E8 (byte) ultoa_append::digit (byte) ultoa_append::digit#1 reg byte x 1.000000000001E12 (byte) ultoa_append::digit#2 reg byte x 1.0005000000015E12 (dword) ultoa_append::return -(dword) ultoa_append::return#0 return zp[4]:14 2.00000002E8 +(dword) ultoa_append::return#0 return zp[4]:7 2.00000002E8 (dword) ultoa_append::sub (dword) ultoa_append::sub#0 sub zp[4]:29 3.333500000005E11 (dword) ultoa_append::value -(dword) ultoa_append::value#0 value zp[4]:14 3.666666673333334E8 -(dword) ultoa_append::value#1 value zp[4]:14 2.000000000002E12 -(dword) ultoa_append::value#2 value zp[4]:14 5.0018333333416675E11 +(dword) ultoa_append::value#0 value zp[4]:7 3.666666673333334E8 +(dword) ultoa_append::value#1 value zp[4]:7 2.000000000002E12 +(dword) ultoa_append::value#2 value zp[4]:7 5.0018333333416675E11 (void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix) (byte~) utoa::$10 reg byte a 20002.0 (byte~) utoa::$11 reg byte a 2002.0 @@ -459,15 +575,15 @@ Number of queens:" (label) utoa::@7 (label) utoa::@return (byte*) utoa::buffer -(byte*) utoa::buffer#11 buffer zp[2]:21 3000.4285714285716 -(byte*) utoa::buffer#14 buffer zp[2]:21 15001.5 -(byte*) utoa::buffer#3 buffer zp[2]:21 2002.0 -(byte*) utoa::buffer#4 buffer zp[2]:21 20002.0 +(byte*) utoa::buffer#11 buffer zp[2]:15 3000.4285714285716 +(byte*) utoa::buffer#14 buffer zp[2]:15 15001.5 +(byte*) utoa::buffer#3 buffer zp[2]:15 2002.0 +(byte*) utoa::buffer#4 buffer zp[2]:15 20002.0 (byte) utoa::digit -(byte) utoa::digit#1 digit zp[1]:18 20002.0 -(byte) utoa::digit#2 digit zp[1]:18 2857.4285714285716 +(byte) utoa::digit#1 digit zp[1]:12 20002.0 +(byte) utoa::digit#2 digit zp[1]:12 2857.4285714285716 (word) utoa::digit_value -(word) utoa::digit_value#0 digit_value zp[2]:34 6000.6 +(word) utoa::digit_value#0 digit_value zp[2]:33 6000.6 (word*) utoa::digit_values (byte) utoa::max_digits (const byte) utoa::max_digits#1 max_digits = (byte) 5 @@ -476,79 +592,103 @@ Number of queens:" (byte) utoa::started#2 reg byte x 5000.5 (byte) utoa::started#4 reg byte x 10001.0 (word) utoa::value -(word) utoa::value#0 value zp[2]:19 10001.0 -(word) utoa::value#2 value zp[2]:19 5714.857142857143 -(word) utoa::value#6 value zp[2]:19 15001.5 +(word) utoa::value#0 value zp[2]:13 10001.0 +(word) utoa::value#2 value zp[2]:13 5714.857142857143 +(word) utoa::value#6 value zp[2]:13 15001.5 (word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub) (label) utoa_append::@1 (label) utoa_append::@2 (label) utoa_append::@3 (label) utoa_append::@return (byte*) utoa_append::buffer -(byte*) utoa_append::buffer#0 buffer zp[2]:21 13750.25 +(byte*) utoa_append::buffer#0 buffer zp[2]:15 13750.25 (byte) utoa_append::digit (byte) utoa_append::digit#1 reg byte x 1.0000001E7 (byte) utoa_append::digit#2 reg byte x 1.00500015E7 (word) utoa_append::return -(word) utoa_append::return#0 return zp[2]:19 20002.0 +(word) utoa_append::return#0 return zp[2]:13 20002.0 (word) utoa_append::sub -(word) utoa_append::sub#0 sub zp[2]:34 3335000.5 +(word) utoa_append::sub#0 sub zp[2]:33 3335000.5 (word) utoa_append::value -(word) utoa_append::value#0 value zp[2]:19 36667.33333333333 -(word) utoa_append::value#1 value zp[2]:19 2.0000002E7 -(word) utoa_append::value#2 value zp[2]:19 5018334.166666666 +(word) utoa_append::value#0 value zp[2]:13 36667.33333333333 +(word) utoa_append::value#1 value zp[2]:13 2.0000002E7 +(word) utoa_append::value#2 value zp[2]:13 5018334.166666666 -zp[4]:2 [ count#11 count#13 printf_ulong::uvalue#0 ] -zp[1]:6 [ print::j#2 print::j#1 ] +reg byte x [ memset::c#4 ] +reg byte a [ printf_char::ch#3 printf_char::ch#2 printf_char::ch#0 printf_char::ch#1 ] +zp[4]:2 [ count#14 count#22 printf_ulong::uvalue#0 ] reg byte x [ printf_uchar::uvalue#2 printf_uchar::uvalue#1 printf_uchar::uvalue#0 ] reg byte x [ printf_number_buffer::format_min_length#3 ] reg byte y [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] -zp[1]:7 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] -zp[1]:8 [ printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] -zp[1]:9 [ printf_padding::pad#5 ] -zp[1]:10 [ printf_padding::i#2 printf_padding::i#1 ] -reg byte a [ printf_char::ch#3 printf_char::ch#2 printf_char::ch#0 printf_char::ch#1 ] -reg byte x [ memset::c#4 ] reg byte a [ toupper::return#2 toupper::return#0 toupper::ch#0 ] -zp[1]:11 [ uctoa::digit#2 uctoa::digit#1 printf_number_buffer::format_justify_left#10 ] reg byte x [ uctoa::value#2 uctoa::value#6 uctoa::value#1 uctoa::value#0 ] -zp[1]:12 [ uctoa::started#2 uctoa::started#4 printf_number_buffer::format_zero_padding#10 ] +zp[1]:6 [ uctoa::started#2 uctoa::started#4 printf_number_buffer::format_zero_padding#10 ] reg byte x [ uctoa_append::value#2 uctoa_append::value#0 uctoa_append::value#1 ] reg byte y [ uctoa_append::digit#2 uctoa_append::digit#1 ] -zp[1]:13 [ ultoa::digit#2 ultoa::digit#1 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] -zp[4]:14 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ultoa_append::return#0 ] +zp[4]:7 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ultoa_append::return#0 ] reg byte x [ ultoa::started#2 ultoa::started#4 ] reg byte x [ ultoa_append::digit#2 ultoa_append::digit#1 ] -reg byte y [ legal::i#2 legal::i#1 ] +reg byte y [ legal::i#10 legal::i#1 ] reg byte a [ legal::return#4 ] -reg byte a [ diff::a#2 diff::a#0 diff::a#1 ] -reg byte x [ diff::b#2 diff::b#0 diff::b#1 ] -reg byte a [ diff::return#4 diff::return#2 diff::return#3 ] -zp[1]:18 [ utoa::digit#2 utoa::digit#1 queens::row#10 queens::row#1 queens::row#2 legal::row#0 ] -zp[2]:19 [ utoa::value#2 utoa::value#6 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 uctoa_append::buffer#0 printf_number_buffer::buffer_digits#10 printf_str::str#10 printf_str::str#11 printf_str::str#1 printf_str::str#0 ] +zp[1]:11 [ legal::diff1_return#2 legal::diff1_return#0 legal::diff1_return#1 print::i#2 print::i#1 ] +reg byte a [ legal::diff2_return#2 legal::diff2_return#0 legal::diff2_return#1 ] +zp[1]:12 [ utoa::digit#2 utoa::digit#1 queens::row#10 queens::row#1 queens::row#2 legal::row#0 ] +zp[2]:13 [ utoa::value#2 utoa::value#6 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 uctoa_append::buffer#0 printf_str::str#11 printf_str::str#13 printf_str::str#1 printf_str::str#0 printf_number_buffer::buffer_digits#10 ] reg byte x [ utoa::started#2 utoa::started#4 ] -zp[2]:21 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 strlen::str#2 strlen::str#1 strlen::str#0 strupr::src#2 strupr::str#0 strupr::src#1 memcpy::src#2 memcpy::src#1 memset::num#2 memset::end#0 ] +zp[2]:15 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 strlen::str#3 strlen::str#1 strlen::str#0 strupr::src#2 strupr::str#0 strupr::src#1 memcpy::src#2 memcpy::src#1 memset::num#2 memset::end#0 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] -zp[1]:23 [ printf_cursor_x ] -zp[1]:24 [ printf_cursor_y ] -zp[2]:25 [ printf_cursor_ptr printf_scroll::$4 printf_ln::$0 printf_ln::$1 ] -zp[1]:27 [ legal::column#0 print::i#2 print::i#1 ] +zp[1]:17 [ printf_cursor_x ] +zp[1]:18 [ printf_cursor_y ] +zp[2]:19 [ printf_cursor_ptr printf_scroll::$4 printf_ln::$0 printf_ln::$1 ] +zp[1]:21 [ tod_init::tod_TENTHS#0 print::i1#2 print::i1#1 ] +zp[1]:22 [ tod_init::tod_SEC#0 print::j#2 print::j#1 uctoa::digit#2 uctoa::digit#1 printf_number_buffer::format_justify_left#10 ] +reg byte x [ tod_init::tod_MIN#0 ] +reg byte y [ tod_init::tod_HOURS#0 ] +reg byte y [ tod_read::return_TENTHS#2 ] +reg byte x [ tod_read::return_SEC#2 ] +zp[1]:23 [ tod_read::return_MIN#2 main::tod_MIN#0 printf_number_buffer::format_upper_case#10 ] +zp[1]:24 [ tod_read::return_HOURS#2 tod_read::return_HOURS#0 printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] +reg byte y [ main::tod_TENTHS#0 ] +reg byte x [ main::tod_SEC#0 ] +reg byte a [ main::tod_HOURS#0 ] +zp[1]:25 [ tod_str::tod_TENTHS#0 printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] +zp[1]:26 [ tod_str::tod_SEC#0 printf_padding::pad#7 ] +reg byte y [ tod_str::tod_MIN#0 ] +reg byte x [ tod_str::tod_HOURS#0 ] +reg byte a [ printf_str::ch#0 ] +reg byte a [ tod_str::$0 ] +reg byte a [ tod_str::$1 ] +reg byte a [ tod_str::$2 ] +reg byte a [ tod_str::$3 ] +reg byte a [ tod_str::$4 ] +reg byte a [ tod_str::$5 ] +reg byte a [ tod_str::$6 ] +reg byte a [ tod_str::$7 ] +reg byte a [ tod_str::$8 ] +reg byte a [ tod_str::$9 ] +reg byte a [ tod_str::$10 ] +reg byte a [ tod_str::$11 ] +reg byte a [ tod_str::$12 ] +reg byte a [ tod_str::$13 ] +reg byte a [ tod_str::$14 ] +reg byte a [ tod_str::$15 ] +reg byte a [ tod_read::return_MIN#0 ] +reg byte x [ tod_read::return_SEC#0 ] +reg byte y [ tod_read::return_TENTHS#0 ] +zp[1]:27 [ legal::column#0 printf_padding::i#2 printf_padding::i#1 ] reg byte a [ legal::return#0 ] reg byte a [ queens::$2 ] -reg byte a [ printf_str::ch#0 ] reg byte a [ toupper::return#3 ] reg byte a [ strupr::$0 ] -zp[1]:28 [ uctoa::digit_value#0 uctoa_append::sub#0 printf_number_buffer::format_upper_case#10 ] +zp[1]:28 [ uctoa::digit_value#0 uctoa_append::sub#0 ultoa::digit#2 ultoa::digit#1 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 ] reg byte x [ uctoa_append::return#0 ] reg byte a [ ultoa::$11 ] reg byte a [ ultoa::$10 ] zp[4]:29 [ ultoa::digit_value#0 ultoa_append::sub#0 ] reg byte x [ legal::$0 ] -reg byte a [ diff::return#0 ] -zp[1]:33 [ legal::$3 print::i1#2 print::i1#1 ] -reg byte a [ diff::return#1 ] -reg byte a [ legal::$4 ] +reg byte a [ legal::diff1_a#0 ] reg byte a [ utoa::$11 ] reg byte a [ utoa::$10 ] -zp[2]:34 [ utoa::digit_value#0 utoa_append::sub#0 ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 strlen::len#2 strlen::len#1 strlen::return#2 printf_number_buffer::$19 memcpy::dst#2 memcpy::dst#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] +zp[2]:33 [ utoa::digit_value#0 utoa_append::sub#0 ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ultoa::buffer#3 ultoa_append::buffer#0 strlen::len#2 strlen::len#1 strlen::return#2 printf_number_buffer::$19 memcpy::dst#2 memcpy::dst#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] mem[12] [ printf_buffer ] +mem[4] [ TOD_ZERO ] diff --git a/src/test/ref/examples/fire/fire.log b/src/test/ref/examples/fire/fire.log index d90405a28..9358a847b 100644 --- a/src/test/ref/examples/fire/fire.log +++ b/src/test/ref/examples/fire/fire.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$7 ← call toD018 (const byte*) SCREEN1 (const byte*) CHARSET Inlined call (byte~) main::$9 ← call toD018 (const byte*) SCREEN2 (const byte*) CHARSET @@ -376,6 +378,20 @@ SYMBOL TABLE SSA (const byte*) CHARSET = (byte*)(number) $3000 (const nomodify byte*) COLS = (byte*)(number) $d800 (const nomodify byte*) D018 = (byte*)(number) $d018 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte*) SCREEN1 = (byte*)(number) $3800 (const byte*) SCREEN2 = (byte*)(number) $3c00 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 @@ -1367,6 +1383,20 @@ fillscreen::@return: scope:[fillscreen] from fillscreen::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill) (byte) fillscreen::fill (byte) fillscreen::fill#5 166.83333333333334 @@ -2369,6 +2399,7 @@ Uplift Scope [fire] 700,007: zp[1]:12 [ fire::c#2 fire::c#0 fire::c#1 ] 275,002. Uplift Scope [makecharset] 427,505.4: zp[1]:19 [ makecharset::bc#6 makecharset::bc#3 makecharset::bc#7 makecharset::bc#1 makecharset::bc#2 ] 375,837.17: zp[1]:21 [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] 240,002.4: zp[1]:20 [ makecharset::ii#2 makecharset::ii#1 ] 200,002: zp[1]:43 [ makecharset::$11 ] 200,002: zp[1]:44 [ makecharset::$12 ] 200,002: zp[1]:45 [ makecharset::$13 ] 27,780.06: zp[1]:18 [ makecharset::i#2 makecharset::i#1 ] 20,002: zp[2]:35 [ makecharset::$17 ] 20,002: zp[2]:37 [ makecharset::$15 ] 20,002: zp[2]:39 [ makecharset::$16 ] 20,002: zp[2]:41 [ makecharset::$18 ] 6,906.95: zp[1]:17 [ makecharset::c#2 makecharset::c#1 ] 3,336.67: zp[2]:13 [ makecharset::font#2 makecharset::font#1 ] 3,336.67: zp[2]:15 [ makecharset::font1#2 makecharset::font1#1 ] Uplift Scope [sid_rnd] 366,667.33: zp[1]:34 [ sid_rnd::return#0 ] 200,002: zp[1]:27 [ sid_rnd::return#2 ] Uplift Scope [fillscreen] 2,320.33: zp[2]:23 [ fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 ] 2,168.83: zp[2]:25 [ fillscreen::i#2 fillscreen::i#1 ] 166.83: zp[1]:22 [ fillscreen::fill#5 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [sid_rnd_init] Uplift Scope [main] Uplift Scope [] @@ -2379,6 +2410,7 @@ Uplifting [makecharset] best 122395 combination reg byte x [ makecharset::bc#6 m Limited combination testing to 100 combinations of 512 possible. Uplifting [sid_rnd] best 121492 combination reg byte a [ sid_rnd::return#0 ] reg byte a [ sid_rnd::return#2 ] Uplifting [fillscreen] best 121470 combination zp[2]:23 [ fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 ] zp[2]:25 [ fillscreen::i#2 fillscreen::i#1 ] reg byte x [ fillscreen::fill#5 ] +Uplifting [MOS6526_CIA] best 121470 combination Uplifting [sid_rnd_init] best 121470 combination Uplifting [main] best 121470 combination Uplifting [] best 121470 combination @@ -3202,6 +3234,20 @@ FINAL SYMBOL TABLE (const byte*) CHARSET = (byte*) 12288 (const nomodify byte*) COLS = (byte*) 55296 (const nomodify byte*) D018 = (byte*) 53272 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte*) SCREEN1 = (byte*) 14336 (const byte*) SCREEN2 = (byte*) 15360 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 diff --git a/src/test/ref/examples/fire/fire.sym b/src/test/ref/examples/fire/fire.sym index f291ddcfe..3f748f562 100644 --- a/src/test/ref/examples/fire/fire.sym +++ b/src/test/ref/examples/fire/fire.sym @@ -8,6 +8,20 @@ (const byte*) CHARSET = (byte*) 12288 (const nomodify byte*) COLS = (byte*) 55296 (const nomodify byte*) D018 = (byte*) 53272 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte*) SCREEN1 = (byte*) 14336 (const byte*) SCREEN2 = (byte*) 15360 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 diff --git a/src/test/ref/examples/font-2x2/font-2x2.log b/src/test/ref/examples/font-2x2/font-2x2.log index ae9aecc79..8a5278806 100644 --- a/src/test/ref/examples/font-2x2/font-2x2.log +++ b/src/test/ref/examples/font-2x2/font-2x2.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$2 ← call toD018 (const nomodify byte*) SCREEN (const nomodify byte*) FONT_COMPRESSED @@ -515,6 +517,20 @@ SYMBOL TABLE SSA (const nomodify byte*) FONT_COMPRESSED = (byte*)(number) $2800 (const byte*) FONT_COMPRESSED_MAP[(number) $100] = { fill( $100, 0) } (const nomodify byte*) FONT_ORIGINAL = (byte*)(number) $2000 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) PROCPORT = (byte*)(number) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1 @@ -1829,6 +1845,20 @@ font_2x2::@return: scope:[font_2x2] from font_2x2::@9 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2) (byte~) font_2x2::$1 200002.0 (byte~) font_2x2::$11 20002.0 @@ -3126,6 +3156,7 @@ Uplift Scope [show] 20,002: zp[2]:43 [ show::$8 ] 20,002: zp[2]:45 [ show::$9 ] Uplift Scope [font_compress] 35,003.5: zp[1]:13 [ font_compress::l#2 font_compress::l#1 ] 6,006: zp[1]:14 [ font_compress::found#2 font_compress::found#3 font_compress::found#0 ] 3,603.6: zp[1]:15 [ font_compress::return#1 font_compress::font_size#1 font_compress::return#5 ] 2,387: zp[1]:9 [ font_compress::font_size#2 font_compress::font_size#9 ] 2,251.5: zp[2]:11 [ font_compress::next_compressed#4 font_compress::next_compressed#7 font_compress::next_compressed#1 ] 1,265.44: zp[2]:7 [ font_compress::next_original#2 font_compress::next_original#1 ] 1,167.83: zp[1]:10 [ font_compress::i#4 font_compress::i#1 ] Uplift Scope [main] 2,002: zp[1]:4 [ main::x#2 main::x#1 ] 1,243.4: zp[1]:3 [ main::c#2 main::c#4 main::c#1 ] 285.17: zp[1]:2 [ main::y#4 main::y#1 ] Uplift Scope [memset] 3,336.67: zp[2]:5 [ memset::dst#2 memset::dst#1 ] 168.67: zp[1]:37 [ memset::c#0 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [] Uplifting [font_find] best 204483 combination reg byte y [ font_find::l#2 font_find::l#1 ] reg byte x [ font_find::return#3 font_find::i#2 font_find::i#1 ] zp[2]:16 [ font_find::font#4 font_find::font#1 ] reg byte a [ font_find::found#2 ] zp[2]:57 [ font_find::glyph#0 ] zp[1]:59 [ font_find::font_size#0 ] zp[1]:60 [ font_find::return#0 ] @@ -3138,6 +3169,7 @@ Uplifting [font_compress] best 180053 combination reg byte y [ font_compress::l# Limited combination testing to 100 combinations of 324 possible. Uplifting [main] best 180053 combination zp[1]:4 [ main::x#2 main::x#1 ] zp[1]:3 [ main::c#2 main::c#4 main::c#1 ] zp[1]:2 [ main::y#4 main::y#1 ] Uplifting [memset] best 180040 combination zp[2]:5 [ memset::dst#2 memset::dst#1 ] reg byte x [ memset::c#0 ] +Uplifting [MOS6526_CIA] best 180040 combination Uplifting [] best 180040 combination Attempting to uplift remaining variables inzp[1]:32 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] Uplifting [font_2x2] best 180040 combination zp[1]:32 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] @@ -4098,6 +4130,20 @@ FINAL SYMBOL TABLE (const nomodify byte*) FONT_COMPRESSED = (byte*) 10240 (const byte*) FONT_COMPRESSED_MAP[(number) $100] = { fill( $100, 0) } (const nomodify byte*) FONT_ORIGINAL = (byte*) 8192 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1 diff --git a/src/test/ref/examples/font-2x2/font-2x2.sym b/src/test/ref/examples/font-2x2/font-2x2.sym index f6d4a8019..c0f5c7032 100644 --- a/src/test/ref/examples/font-2x2/font-2x2.sym +++ b/src/test/ref/examples/font-2x2/font-2x2.sym @@ -6,6 +6,20 @@ (const nomodify byte*) FONT_COMPRESSED = (byte*) 10240 (const byte*) FONT_COMPRESSED_MAP[(number) $100] = { fill( $100, 0) } (const nomodify byte*) FONT_ORIGINAL = (byte*) 8192 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1 diff --git a/src/test/ref/examples/irq/irq-hyperscreen.asm b/src/test/ref/examples/irq/irq-hyperscreen.asm index 2eedae5a5..2716186a0 100644 --- a/src/test/ref/examples/irq/irq-hyperscreen.asm +++ b/src/test/ref/examples/irq/irq-hyperscreen.asm @@ -12,8 +12,8 @@ .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts @@ -21,16 +21,17 @@ .const WHITE = 1 .const RED = 2 .label GHOST_BYTE = $3fff + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d main: { // *GHOST_BYTE = 0 lda #0 sta GHOST_BYTE // asm sei - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL &=$7f // Set raster line to $fa lda #$7f diff --git a/src/test/ref/examples/irq/irq-hyperscreen.cfg b/src/test/ref/examples/irq/irq-hyperscreen.cfg index 0321355a7..06a274ae9 100644 --- a/src/test/ref/examples/irq/irq-hyperscreen.cfg +++ b/src/test/ref/examples/irq/irq-hyperscreen.cfg @@ -12,7 +12,7 @@ main: scope:[main] from @1 [4] *((const nomodify byte*) GHOST_BYTE) ← (byte) 0 asm { sei } - [6] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [7] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [8] *((const nomodify byte*) RASTER) ← (byte) $fa [9] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER diff --git a/src/test/ref/examples/irq/irq-hyperscreen.log b/src/test/ref/examples/irq/irq-hyperscreen.log index f52ff704f..1e9ce47b6 100644 --- a/src/test/ref/examples/irq/irq-hyperscreen.log +++ b/src/test/ref/examples/irq/irq-hyperscreen.log @@ -1,5 +1,8 @@ Resolved forward reference irq_bottom_1 to interrupt(KERNEL_MIN)(void()) irq_bottom_1() Resolved forward reference irq_bottom_2 to interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2() +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -10,7 +13,7 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @1 *((const nomodify byte*) GHOST_BYTE) ← (number) 0 asm { sei } - *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (number) $7f *((const nomodify byte*) RASTER) ← (number) $fa *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -59,13 +62,28 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 -(const nomodify byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) GHOST_BYTE = (byte*)(number) $3fff (const nomodify byte*) IRQ_ENABLE = (byte*)(number) $d01a (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*)(number) $d019 (const nomodify void()**) KERNEL_IRQ = (void()**)(number) $314 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*)(number) $d012 (const nomodify byte) RED = (byte) 2 (const nomodify byte*) VIC_CONTROL = (byte*)(number) $d011 @@ -96,7 +114,7 @@ Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53273 Simplifying constant pointer cast (byte*) 53274 -Simplifying constant pointer cast (byte*) 56333 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 Simplifying constant pointer cast (void()**) 788 Simplifying constant pointer cast (byte*) 16383 Simplifying constant integer cast 0 @@ -143,7 +161,7 @@ FINAL CONTROL FLOW GRAPH main: scope:[main] from @1 [4] *((const nomodify byte*) GHOST_BYTE) ← (byte) 0 asm { sei } - [6] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [7] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [8] *((const nomodify byte*) RASTER) ← (byte) $fa [9] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -182,6 +200,20 @@ irq_bottom_1::@return: scope:[irq_bottom_1] from irq_bottom_1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC interrupt(KERNEL_MIN)(void()) irq_bottom_1() interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2() (void()) main() @@ -208,8 +240,8 @@ Target platform is c64basic / MOS6502X .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts @@ -217,6 +249,7 @@ Target platform is c64basic / MOS6502X .const WHITE = 1 .const RED = 2 .label GHOST_BYTE = $3fff + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -238,10 +271,10 @@ main: { sta GHOST_BYTE // asm { sei } sei - // [6] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [7] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line to $fa lda #$7f @@ -340,7 +373,7 @@ irq_bottom_1: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] *((const nomodify byte*) GHOST_BYTE) ← (byte) 0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [6] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [7] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [8] *((const nomodify byte*) RASTER) ← (byte) $fa [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [9] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:2 [ ] { } ) always clobbers reg byte a @@ -359,11 +392,13 @@ Statement [24] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_KEY Statement [25] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) RED [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplift Scope [irq_bottom_1] Uplift Scope [irq_bottom_2] Uplift Scope [] +Uplifting [MOS6526_CIA] best 175 combination Uplifting [main] best 175 combination Uplifting [irq_bottom_1] best 175 combination Uplifting [irq_bottom_2] best 175 combination @@ -387,8 +422,8 @@ ASSEMBLER BEFORE OPTIMIZATION .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts @@ -396,6 +431,7 @@ ASSEMBLER BEFORE OPTIMIZATION .const WHITE = 1 .const RED = 2 .label GHOST_BYTE = $3fff + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -417,10 +453,10 @@ main: { sta GHOST_BYTE // asm { sei } sei - // [6] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [7] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line to $fa lda #$7f @@ -544,13 +580,28 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) GHOST_BYTE = (byte*) 16383 (const nomodify byte*) IRQ_ENABLE = (byte*) 53274 (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 (const nomodify void()**) KERNEL_IRQ = (void()**) 788 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte) RED = (byte) 2 (const nomodify byte*) VIC_CONTROL = (byte*) 53265 @@ -585,8 +636,8 @@ Score: 154 .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts @@ -594,6 +645,7 @@ Score: 154 .const WHITE = 1 .const RED = 2 .label GHOST_BYTE = $3fff + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 @@ -609,11 +661,11 @@ main: { // asm // asm { sei } sei - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR - // [6] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR + // [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL &=$7f // [7] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line to $fa diff --git a/src/test/ref/examples/irq/irq-hyperscreen.sym b/src/test/ref/examples/irq/irq-hyperscreen.sym index 87e749cf9..74cdbbd23 100644 --- a/src/test/ref/examples/irq/irq-hyperscreen.sym +++ b/src/test/ref/examples/irq/irq-hyperscreen.sym @@ -2,13 +2,28 @@ (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) GHOST_BYTE = (byte*) 16383 (const nomodify byte*) IRQ_ENABLE = (byte*) 53274 (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 (const nomodify void()**) KERNEL_IRQ = (void()**) 788 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte) RED = (byte) 2 (const nomodify byte*) VIC_CONTROL = (byte*) 53265 diff --git a/src/test/ref/examples/kernalload/kernalload.log b/src/test/ref/examples/kernalload/kernalload.log index 57996965d..b75cd0c83 100644 --- a/src/test/ref/examples/kernalload/kernalload.log +++ b/src/test/ref/examples/kernalload/kernalload.log @@ -1,4 +1,6 @@ Loading link script "kernalload.ld" +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$3 ← call toSpritePtr (const nomodify byte*) LOAD_SPRITE @@ -183,6 +185,20 @@ SYMBOL TABLE SSA (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 (const nomodify byte) GREEN = (byte) 5 (const nomodify byte*) LOAD_SPRITE = (byte*)(number) $3000 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*)(number) $400 (const byte*) SPRITE[] = kickasm {{ .var pic = LoadPicture("sprite.png", List().add($000000, $ffffff)) .for (var y=0; y<21; y++) @@ -610,6 +626,20 @@ strlen::@2: scope:[strlen] from strlen::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) error((byte) error::err) (byte) error::err (byte) error::err#0 112.0 @@ -1071,6 +1101,7 @@ Uplift Scope [load] 367.33: zp[1]:11 [ load::return#1 ] 202: zp[1]:9 [ load::ret Uplift Scope [error] 112: zp[1]:8 [ error::err#0 ] Uplift Scope [loadFileToMemory] 37.33: zp[1]:10 [ loadFileToMemory::return#1 ] 22: zp[1]:6 [ loadFileToMemory::return#0 ] Uplift Scope [main] 11: zp[1]:7 [ main::status#0 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [setlfs] Uplift Scope [] @@ -1080,6 +1111,7 @@ Uplifting [load] best 1032 combination reg byte a [ load::return#1 ] reg byte a Uplifting [error] best 1026 combination reg byte a [ error::err#0 ] Uplifting [loadFileToMemory] best 1014 combination reg byte a [ loadFileToMemory::return#1 ] reg byte a [ loadFileToMemory::return#0 ] Uplifting [main] best 1009 combination reg byte x [ main::status#0 ] +Uplifting [MOS6526_CIA] best 1009 combination Uplifting [setlfs] best 1009 combination Uplifting [] best 1009 combination Coalescing zero page register [ zp[2]:4 [ strlen::len#2 strlen::len#1 ] ] with [ zp[2]:12 [ strlen::return#2 ] ] - score: 1 @@ -1462,6 +1494,20 @@ FINAL SYMBOL TABLE (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte) GREEN = (byte) 5 (const nomodify byte*) LOAD_SPRITE = (byte*) 12288 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 1024 (const byte*) SPRITE[] = kickasm {{ .var pic = LoadPicture("sprite.png", List().add($000000, $ffffff)) .for (var y=0; y<21; y++) diff --git a/src/test/ref/examples/kernalload/kernalload.sym b/src/test/ref/examples/kernalload/kernalload.sym index df7238044..314fc658a 100644 --- a/src/test/ref/examples/kernalload/kernalload.sym +++ b/src/test/ref/examples/kernalload/kernalload.sym @@ -4,6 +4,20 @@ (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte) GREEN = (byte) 5 (const nomodify byte*) LOAD_SPRITE = (byte*) 12288 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 1024 (const byte*) SPRITE[] = kickasm {{ .var pic = LoadPicture("sprite.png", List().add($000000, $ffffff)) .for (var y=0; y<21; y++) diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.log b/src/test/ref/examples/multiplexer/simple-multiplexer.log index eb84acc2c..10748e48d 100644 --- a/src/test/ref/examples/multiplexer/simple-multiplexer.log +++ b/src/test/ref/examples/multiplexer/simple-multiplexer.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call plexSetScreen (byte*) plexInit::screen Inlined call call plexFreePrepare @@ -380,6 +382,20 @@ SYMBOL TABLE SSA (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 (const nomodify byte*) D011 = (byte*)(number) $d011 (const nomodify byte) GREEN = (byte) 5 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const nomodify byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -1318,6 +1334,20 @@ plexInit::@return: scope:[plexInit] from plexInit::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte*) PLEX_SCREEN_PTR (void()) init() (byte~) init::$4 2002.0 @@ -2372,6 +2402,7 @@ Uplift Scope [loop] 55,001: zp[1]:19 [ loop::plexFreeNextYpos1_return#0 ] 25,002 Uplift Scope [] 13,261.07: zp[1]:16 [ plex_sprite_msb ] 10,625.17: zp[1]:14 [ plex_show_idx ] 9,111.27: zp[1]:15 [ plex_sprite_idx ] 8,421.24: zp[1]:17 [ plex_free_next ] Uplift Scope [plexInit] 35,003.5: zp[1]:13 [ plexInit::i#2 plexInit::i#1 ] Uplift Scope [init] 3,003: zp[1]:12 [ init::ss#2 init::ss#1 ] 2,302.3: zp[1]:9 [ init::sx#2 init::sx#1 ] 2,002: zp[1]:35 [ init::$4 ] 1,418.08: zp[2]:10 [ init::xp#2 init::xp#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplifting [plexSort] best 82790 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] zp[1]:34 [ plexSort::s#2 ] zp[1]:6 [ plexSort::m#2 plexSort::m#1 ] zp[1]:33 [ plexSort::nxt_y#0 ] zp[1]:32 [ plexSort::nxt_idx#0 ] @@ -2384,6 +2415,7 @@ Uplifting [] best 81580 combination zp[1]:16 [ plex_sprite_msb ] zp[1]:14 [ plex Uplifting [plexInit] best 81460 combination reg byte x [ plexInit::i#2 plexInit::i#1 ] Uplifting [init] best 81210 combination reg byte x [ init::ss#2 init::ss#1 ] reg byte x [ init::sx#2 init::sx#1 ] zp[1]:35 [ init::$4 ] zp[2]:10 [ init::xp#2 init::xp#1 ] Limited combination testing to 10 combinations of 36 possible. +Uplifting [MOS6526_CIA] best 81210 combination Uplifting [main] best 81210 combination Attempting to uplift remaining variables inzp[1]:34 [ plexSort::s#2 ] Uplifting [plexSort] best 80610 combination reg byte x [ plexSort::s#2 ] @@ -3202,6 +3234,20 @@ FINAL SYMBOL TABLE (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte) GREEN = (byte) 5 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const nomodify byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.sym b/src/test/ref/examples/multiplexer/simple-multiplexer.sym index a2674d964..7a83bdedc 100644 --- a/src/test/ref/examples/multiplexer/simple-multiplexer.sym +++ b/src/test/ref/examples/multiplexer/simple-multiplexer.sym @@ -8,6 +8,20 @@ (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte) GREEN = (byte) 5 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const nomodify byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } diff --git a/src/test/ref/examples/music/music.log b/src/test/ref/examples/music/music.log index c2ddabe36..387979453 100644 --- a/src/test/ref/examples/music/music.log +++ b/src/test/ref/examples/music/music.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -41,6 +43,20 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) MUSIC = (byte*)(number) $1000 (const nomodify byte*) RASTER = (byte*)(number) $d012 (void()) main() @@ -110,6 +126,20 @@ main::@2: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) main() Initial phi equivalence classes @@ -187,9 +217,11 @@ Statement [7] if(*((const nomodify byte*) RASTER)!=(byte) $fd) goto main::@1 [ ] Statement asm { jsrmusic.play } always clobbers reg byte a reg byte x reg byte y REGISTER UPLIFT SCOPES +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplift Scope [] +Uplifting [MOS6526_CIA] best 4227 combination Uplifting [main] best 4227 combination Uplifting [] best 4227 combination @@ -285,6 +317,20 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*) 53280 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) MUSIC = (byte*) 4096 (const nomodify byte*) RASTER = (byte*) 53266 (void()) main() diff --git a/src/test/ref/examples/music/music.sym b/src/test/ref/examples/music/music.sym index 043e3b089..11bbd1074 100644 --- a/src/test/ref/examples/music/music.sym +++ b/src/test/ref/examples/music/music.sym @@ -3,6 +3,20 @@ (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*) 53280 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) MUSIC = (byte*) 4096 (const nomodify byte*) RASTER = (byte*) 53266 (void()) main() diff --git a/src/test/ref/examples/music/music_irq.asm b/src/test/ref/examples/music/music_irq.asm index cbf74f918..aa2c1ccb1 100644 --- a/src/test/ref/examples/music/music_irq.asm +++ b/src/test/ref/examples/music/music_irq.asm @@ -11,13 +11,14 @@ .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .label MUSIC = $1000 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // kickasm // Load the SID .const music = LoadSid("toiletrensdyr.sid") @@ -28,10 +29,10 @@ main: { // asm sei jsr music.init - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL &=$7f // Set raster line to $fd lda #$7f diff --git a/src/test/ref/examples/music/music_irq.cfg b/src/test/ref/examples/music/music_irq.cfg index 4aba8ca98..be0f07d37 100644 --- a/src/test/ref/examples/music/music_irq.cfg +++ b/src/test/ref/examples/music/music_irq.cfg @@ -17,7 +17,7 @@ (void()) main() main: scope:[main] from @2 asm { sei jsrmusic.init } - [7] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [8] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [9] *((const nomodify byte*) RASTER) ← (byte) $fd [10] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER diff --git a/src/test/ref/examples/music/music_irq.log b/src/test/ref/examples/music/music_irq.log index ae574b706..6db213a55 100644 --- a/src/test/ref/examples/music/music_irq.log +++ b/src/test/ref/examples/music/music_irq.log @@ -1,4 +1,7 @@ Resolved forward reference irq_play to interrupt(KERNEL_KEYBOARD)(void()) irq_play() +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -14,7 +17,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @2 asm { sei jsrmusic.init } - *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (number) $7f *((const nomodify byte*) RASTER) ← (number) $fd *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -49,13 +52,28 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 -(const nomodify byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) IRQ_ENABLE = (byte*)(number) $d01a (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*)(number) $d019 (const nomodify void()**) KERNEL_IRQ = (void()**)(number) $314 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) MUSIC = (byte*)(number) $1000 +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*)(number) $d012 (const nomodify byte*) VIC_CONTROL = (byte*)(number) $d011 interrupt(KERNEL_KEYBOARD)(void()) irq_play() @@ -73,7 +91,7 @@ Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53273 Simplifying constant pointer cast (byte*) 53274 -Simplifying constant pointer cast (byte*) 56333 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 Simplifying constant pointer cast (void()**) 788 Simplifying constant pointer cast (byte*) 4096 Simplifying constant integer cast $7f @@ -116,7 +134,7 @@ FINAL CONTROL FLOW GRAPH (void()) main() main: scope:[main] from @2 asm { sei jsrmusic.init } - [7] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [8] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [9] *((const nomodify byte*) RASTER) ← (byte) $fd [10] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -140,6 +158,20 @@ irq_play::@return: scope:[irq_play] from irq_play VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC interrupt(KERNEL_KEYBOARD)(void()) irq_play() (void()) main() @@ -164,13 +196,14 @@ Target platform is c64basic / MOS6502X .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .label MUSIC = $1000 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // @begin __bbegin: jmp __b1 @@ -200,10 +233,10 @@ main: { // asm { sei jsrmusic.init } sei jsr music.init - // [7] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [8] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line to $fd lda #$7f @@ -258,7 +291,7 @@ irq_play: { REGISTER UPLIFT POTENTIAL REGISTERS Statement asm { sei jsrmusic.init } always clobbers reg byte a reg byte x reg byte y -Statement [7] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:4 [ ] { } ) always clobbers reg byte a +Statement [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:4 [ ] { } ) always clobbers reg byte a Statement [8] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:4 [ ] { } ) always clobbers reg byte a Statement [9] *((const nomodify byte*) RASTER) ← (byte) $fd [ ] ( main:4 [ ] { } ) always clobbers reg byte a Statement [10] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:4 [ ] { } ) always clobbers reg byte a @@ -267,10 +300,12 @@ Statement asm { jsrmusic.play } always clobbers reg byte a reg byte x reg byte Statement [16] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplift Scope [irq_play] Uplift Scope [] +Uplifting [MOS6526_CIA] best 2947 combination Uplifting [main] best 2947 combination Uplifting [irq_play] best 2947 combination Uplifting [] best 2947 combination @@ -292,13 +327,14 @@ ASSEMBLER BEFORE OPTIMIZATION .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .label MUSIC = $1000 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // @begin __bbegin: jmp __b1 @@ -328,10 +364,10 @@ main: { // asm { sei jsrmusic.init } sei jsr music.init - // [7] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [8] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line to $fd lda #$7f @@ -412,13 +448,28 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) IRQ_ENABLE = (byte*) 53274 (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 (const nomodify void()**) KERNEL_IRQ = (void()**) 788 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) MUSIC = (byte*) 4096 +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte*) VIC_CONTROL = (byte*) 53265 interrupt(KERNEL_KEYBOARD)(void()) irq_play() @@ -447,13 +498,14 @@ Score: 2899 .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .label MUSIC = $1000 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // @begin // @1 // kickasm @@ -475,11 +527,11 @@ main: { // asm { sei jsrmusic.init } sei jsr music.init - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR - // [7] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR + // [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL &=$7f // [8] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line to $fd diff --git a/src/test/ref/examples/music/music_irq.sym b/src/test/ref/examples/music/music_irq.sym index aa878d94f..f106adf04 100644 --- a/src/test/ref/examples/music/music_irq.sym +++ b/src/test/ref/examples/music/music_irq.sym @@ -3,13 +3,28 @@ (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) IRQ_ENABLE = (byte*) 53274 (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 (const nomodify void()**) KERNEL_IRQ = (void()**) 788 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) MUSIC = (byte*) 4096 +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte*) VIC_CONTROL = (byte*) 53265 interrupt(KERNEL_KEYBOARD)(void()) irq_play() diff --git a/src/test/ref/examples/nmisamples/nmisamples.asm b/src/test/ref/examples/nmisamples/nmisamples.asm index cc411d682..60d139506 100644 --- a/src/test/ref/examples/nmisamples/nmisamples.asm +++ b/src/test/ref/examples/nmisamples/nmisamples.asm @@ -5,12 +5,10 @@ :BasicUpstart(__bbegin) .pc = $80d "Program" .label BORDERCOL = $d020 - // CIA #2 Timer A Value (16-bit) - .label CIA2_TIMER_A = $dd04 - // CIA #2 Interrupt Status & Control Register + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 Interrupt for reading in ASM .label CIA2_INTERRUPT = $dd0d - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves NMI interrupts @@ -18,6 +16,9 @@ // The SID volume .label SID_VOLUME = $d418 .const SAMPLE_SIZE = $6100 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A = 4 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e .label sample = 2 __bbegin: // sample = SAMPLE @@ -40,26 +41,26 @@ main: { sta $d40b sta $d412 sei - // *CIA2_INTERRUPT = CIA_INTERRUPT_CLEAR + // CIA2->INTERRUPT = CIA_INTERRUPT_CLEAR lda #CIA_INTERRUPT_CLEAR - sta CIA2_INTERRUPT + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *KERNEL_NMI = &nmi lda #nmi sta KERNEL_NMI+1 - // *CIA2_TIMER_A = 0x88 + // CIA2->TIMER_A = 0x88 lda #0 - sta CIA2_TIMER_A+1 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A+1 lda #<$88 - sta CIA2_TIMER_A - // *CIA2_INTERRUPT = 0x81 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A + // CIA2->INTERRUPT = 0x81 // speed lda #$81 - sta CIA2_INTERRUPT - // *CIA2_TIMER_A_CONTROL = 0x01 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT + // CIA2->TIMER_A_CONTROL = 0x01 lda #1 - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL // asm cli // } diff --git a/src/test/ref/examples/nmisamples/nmisamples.cfg b/src/test/ref/examples/nmisamples/nmisamples.cfg index def5ec85a..7e99d2d8e 100644 --- a/src/test/ref/examples/nmisamples/nmisamples.cfg +++ b/src/test/ref/examples/nmisamples/nmisamples.cfg @@ -15,11 +15,11 @@ main: scope:[main] from @2 asm { lda#$ff sta$d406 sta$d40d sta$d414 lda#$49 sta$d404 sta$d40b sta$d412 } asm { sei } - [7] *((const nomodify byte*) CIA2_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [8] *((const nomodify void()**) KERNEL_NMI) ← &interrupt(HARDWARE_ALL)(void()) nmi() - [9] *((const nomodify word*) CIA2_TIMER_A) ← (byte) $88 - [10] *((const nomodify byte*) CIA2_INTERRUPT) ← (byte) $81 - [11] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 1 + [9] *((word*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A) ← (byte) $88 + [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (byte) $81 + [11] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 1 asm { cli } to:main::@return main::@return: scope:[main] from main diff --git a/src/test/ref/examples/nmisamples/nmisamples.log b/src/test/ref/examples/nmisamples/nmisamples.log index bf5dc59c7..6eb579354 100644 --- a/src/test/ref/examples/nmisamples/nmisamples.log +++ b/src/test/ref/examples/nmisamples/nmisamples.log @@ -1,5 +1,11 @@ Resolved forward reference nmi to interrupt(HARDWARE_ALL)(void()) nmi() Resolved forward reference nmi2 to interrupt(HARDWARE_ALL)(void()) nmi2() +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A with member unwinding reference *((word*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -13,11 +19,11 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @2 asm { lda#$ff sta$d406 sta$d40d sta$d414 lda#$49 sta$d404 sta$d40b sta$d412 } asm { sei } - *((const nomodify byte*) CIA2_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR *((const nomodify void()**) KERNEL_NMI) ← &interrupt(HARDWARE_ALL)(void()) nmi() - *((const nomodify word*) CIA2_TIMER_A) ← (number) $88 - *((const nomodify byte*) CIA2_INTERRUPT) ← (number) $81 - *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (number) 1 + *((word*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A) ← (number) $88 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (number) $81 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (number) 1 asm { cli } to:main::@return main::@return: scope:[main] from main @@ -73,11 +79,27 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const nomodify byte*) CIA2_INTERRUPT = (byte*)(number) $dd0d -(const nomodify word*) CIA2_TIMER_A = (word*)(number) $dd04 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*)(number) $dd0e (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify void()**) KERNEL_NMI = (void()**)(number) $318 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A = (byte) 4 +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte*) SAMPLE[(const nomodify word) SAMPLE_SIZE] = kickasm {{ .import binary "moments_sample.bin" }} (const nomodify word) SAMPLE_SIZE = (word) $6100 (const nomodify byte*) SID_VOLUME = (byte*)(number) $d418 @@ -96,22 +118,21 @@ interrupt(HARDWARE_ALL)(void()) nmi2() (label) nmi2::@return (volatile byte*) sample loadstore -Adding number conversion cast (unumber) $88 in *((const nomodify word*) CIA2_TIMER_A) ← (number) $88 -Adding number conversion cast (unumber) $81 in *((const nomodify byte*) CIA2_INTERRUPT) ← (number) $81 -Adding number conversion cast (unumber) 1 in *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (number) 1 +Adding number conversion cast (unumber) $88 in *((word*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A) ← (number) $88 +Adding number conversion cast (unumber) $81 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (number) $81 +Adding number conversion cast (unumber) 1 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (number) 1 Adding number conversion cast (unumber) $f in (number~) nmi::$1 ← *((volatile byte*) sample) & (number) $f Adding number conversion cast (unumber) nmi::$1 in (number~) nmi::$1 ← *((volatile byte*) sample) & (unumber)(number) $f Adding number conversion cast (unumber) 4 in (byte~) nmi2::$1 ← *((volatile byte*) sample) >> (number) 4 Adding number conversion cast (unumber) $6100 in (bool~) nmi2::$3 ← (byte~) nmi2::$2 == >(const byte*) SAMPLE+(number) $6100 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast *((const nomodify word*) CIA2_TIMER_A) ← (unumber)(number) $88 -Inlining cast *((const nomodify byte*) CIA2_INTERRUPT) ← (unumber)(number) $81 -Inlining cast *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (unumber)(number) 1 +Inlining cast *((word*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A) ← (unumber)(number) $88 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (unumber)(number) $81 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (unumber)(number) 1 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 -Simplifying constant pointer cast (word*) 56580 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (byte*) 56589 -Simplifying constant pointer cast (byte*) 56590 Simplifying constant pointer cast (void()**) 792 Simplifying constant pointer cast (byte*) 54296 Simplifying constant integer cast $88 @@ -165,11 +186,11 @@ FINAL CONTROL FLOW GRAPH main: scope:[main] from @2 asm { lda#$ff sta$d406 sta$d40d sta$d414 lda#$49 sta$d404 sta$d40b sta$d412 } asm { sei } - [7] *((const nomodify byte*) CIA2_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [8] *((const nomodify void()**) KERNEL_NMI) ← &interrupt(HARDWARE_ALL)(void()) nmi() - [9] *((const nomodify word*) CIA2_TIMER_A) ← (byte) $88 - [10] *((const nomodify byte*) CIA2_INTERRUPT) ← (byte) $81 - [11] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 1 + [9] *((word*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A) ← (byte) $88 + [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (byte) $81 + [11] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 1 asm { cli } to:main::@return main::@return: scope:[main] from main @@ -212,6 +233,20 @@ nmi::@return: scope:[nmi] from nmi VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) main() interrupt(HARDWARE_ALL)(void()) nmi() (byte~) nmi::$1 4.0 @@ -247,12 +282,10 @@ Target platform is c64basic / MOS6502X .pc = $80d "Program" // Global Constants & labels .label BORDERCOL = $d020 - // CIA #2 Timer A Value (16-bit) - .label CIA2_TIMER_A = $dd04 - // CIA #2 Interrupt Status & Control Register + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 Interrupt for reading in ASM .label CIA2_INTERRUPT = $dd0d - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves NMI interrupts @@ -260,6 +293,9 @@ Target platform is c64basic / MOS6502X // The SID volume .label SID_VOLUME = $d418 .const SAMPLE_SIZE = $6100 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A = 4 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e .label sample = 2 // @begin __bbegin: @@ -298,26 +334,26 @@ main: { sta $d412 // asm { sei } sei - // [7] *((const nomodify byte*) CIA2_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 lda #CIA_INTERRUPT_CLEAR - sta CIA2_INTERRUPT + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [8] *((const nomodify void()**) KERNEL_NMI) ← &interrupt(HARDWARE_ALL)(void()) nmi() -- _deref_pptc1=pprc2 lda #nmi sta KERNEL_NMI+1 - // [9] *((const nomodify word*) CIA2_TIMER_A) ← (byte) $88 -- _deref_pwuc1=vbuc2 + // [9] *((word*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A) ← (byte) $88 -- _deref_pwuc1=vbuc2 lda #0 - sta CIA2_TIMER_A+1 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A+1 lda #<$88 - sta CIA2_TIMER_A - // [10] *((const nomodify byte*) CIA2_INTERRUPT) ← (byte) $81 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (byte) $81 -- _deref_pbuc1=vbuc2 // speed lda #$81 - sta CIA2_INTERRUPT - // [11] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 1 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT + // [11] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 1 -- _deref_pbuc1=vbuc2 lda #1 - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL // asm { cli } cli jmp __breturn @@ -436,11 +472,11 @@ SAMPLE: REGISTER UPLIFT POTENTIAL REGISTERS Statement [1] (volatile byte*) sample ← (const byte*) SAMPLE [ ] ( [ ] { } ) always clobbers reg byte a Statement asm { lda#$ff sta$d406 sta$d40d sta$d414 lda#$49 sta$d404 sta$d40b sta$d412 } always clobbers reg byte a -Statement [7] *((const nomodify byte*) CIA2_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3 [ ] { } ) always clobbers reg byte a +Statement [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3 [ ] { } ) always clobbers reg byte a Statement [8] *((const nomodify void()**) KERNEL_NMI) ← &interrupt(HARDWARE_ALL)(void()) nmi() [ ] ( main:3 [ ] { } ) always clobbers reg byte a -Statement [9] *((const nomodify word*) CIA2_TIMER_A) ← (byte) $88 [ ] ( main:3 [ ] { } ) always clobbers reg byte a -Statement [10] *((const nomodify byte*) CIA2_INTERRUPT) ← (byte) $81 [ ] ( main:3 [ ] { } ) always clobbers reg byte a -Statement [11] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 1 [ ] ( main:3 [ ] { } ) always clobbers reg byte a +Statement [9] *((word*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A) ← (byte) $88 [ ] ( main:3 [ ] { } ) always clobbers reg byte a +Statement [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (byte) $81 [ ] ( main:3 [ ] { } ) always clobbers reg byte a +Statement [11] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 1 [ ] ( main:3 [ ] { } ) always clobbers reg byte a Statement asm { ldaCIA2_INTERRUPT } always clobbers reg byte a Statement [16] (byte~) nmi2::$1 ← *((volatile byte*) sample) >> (byte) 4 [ sample nmi2::$1 ] ( [ sample nmi2::$1 ] { } ) always clobbers reg byte a reg byte y Statement [21] (volatile byte*) sample ← (const byte*) SAMPLE [ ] ( [ ] { } ) always clobbers reg byte a @@ -459,11 +495,13 @@ REGISTER UPLIFT SCOPES Uplift Scope [nmi2] 4: zp[1]:4 [ nmi2::$1 ] 4: zp[1]:5 [ nmi2::$2 ] Uplift Scope [nmi] 4: zp[1]:6 [ nmi::$1 ] Uplift Scope [] 2: zp[2]:2 [ sample ] +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplifting [nmi2] best 534 combination reg byte a [ nmi2::$1 ] reg byte a [ nmi2::$2 ] Uplifting [nmi] best 528 combination reg byte a [ nmi::$1 ] Uplifting [] best 528 combination zp[2]:2 [ sample ] +Uplifting [MOS6526_CIA] best 528 combination Uplifting [main] best 528 combination ASSEMBLER BEFORE OPTIMIZATION @@ -477,12 +515,10 @@ ASSEMBLER BEFORE OPTIMIZATION .pc = $80d "Program" // Global Constants & labels .label BORDERCOL = $d020 - // CIA #2 Timer A Value (16-bit) - .label CIA2_TIMER_A = $dd04 - // CIA #2 Interrupt Status & Control Register + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 Interrupt for reading in ASM .label CIA2_INTERRUPT = $dd0d - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves NMI interrupts @@ -490,6 +526,9 @@ ASSEMBLER BEFORE OPTIMIZATION // The SID volume .label SID_VOLUME = $d418 .const SAMPLE_SIZE = $6100 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A = 4 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e .label sample = 2 // @begin __bbegin: @@ -528,26 +567,26 @@ main: { sta $d412 // asm { sei } sei - // [7] *((const nomodify byte*) CIA2_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 lda #CIA_INTERRUPT_CLEAR - sta CIA2_INTERRUPT + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [8] *((const nomodify void()**) KERNEL_NMI) ← &interrupt(HARDWARE_ALL)(void()) nmi() -- _deref_pptc1=pprc2 lda #nmi sta KERNEL_NMI+1 - // [9] *((const nomodify word*) CIA2_TIMER_A) ← (byte) $88 -- _deref_pwuc1=vbuc2 + // [9] *((word*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A) ← (byte) $88 -- _deref_pwuc1=vbuc2 lda #0 - sta CIA2_TIMER_A+1 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A+1 lda #<$88 - sta CIA2_TIMER_A - // [10] *((const nomodify byte*) CIA2_INTERRUPT) ← (byte) $81 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (byte) $81 -- _deref_pbuc1=vbuc2 // speed lda #$81 - sta CIA2_INTERRUPT - // [11] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 1 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT + // [11] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 1 -- _deref_pbuc1=vbuc2 lda #1 - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL // asm { cli } cli jmp __breturn @@ -684,11 +723,27 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*) 53280 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte*) CIA2_INTERRUPT = (byte*) 56589 -(const nomodify word*) CIA2_TIMER_A = (word*) 56580 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify void()**) KERNEL_NMI = (void()**) 792 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A = (byte) 4 +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte*) SAMPLE[(const nomodify word) SAMPLE_SIZE] = kickasm {{ .import binary "moments_sample.bin" }} (const nomodify word) SAMPLE_SIZE = (word) $6100 (const nomodify byte*) SID_VOLUME = (byte*) 54296 @@ -724,12 +779,10 @@ Score: 483 .pc = $80d "Program" // Global Constants & labels .label BORDERCOL = $d020 - // CIA #2 Timer A Value (16-bit) - .label CIA2_TIMER_A = $dd04 - // CIA #2 Interrupt Status & Control Register + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 Interrupt for reading in ASM .label CIA2_INTERRUPT = $dd0d - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves NMI interrupts @@ -737,6 +790,9 @@ Score: 483 // The SID volume .label SID_VOLUME = $d418 .const SAMPLE_SIZE = $6100 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A = 4 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e .label sample = 2 // @begin __bbegin: @@ -770,31 +826,31 @@ main: { sta $d412 // asm { sei } sei - // *CIA2_INTERRUPT = CIA_INTERRUPT_CLEAR - // [7] *((const nomodify byte*) CIA2_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // CIA2->INTERRUPT = CIA_INTERRUPT_CLEAR + // [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 lda #CIA_INTERRUPT_CLEAR - sta CIA2_INTERRUPT + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *KERNEL_NMI = &nmi // [8] *((const nomodify void()**) KERNEL_NMI) ← &interrupt(HARDWARE_ALL)(void()) nmi() -- _deref_pptc1=pprc2 lda #nmi sta KERNEL_NMI+1 - // *CIA2_TIMER_A = 0x88 - // [9] *((const nomodify word*) CIA2_TIMER_A) ← (byte) $88 -- _deref_pwuc1=vbuc2 + // CIA2->TIMER_A = 0x88 + // [9] *((word*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A) ← (byte) $88 -- _deref_pwuc1=vbuc2 lda #0 - sta CIA2_TIMER_A+1 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A+1 lda #<$88 - sta CIA2_TIMER_A - // *CIA2_INTERRUPT = 0x81 - // [10] *((const nomodify byte*) CIA2_INTERRUPT) ← (byte) $81 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A + // CIA2->INTERRUPT = 0x81 + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (byte) $81 -- _deref_pbuc1=vbuc2 // speed lda #$81 - sta CIA2_INTERRUPT - // *CIA2_TIMER_A_CONTROL = 0x01 - // [11] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 1 -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT + // CIA2->TIMER_A_CONTROL = 0x01 + // [11] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 1 -- _deref_pbuc1=vbuc2 lda #1 - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL // asm // asm { cli } cli diff --git a/src/test/ref/examples/nmisamples/nmisamples.sym b/src/test/ref/examples/nmisamples/nmisamples.sym index 6c529d48e..0deb91072 100644 --- a/src/test/ref/examples/nmisamples/nmisamples.sym +++ b/src/test/ref/examples/nmisamples/nmisamples.sym @@ -3,11 +3,27 @@ (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*) 53280 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte*) CIA2_INTERRUPT = (byte*) 56589 -(const nomodify word*) CIA2_TIMER_A = (word*) 56580 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify void()**) KERNEL_NMI = (void()**) 792 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A = (byte) 4 +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte*) SAMPLE[(const nomodify word) SAMPLE_SIZE] = kickasm {{ .import binary "moments_sample.bin" }} (const nomodify word) SAMPLE_SIZE = (word) $6100 (const nomodify byte*) SID_VOLUME = (byte*) 54296 diff --git a/src/test/ref/examples/plasma/plasma-unroll.log b/src/test/ref/examples/plasma/plasma-unroll.log index fc4276b14..e9c43cf87 100644 --- a/src/test/ref/examples/plasma/plasma-unroll.log +++ b/src/test/ref/examples/plasma/plasma-unroll.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (const nomodify byte*) SCREEN1 (const nomodify byte*) CHARSET @@ -630,6 +632,20 @@ SYMBOL TABLE SSA (const nomodify byte*) CHARSET = (byte*)(number) $2000 (const nomodify byte*) COLS = (byte*)(number) $d800 (const nomodify byte*) D018 = (byte*)(number) $d018 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -2791,6 +2807,20 @@ sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte) c1A (byte) c1A#1 161.76923076923077 (byte) c1A#3 15.971014492753623 @@ -4274,6 +4304,7 @@ Uplift Scope [sid_rnd] 366,667.33: zp[1]:66 [ sid_rnd::return#0 ] 200,002: zp[1] Uplift Scope [memset] 333,336.67: zp[2]:23 [ memset::dst#2 memset::dst#1 ] Uplift Scope [] 6,015.14: zp[2]:18 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] 177.74: zp[1]:4 [ c1A#1 c1A#3 ] 166.42: zp[1]:5 [ c1B#1 c1B#3 ] 106.62: zp[1]:6 [ c2A#1 c2A#3 ] 103.45: zp[1]:7 [ c2B#1 c2B#3 ] Uplift Scope [main] 303: zp[2]:2 [ main::col#2 main::col#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [RADIX] Uplift Scope [print_char] Uplift Scope [print_cls] @@ -4285,6 +4316,7 @@ Uplifting [sid_rnd] best 159081 combination reg byte a [ sid_rnd::return#0 ] reg Uplifting [memset] best 159081 combination zp[2]:23 [ memset::dst#2 memset::dst#1 ] Uplifting [] best 159081 combination zp[2]:18 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] zp[1]:4 [ c1A#1 c1A#3 ] zp[1]:5 [ c1B#1 c1B#3 ] zp[1]:6 [ c2A#1 c2A#3 ] zp[1]:7 [ c2B#1 c2B#3 ] Uplifting [main] best 159081 combination zp[2]:2 [ main::col#2 main::col#1 ] +Uplifting [MOS6526_CIA] best 159081 combination Uplifting [RADIX] best 159081 combination Uplifting [print_char] best 159081 combination Uplifting [print_cls] best 159081 combination @@ -5407,6 +5439,20 @@ FINAL SYMBOL TABLE (const nomodify byte*) CHARSET = (byte*) 8192 (const nomodify byte*) COLS = (byte*) 55296 (const nomodify byte*) D018 = (byte*) 53272 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/examples/plasma/plasma-unroll.sym b/src/test/ref/examples/plasma/plasma-unroll.sym index 706fec0ed..029874fad 100644 --- a/src/test/ref/examples/plasma/plasma-unroll.sym +++ b/src/test/ref/examples/plasma/plasma-unroll.sym @@ -8,6 +8,20 @@ (const nomodify byte*) CHARSET = (byte*) 8192 (const nomodify byte*) COLS = (byte*) 55296 (const nomodify byte*) D018 = (byte*) 53272 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/examples/plasma/plasma.log b/src/test/ref/examples/plasma/plasma.log index f25ba2c66..1bdd4efdd 100644 --- a/src/test/ref/examples/plasma/plasma.log +++ b/src/test/ref/examples/plasma/plasma.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$3 ← call toD018 (const nomodify byte*) SCREEN1 (const nomodify byte*) CHARSET Inlined call (byte~) main::$5 ← call toD018 (const nomodify byte*) SCREEN2 (const nomodify byte*) CHARSET @@ -677,6 +679,20 @@ SYMBOL TABLE SSA (const nomodify byte*) CHARSET = (byte*)(number) $2000 (const nomodify byte*) COLS = (byte*)(number) $d800 (const nomodify byte*) D018 = (byte*)(number) $d018 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -2133,6 +2149,20 @@ sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte) c1A (byte) c1A#10 220.39999999999998 (byte) c1A#14 101.0 @@ -3182,6 +3212,7 @@ Uplift Scope [sid_rnd] 366,667.33: zp[1]:42 [ sid_rnd::return#0 ] 200,002: zp[1] Uplift Scope [memset] 333,336.67: zp[2]:25 [ memset::dst#2 memset::dst#1 ] Uplift Scope [] 6,015.14: zp[2]:20 [ print_char_cursor#18 print_char_cursor#29 print_char_cursor#1 ] 362.88: zp[1]:4 [ c1A#10 c1A#14 c1A#4 ] 344.33: zp[1]:5 [ c1B#10 c1B#14 c1B#4 ] 272.79: zp[1]:6 [ c2A#24 c2A#14 c2A#4 ] 271.95: zp[1]:7 [ c2B#24 c2B#14 c2B#4 ] Uplift Scope [main] 303: zp[2]:2 [ main::col#2 main::col#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [RADIX] Uplift Scope [print_char] Uplift Scope [print_cls] @@ -3195,6 +3226,7 @@ Uplifting [sid_rnd] best 126054 combination reg byte a [ sid_rnd::return#0 ] reg Uplifting [memset] best 126054 combination zp[2]:25 [ memset::dst#2 memset::dst#1 ] Uplifting [] best 126054 combination zp[2]:20 [ print_char_cursor#18 print_char_cursor#29 print_char_cursor#1 ] zp[1]:4 [ c1A#10 c1A#14 c1A#4 ] zp[1]:5 [ c1B#10 c1B#14 c1B#4 ] zp[1]:6 [ c2A#24 c2A#14 c2A#4 ] zp[1]:7 [ c2B#24 c2B#14 c2B#4 ] Uplifting [main] best 126054 combination zp[2]:2 [ main::col#2 main::col#1 ] +Uplifting [MOS6526_CIA] best 126054 combination Uplifting [RADIX] best 126054 combination Uplifting [print_char] best 126054 combination Uplifting [print_cls] best 126054 combination @@ -4069,6 +4101,20 @@ FINAL SYMBOL TABLE (const nomodify byte*) CHARSET = (byte*) 8192 (const nomodify byte*) COLS = (byte*) 55296 (const nomodify byte*) D018 = (byte*) 53272 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/examples/plasma/plasma.sym b/src/test/ref/examples/plasma/plasma.sym index 1ddb05b72..11289a0c5 100644 --- a/src/test/ref/examples/plasma/plasma.sym +++ b/src/test/ref/examples/plasma/plasma.sym @@ -8,6 +8,20 @@ (const nomodify byte*) CHARSET = (byte*) 8192 (const nomodify byte*) COLS = (byte*) 55296 (const nomodify byte*) D018 = (byte*) 53272 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/examples/rasterbars/raster-bars.log b/src/test/ref/examples/rasterbars/raster-bars.log index 885221c48..8a241b094 100644 --- a/src/test/ref/examples/rasterbars/raster-bars.log +++ b/src/test/ref/examples/rasterbars/raster-bars.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -60,6 +62,20 @@ SYMBOL TABLE SSA (label) @end (const nomodify byte*) BGCOL = (byte*)(number) $d021 (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) RASTER = (byte*)(number) $d012 (void()) main() (bool~) main::$0 @@ -184,6 +200,20 @@ raster::@return: scope:[raster] from raster::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) main() (void()) raster() (byte) raster::col @@ -352,10 +382,12 @@ Potential registers zp[1]:3 [ raster::i#2 raster::i#1 ] : zp[1]:3 , reg byte a , REGISTER UPLIFT SCOPES Uplift Scope [raster] 252,505: zp[1]:2 [ raster::col#2 raster::col#0 raster::col#1 ] 141,668.08: zp[1]:3 [ raster::i#2 raster::i#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplift Scope [] Uplifting [raster] best 9585 combination reg byte a [ raster::col#2 raster::col#0 raster::col#1 ] reg byte x [ raster::i#2 raster::i#1 ] +Uplifting [MOS6526_CIA] best 9585 combination Uplifting [main] best 9585 combination Uplifting [] best 9585 combination @@ -525,6 +557,20 @@ FINAL SYMBOL TABLE (label) @end (const nomodify byte*) BGCOL = (byte*) 53281 (const nomodify byte*) BORDERCOL = (byte*) 53280 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) RASTER = (byte*) 53266 (void()) main() (label) main::@1 diff --git a/src/test/ref/examples/rasterbars/raster-bars.sym b/src/test/ref/examples/rasterbars/raster-bars.sym index 2653ed98a..14b0d13e6 100644 --- a/src/test/ref/examples/rasterbars/raster-bars.sym +++ b/src/test/ref/examples/rasterbars/raster-bars.sym @@ -3,6 +3,20 @@ (label) @end (const nomodify byte*) BGCOL = (byte*) 53281 (const nomodify byte*) BORDERCOL = (byte*) 53280 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) RASTER = (byte*) 53266 (void()) main() (label) main::@1 diff --git a/src/test/ref/examples/rotate/rotate.asm b/src/test/ref/examples/rotate/rotate.asm index 7760251d0..5b6c9f0d1 100644 --- a/src/test/ref/examples/rotate/rotate.asm +++ b/src/test/ref/examples/rotate/rotate.asm @@ -9,12 +9,8 @@ .label SPRITES_ENABLE = $d015 .label BORDERCOL = $d020 .label SPRITES_COLS = $d027 - // CIA #2 Timer A+B Value (32-bit) - .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -24,6 +20,10 @@ // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 + // CIA#2 timer A&B as one single 32-bit value + .label CIA2_TIMER_AB = $dd04 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f .label SCREEN = $400 .label COS = SIN+$40 // A single sprite @@ -422,13 +422,13 @@ mulf8u_prepare: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // *CIA2_TIMER_AB = 0xffffffff lda #<$ffffffff sta CIA2_TIMER_AB @@ -438,12 +438,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL // } rts } diff --git a/src/test/ref/examples/rotate/rotate.cfg b/src/test/ref/examples/rotate/rotate.cfg index 9e0f53703..b93964a6a 100644 --- a/src/test/ref/examples/rotate/rotate.cfg +++ b/src/test/ref/examples/rotate/rotate.cfg @@ -239,11 +239,11 @@ mulf8u_prepare::@return: scope:[mulf8u_prepare] from mulf8u_prepare (void()) clock_start() clock_start: scope:[clock_start] from anim::@3 - [115] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 - [116] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [115] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 + [116] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [117] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff - [118] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - [119] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START + [118] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [119] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start [120] return diff --git a/src/test/ref/examples/rotate/rotate.log b/src/test/ref/examples/rotate/rotate.log index e09926c09..283145aff 100644 --- a/src/test/ref/examples/rotate/rotate.log +++ b/src/test/ref/examples/rotate/rotate.log @@ -1,4 +1,10 @@ Resolved forward reference SPRITE to (byte*) SPRITE +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call mulf8s_prepare (signed byte) mulf8s::a Inlined call call mulf8s_prepare (signed byte) anim::cos_a @@ -196,11 +202,11 @@ clock::@return: scope:[clock] from clock (void()) clock_start() clock_start: scope:[clock_start] from anim::@3 - *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES - *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A *((const nomodify dword*) CIA2_TIMER_AB) ← (number) $ffffffff - *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start return @@ -579,9 +585,8 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const nomodify dword*) CIA2_TIMER_AB = (dword*)(number) $dd04 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*)(number) $dd0e -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*)(number) $dd0f (const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES = (byte) 0 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS = (byte) 0 @@ -591,6 +596,22 @@ SYMBOL TABLE SSA (const byte*) COS = (const byte*) SIN+(number) $40 (const nomodify byte) GREEN = (byte) 5 (const nomodify byte) LIGHT_BLUE = (byte) $e +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1113,13 +1134,12 @@ Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 53269 Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53287 -Simplifying constant pointer cast (dword*) 56580 -Simplifying constant pointer cast (byte*) 56590 -Simplifying constant pointer cast (byte*) 56591 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (byte*) 253 Simplifying constant pointer cast (byte*) 254 Simplifying constant pointer cast (byte*) 255 Simplifying constant pointer cast (signed byte*) 253 +Simplifying constant pointer cast (dword*) 56580 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $40 Simplifying constant pointer cast (byte*) 12288 @@ -1349,14 +1369,14 @@ Resolved ranged next value [120] init::i#1 ← ++ init::i#2 to ++ Resolved ranged comparison value [122] if(init::i#1!=rangelast(0,7)) goto init::@1 to (number) 8 Resolved ranged next value [181] anim::i#1 ← ++ anim::i#10 to ++ Resolved ranged comparison value [183] if(anim::i#1!=rangelast(0,7)) goto anim::@4 to (number) 8 -Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES in [73] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES -Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS in [74] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES in [73] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES +Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS in [74] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A in [74] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (byte) 0|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -Simplifying expression containing zero CIA_TIMER_CONTROL_START in [76] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -Simplifying expression containing zero CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS in [77] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES +Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A in [74] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (byte) 0|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying expression containing zero CIA_TIMER_CONTROL_START in [76] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying expression containing zero CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS in [77] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES Successful SSA optimization PassNSimplifyExpressionWithZero -Simplifying expression containing zero CIA_TIMER_CONTROL_START in [77] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS +Simplifying expression containing zero CIA_TIMER_CONTROL_START in [77] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const nomodify byte) CIA_TIMER_CONTROL_STOP Eliminating unused constant (const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS @@ -1793,11 +1813,11 @@ mulf8u_prepare::@return: scope:[mulf8u_prepare] from mulf8u_prepare (void()) clock_start() clock_start: scope:[clock_start] from anim::@3 - [115] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 - [116] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [115] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 + [116] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [117] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff - [118] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - [119] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START + [118] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [119] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start [120] return @@ -1885,6 +1905,20 @@ mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) anim() (signed word~) anim::$10 20002.0 (signed word~) anim::$11 20002.0 @@ -2229,12 +2263,8 @@ Target platform is c64basic / MOS6502X .label SPRITES_ENABLE = $d015 .label BORDERCOL = $d020 .label SPRITES_COLS = $d027 - // CIA #2 Timer A+B Value (32-bit) - .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -2244,6 +2274,10 @@ Target platform is c64basic / MOS6502X // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 + // CIA#2 timer A&B as one single 32-bit value + .label CIA2_TIMER_AB = $dd04 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f .label SCREEN = $400 .label COS = SIN+$40 // A single sprite @@ -2976,13 +3010,13 @@ mulf8u_prepare: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // [115] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [115] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // [116] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // [116] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // [117] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB @@ -2992,12 +3026,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // [118] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // [118] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // [119] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // [119] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL jmp __breturn // clock_start::@return __breturn: @@ -3366,11 +3400,11 @@ Removing always clobbered register reg byte x as potential for zp[1]:35 [ anim:: Removing always clobbered register reg byte x as potential for zp[1]:15 [ mulf8s_prepared::b#4 mulf8s_prepared::b#1 mulf8s_prepared::b#3 mulf8s_prepared::b#0 mulf8s_prepared::b#2 ] Statement [109] (word) mulf8u_prepared::return#0 ← *((const nomodify byte*) mulf8u_prepared::memB) w= *((const nomodify byte*) mulf8u_prepared::resL) [ mulf8u_prepared::return#0 ] ( main:2::anim:7::mulf8s_prepared:20::mulf8u_prepared:93 [ anim::angle#9 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] { { mulf8s_prepared::b#0 = mulf8s_prepared::b#4 anim::x#0 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:2::anim:7::mulf8s_prepared:24::mulf8u_prepared:93 [ anim::angle#9 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] { { mulf8s_prepared::b#1 = mulf8s_prepared::b#4 anim::y#0 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:2::anim:7::mulf8s_prepared:30::mulf8u_prepared:93 [ anim::angle#9 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] { { mulf8s_prepared::b#2 = mulf8s_prepared::b#4 anim::y#0 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:2::anim:7::mulf8s_prepared:35::mulf8u_prepared:93 [ anim::angle#9 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] { { mulf8s_prepared::b#3 = mulf8s_prepared::b#4 anim::x#0 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } ) always clobbers reg byte a Statement asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } always clobbers reg byte a -Statement [115] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a -Statement [116] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a +Statement [115] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a +Statement [116] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a Statement [117] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a -Statement [118] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a -Statement [119] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a +Statement [118] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a +Statement [119] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a Statement [123] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff [ ] ( main:2::init:5 [ ] { } ) always clobbers reg byte a Statement [125] *((const byte*) init::sprites_ptr#0 + (byte) init::i#2) ← (byte)(const byte*) SPRITE/(byte) $40 [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:19 [ init::i#2 init::i#1 ] @@ -3440,11 +3474,11 @@ Statement [103] (byte~) mulf8s_prepared::$12 ← (byte~) mulf8s_prepared::$9 - ( Statement asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } always clobbers reg byte a reg byte x Statement [109] (word) mulf8u_prepared::return#0 ← *((const nomodify byte*) mulf8u_prepared::memB) w= *((const nomodify byte*) mulf8u_prepared::resL) [ mulf8u_prepared::return#0 ] ( main:2::anim:7::mulf8s_prepared:20::mulf8u_prepared:93 [ anim::angle#9 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] { { mulf8s_prepared::b#0 = mulf8s_prepared::b#4 anim::x#0 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:2::anim:7::mulf8s_prepared:24::mulf8u_prepared:93 [ anim::angle#9 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] { { mulf8s_prepared::b#1 = mulf8s_prepared::b#4 anim::y#0 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:2::anim:7::mulf8s_prepared:30::mulf8u_prepared:93 [ anim::angle#9 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] { { mulf8s_prepared::b#2 = mulf8s_prepared::b#4 anim::y#0 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:2::anim:7::mulf8s_prepared:35::mulf8u_prepared:93 [ anim::angle#9 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] { { mulf8s_prepared::b#3 = mulf8s_prepared::b#4 anim::x#0 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } ) always clobbers reg byte a Statement asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } always clobbers reg byte a -Statement [115] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a -Statement [116] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a +Statement [115] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a +Statement [116] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a Statement [117] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a -Statement [118] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a -Statement [119] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a +Statement [118] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a +Statement [119] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a Statement [123] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff [ ] ( main:2::init:5 [ ] { } ) always clobbers reg byte a Statement [125] *((const byte*) init::sprites_ptr#0 + (byte) init::i#2) ← (byte)(const byte*) SPRITE/(byte) $40 [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] { } ) always clobbers reg byte a Statement [126] *((const nomodify byte*) SPRITES_COLS + (byte) init::i#2) ← (const nomodify byte) GREEN [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] { } ) always clobbers reg byte a @@ -3503,11 +3537,11 @@ Statement [103] (byte~) mulf8s_prepared::$12 ← (byte~) mulf8s_prepared::$9 - ( Statement asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } always clobbers reg byte a reg byte x Statement [109] (word) mulf8u_prepared::return#0 ← *((const nomodify byte*) mulf8u_prepared::memB) w= *((const nomodify byte*) mulf8u_prepared::resL) [ mulf8u_prepared::return#0 ] ( main:2::anim:7::mulf8s_prepared:20::mulf8u_prepared:93 [ anim::angle#9 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] { { mulf8s_prepared::b#0 = mulf8s_prepared::b#4 anim::x#0 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:2::anim:7::mulf8s_prepared:24::mulf8u_prepared:93 [ anim::angle#9 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::y#0 anim::xr#0 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] { { mulf8s_prepared::b#1 = mulf8s_prepared::b#4 anim::y#0 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:2::anim:7::mulf8s_prepared:30::mulf8u_prepared:93 [ anim::angle#9 anim::i#10 anim::sprite_msb#10 anim::x#0 anim::xr#0 anim::yr#0 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] { { mulf8s_prepared::b#2 = mulf8s_prepared::b#4 anim::y#0 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } main:2::anim:7::mulf8s_prepared:35::mulf8u_prepared:93 [ anim::angle#9 anim::i#10 anim::sprite_msb#10 anim::yr#0 anim::xr#1 mulf8s_prepared::b#4 mulf8u_prepared::return#0 ] { { mulf8s_prepared::b#3 = mulf8s_prepared::b#4 anim::x#0 } { mulf8u_prepared::return#0 = mulf8u_prepared::return#2 } } ) always clobbers reg byte a Statement asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } always clobbers reg byte a -Statement [115] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a -Statement [116] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a +Statement [115] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a +Statement [116] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a Statement [117] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a -Statement [118] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a -Statement [119] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a +Statement [118] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a +Statement [119] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::anim:7::clock_start:13 [ anim::angle#9 ] { } ) always clobbers reg byte a Statement [123] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff [ ] ( main:2::init:5 [ ] { } ) always clobbers reg byte a Statement [125] *((const byte*) init::sprites_ptr#0 + (byte) init::i#2) ← (byte)(const byte*) SPRITE/(byte) $40 [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] { } ) always clobbers reg byte a Statement [126] *((const nomodify byte*) SPRITES_COLS + (byte) init::i#2) ← (const nomodify byte) GREEN [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] { } ) always clobbers reg byte a @@ -3593,6 +3627,7 @@ Uplift Scope [print_uint_at] 95,005: zp[2]:5 [ print_uint_at::w#2 print_uint_at: Uplift Scope [print_ulong_at] 7,001: zp[4]:76 [ print_ulong_at::dw#0 ] Uplift Scope [clock] 3,667.33: zp[4]:82 [ clock::return#0 ] 2,002: zp[4]:64 [ clock::return#2 ] Uplift Scope [init] 2,836.17: zp[1]:19 [ init::i#2 init::i#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [clock_start] Uplift Scope [RADIX] Uplift Scope [main] @@ -3612,6 +3647,7 @@ Uplifting [print_uint_at] best 44325 combination zp[2]:5 [ print_uint_at::w#2 pr Uplifting [print_ulong_at] best 44325 combination zp[4]:76 [ print_ulong_at::dw#0 ] Uplifting [clock] best 44325 combination zp[4]:82 [ clock::return#0 ] zp[4]:64 [ clock::return#2 ] Uplifting [init] best 44175 combination reg byte x [ init::i#2 init::i#1 ] +Uplifting [MOS6526_CIA] best 44175 combination Uplifting [clock_start] best 44175 combination Uplifting [RADIX] best 44175 combination Uplifting [main] best 44175 combination @@ -3694,12 +3730,8 @@ ASSEMBLER BEFORE OPTIMIZATION .label SPRITES_ENABLE = $d015 .label BORDERCOL = $d020 .label SPRITES_COLS = $d027 - // CIA #2 Timer A+B Value (32-bit) - .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -3709,6 +3741,10 @@ ASSEMBLER BEFORE OPTIMIZATION // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 + // CIA#2 timer A&B as one single 32-bit value + .label CIA2_TIMER_AB = $dd04 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f .label SCREEN = $400 .label COS = SIN+$40 // A single sprite @@ -4331,13 +4367,13 @@ mulf8u_prepare: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // [115] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [115] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // [116] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // [116] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // [117] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB @@ -4347,12 +4383,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // [118] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // [118] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // [119] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // [119] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL jmp __breturn // clock_start::@return __breturn: @@ -4804,15 +4840,30 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*) 53280 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify dword*) CIA2_TIMER_AB = (dword*) 56580 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_START = (byte) 1 (const nomodify dword) CLOCKS_PER_INIT = (dword) $12 (const byte*) COS = (const byte*) SIN+(byte) $40 (const nomodify byte) GREEN = (byte) 5 (const nomodify byte) LIGHT_BLUE = (byte) $e +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -5093,12 +5144,8 @@ Score: 30994 .label SPRITES_ENABLE = $d015 .label BORDERCOL = $d020 .label SPRITES_COLS = $d027 - // CIA #2 Timer A+B Value (32-bit) - .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -5108,6 +5155,10 @@ Score: 30994 // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 + // CIA#2 timer A&B as one single 32-bit value + .label CIA2_TIMER_AB = $dd04 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f .label SCREEN = $400 .label COS = SIN+$40 // A single sprite @@ -5706,15 +5757,15 @@ mulf8u_prepare: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES - // [115] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // [115] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - // [116] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // [116] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // *CIA2_TIMER_AB = 0xffffffff // [117] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff @@ -5725,14 +5776,14 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - // [118] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // [118] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES - // [119] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // [119] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL // clock_start::@return // } // [120] return diff --git a/src/test/ref/examples/rotate/rotate.sym b/src/test/ref/examples/rotate/rotate.sym index 2361f9023..469a78d31 100644 --- a/src/test/ref/examples/rotate/rotate.sym +++ b/src/test/ref/examples/rotate/rotate.sym @@ -2,15 +2,30 @@ (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*) 53280 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify dword*) CIA2_TIMER_AB = (dword*) 56580 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_START = (byte) 1 (const nomodify dword) CLOCKS_PER_INIT = (dword) $12 (const byte*) COS = (const byte*) SIN+(byte) $40 (const nomodify byte) GREEN = (byte) 5 (const nomodify byte) LIGHT_BLUE = (byte) $e +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/examples/scrolllogo/scrolllogo.log b/src/test/ref/examples/scrolllogo/scrolllogo.log index 0ae944f32..09352ff33 100644 --- a/src/test/ref/examples/scrolllogo/scrolllogo.log +++ b/src/test/ref/examples/scrolllogo/scrolllogo.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$0 ← call toD018 (const byte*) SCREEN (const byte*) LOGO @@ -849,6 +851,20 @@ SYMBOL TABLE SSA (const nomodify byte*) D018 = (byte*)(number) $d018 (const nomodify byte) DARK_GREY = (byte) $b (const byte*) LOGO = (byte*)(number) $2000 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 (const nomodify dword) PI_u4f28 = (dword) $3243f6a9 @@ -3542,6 +3558,20 @@ memset::@3: scope:[memset] from memset::@2 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) (dword) div32u16u::dividend (word) div32u16u::divisor @@ -6054,6 +6084,7 @@ Uplift Scope [] 2,377.38: zp[2]:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] 2,200.4 Uplift Scope [memset] 3,572.33: zp[2]:55 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 183.67: zp[2]:179 [ memset::end#0 ] 143: zp[1]:54 [ memset::c#4 ] 0: zp[2]:52 [ memset::str#3 ] Uplift Scope [div32u16u] 2,002: zp[2]:169 [ div32u16u::quotient_lo#0 ] 400.4: zp[2]:165 [ div32u16u::quotient_hi#0 ] 367.33: zp[4]:171 [ div32u16u::return#0 ] 202: zp[4]:82 [ div32u16u::return#2 ] Uplift Scope [main] 353.5: zp[1]:2 [ main::ch#2 main::ch#1 ] +Uplift Scope [MOS6526_CIA] Uplifting [mul16u] best 75504 combination zp[4]:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp[2]:21 [ mul16u::b#2 mul16u::b#1 ] zp[4]:149 [ mul16u::return#3 ] zp[4]:104 [ mul16u::return#2 ] Uplifting [divr16u] best 75294 combination zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:163 [ divr16u::return#2 ] zp[2]:167 [ divr16u::return#3 ] @@ -6066,6 +6097,7 @@ Uplifting [] best 75269 combination zp[2]:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 Uplifting [memset] best 75253 combination zp[2]:55 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:179 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:52 [ memset::str#3 ] Uplifting [div32u16u] best 75253 combination zp[2]:169 [ div32u16u::quotient_lo#0 ] zp[2]:165 [ div32u16u::quotient_hi#0 ] zp[4]:171 [ div32u16u::return#0 ] zp[4]:82 [ div32u16u::return#2 ] Uplifting [main] best 75133 combination reg byte x [ main::ch#2 main::ch#1 ] +Uplifting [MOS6526_CIA] best 75133 combination Attempting to uplift remaining variables inzp[1]:5 [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ] Uplifting [render_logo] best 70033 combination reg byte y [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ] Attempting to uplift remaining variables inzp[1]:8 [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] @@ -7888,6 +7920,20 @@ FINAL SYMBOL TABLE (const nomodify byte*) D018 = (byte*) 53272 (const nomodify byte) DARK_GREY = (byte) $b (const byte*) LOGO = (byte*) 8192 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 (const nomodify dword) PI_u4f28 = (dword) $3243f6a9 diff --git a/src/test/ref/examples/scrolllogo/scrolllogo.sym b/src/test/ref/examples/scrolllogo/scrolllogo.sym index ed303eb02..6d0996cb7 100644 --- a/src/test/ref/examples/scrolllogo/scrolllogo.sym +++ b/src/test/ref/examples/scrolllogo/scrolllogo.sym @@ -12,6 +12,20 @@ (const nomodify byte*) D018 = (byte*) 53272 (const nomodify byte) DARK_GREY = (byte) $b (const byte*) LOGO = (byte*) 8192 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 (const nomodify dword) PI_u4f28 = (dword) $3243f6a9 diff --git a/src/test/ref/examples/showlogo/showlogo.log b/src/test/ref/examples/showlogo/showlogo.log index 62bf35a5d..7225377ff 100644 --- a/src/test/ref/examples/showlogo/showlogo.log +++ b/src/test/ref/examples/showlogo/showlogo.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$0 ← call toD018 (const byte*) SCREEN (const byte*) LOGO @@ -145,6 +147,20 @@ SYMBOL TABLE SSA (const nomodify byte*) D018 = (byte*)(number) $d018 (const nomodify byte) DARK_GREY = (byte) $b (const byte*) LOGO = (byte*)(number) $2000 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte*) SCREEN = (byte*)(number) $400 (const nomodify byte) VIC_CSEL = (byte) 8 (const nomodify byte) VIC_MCM = (byte) $10 @@ -507,6 +523,20 @@ memset::@3: scope:[memset] from memset::@2 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) main() (byte) main::ch (byte) main::ch#1 151.5 @@ -799,10 +829,12 @@ Potential registers zp[2]:10 [ memset::end#0 ] : zp[2]:10 , REGISTER UPLIFT SCOPES Uplift Scope [memset] 3,572.33: zp[2]:8 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 183.67: zp[2]:10 [ memset::end#0 ] 125.12: zp[1]:7 [ memset::c#4 ] 101: zp[2]:3 [ memset::num#2 ] 0: zp[2]:5 [ memset::str#3 ] Uplift Scope [main] 353.5: zp[1]:2 [ main::ch#2 main::ch#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [] Uplifting [memset] best 6284 combination zp[2]:8 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:10 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:3 [ memset::num#2 ] zp[2]:5 [ memset::str#3 ] Uplifting [main] best 6164 combination reg byte x [ main::ch#2 main::ch#1 ] +Uplifting [MOS6526_CIA] best 6164 combination Uplifting [] best 6164 combination Coalescing zero page register [ zp[2]:3 [ memset::num#2 ] ] with [ zp[2]:10 [ memset::end#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:5 [ memset::str#3 ] ] with [ zp[2]:8 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 @@ -1070,6 +1102,20 @@ FINAL SYMBOL TABLE (const nomodify byte*) D018 = (byte*) 53272 (const nomodify byte) DARK_GREY = (byte) $b (const byte*) LOGO = (byte*) 8192 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_CSEL = (byte) 8 (const nomodify byte) VIC_MCM = (byte) $10 diff --git a/src/test/ref/examples/showlogo/showlogo.sym b/src/test/ref/examples/showlogo/showlogo.sym index df4644085..d97f268f4 100644 --- a/src/test/ref/examples/showlogo/showlogo.sym +++ b/src/test/ref/examples/showlogo/showlogo.sym @@ -12,6 +12,20 @@ (const nomodify byte*) D018 = (byte*) 53272 (const nomodify byte) DARK_GREY = (byte) $b (const byte*) LOGO = (byte*) 8192 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_CSEL = (byte) 8 (const nomodify byte) VIC_MCM = (byte) $10 diff --git a/src/test/ref/examples/sinplotter/sine-plotter.asm b/src/test/ref/examples/sinplotter/sine-plotter.asm index eb6acdf09..eb353895d 100644 --- a/src/test/ref/examples/sinplotter/sine-plotter.asm +++ b/src/test/ref/examples/sinplotter/sine-plotter.asm @@ -18,10 +18,8 @@ .label D016 = $d016 .const VIC_CSEL = 8 .label D018 = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .const WHITE = 1 // PI*2 in u[4.28] format .const PI2_u4f28 = $6487ed51 @@ -31,6 +29,7 @@ .const PI_HALF_u4f28 = $1921fb54 .const SIN_SIZE = $200 .const SIZEOF_SIGNED_WORD = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 .label SCREEN = $400 .label BITMAP = $2000 // Remainder after unsigned 16-bit division @@ -51,12 +50,12 @@ main: { // *D011 = VIC_BMM|VIC_DEN|VIC_RSEL|3 lda #VIC_BMM|VIC_DEN|VIC_RSEL|3 sta D011 - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = toDd00(gfx) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = toDd00(gfx) lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // *D016 = VIC_CSEL lda #VIC_CSEL sta D016 diff --git a/src/test/ref/examples/sinplotter/sine-plotter.cfg b/src/test/ref/examples/sinplotter/sine-plotter.cfg index d6150bce8..05bb9b3a2 100644 --- a/src/test/ref/examples/sinplotter/sine-plotter.cfg +++ b/src/test/ref/examples/sinplotter/sine-plotter.cfg @@ -16,13 +16,13 @@ main: scope:[main] from @1 [7] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main - [8] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [8] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 [9] phi() to:main::vicSelectGfxBank1_@1 main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001 - [10] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 + [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 to:main::@2 main::@2: scope:[main] from main::vicSelectGfxBank1_@1 [11] *((const nomodify byte*) D016) ← (const nomodify byte) VIC_CSEL diff --git a/src/test/ref/examples/sinplotter/sine-plotter.log b/src/test/ref/examples/sinplotter/sine-plotter.log index 36a5f5399..f39a8a381 100644 --- a/src/test/ref/examples/sinplotter/sine-plotter.log +++ b/src/test/ref/examples/sinplotter/sine-plotter.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call vicSelectGfxBank (const byte*) SCREEN Inlined call (byte~) main::$1 ← call toD018 (const byte*) SCREEN (const byte*) BITMAP @@ -674,7 +676,7 @@ main::vicSelectGfxBank1: scope:[main] from main (byte*) bitmap_screen#31 ← phi( main/(byte*) bitmap_screen#32 ) (byte*) bitmap_gfx#32 ← phi( main/(byte*) bitmap_gfx#33 ) (byte*) main::vicSelectGfxBank1_gfx#1 ← phi( main/(byte*) main::vicSelectGfxBank1_gfx#0 ) - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 (byte*) main::vicSelectGfxBank1_toDd001_gfx#0 ← (byte*) main::vicSelectGfxBank1_gfx#1 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 @@ -700,7 +702,7 @@ main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001_@ (byte*) bitmap_gfx#29 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte*) bitmap_gfx#30 ) (byte) main::vicSelectGfxBank1_toDd001_return#3 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte) main::vicSelectGfxBank1_toDd001_return#1 ) (byte~) main::vicSelectGfxBank1_$0 ← (byte) main::vicSelectGfxBank1_toDd001_return#3 - *((const nomodify byte*) CIA2_PORT_A) ← (byte~) main::vicSelectGfxBank1_$0 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte~) main::vicSelectGfxBank1_$0 to:main::@3 main::@3: scope:[main] from main::vicSelectGfxBank1_@1 (word) rem16u#36 ← phi( main::vicSelectGfxBank1_@1/(word) rem16u#37 ) @@ -928,11 +930,26 @@ SYMBOL TABLE SSA (const nomodify byte*) BGCOL = (byte*)(number) $d021 (const byte*) BITMAP = (byte*)(number) $2000 (const nomodify byte) BLACK = (byte) 0 -(const nomodify byte*) CIA2_PORT_A = (byte*)(number) $dd00 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const nomodify byte*) D011 = (byte*)(number) $d011 (const nomodify byte*) D016 = (byte*)(number) $d016 (const nomodify byte*) D018 = (byte*)(number) $d018 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 (const nomodify dword) PI_u4f28 = (dword) $3243f6a9 @@ -1786,7 +1803,7 @@ Adding number conversion cast (unumber) $fff8 in (number~) bitmap_plot::$0 ← ( Adding number conversion cast (unumber) bitmap_plot::$0 in (number~) bitmap_plot::$0 ← (word) bitmap_plot::x#2 & (unumber)(number) $fff8 Adding number conversion cast (unumber) VIC_BMM|VIC_DEN|VIC_RSEL|3 in *((const nomodify byte*) D011) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) 3 in *((const nomodify byte*) D011) ← ((unumber)) (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 Adding number conversion cast (unumber) $40 in (number~) main::vicSelectGfxBank1_toDd001_$1 ← (byte~) main::vicSelectGfxBank1_toDd001_$0 / (number) $40 Adding number conversion cast (unumber) main::vicSelectGfxBank1_toDd001_$1 in (number~) main::vicSelectGfxBank1_toDd001_$1 ← (byte~) main::vicSelectGfxBank1_toDd001_$0 / (unumber)(number) $40 Adding number conversion cast (unumber) 3 in (number~) main::vicSelectGfxBank1_toDd001_$2 ← (number) 3 ^ (unumber~) main::vicSelectGfxBank1_toDd001_$1 @@ -1824,7 +1841,7 @@ Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 Inlining cast (byte) memset::c#1 ← (unumber)(number) 0 Inlining cast *((const nomodify byte*) D011) ← (unumber)(const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(unumber)(number) 3 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 Inlining cast (signed word) sin16s_gen2::min#0 ← (snumber)(number) -$140 Inlining cast (signed word) sin16s_gen2::max#0 ← (snumber)(number) $140 Inlining cast (word) render_sine::xpos#2 ← (unumber)(number) 0 @@ -1835,8 +1852,7 @@ Simplifying constant pointer cast (byte*) 53281 Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53270 Simplifying constant pointer cast (byte*) 53272 -Simplifying constant pointer cast (byte*) 56576 -Simplifying constant pointer cast (byte*) 56578 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 8192 Simplifying constant integer cast 1 @@ -2279,10 +2295,12 @@ Resolved ranged comparison value [197] if(bitmap_init::x#1!=rangelast(0,$ff)) go Resolved ranged next value [211] bitmap_init::y#1 ← ++ bitmap_init::y#2 to ++ Resolved ranged comparison value [213] if(bitmap_init::y#1!=rangelast(0,$ff)) goto bitmap_init::@5 to (number) 0 Simplifying expression containing zero bitmap_clear::$0 in [218] (byte) bitmap_clear::col#0 ← (byte~) bitmap_clear::$0 + (const byte) bitmap_clear::bgcol#0 +Simplifying expression containing zero (byte*)CIA2 in [248] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) main::vicSelectGfxBank1_toDd001_return#0 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused variable (void*) memset::return#2 and assignment [167] (void*) memset::return#2 ← (void*) memset::str#3 Eliminating unused variable (void*) memset::return#3 and assignment [169] (void*) memset::return#3 ← (void*) memset::str#3 Eliminating unused constant (const byte) bitmap_clear::bgcol#0 +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A Eliminating unused constant (const word) rem16u#0 Eliminating unused constant (const byte*) bitmap_screen#0 Eliminating unused constant (const byte*) bitmap_gfx#0 @@ -2681,13 +2699,13 @@ main: scope:[main] from @1 [7] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main - [8] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [8] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 [9] phi() to:main::vicSelectGfxBank1_@1 main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001 - [10] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 + [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 to:main::@2 main::@2: scope:[main] from main::vicSelectGfxBank1_@1 [11] *((const nomodify byte*) D016) ← (const nomodify byte) VIC_CSEL @@ -3127,6 +3145,20 @@ bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (byte) bitmap_clear::bgcol (byte) bitmap_clear::col @@ -3674,10 +3706,8 @@ Target platform is c64basic / MOS6502X .label D016 = $d016 .const VIC_CSEL = 8 .label D018 = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .const WHITE = 1 // PI*2 in u[4.28] format .const PI2_u4f28 = $6487ed51 @@ -3687,6 +3717,7 @@ Target platform is c64basic / MOS6502X .const PI_HALF_u4f28 = $1921fb54 .const SIN_SIZE = $200 .const SIZEOF_SIGNED_WORD = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 .label SCREEN = $400 .label BITMAP = $2000 // Remainder after unsigned 16-bit division @@ -3725,9 +3756,9 @@ main: { jmp vicSelectGfxBank1 // main::vicSelectGfxBank1 vicSelectGfxBank1: - // [8] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [8] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [9] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 @@ -3736,9 +3767,9 @@ main: { jmp vicSelectGfxBank1___b1 // main::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [10] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 jmp __b2 // main::@2 __b2: @@ -5393,8 +5424,8 @@ Equivalence Class zp[1]:190 [ bitmap_init::$4 ] has ALU potential. Statement [5] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [6] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [7] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [8] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [10] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [8] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [11] *((const nomodify byte*) D016) ← (const nomodify byte) VIC_CSEL [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [13] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [24] if((word) render_sine::sin_idx#2<(const nomodify word) SIN_SIZE) goto render_sine::@2 [ render_sine::sin_idx#2 render_sine::xpos#3 ] ( main:2::render_sine:20 [ render_sine::sin_idx#2 render_sine::xpos#3 ] { } ) always clobbers reg byte a @@ -5505,8 +5536,8 @@ Removing always clobbered register reg byte a as potential for zp[1]:63 [ bitmap Statement [5] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [6] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [7] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [8] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [10] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [8] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [11] *((const nomodify byte*) D016) ← (const nomodify byte) VIC_CSEL [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [13] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [24] if((word) render_sine::sin_idx#2<(const nomodify word) SIN_SIZE) goto render_sine::@2 [ render_sine::sin_idx#2 render_sine::xpos#3 ] ( main:2::render_sine:20 [ render_sine::sin_idx#2 render_sine::xpos#3 ] { } ) always clobbers reg byte a @@ -5712,6 +5743,7 @@ Uplift Scope [bitmap_init] 3,628.62: zp[2]:64 [ bitmap_init::yoffs#2 bitmap_init Uplift Scope [sin16s_gen2] 2,233: zp[2]:11 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] 2,002: zp[4]:106 [ sin16s_gen2::$6 ] 1,251.25: zp[4]:13 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] 1,001: zp[2]:110 [ sin16s_gen2::$8 ] 940.33: zp[2]:17 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] 73.47: zp[4]:94 [ sin16s_gen2::step#0 ] Uplift Scope [div32u16u] 2,002: zp[2]:177 [ div32u16u::quotient_lo#0 ] 400.4: zp[2]:173 [ div32u16u::quotient_hi#0 ] 367.33: zp[4]:179 [ div32u16u::return#0 ] 202: zp[4]:90 [ div32u16u::return#2 ] Uplift Scope [] 2,200.4: zp[2]:185 [ rem16u#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [bitmap_clear] Uplift Scope [main] @@ -5729,6 +5761,7 @@ Limited combination testing to 100 combinations of 15360 possible. Uplifting [sin16s_gen2] best 30310 combination zp[2]:11 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp[4]:106 [ sin16s_gen2::$6 ] zp[4]:13 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp[2]:110 [ sin16s_gen2::$8 ] zp[2]:17 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp[4]:94 [ sin16s_gen2::step#0 ] Uplifting [div32u16u] best 30310 combination zp[2]:177 [ div32u16u::quotient_lo#0 ] zp[2]:173 [ div32u16u::quotient_hi#0 ] zp[4]:179 [ div32u16u::return#0 ] zp[4]:90 [ div32u16u::return#2 ] Uplifting [] best 30310 combination zp[2]:185 [ rem16u#1 ] +Uplifting [MOS6526_CIA] best 30310 combination Uplifting [bitmap_clear] best 30310 combination Uplifting [main] best 30310 combination Attempting to uplift remaining variables inzp[1]:191 [ bitmap_init::$5 ] @@ -5832,10 +5865,8 @@ ASSEMBLER BEFORE OPTIMIZATION .label D016 = $d016 .const VIC_CSEL = 8 .label D018 = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .const WHITE = 1 // PI*2 in u[4.28] format .const PI2_u4f28 = $6487ed51 @@ -5845,6 +5876,7 @@ ASSEMBLER BEFORE OPTIMIZATION .const PI_HALF_u4f28 = $1921fb54 .const SIN_SIZE = $200 .const SIZEOF_SIGNED_WORD = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 .label SCREEN = $400 .label BITMAP = $2000 // Remainder after unsigned 16-bit division @@ -5883,9 +5915,9 @@ main: { jmp vicSelectGfxBank1 // main::vicSelectGfxBank1 vicSelectGfxBank1: - // [8] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [8] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [9] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 @@ -5894,9 +5926,9 @@ main: { jmp vicSelectGfxBank1___b1 // main::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [10] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 jmp __b2 // main::@2 __b2: @@ -7547,11 +7579,25 @@ FINAL SYMBOL TABLE (label) @end (const nomodify byte*) BGCOL = (byte*) 53281 (const byte*) BITMAP = (byte*) 8192 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte*) D016 = (byte*) 53270 (const nomodify byte*) D018 = (byte*) 53272 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 (const nomodify dword) PI_u4f28 = (dword) $3243f6a9 @@ -7972,10 +8018,8 @@ Score: 25034 .label D016 = $d016 .const VIC_CSEL = 8 .label D018 = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .const WHITE = 1 // PI*2 in u[4.28] format .const PI2_u4f28 = $6487ed51 @@ -7985,6 +8029,7 @@ Score: 25034 .const PI_HALF_u4f28 = $1921fb54 .const SIN_SIZE = $200 .const SIZEOF_SIGNED_WORD = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 .label SCREEN = $400 .label BITMAP = $2000 // Remainder after unsigned 16-bit division @@ -8017,17 +8062,17 @@ main: { lda #VIC_BMM|VIC_DEN|VIC_RSEL|3 sta D011 // main::vicSelectGfxBank1 - // *CIA2_PORT_A_DDR = %00000011 - // [8] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [8] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [9] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] // main::vicSelectGfxBank1_toDd001 // main::vicSelectGfxBank1_@1 - // *CIA2_PORT_A = toDd00(gfx) - // [10] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A = toDd00(gfx) + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // main::@2 // *D016 = VIC_CSEL // [11] *((const nomodify byte*) D016) ← (const nomodify byte) VIC_CSEL -- _deref_pbuc1=vbuc2 diff --git a/src/test/ref/examples/sinplotter/sine-plotter.sym b/src/test/ref/examples/sinplotter/sine-plotter.sym index 2dd883c21..3fea64382 100644 --- a/src/test/ref/examples/sinplotter/sine-plotter.sym +++ b/src/test/ref/examples/sinplotter/sine-plotter.sym @@ -3,11 +3,25 @@ (label) @end (const nomodify byte*) BGCOL = (byte*) 53281 (const byte*) BITMAP = (byte*) 8192 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte*) D016 = (byte*) 53270 (const nomodify byte*) D018 = (byte*) 53272 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 (const nomodify dword) PI_u4f28 = (dword) $3243f6a9 diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.log b/src/test/ref/examples/sinsprites/sinus-sprites.log index 639b06f4e..e587d41f0 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.log +++ b/src/test/ref/examples/sinsprites/sinus-sprites.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call prepareMEM (word) setFAC::w Inlined call call prepareMEM (word)(byte*) setMEMtoFAC::mem @@ -917,6 +919,20 @@ SYMBOL TABLE SSA (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 (const nomodify byte*) CHARGEN = (byte*)(number) $d000 (const nomodify byte*) COLS = (byte*)(number) $d800 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) PROCPORT = (byte*)(number) 1 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a @@ -2975,6 +2991,20 @@ place_sprites::@return: scope:[place_sprites] from place_sprites::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) addMEMtoFAC((byte*) addMEMtoFAC::mem) (byte*) addMEMtoFAC::mem (word) addMEMtoFAC::prepareMEM1_mem @@ -5083,6 +5113,7 @@ Uplift Scope [gen_sprites] 21,002.1: zp[1]:33 [ gen_sprites::i#2 gen_sprites::i# Uplift Scope [clear_screen] 33,336.67: zp[2]:11 [ clear_screen::sc#2 clear_screen::sc#1 ] Uplift Scope [gen_sintab] 21,668.83: zp[1]:21 [ gen_sintab::i#10 gen_sintab::i#1 ] 10,001: zp[2]:57 [ gen_sintab::$20 ] 208.35: zp[1]:17 [ gen_sintab::length#10 ] 208.35: zp[2]:19 [ gen_sintab::sintab#13 ] 0: zp[1]:15 [ gen_sintab::max#2 ] 0: zp[1]:16 [ gen_sintab::min#2 ] Uplift Scope [init] 2,836.17: zp[1]:10 [ init::i#2 init::i#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [setARGtoFAC] Uplift Scope [addMEMtoFAC] Uplift Scope [subFACfromARG] @@ -5108,6 +5139,7 @@ Uplifting [gen_sprites] best 1062803 combination zp[1]:33 [ gen_sprites::i#2 gen Uplifting [clear_screen] best 1062803 combination zp[2]:11 [ clear_screen::sc#2 clear_screen::sc#1 ] Uplifting [gen_sintab] best 1062796 combination zp[1]:21 [ gen_sintab::i#10 gen_sintab::i#1 ] zp[2]:57 [ gen_sintab::$20 ] zp[1]:17 [ gen_sintab::length#10 ] zp[2]:19 [ gen_sintab::sintab#13 ] reg byte x [ gen_sintab::max#2 ] zp[1]:16 [ gen_sintab::min#2 ] Uplifting [init] best 1062646 combination reg byte x [ init::i#2 init::i#1 ] +Uplifting [MOS6526_CIA] best 1062646 combination Uplifting [setARGtoFAC] best 1062646 combination Uplifting [addMEMtoFAC] best 1062646 combination Uplifting [subFACfromARG] best 1062646 combination @@ -6915,6 +6947,20 @@ FINAL SYMBOL TABLE (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) CHARGEN = (byte*) 53248 (const nomodify byte*) COLS = (byte*) 55296 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) PROCPORT = (byte*) 1 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.sym b/src/test/ref/examples/sinsprites/sinus-sprites.sym index 6b241da14..78ea0a7c1 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.sym +++ b/src/test/ref/examples/sinsprites/sinus-sprites.sym @@ -4,6 +4,20 @@ (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) CHARGEN = (byte*) 53248 (const nomodify byte*) COLS = (byte*) 55296 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) PROCPORT = (byte*) 1 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a diff --git a/src/test/ref/font-hex-show.log b/src/test/ref/font-hex-show.log index 2aa7a7c69..736accd01 100644 --- a/src/test/ref/font-hex-show.log +++ b/src/test/ref/font-hex-show.log @@ -1,5 +1,7 @@ Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$0 ← call toD018 (const byte*) SCREEN (const byte*) CHARSET @@ -135,6 +137,20 @@ SYMBOL TABLE SSA (const byte*) CHARSET = (byte*)(number) $2000 (const nomodify byte*) D018 = (byte*)(number) $d018 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte*) SCREEN = (byte*)(number) $400 (void()) init_font_hex((byte*) init_font_hex::charset) (byte~) init_font_hex::$0 @@ -532,6 +548,20 @@ init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) init_font_hex((byte*) init_font_hex::charset) (byte~) init_font_hex::$0 100001.0 (byte~) init_font_hex::$1 200002.0 @@ -896,11 +926,13 @@ Potential registers zp[1]:16 [ init_font_hex::idx#3 ] : zp[1]:16 , reg byte a , REGISTER UPLIFT SCOPES Uplift Scope [init_font_hex] 216,668.83: zp[1]:11 [ init_font_hex::i#2 init_font_hex::i#1 ] 200,002: zp[1]:14 [ init_font_hex::$1 ] 200,002: zp[1]:15 [ init_font_hex::$2 ] 115,001.6: zp[1]:12 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 100,001: zp[1]:13 [ init_font_hex::$0 ] 20,002: zp[1]:16 [ init_font_hex::idx#3 ] 16,334.97: zp[1]:10 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 16,288.71: zp[2]:6 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 14,231.5: zp[2]:8 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 6,334.17: zp[2]:3 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 1,606.87: zp[1]:5 [ init_font_hex::c#6 init_font_hex::c#1 ] Uplift Scope [main] 353.5: zp[1]:2 [ main::c#2 main::c#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [] Uplifting [init_font_hex] best 83724 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp[1]:12 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp[1]:13 [ init_font_hex::$0 ] zp[1]:16 [ init_font_hex::idx#3 ] zp[1]:10 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp[2]:6 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp[2]:8 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp[2]:3 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp[1]:5 [ init_font_hex::c#6 init_font_hex::c#1 ] Limited combination testing to 100 combinations of 6912 possible. Uplifting [main] best 83604 combination reg byte x [ main::c#2 main::c#1 ] +Uplifting [MOS6526_CIA] best 83604 combination Uplifting [] best 83604 combination Attempting to uplift remaining variables inzp[1]:12 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Uplifting [init_font_hex] best 83604 combination zp[1]:12 [ init_font_hex::idx#5 init_font_hex::idx#2 ] @@ -1216,6 +1248,20 @@ FINAL SYMBOL TABLE (const byte*) CHARSET = (byte*) 8192 (const nomodify byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte*) SCREEN = (byte*) 1024 (void()) init_font_hex((byte*) init_font_hex::charset) (byte~) init_font_hex::$0 zp[1]:11 100001.0 diff --git a/src/test/ref/font-hex-show.sym b/src/test/ref/font-hex-show.sym index 5dfdb3f9c..2327ccaad 100644 --- a/src/test/ref/font-hex-show.sym +++ b/src/test/ref/font-hex-show.sym @@ -4,6 +4,20 @@ (const byte*) CHARSET = (byte*) 8192 (const nomodify byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte*) SCREEN = (byte*) 1024 (void()) init_font_hex((byte*) init_font_hex::charset) (byte~) init_font_hex::$0 zp[1]:11 100001.0 diff --git a/src/test/ref/gfxbank.asm b/src/test/ref/gfxbank.asm index d5f15db41..cd3cca4fa 100644 --- a/src/test/ref/gfxbank.asm +++ b/src/test/ref/gfxbank.asm @@ -2,18 +2,17 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 main: { .const vicSelectGfxBank1_toDd001_return = 3 - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = toDd00(gfx) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = toDd00(gfx) lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // } rts } diff --git a/src/test/ref/gfxbank.cfg b/src/test/ref/gfxbank.cfg index ff1032aa7..c099f382c 100644 --- a/src/test/ref/gfxbank.cfg +++ b/src/test/ref/gfxbank.cfg @@ -13,13 +13,13 @@ main: scope:[main] from @1 [4] phi() to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main - [5] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [5] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 [6] phi() to:main::vicSelectGfxBank1_@1 main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001 - [7] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 + [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 to:main::@return main::@return: scope:[main] from main::vicSelectGfxBank1_@1 [8] return diff --git a/src/test/ref/gfxbank.log b/src/test/ref/gfxbank.log index 8b1567156..cd1bbf533 100644 --- a/src/test/ref/gfxbank.log +++ b/src/test/ref/gfxbank.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call vicSelectGfxBank (const nomodify byte*) main::PLAYFIELD_CHARSET @@ -11,7 +13,7 @@ main: scope:[main] from @1 to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main (byte*) main::vicSelectGfxBank1_gfx#1 ← phi( main/(byte*) main::vicSelectGfxBank1_gfx#0 ) - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 (byte*) main::vicSelectGfxBank1_toDd001_gfx#0 ← (byte*) main::vicSelectGfxBank1_gfx#1 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 @@ -28,7 +30,7 @@ main::vicSelectGfxBank1_toDd001_@return: scope:[main] from main::vicSelectGfxBa main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001_@return (byte) main::vicSelectGfxBank1_toDd001_return#3 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte) main::vicSelectGfxBank1_toDd001_return#1 ) (byte~) main::vicSelectGfxBank1_$0 ← (byte) main::vicSelectGfxBank1_toDd001_return#3 - *((const nomodify byte*) CIA2_PORT_A) ← (byte~) main::vicSelectGfxBank1_$0 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte~) main::vicSelectGfxBank1_$0 to:main::@return main::@return: scope:[main] from main::vicSelectGfxBank1_@1 return @@ -45,8 +47,23 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end -(const nomodify byte*) CIA2_PORT_A = (byte*)(number) $dd00 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (void()) main() (label) main::@return (const nomodify byte*) main::PLAYFIELD_CHARSET = (byte*)(number) $2800 @@ -70,16 +87,15 @@ SYMBOL TABLE SSA (byte) main::vicSelectGfxBank1_toDd001_return#2 (byte) main::vicSelectGfxBank1_toDd001_return#3 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 Adding number conversion cast (unumber) $40 in (number~) main::vicSelectGfxBank1_toDd001_$1 ← (byte~) main::vicSelectGfxBank1_toDd001_$0 / (number) $40 Adding number conversion cast (unumber) main::vicSelectGfxBank1_toDd001_$1 in (number~) main::vicSelectGfxBank1_toDd001_$1 ← (byte~) main::vicSelectGfxBank1_toDd001_$0 / (unumber)(number) $40 Adding number conversion cast (unumber) 3 in (number~) main::vicSelectGfxBank1_toDd001_$2 ← (number) 3 ^ (unumber~) main::vicSelectGfxBank1_toDd001_$1 Adding number conversion cast (unumber) main::vicSelectGfxBank1_toDd001_$2 in (number~) main::vicSelectGfxBank1_toDd001_$2 ← (unumber)(number) 3 ^ (unumber~) main::vicSelectGfxBank1_toDd001_$1 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (byte*) 56576 -Simplifying constant pointer cast (byte*) 56578 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (byte*) 10240 Simplifying constant integer cast 3 Simplifying constant integer cast $40 @@ -98,6 +114,10 @@ Constant (const byte*) main::vicSelectGfxBank1_gfx#0 = main::PLAYFIELD_CHARSET Successful SSA optimization Pass2ConstantIdentification Constant value identified (word)main::vicSelectGfxBank1_gfx#0 in [2] (byte~) main::vicSelectGfxBank1_toDd001_$0 ← > (word)(const byte*) main::vicSelectGfxBank1_gfx#0 Successful SSA optimization Pass2ConstantValues +Simplifying expression containing zero (byte*)CIA2 in [5] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) main::vicSelectGfxBank1_toDd001_return#0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A +Successful SSA optimization PassNEliminateUnusedVars Constant right-side identified [1] (byte~) main::vicSelectGfxBank1_toDd001_$0 ← > (word)(const byte*) main::vicSelectGfxBank1_gfx#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::vicSelectGfxBank1_toDd001_$0 = >(word)main::vicSelectGfxBank1_gfx#0 @@ -155,13 +175,13 @@ main: scope:[main] from @1 [4] phi() to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main - [5] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [5] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 [6] phi() to:main::vicSelectGfxBank1_@1 main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001 - [7] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 + [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 to:main::@return main::@return: scope:[main] from main::vicSelectGfxBank1_@1 [8] return @@ -169,6 +189,20 @@ main::@return: scope:[main] from main::vicSelectGfxBank1_@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) main() (byte*) main::vicSelectGfxBank1_gfx (byte*) main::vicSelectGfxBank1_toDd001_gfx @@ -186,10 +220,9 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -212,9 +245,9 @@ main: { jmp vicSelectGfxBank1 // main::vicSelectGfxBank1 vicSelectGfxBank1: - // [5] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [5] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [6] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 @@ -223,9 +256,9 @@ main: { jmp vicSelectGfxBank1___b1 // main::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [7] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 jmp __breturn // main::@return __breturn: @@ -235,13 +268,15 @@ main: { // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [5] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [7] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [5] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplift Scope [] +Uplifting [MOS6526_CIA] best 96 combination Uplifting [main] best 96 combination Uplifting [] best 96 combination @@ -253,10 +288,9 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -279,9 +313,9 @@ main: { jmp vicSelectGfxBank1 // main::vicSelectGfxBank1 vicSelectGfxBank1: - // [5] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [5] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [6] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 @@ -290,9 +324,9 @@ main: { jmp vicSelectGfxBank1___b1 // main::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [7] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 jmp __breturn // main::@return __breturn: @@ -331,8 +365,22 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (void()) main() (label) main::@return (label) main::vicSelectGfxBank1 @@ -355,10 +403,9 @@ Score: 18 :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 @@ -370,17 +417,17 @@ Score: 18 main: { .const vicSelectGfxBank1_toDd001_return = 3 // main::vicSelectGfxBank1 - // *CIA2_PORT_A_DDR = %00000011 - // [5] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [5] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [6] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] // main::vicSelectGfxBank1_toDd001 // main::vicSelectGfxBank1_@1 - // *CIA2_PORT_A = toDd00(gfx) - // [7] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A = toDd00(gfx) + // [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // main::@return // } // [8] return diff --git a/src/test/ref/gfxbank.sym b/src/test/ref/gfxbank.sym index 72676174a..9d4ad7830 100644 --- a/src/test/ref/gfxbank.sym +++ b/src/test/ref/gfxbank.sym @@ -1,8 +1,22 @@ (label) @1 (label) @begin (label) @end -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (void()) main() (label) main::@return (label) main::vicSelectGfxBank1 diff --git a/src/test/ref/irq-hardware-clobber-jsr.asm b/src/test/ref/irq-hardware-clobber-jsr.asm index 73f7fabb9..92dbbbbae 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.asm +++ b/src/test/ref/irq-hardware-clobber-jsr.asm @@ -20,8 +20,8 @@ .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -29,6 +29,7 @@ // The colors of the C64 .const BLACK = 0 .const WHITE = 1 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d main: { // asm sei @@ -39,10 +40,10 @@ main: { // *PROCPORT = PROCPORT_RAM_IO lda #PROCPORT_RAM_IO sta PROCPORT - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL |=$80 // Set raster line to $100 lda #$80 diff --git a/src/test/ref/irq-hardware-clobber-jsr.cfg b/src/test/ref/irq-hardware-clobber-jsr.cfg index 5ce2bb07b..9a5561048 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.cfg +++ b/src/test/ref/irq-hardware-clobber-jsr.cfg @@ -13,7 +13,7 @@ main: scope:[main] from @1 asm { sei } [5] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [6] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [7] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [8] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 [9] *((const nomodify byte*) RASTER) ← (byte) 0 [10] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER diff --git a/src/test/ref/irq-hardware-clobber-jsr.log b/src/test/ref/irq-hardware-clobber-jsr.log index d7e6b8318..636c67c3f 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.log +++ b/src/test/ref/irq-hardware-clobber-jsr.log @@ -1,4 +1,7 @@ Resolved forward reference irq to interrupt(HARDWARE_CLOBBER)(void()) irq() +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -10,7 +13,7 @@ main: scope:[main] from @1 asm { sei } *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (number) $80 *((const nomodify byte*) RASTER) ← (number) 0 *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -61,12 +64,27 @@ SYMBOL TABLE SSA (const nomodify byte*) BGCOL = (byte*)(number) $d021 (const nomodify byte) BLACK = (byte) 0 (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 -(const nomodify byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify void()**) HARDWARE_IRQ = (void()**)(number) $fffe (const nomodify byte*) IRQ_ENABLE = (byte*)(number) $d01a (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*)(number) $d019 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) PROCPORT = (byte*)(number) 1 (const nomodify byte*) PROCPORT_DDR = (byte*)(number) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 @@ -97,7 +115,7 @@ Simplifying constant pointer cast (byte*) 53281 Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53273 Simplifying constant pointer cast (byte*) 53274 -Simplifying constant pointer cast (byte*) 56333 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 Simplifying constant pointer cast (void()**) 65534 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -147,7 +165,7 @@ main: scope:[main] from @1 asm { sei } [5] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [6] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [7] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [8] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 [9] *((const nomodify byte*) RASTER) ← (byte) 0 [10] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -179,6 +197,20 @@ do_irq::@return: scope:[do_irq] from do_irq VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) do_irq() interrupt(HARDWARE_CLOBBER)(void()) irq() (void()) main() @@ -213,8 +245,8 @@ Target platform is c64basic / MOS6502X .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -222,6 +254,7 @@ Target platform is c64basic / MOS6502X // The colors of the C64 .const BLACK = 0 .const WHITE = 1 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -247,10 +280,10 @@ main: { // [6] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [7] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [8] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 lda #$80 @@ -322,7 +355,7 @@ do_irq: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [5] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [6] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [7] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [8] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [9] *((const nomodify byte*) RASTER) ← (byte) 0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [10] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:2 [ ] { } ) always clobbers reg byte a @@ -333,11 +366,13 @@ Statement [18] *((const nomodify byte*) BGCOL) ← (const nomodify byte) BLACK [ Statement [19] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( do_irq:15 [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplift Scope [irq] Uplift Scope [do_irq] Uplift Scope [] +Uplifting [MOS6526_CIA] best 329 combination Uplifting [main] best 329 combination Uplifting [irq] best 329 combination Uplifting [do_irq] best 329 combination @@ -376,8 +411,8 @@ ASSEMBLER BEFORE OPTIMIZATION .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -385,6 +420,7 @@ ASSEMBLER BEFORE OPTIMIZATION // The colors of the C64 .const BLACK = 0 .const WHITE = 1 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -410,10 +446,10 @@ main: { // [6] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [7] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [8] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 lda #$80 @@ -504,12 +540,27 @@ FINAL SYMBOL TABLE (const nomodify byte*) BGCOL = (byte*) 53281 (const nomodify byte) BLACK = (byte) 0 (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify void()**) HARDWARE_IRQ = (void()**) 65534 (const nomodify byte*) IRQ_ENABLE = (byte*) 53274 (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 @@ -554,8 +605,8 @@ Score: 224 .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts @@ -563,6 +614,7 @@ Score: 224 // The colors of the C64 .const BLACK = 0 .const WHITE = 1 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 @@ -583,11 +635,11 @@ main: { // [6] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR - // [7] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR + // [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL |=$80 // [8] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 diff --git a/src/test/ref/irq-hardware-clobber-jsr.sym b/src/test/ref/irq-hardware-clobber-jsr.sym index 39ec369cf..7941b335d 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.sym +++ b/src/test/ref/irq-hardware-clobber-jsr.sym @@ -4,12 +4,27 @@ (const nomodify byte*) BGCOL = (byte*) 53281 (const nomodify byte) BLACK = (byte) 0 (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify void()**) HARDWARE_IRQ = (void()**) 65534 (const nomodify byte*) IRQ_ENABLE = (byte*) 53274 (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 diff --git a/src/test/ref/irq-idx-problem.asm b/src/test/ref/irq-idx-problem.asm index e2e77616b..dadf420c1 100644 --- a/src/test/ref/irq-idx-problem.asm +++ b/src/test/ref/irq-idx-problem.asm @@ -10,8 +10,8 @@ .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts @@ -20,6 +20,7 @@ .label VIC_BASE = $d000 .const VIC_SIZE = $30 .const IRQ_CHANGE_NEXT = $7f + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label irq_idx = 2 __bbegin: // irq_idx = 0 @@ -30,10 +31,10 @@ __bbegin: main: { // asm sei - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL &=$7f // Set raster line to $60 lda #$7f diff --git a/src/test/ref/irq-idx-problem.cfg b/src/test/ref/irq-idx-problem.cfg index d54a59d07..4739cfe55 100644 --- a/src/test/ref/irq-idx-problem.cfg +++ b/src/test/ref/irq-idx-problem.cfg @@ -14,7 +14,7 @@ (void()) main() main: scope:[main] from @2 asm { sei } - [6] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [7] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [8] *((const nomodify byte*) RASTER) ← (byte) $60 [9] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER diff --git a/src/test/ref/irq-idx-problem.log b/src/test/ref/irq-idx-problem.log index 922936f22..9c337c4df 100644 --- a/src/test/ref/irq-idx-problem.log +++ b/src/test/ref/irq-idx-problem.log @@ -1,4 +1,7 @@ Resolved forward reference table_driven_irq to interrupt(KERNEL_MIN)(void()) table_driven_irq() +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -8,7 +11,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @2 asm { sei } - *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (number) $7f *((const nomodify byte*) RASTER) ← (number) $60 *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -81,7 +84,7 @@ SYMBOL TABLE SSA (label) @3 (label) @begin (label) @end -(const nomodify byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) IRQ_CHANGE_IDX[] = { (byte) $20, (byte) $21, (const nomodify byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const nomodify byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const nomodify byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const nomodify byte) IRQ_CHANGE_NEXT } (const nomodify byte) IRQ_CHANGE_NEXT = (byte) $7f @@ -90,6 +93,21 @@ SYMBOL TABLE SSA (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*)(number) $d019 (const nomodify void()**) KERNEL_IRQ = (void()**)(number) $314 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*)(number) $d012 (const nomodify byte*) SCREEN = (byte*)(number) $400 (const nomodify byte*) VIC_BASE = (byte*)(number) $d000 @@ -141,7 +159,7 @@ Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53273 Simplifying constant pointer cast (byte*) 53274 -Simplifying constant pointer cast (byte*) 56333 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 Simplifying constant pointer cast (void()**) 788 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 53248 @@ -223,7 +241,7 @@ FINAL CONTROL FLOW GRAPH (void()) main() main: scope:[main] from @2 asm { sei } - [6] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [7] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [8] *((const nomodify byte*) RASTER) ← (byte) $60 [9] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER @@ -268,6 +286,20 @@ table_driven_irq::@2: scope:[table_driven_irq] from table_driven_irq::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (volatile byte) irq_idx loadstore 6.0 (void()) main() interrupt(KERNEL_MIN)(void()) table_driven_irq() @@ -305,8 +337,8 @@ Target platform is c64basic / MOS6502X .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts @@ -315,6 +347,7 @@ Target platform is c64basic / MOS6502X .label VIC_BASE = $d000 .const VIC_SIZE = $30 .const IRQ_CHANGE_NEXT = $7f + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label irq_idx = 2 // @begin __bbegin: @@ -340,10 +373,10 @@ __bend: main: { // asm { sei } sei - // [6] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [7] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line to $60 lda #$7f @@ -450,7 +483,7 @@ table_driven_irq: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [1] (volatile byte) irq_idx ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3 [ ] { } ) always clobbers reg byte a +Statement [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3 [ ] { } ) always clobbers reg byte a Statement [7] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:3 [ ] { } ) always clobbers reg byte a Statement [8] *((const nomodify byte*) RASTER) ← (byte) $60 [ ] ( main:3 [ ] { } ) always clobbers reg byte a Statement [9] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:3 [ ] { } ) always clobbers reg byte a @@ -465,7 +498,7 @@ Statement [23] (volatile byte) irq_idx ← (byte) 0 [ ] ( [ ] { } ) always clo Statement [25] *((const nomodify byte*) SCREEN+-(const nomodify byte) VIC_SIZE+(word) $3f8 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 [ irq_idx ] ( [ irq_idx ] { } ) always clobbers reg byte a Statement [26] *((const nomodify byte*) VIC_BASE + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 [ irq_idx ] ( [ irq_idx ] { } ) always clobbers reg byte a Statement [1] (volatile byte) irq_idx ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3 [ ] { } ) always clobbers reg byte a +Statement [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:3 [ ] { } ) always clobbers reg byte a Statement [7] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:3 [ ] { } ) always clobbers reg byte a Statement [8] *((const nomodify byte*) RASTER) ← (byte) $60 [ ] ( main:3 [ ] { } ) always clobbers reg byte a Statement [9] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:3 [ ] { } ) always clobbers reg byte a @@ -484,10 +517,12 @@ Potential registers zp[1]:4 [ table_driven_irq::val#0 ] : zp[1]:4 , reg byte x , REGISTER UPLIFT SCOPES Uplift Scope [table_driven_irq] 11: zp[1]:3 [ table_driven_irq::idx#0 ] 6.17: zp[1]:4 [ table_driven_irq::val#0 ] Uplift Scope [] 6: zp[1]:2 [ irq_idx ] +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplifting [table_driven_irq] best 762 combination reg byte a [ table_driven_irq::idx#0 ] reg byte x [ table_driven_irq::val#0 ] Uplifting [] best 762 combination zp[1]:2 [ irq_idx ] +Uplifting [MOS6526_CIA] best 762 combination Uplifting [main] best 762 combination Attempting to uplift remaining variables inzp[1]:2 [ irq_idx ] Uplifting [] best 762 combination zp[1]:2 [ irq_idx ] @@ -508,8 +543,8 @@ ASSEMBLER BEFORE OPTIMIZATION .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts @@ -518,6 +553,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label VIC_BASE = $d000 .const VIC_SIZE = $30 .const IRQ_CHANGE_NEXT = $7f + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label irq_idx = 2 // @begin __bbegin: @@ -543,10 +579,10 @@ __bend: main: { // asm { sei } sei - // [6] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [7] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line to $60 lda #$7f @@ -674,14 +710,14 @@ Adding RTS to root block Succesful ASM optimization Pass5AddMainRts Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [68] bcs $ea81 to bcc +Fixing long branch [69] bcs $ea81 to bcc FINAL SYMBOL TABLE (label) @1 (label) @2 (label) @begin (label) @end -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) IRQ_CHANGE_IDX[] = { (byte) $20, (byte) $21, (const nomodify byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const nomodify byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const nomodify byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const nomodify byte) IRQ_CHANGE_NEXT } (const nomodify byte) IRQ_CHANGE_NEXT = (byte) $7f @@ -690,6 +726,21 @@ FINAL SYMBOL TABLE (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 (const nomodify void()**) KERNEL_IRQ = (void()**) 788 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte*) VIC_BASE = (byte*) 53248 @@ -734,8 +785,8 @@ Score: 604 .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts @@ -744,6 +795,7 @@ Score: 604 .label VIC_BASE = $d000 .const VIC_SIZE = $30 .const IRQ_CHANGE_NEXT = $7f + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .label irq_idx = 2 // @begin __bbegin: @@ -764,11 +816,11 @@ main: { // asm // asm { sei } sei - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR - // [6] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR + // [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL &=$7f // [7] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line to $60 diff --git a/src/test/ref/irq-idx-problem.sym b/src/test/ref/irq-idx-problem.sym index f5fb279e1..1cf0bbd6b 100644 --- a/src/test/ref/irq-idx-problem.sym +++ b/src/test/ref/irq-idx-problem.sym @@ -2,7 +2,7 @@ (label) @2 (label) @begin (label) @end -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) IRQ_CHANGE_IDX[] = { (byte) $20, (byte) $21, (const nomodify byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const nomodify byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const nomodify byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const nomodify byte) IRQ_CHANGE_NEXT } (const nomodify byte) IRQ_CHANGE_NEXT = (byte) $7f @@ -11,6 +11,21 @@ (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 (const nomodify void()**) KERNEL_IRQ = (void()**) 788 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte*) VIC_BASE = (byte*) 53248 diff --git a/src/test/ref/irq-kernel-minimal.log b/src/test/ref/irq-kernel-minimal.log index 4769d8dd2..bd1559785 100644 --- a/src/test/ref/irq-kernel-minimal.log +++ b/src/test/ref/irq-kernel-minimal.log @@ -1,4 +1,6 @@ Resolved forward reference irq to interrupt(KERNEL_KEYBOARD)(void()) irq() +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -38,6 +40,20 @@ SYMBOL TABLE SSA (const nomodify byte*) BGCOL = (byte*)(number) $d021 (const nomodify byte) BLACK = (byte) 0 (const nomodify void()**) KERNEL_IRQ = (void()**)(number) $314 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) WHITE = (byte) 1 interrupt(KERNEL_KEYBOARD)(void()) irq() (label) irq::@return @@ -93,6 +109,20 @@ irq::@return: scope:[irq] from irq VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC interrupt(KERNEL_KEYBOARD)(void()) irq() (void()) main() @@ -170,10 +200,12 @@ Statement [8] *((const nomodify byte*) BGCOL) ← (const nomodify byte) WHITE [ Statement [9] *((const nomodify byte*) BGCOL) ← (const nomodify byte) BLACK [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplift Scope [irq] Uplift Scope [] +Uplifting [MOS6526_CIA] best 55 combination Uplifting [main] best 55 combination Uplifting [irq] best 55 combination Uplifting [] best 55 combination @@ -269,6 +301,20 @@ FINAL SYMBOL TABLE (const nomodify byte*) BGCOL = (byte*) 53281 (const nomodify byte) BLACK = (byte) 0 (const nomodify void()**) KERNEL_IRQ = (void()**) 788 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) WHITE = (byte) 1 interrupt(KERNEL_KEYBOARD)(void()) irq() (label) irq::@return diff --git a/src/test/ref/irq-kernel-minimal.sym b/src/test/ref/irq-kernel-minimal.sym index f90445868..e72a86ac8 100644 --- a/src/test/ref/irq-kernel-minimal.sym +++ b/src/test/ref/irq-kernel-minimal.sym @@ -4,6 +4,20 @@ (const nomodify byte*) BGCOL = (byte*) 53281 (const nomodify byte) BLACK = (byte) 0 (const nomodify void()**) KERNEL_IRQ = (void()**) 788 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) WHITE = (byte) 1 interrupt(KERNEL_KEYBOARD)(void()) irq() (label) irq::@return diff --git a/src/test/ref/keyboard-glitch.asm b/src/test/ref/keyboard-glitch.asm index 6e44bb668..572b72717 100644 --- a/src/test/ref/keyboard-glitch.asm +++ b/src/test/ref/keyboard-glitch.asm @@ -14,12 +14,11 @@ .const KEY_SPACE = $3c .label BORDERCOL = $d020 .label BGCOL = $d021 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 .const RED = 2 .const GREEN = 5 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label SCREEN = $400 main: { // *BORDERCOL = GREEN @@ -106,11 +105,11 @@ keyboard_key_pressed: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] lda keyboard_matrix_row_bitmask,x - sta CIA1_PORT_A - // ~*CIA1_PORT_B - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // } rts diff --git a/src/test/ref/keyboard-glitch.cfg b/src/test/ref/keyboard-glitch.cfg index b22295e7a..841988900 100644 --- a/src/test/ref/keyboard-glitch.cfg +++ b/src/test/ref/keyboard-glitch.cfg @@ -86,8 +86,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [40] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) - [41] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [40] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) + [41] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [42] return diff --git a/src/test/ref/keyboard-glitch.log b/src/test/ref/keyboard-glitch.log index 5747e2328..6be373149 100644 --- a/src/test/ref/keyboard-glitch.log +++ b/src/test/ref/keyboard-glitch.log @@ -1,3 +1,11 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -7,8 +15,8 @@ CONTROL FLOW GRAPH SSA (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed (byte) keyboard_matrix_read::rowid#1 ← phi( keyboard_key_pressed/(byte) keyboard_matrix_read::rowid#0 ) - *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) - (byte~) keyboard_matrix_read::$0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) + (byte~) keyboard_matrix_read::$0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) (byte) keyboard_matrix_read::row_pressed_bits#0 ← (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#0 ← (byte) keyboard_matrix_read::row_pressed_bits#0 to:keyboard_matrix_read::@return @@ -156,13 +164,28 @@ SYMBOL TABLE SSA (label) @end (const nomodify byte*) BGCOL = (byte*)(number) $d021 (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 -(const nomodify byte*) CIA1_PORT_A = (byte*)(number) $dc00 -(const nomodify byte*) CIA1_PORT_B = (byte*)(number) $dc01 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte) GREEN = (byte) 5 (const nomodify byte) KEY_C = (byte) $14 (const nomodify byte) KEY_E = (byte) $e (const nomodify byte) KEY_I = (byte) $21 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte) RED = (byte) 2 (const byte*) SCREEN = (byte*)(number) $400 (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) @@ -258,8 +281,7 @@ Adding number conversion cast (unumber) 0 in (bool~) pressed::$2 ← (byte~) pre Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53281 -Simplifying constant pointer cast (byte*) 56320 -Simplifying constant pointer cast (byte*) 56321 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 3 @@ -309,6 +331,10 @@ if() condition always true - replacing block destination [14] if(true) goto main if() condition always true - replacing block destination [17] if(true) goto menu::@2 if() condition always true - replacing block destination [44] if(true) goto pressed::@2 Successful SSA optimization Pass2ConstantIfs +Simplifying expression containing zero (byte*)CIA1 in [1] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A +Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks Inlining constant with var siblings (const byte) keyboard_key_pressed::key#0 @@ -464,8 +490,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [40] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) - [41] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [40] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) + [41] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [42] return @@ -491,6 +517,20 @@ pressed::@return: scope:[pressed] from pressed::@2 null depth in calling loop Loop head: pressed::@1 tails: pressed::@2 blocks: pressed::@2 pressed::@1 in scope keyboard_key_pressed VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) (byte~) keyboard_key_pressed::$2 2.0000002E7 (byte) keyboard_key_pressed::colidx @@ -592,12 +632,11 @@ Target platform is c64basic / MOS6502X .const KEY_SPACE = $3c .label BORDERCOL = $d020 .label BGCOL = $d021 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 .const RED = 2 .const GREEN = 5 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label SCREEN = $400 // @begin __bbegin: @@ -809,12 +848,12 @@ keyboard_matrix_read: { .label return = $f .label rowid = $b .label return_1 = $c - // [40] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [40] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy.z rowid lda keyboard_matrix_row_bitmask,y - sta CIA1_PORT_A - // [41] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuz1=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [41] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuz1=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff sta.z return jmp __breturn @@ -872,14 +911,14 @@ Statement [21] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) RED Statement [28] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) GREEN [ ] ( main:2::menu:6 [ ] { } ) always clobbers reg byte a Statement [33] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#4 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::menu:6::keyboard_key_pressed:9 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:17 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:24 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#4 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::pressed:14::keyboard_key_pressed:45 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:9 [ keyboard_key_pressed::colidx#0 ] -Statement [40] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::menu:6::keyboard_key_pressed:9::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:17::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:24::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#4 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::pressed:14::keyboard_key_pressed:45::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [41] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::menu:6::keyboard_key_pressed:9::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:17::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:24::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#4 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::pressed:14::keyboard_key_pressed:45::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [40] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::menu:6::keyboard_key_pressed:9::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:17::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:24::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#4 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::pressed:14::keyboard_key_pressed:45::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [41] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::menu:6::keyboard_key_pressed:9::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:17::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:24::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#4 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::pressed:14::keyboard_key_pressed:45::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [4] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) GREEN [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [21] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) RED [ ] ( main:2::menu:6 [ ] { } ) always clobbers reg byte a Statement [28] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) GREEN [ ] ( main:2::menu:6 [ ] { } ) always clobbers reg byte a Statement [33] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#4 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::menu:6::keyboard_key_pressed:9 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:17 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:24 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#4 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::pressed:14::keyboard_key_pressed:45 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [40] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::menu:6::keyboard_key_pressed:9::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:17::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:24::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#4 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::pressed:14::keyboard_key_pressed:45::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [41] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::menu:6::keyboard_key_pressed:9::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:17::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:24::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#4 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::pressed:14::keyboard_key_pressed:45::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [40] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:2::menu:6::keyboard_key_pressed:9::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:17::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:24::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#4 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::pressed:14::keyboard_key_pressed:45::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [41] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::menu:6::keyboard_key_pressed:9::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:17::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::keyboard_key_pressed:24::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#4 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::menu:6::pressed:14::keyboard_key_pressed:45::keyboard_matrix_read:35 [ keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#10 } { keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Potential registers zp[1]:2 [ keyboard_key_pressed::key#4 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:3 [ keyboard_key_pressed::return#2 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:4 [ menu::$0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , @@ -902,6 +941,7 @@ Uplift Scope [keyboard_matrix_read] 110,000,002: zp[1]:11 [ keyboard_matrix_read Uplift Scope [keyboard_key_pressed] 20,000,002: zp[1]:10 [ keyboard_key_pressed::rowidx#0 ] 20,000,002: zp[1]:13 [ keyboard_key_pressed::$2 ] 10,000,001: zp[1]:2 [ keyboard_key_pressed::key#4 ] 3,333,333.67: zp[1]:9 [ keyboard_key_pressed::colidx#0 ] 2,000,002: zp[1]:16 [ keyboard_key_pressed::return#10 ] 1,883,334.17: zp[1]:14 [ keyboard_key_pressed::return#0 ] 200,002: zp[1]:3 [ keyboard_key_pressed::return#2 ] 200,002: zp[1]:5 [ keyboard_key_pressed::return#3 ] 200,002: zp[1]:7 [ keyboard_key_pressed::return#4 ] Uplift Scope [pressed] 2,000,002: zp[1]:17 [ pressed::$1 ] Uplift Scope [menu] 200,002: zp[1]:4 [ menu::$0 ] 200,002: zp[1]:6 [ menu::$4 ] 200,002: zp[1]:8 [ menu::$7 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplift Scope [] @@ -910,6 +950,7 @@ Uplifting [keyboard_key_pressed] best 12207 combination reg byte a [ keyboard_ke Limited combination testing to 100 combinations of 196608 possible. Uplifting [pressed] best 11607 combination reg byte a [ pressed::$1 ] Uplifting [menu] best 9807 combination reg byte a [ menu::$0 ] reg byte a [ menu::$4 ] reg byte a [ menu::$7 ] +Uplifting [MOS6526_CIA] best 9807 combination Uplifting [main] best 9807 combination Uplifting [] best 9807 combination Attempting to uplift remaining variables inzp[1]:9 [ keyboard_key_pressed::colidx#0 ] @@ -945,12 +986,11 @@ ASSEMBLER BEFORE OPTIMIZATION .const KEY_SPACE = $3c .label BORDERCOL = $d020 .label BGCOL = $d021 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 .const RED = 2 .const GREEN = 5 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label SCREEN = $400 // @begin __bbegin: @@ -1120,11 +1160,11 @@ keyboard_key_pressed: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { - // [40] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // [40] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda keyboard_matrix_row_bitmask,x - sta CIA1_PORT_A - // [41] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [41] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff jmp __breturn // keyboard_matrix_read::@return @@ -1239,13 +1279,27 @@ FINAL SYMBOL TABLE (label) @end (const nomodify byte*) BGCOL = (byte*) 53281 (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) GREEN = (byte) 5 (const nomodify byte) KEY_C = (byte) $14 (const nomodify byte) KEY_E = (byte) $e (const nomodify byte) KEY_I = (byte) $21 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte) RED = (byte) 2 (const byte*) SCREEN = (byte*) 1024 (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) @@ -1337,12 +1391,11 @@ Score: 3151 .const KEY_SPACE = $3c .label BORDERCOL = $d020 .label BGCOL = $d021 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 .const RED = 2 .const GREEN = 5 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label SCREEN = $400 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] @@ -1494,13 +1547,13 @@ keyboard_key_pressed: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] - // [40] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] + // [40] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda keyboard_matrix_row_bitmask,x - sta CIA1_PORT_A - // ~*CIA1_PORT_B - // [41] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + // [41] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // keyboard_matrix_read::@return // } diff --git a/src/test/ref/keyboard-glitch.sym b/src/test/ref/keyboard-glitch.sym index 7348d515d..c7181ae38 100644 --- a/src/test/ref/keyboard-glitch.sym +++ b/src/test/ref/keyboard-glitch.sym @@ -3,13 +3,27 @@ (label) @end (const nomodify byte*) BGCOL = (byte*) 53281 (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) GREEN = (byte) 5 (const nomodify byte) KEY_C = (byte) $14 (const nomodify byte) KEY_E = (byte) $e (const nomodify byte) KEY_I = (byte) $21 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte) RED = (byte) 2 (const byte*) SCREEN = (byte*) 1024 (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) diff --git a/src/test/ref/line-anim.asm b/src/test/ref/line-anim.asm index d32d194ab..5f9758378 100644 --- a/src/test/ref/line-anim.asm +++ b/src/test/ref/line-anim.asm @@ -17,14 +17,13 @@ .const VIC_DEN = $10 .const VIC_RSEL = 8 .label D018 = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // The number of points .const SIZE = 4 // The delay between pixels .const DELAY = 8 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 .label BITMAP = $a000 .label SCREEN = $8800 main: { @@ -44,12 +43,12 @@ main: { // *D011 = VIC_BMM|VIC_DEN|VIC_RSEL|3 lda #VIC_BMM|VIC_DEN|VIC_RSEL|3 sta D011 - // *CIA2_PORT_A_DDR = %00000011 + // CIA2->PORT_A_DDR = %00000011 lda #3 - sta CIA2_PORT_A_DDR - // *CIA2_PORT_A = toDd00(gfx) + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA2->PORT_A = toDd00(gfx) lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // *D018 = toD018(SCREEN, BITMAP) lda #toD0181_return sta D018 diff --git a/src/test/ref/line-anim.cfg b/src/test/ref/line-anim.cfg index 5dc448db7..e2241020b 100644 --- a/src/test/ref/line-anim.cfg +++ b/src/test/ref/line-anim.cfg @@ -16,13 +16,13 @@ main: scope:[main] from @1 [7] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main - [8] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [8] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 [9] phi() to:main::vicSelectGfxBank1_@1 main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001 - [10] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 + [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 to:main::toD0181 main::toD0181: scope:[main] from main::vicSelectGfxBank1_@1 [11] phi() diff --git a/src/test/ref/line-anim.log b/src/test/ref/line-anim.log index 5c554a0e2..946861401 100644 --- a/src/test/ref/line-anim.log +++ b/src/test/ref/line-anim.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call vicSelectGfxBank (const byte*) SCREEN Inlined call (byte~) main::$1 ← call toD018 (const byte*) SCREEN (const byte*) BITMAP @@ -184,7 +186,7 @@ main: scope:[main] from @1 to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main (byte*) main::vicSelectGfxBank1_gfx#1 ← phi( main/(byte*) main::vicSelectGfxBank1_gfx#0 ) - *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 (byte*) main::vicSelectGfxBank1_toDd001_gfx#0 ← (byte*) main::vicSelectGfxBank1_gfx#1 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 @@ -201,7 +203,7 @@ main::vicSelectGfxBank1_toDd001_@return: scope:[main] from main::vicSelectGfxBa main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001_@return (byte) main::vicSelectGfxBank1_toDd001_return#3 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte) main::vicSelectGfxBank1_toDd001_return#1 ) (byte~) main::vicSelectGfxBank1_$0 ← (byte) main::vicSelectGfxBank1_toDd001_return#3 - *((const nomodify byte*) CIA2_PORT_A) ← (byte~) main::vicSelectGfxBank1_$0 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte~) main::vicSelectGfxBank1_$0 to:main::@5 main::@5: scope:[main] from main::vicSelectGfxBank1_@1 (byte*) main::toD0181_screen#0 ← (const byte*) SCREEN @@ -577,11 +579,26 @@ SYMBOL TABLE SSA (label) @end (const byte*) BITMAP = (byte*)(number) $a000 (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 -(const nomodify byte*) CIA2_PORT_A = (byte*)(number) $dd00 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const nomodify byte*) D011 = (byte*)(number) $d011 (const nomodify byte*) D018 = (byte*)(number) $d018 (const nomodify byte) DELAY = (byte) 8 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*)(number) 1 (const nomodify byte*) PROCPORT_DDR = (byte*)(number) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 @@ -1078,7 +1095,7 @@ Adding number conversion cast (unumber) divr16s::$9 in (number~) divr16s::$9 ← Adding number conversion cast (unumber) 0 in (bool~) divr16s::$5 ← (byte) divr16s::neg#4 == (number) 0 Adding number conversion cast (unumber) VIC_BMM|VIC_DEN|VIC_RSEL|3 in *((const nomodify byte*) D011) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) 3 in *((const nomodify byte*) D011) ← ((unumber)) (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3 -Adding number conversion cast (unumber) 3 in *((const nomodify byte*) CIA2_PORT_A_DDR) ← (number) 3 +Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 Adding number conversion cast (unumber) $40 in (number~) main::vicSelectGfxBank1_toDd001_$1 ← (byte~) main::vicSelectGfxBank1_toDd001_$0 / (number) $40 Adding number conversion cast (unumber) main::vicSelectGfxBank1_toDd001_$1 in (number~) main::vicSelectGfxBank1_toDd001_$1 ← (byte~) main::vicSelectGfxBank1_toDd001_$0 / (unumber)(number) $40 Adding number conversion cast (unumber) 3 in (number~) main::vicSelectGfxBank1_toDd001_$2 ← (number) 3 ^ (unumber~) main::vicSelectGfxBank1_toDd001_$1 @@ -1126,7 +1143,7 @@ Adding number conversion cast (unumber) bitmap_plot::$0 in (number~) bitmap_plot Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) divr16s::neg#1 ← (unumber)(number) 1 Inlining cast *((const nomodify byte*) D011) ← (unumber)(const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(unumber)(number) 3 -Inlining cast *((const nomodify byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 Inlining cast (byte) screen_fill::ch#0 ← (unumber)(number) $10 Inlining cast *((const signed byte*) x_add + (byte) point_init::point_idx#3) ← (snumber)(number) -$10 Inlining cast *((const signed byte*) x_add + (byte) point_init::point_idx#4) ← (snumber)(number) $10 @@ -1140,8 +1157,7 @@ Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53272 -Simplifying constant pointer cast (byte*) 56576 -Simplifying constant pointer cast (byte*) 56578 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (byte*) 40960 Simplifying constant pointer cast (byte*) 34816 Simplifying constant integer cast 1 @@ -1435,12 +1451,14 @@ Resolved ranged next value [201] bitmap_clear::y#1 ← ++ bitmap_clear::y#4 to + Resolved ranged comparison value [203] if(bitmap_clear::y#1!=rangelast(0,$27)) goto bitmap_clear::@1 to (number) $28 Simplifying constant evaluating to zero (word)(const signed word) divr16s::dividend#0 in Successful SSA optimization PassNSimplifyConstantZero +Simplifying expression containing zero (byte*)CIA2 in [67] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) main::vicSelectGfxBank1_toDd001_return#0 Simplifying expression containing zero bitmap_plot_yhi in [190] (word~) bitmap_clear::$3 ← *((const to_nomodify byte*) bitmap_plot_yhi + (byte) 0) w= *((const to_nomodify byte*) bitmap_plot_ylo + (byte) 0) Simplifying expression containing zero bitmap_plot_ylo in [190] (word~) bitmap_clear::$3 ← *((const to_nomodify byte*) bitmap_plot_yhi) w= *((const to_nomodify byte*) bitmap_plot_ylo + (byte) 0) Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const word) divr16s::dividendu#0 Eliminating unused constant (const word) divr16s::remu#0 Eliminating unused constant (const word) divr16s::divisoru#0 +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks @@ -1737,13 +1755,13 @@ main: scope:[main] from @1 [7] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main - [8] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 + [8] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 [9] phi() to:main::vicSelectGfxBank1_@1 main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001 - [10] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 + [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 to:main::toD0181 main::toD0181: scope:[main] from main::vicSelectGfxBank1_@1 [11] phi() @@ -2045,6 +2063,20 @@ bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) bitmap_clear() (byte*) bitmap_clear::bitmap (word) bitmap_clear::bitmap#0 101.0 @@ -2397,14 +2429,13 @@ Target platform is c64basic / MOS6502X .const VIC_DEN = $10 .const VIC_RSEL = 8 .label D018 = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // The number of points .const SIZE = 4 // The delay between pixels .const DELAY = 8 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 .label BITMAP = $a000 .label SCREEN = $8800 // @begin @@ -2443,9 +2474,9 @@ main: { jmp vicSelectGfxBank1 // main::vicSelectGfxBank1 vicSelectGfxBank1: - // [8] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [8] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [9] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 @@ -2454,9 +2485,9 @@ main: { jmp vicSelectGfxBank1___b1 // main::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [10] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [11] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181] toD0181_from_vicSelectGfxBank1___b1: jmp toD0181 @@ -3450,8 +3481,8 @@ Equivalence Class zp[1]:91 [ bitmap_init::$4 ] has ALU potential. Statement [5] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [6] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [7] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [8] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [10] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [8] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [12] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [21] (byte~) main::$10 ← (byte) main::i#2 << (byte) 1 [ main::i#2 main::$10 ] ( main:2 [ main::i#2 main::$10 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ] @@ -3530,8 +3561,8 @@ Removing always clobbered register reg byte a as potential for zp[1]:31 [ bitmap Statement [5] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [6] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [7] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [8] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [10] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [8] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] { } ) always clobbers reg byte a +Statement [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [12] *((const nomodify byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [21] (byte~) main::$10 ← (byte) main::i#2 << (byte) 1 [ main::i#2 main::$10 ] ( main:2 [ main::i#2 main::$10 ] { } ) always clobbers reg byte a Statement [22] (word) bitmap_plot::x#0 ← *((const word*) x_start + (byte~) main::$10) [ main::i#2 bitmap_plot::x#0 ] ( main:2 [ main::i#2 bitmap_plot::x#0 ] { } ) always clobbers reg byte a @@ -3661,6 +3692,7 @@ Uplift Scope [point_init] 7,007: zp[2]:5 [ point_init::abs16s2_return#2 point_in Uplift Scope [bitmap_init] 3,628.62: zp[2]:32 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 3,169.83: zp[1]:29 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 2,002: zp[1]:30 [ bitmap_init::x#2 bitmap_init::x#1 ] 2,002: zp[1]:31 [ bitmap_init::y#2 bitmap_init::y#1 ] 2,002: zp[1]:91 [ bitmap_init::$4 ] 2,002: zp[1]:92 [ bitmap_init::$5 ] 2,002: zp[1]:93 [ bitmap_init::$6 ] 500.5: zp[1]:90 [ bitmap_init::$7 ] Uplift Scope [bitmap_plot] 2,103: zp[1]:38 [ bitmap_plot::y#0 ] 2,002: zp[2]:41 [ bitmap_plot::$0 ] 2,002: zp[1]:45 [ bitmap_plot::$1 ] 1,501.5: zp[2]:43 [ bitmap_plot::plotter#1 ] 500.5: zp[2]:39 [ bitmap_plot::plotter#0 ] 420.6: zp[2]:36 [ bitmap_plot::x#0 ] Uplift Scope [main] 223.64: zp[1]:2 [ main::i#2 main::i#1 ] 202: zp[1]:35 [ main::$10 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [] Uplifting [divr16u] best 30437 combination zp[2]:14 [ divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:18 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:16 [ divr16u::dividend#2 divr16u::dividend#0 ] zp[2]:76 [ divr16u::divisor#0 ] zp[2]:78 [ divr16u::return#2 ] @@ -3673,6 +3705,7 @@ Uplifting [bitmap_init] best 28090 combination zp[2]:32 [ bitmap_init::yoffs#2 b Limited combination testing to 100 combinations of 15360 possible. Uplifting [bitmap_plot] best 28051 combination reg byte x [ bitmap_plot::y#0 ] zp[2]:41 [ bitmap_plot::$0 ] reg byte x [ bitmap_plot::$1 ] zp[2]:43 [ bitmap_plot::plotter#1 ] zp[2]:39 [ bitmap_plot::plotter#0 ] zp[2]:36 [ bitmap_plot::x#0 ] Uplifting [main] best 28011 combination zp[1]:2 [ main::i#2 main::i#1 ] reg byte a [ main::$10 ] +Uplifting [MOS6526_CIA] best 28011 combination Uplifting [] best 28011 combination Attempting to uplift remaining variables inzp[1]:92 [ bitmap_init::$5 ] Uplifting [bitmap_init] best 27951 combination reg byte a [ bitmap_init::$5 ] @@ -3750,14 +3783,13 @@ ASSEMBLER BEFORE OPTIMIZATION .const VIC_DEN = $10 .const VIC_RSEL = 8 .label D018 = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // The number of points .const SIZE = 4 // The delay between pixels .const DELAY = 8 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 .label BITMAP = $a000 .label SCREEN = $8800 // @begin @@ -3795,9 +3827,9 @@ main: { jmp vicSelectGfxBank1 // main::vicSelectGfxBank1 vicSelectGfxBank1: - // [8] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [8] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [9] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 @@ -3806,9 +3838,9 @@ main: { jmp vicSelectGfxBank1___b1 // main::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [10] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [11] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181] toD0181_from_vicSelectGfxBank1___b1: jmp toD0181 @@ -4845,8 +4877,8 @@ Removing instruction __b5: Succesful ASM optimization Pass5UnusedLabelElimination Removing unreachable instruction rts Succesful ASM optimization Pass5UnreachableCodeElimination -Fixing long branch [147] bmi abs16s1___b1 to bpl -Fixing long branch [156] bmi abs16s2___b1 to bpl +Fixing long branch [146] bmi abs16s1___b1 to bpl +Fixing long branch [155] bmi abs16s2___b1 to bpl FINAL SYMBOL TABLE (label) @1 @@ -4854,11 +4886,25 @@ FINAL SYMBOL TABLE (label) @end (const byte*) BITMAP = (byte*) 40960 (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte*) D018 = (byte*) 53272 (const nomodify byte) DELAY = (byte) 8 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 @@ -5152,14 +5198,13 @@ Score: 21967 .const VIC_DEN = $10 .const VIC_RSEL = 8 .label D018 = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 - // CIA #2 Port A data direction register. - .label CIA2_PORT_A_DDR = $dd02 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 // The number of points .const SIZE = 4 // The delay between pixels .const DELAY = 8 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 .label BITMAP = $a000 .label SCREEN = $8800 // @begin @@ -5191,17 +5236,17 @@ main: { lda #VIC_BMM|VIC_DEN|VIC_RSEL|3 sta D011 // main::vicSelectGfxBank1 - // *CIA2_PORT_A_DDR = %00000011 - // [8] *((const nomodify byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A_DDR = %00000011 + // [8] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 - sta CIA2_PORT_A_DDR + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR // [9] phi from main::vicSelectGfxBank1 to main::vicSelectGfxBank1_toDd001 [phi:main::vicSelectGfxBank1->main::vicSelectGfxBank1_toDd001] // main::vicSelectGfxBank1_toDd001 // main::vicSelectGfxBank1_@1 - // *CIA2_PORT_A = toDd00(gfx) - // [10] *((const nomodify byte*) CIA2_PORT_A) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // CIA2->PORT_A = toDd00(gfx) + // [10] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return - sta CIA2_PORT_A + sta CIA2 // [11] phi from main::vicSelectGfxBank1_@1 to main::toD0181 [phi:main::vicSelectGfxBank1_@1->main::toD0181] // main::toD0181 // main::@4 diff --git a/src/test/ref/line-anim.sym b/src/test/ref/line-anim.sym index 519f06fdf..ed04ea6a2 100644 --- a/src/test/ref/line-anim.sym +++ b/src/test/ref/line-anim.sym @@ -3,11 +3,25 @@ (label) @end (const byte*) BITMAP = (byte*) 40960 (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 -(const nomodify byte*) CIA2_PORT_A_DDR = (byte*) 56578 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte*) D018 = (byte*) 53272 (const nomodify byte) DELAY = (byte) 8 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 (const nomodify byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 diff --git a/src/test/ref/loophead-problem-3.log b/src/test/ref/loophead-problem-3.log index e7d2b6235..6eba8296f 100644 --- a/src/test/ref/loophead-problem-3.log +++ b/src/test/ref/loophead-problem-3.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -88,6 +90,20 @@ SYMBOL TABLE SSA (label) @end (const nomodify byte*) BGCOL = (byte*)(number) $d021 (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) main() (dword~) main::$0 (word~) main::$1 @@ -298,6 +314,20 @@ mul16u::@3: scope:[mul16u] from mul16u::@2 mul16u::@4 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) main() (byte~) main::$2 22.0 (byte~) main::$3 22.0 @@ -552,10 +582,12 @@ Potential registers zp[1]:24 [ mul16u::$1 ] : zp[1]:24 , reg byte a , reg byte x REGISTER UPLIFT SCOPES Uplift Scope [mul16u] 3,505.33: zp[4]:4 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 2,431: zp[4]:8 [ mul16u::mb#2 mul16u::mb#1 ] 2,002: zp[1]:24 [ mul16u::$1 ] 1,668.33: zp[2]:2 [ mul16u::a#2 mul16u::a#0 ] 22: zp[4]:12 [ mul16u::return#2 ] Uplift Scope [main] 22: zp[4]:16 [ main::result#0 ] 22: zp[1]:22 [ main::$2 ] 22: zp[1]:23 [ main::$3 ] 11: zp[2]:20 [ main::kaputt#0 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [] Uplifting [mul16u] best 1657 combination zp[4]:4 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:8 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:2 [ mul16u::a#2 mul16u::a#0 ] zp[4]:12 [ mul16u::return#2 ] Uplifting [main] best 1645 combination zp[4]:16 [ main::result#0 ] reg byte a [ main::$2 ] reg byte a [ main::$3 ] zp[2]:20 [ main::kaputt#0 ] +Uplifting [MOS6526_CIA] best 1645 combination Uplifting [] best 1645 combination Coalescing zero page register [ zp[4]:4 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp[4]:12 [ mul16u::return#2 ] ] - score: 1 Coalescing zero page register [ zp[4]:4 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 ] ] with [ zp[4]:16 [ main::result#0 ] ] - score: 1 @@ -760,6 +792,20 @@ FINAL SYMBOL TABLE (label) @end (const nomodify byte*) BGCOL = (byte*) 53281 (const nomodify byte*) BORDERCOL = (byte*) 53280 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) main() (byte~) main::$2 reg byte a 22.0 (byte~) main::$3 reg byte a 22.0 diff --git a/src/test/ref/loophead-problem-3.sym b/src/test/ref/loophead-problem-3.sym index 801267aa2..f7b5e694c 100644 --- a/src/test/ref/loophead-problem-3.sym +++ b/src/test/ref/loophead-problem-3.sym @@ -3,6 +3,20 @@ (label) @end (const nomodify byte*) BGCOL = (byte*) 53281 (const nomodify byte*) BORDERCOL = (byte*) 53280 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) main() (byte~) main::$2 reg byte a 22.0 (byte~) main::$3 reg byte a 22.0 diff --git a/src/test/ref/memcpy-0.log b/src/test/ref/memcpy-0.log index b5c5422c2..e67a1e12c 100644 --- a/src/test/ref/memcpy-0.log +++ b/src/test/ref/memcpy-0.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$0 ← call toD018 (const nomodify byte*) SCREEN_COPY (const nomodify byte*) CHARSET @@ -106,6 +108,20 @@ SYMBOL TABLE SSA (const nomodify byte*) CHARGEN = (byte*)(number) $d000 (const nomodify byte*) CHARSET = (byte*)(number) $2000 (const nomodify byte*) D018 = (byte*)(number) $d018 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) PROCPORT = (byte*)(number) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1 @@ -389,6 +405,20 @@ memcpy::@2: scope:[memcpy] from memcpy::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) main() (byte*) main::toD0181_gfx (byte) main::toD0181_return @@ -632,10 +662,12 @@ Potential registers zp[2]:12 [ memcpy::src_end#0 ] : zp[2]:12 , REGISTER UPLIFT SCOPES Uplift Scope [memcpy] 3,129.25: zp[2]:8 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] 2,237.67: zp[2]:10 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] 137.75: zp[2]:12 [ memcpy::src_end#0 ] 101: zp[2]:6 [ memcpy::num#2 ] 0: zp[2]:2 [ memcpy::source#2 ] 0: zp[2]:4 [ memcpy::destination#2 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplift Scope [] Uplifting [memcpy] best 869 combination zp[2]:8 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] zp[2]:10 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] zp[2]:12 [ memcpy::src_end#0 ] zp[2]:6 [ memcpy::num#2 ] zp[2]:2 [ memcpy::source#2 ] zp[2]:4 [ memcpy::destination#2 ] +Uplifting [MOS6526_CIA] best 869 combination Uplifting [main] best 869 combination Uplifting [] best 869 combination Coalescing zero page register [ zp[2]:2 [ memcpy::source#2 ] ] with [ zp[2]:8 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] ] - score: 1 @@ -859,6 +891,20 @@ FINAL SYMBOL TABLE (const nomodify byte*) CHARGEN = (byte*) 53248 (const nomodify byte*) CHARSET = (byte*) 8192 (const nomodify byte*) D018 = (byte*) 53272 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1 diff --git a/src/test/ref/memcpy-0.sym b/src/test/ref/memcpy-0.sym index 9a9bfbe78..a14d78c8b 100644 --- a/src/test/ref/memcpy-0.sym +++ b/src/test/ref/memcpy-0.sym @@ -4,6 +4,20 @@ (const nomodify byte*) CHARGEN = (byte*) 53248 (const nomodify byte*) CHARSET = (byte*) 8192 (const nomodify byte*) D018 = (byte*) 53272 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1 diff --git a/src/test/ref/millfork-benchmarks/linkedlist-kc.log b/src/test/ref/millfork-benchmarks/linkedlist-kc.log index 7b838e15f..6cf411fe6 100644 --- a/src/test/ref/millfork-benchmarks/linkedlist-kc.log +++ b/src/test/ref/millfork-benchmarks/linkedlist-kc.log @@ -2,6 +2,12 @@ Resolved forward reference rand_seed to (word) rand_seed Fixing struct type size struct node to 4 Setting inferred volatile on symbol affected by address-of (word) last_time Setting inferred volatile on symbol affected by address-of (word) rand_seed +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Replacing struct member reference *((struct node*) prepend::new).next with member unwinding reference *((struct node**~) prepend::$1) Replacing struct member reference *((struct node*) prepend::new).value with member unwinding reference *((word*~) prepend::$2) Replacing struct member reference *((struct node*) sum::current).value with member unwinding reference *((word*~) sum::$0) @@ -425,6 +431,20 @@ SYMBOL TABLE SSA (label) @5 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) OFFSET_STRUCT_NODE_NEXT = (byte) 0 (const byte) OFFSET_STRUCT_NODE_VALUE = (byte) 2 (const byte) RADIX::BINARY = (number) 2 @@ -1247,6 +1267,20 @@ init::@return: scope:[init] from init VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (word) Ticks (word) Ticks#1 101.0 (word) Ticks#12 202.0 @@ -2001,6 +2035,7 @@ Uplift Scope [main] 2,502.5: zp[2]:3 [ main::i#3 main::i#2 ] 167.04: zp[1]:2 [ m Uplift Scope [print_uint] 701: zp[2]:31 [ print_uint::w#0 ] Uplift Scope [RADIX] Uplift Scope [print_ln] +Uplift Scope [MOS6526_CIA] Uplift Scope [start] Uplift Scope [end] Uplift Scope [node] @@ -2016,6 +2051,7 @@ Uplifting [main] best 18387 combination zp[2]:3 [ main::i#3 main::i#2 ] reg byte Uplifting [print_uint] best 18387 combination zp[2]:31 [ print_uint::w#0 ] Uplifting [RADIX] best 18387 combination Uplifting [print_ln] best 18387 combination +Uplifting [MOS6526_CIA] best 18387 combination Uplifting [start] best 18387 combination Uplifting [end] best 18387 combination Uplifting [node] best 18387 combination @@ -2614,6 +2650,20 @@ FINAL SYMBOL TABLE (label) @2 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) OFFSET_STRUCT_NODE_VALUE = (byte) 2 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a diff --git a/src/test/ref/millfork-benchmarks/linkedlist-kc.sym b/src/test/ref/millfork-benchmarks/linkedlist-kc.sym index 0df68f94b..29151084c 100644 --- a/src/test/ref/millfork-benchmarks/linkedlist-kc.sym +++ b/src/test/ref/millfork-benchmarks/linkedlist-kc.sym @@ -2,6 +2,20 @@ (label) @2 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) OFFSET_STRUCT_NODE_VALUE = (byte) 2 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a diff --git a/src/test/ref/millfork-benchmarks/plasma-kc.asm b/src/test/ref/millfork-benchmarks/plasma-kc.asm index b999cbe2c..b60d3feda 100644 --- a/src/test/ref/millfork-benchmarks/plasma-kc.asm +++ b/src/test/ref/millfork-benchmarks/plasma-kc.asm @@ -2,8 +2,8 @@ :BasicUpstart(__bbegin) .pc = $80d "Program" .label VIC_MEMORY = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .label SCREEN1 = $e000 .label SCREEN2 = $e400 .label CHARSET = $e800 @@ -38,14 +38,14 @@ main: { jsr makechar // start() jsr start - // block = *CIA2_PORT_A - lda CIA2_PORT_A + // block = CIA2->PORT_A + lda CIA2 sta.z block // tmp = block & 0xFC lda #$fc and.z block - // *CIA2_PORT_A = tmp - sta CIA2_PORT_A + // CIA2->PORT_A = tmp + sta CIA2 // v = *VIC_MEMORY lda VIC_MEMORY sta.z v @@ -65,9 +65,9 @@ main: { // *VIC_MEMORY = v lda.z v sta VIC_MEMORY - // *CIA2_PORT_A = block + // CIA2->PORT_A = block lda.z block - sta CIA2_PORT_A + sta CIA2 // end() /* Reset screen colors */ jsr end diff --git a/src/test/ref/millfork-benchmarks/plasma-kc.cfg b/src/test/ref/millfork-benchmarks/plasma-kc.cfg index d3db0db2c..6e73b82e6 100644 --- a/src/test/ref/millfork-benchmarks/plasma-kc.cfg +++ b/src/test/ref/millfork-benchmarks/plasma-kc.cfg @@ -24,9 +24,9 @@ main::@4: scope:[main] from main [9] call start to:main::@5 main::@5: scope:[main] from main::@4 - [10] (byte) main::block#1 ← *((const nomodify byte*) CIA2_PORT_A) + [10] (byte) main::block#1 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) [11] (byte) main::tmp#1 ← (byte) main::block#1 & (byte) $fc - [12] *((const nomodify byte*) CIA2_PORT_A) ← (byte) main::tmp#1 + [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) main::tmp#1 [13] (byte) main::v#1 ← *((const nomodify byte*) VIC_MEMORY) to:main::@1 main::@1: scope:[main] from main::@5 main::@7 @@ -35,7 +35,7 @@ main::@1: scope:[main] from main::@5 main::@7 to:main::@3 main::@3: scope:[main] from main::@1 [16] *((const nomodify byte*) VIC_MEMORY) ← (byte) main::v#1 - [17] *((const nomodify byte*) CIA2_PORT_A) ← (byte) main::block#1 + [17] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) main::block#1 [18] call end to:main::@return main::@return: scope:[main] from main::@3 diff --git a/src/test/ref/millfork-benchmarks/plasma-kc.log b/src/test/ref/millfork-benchmarks/plasma-kc.log index f29ecba39..b6a4d69cd 100644 --- a/src/test/ref/millfork-benchmarks/plasma-kc.log +++ b/src/test/ref/millfork-benchmarks/plasma-kc.log @@ -1,6 +1,15 @@ Resolved forward reference rand_seed to (word) rand_seed Setting inferred volatile on symbol affected by address-of (word) last_time Setting inferred volatile on symbol affected by address-of (word) rand_seed +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -421,12 +430,12 @@ main::@5: scope:[main] from main::@4 (byte*) print_char_cursor#43 ← phi( main::@4/(byte*) print_char_cursor#45 ) (word) Ticks#18 ← phi( main::@4/(word) Ticks#20 ) (word) main::count#4 ← phi( main::@4/(word) main::count#6 ) - (byte) main::block#1 ← *((const nomodify byte*) CIA2_PORT_A) + (byte) main::block#1 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) (byte) main::tmp#0 ← (byte) 0 (number~) main::$2 ← (byte) main::block#1 & (number) $fc (byte) main::tmp#1 ← (number~) main::$2 (byte) main::tmp#2 ← (byte) main::tmp#1 | (byte)(word)(const nomodify byte*) SCREEN1>>(number) $e^(number) 3 - *((const nomodify byte*) CIA2_PORT_A) ← (byte) main::tmp#2 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) main::tmp#2 (byte) main::v#1 ← *((const nomodify byte*) VIC_MEMORY) to:main::@1 main::@1: scope:[main] from main::@5 main::@7 @@ -477,7 +486,7 @@ main::@3: scope:[main] from main::@1 (byte) main::block#2 ← phi( main::@1/(byte) main::block#3 ) (byte) main::v#2 ← phi( main::@1/(byte) main::v#3 ) *((const nomodify byte*) VIC_MEMORY) ← (byte) main::v#2 - *((const nomodify byte*) CIA2_PORT_A) ← (byte) main::block#2 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) main::block#2 call end to:main::@8 main::@8: scope:[main] from main::@3 @@ -526,7 +535,22 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const nomodify byte*) CHARSET = (byte*)(number) $e800 -(const nomodify byte*) CIA2_PORT_A = (byte*)(number) $dd00 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const nomodify byte) PAGE1 = (byte)(word)(const nomodify byte*) SCREEN1>>(number) 6&(number) $f0|(word)(const nomodify byte*) CHARSET>>(number) $a&(number) $e (const nomodify byte) PAGE2 = (byte)(word)(const nomodify byte*) SCREEN2>>(number) 6&(number) $f0|(word)(const nomodify byte*) CHARSET>>(number) $a&(number) $e (const byte) RADIX::BINARY = (number) 2 @@ -1007,7 +1031,7 @@ Inlining cast (volatile word) rand_seed ← (unumber)(number) $194a Inlining cast (signed word) main::return#0 ← (snumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53272 -Simplifying constant pointer cast (byte*) 56576 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (byte*) 57344 Simplifying constant pointer cast (byte*) 58368 Simplifying constant pointer cast (byte*) 59392 @@ -1286,7 +1310,10 @@ Simplifying expression containing zero 3 in [71] (byte) doplasma::c1A#1 ← (con Simplifying expression containing zero 5 in [72] (byte) doplasma::c1B#1 ← (const byte) doplasma::c1b#1 - (byte) 5 Simplifying expression containing zero 2 in [82] (byte) doplasma::c2A#1 ← (const byte) doplasma::c2A#0 + (byte) 2 Simplifying expression containing zero 3 in [83] (byte) doplasma::c2B#1 ← (const byte) doplasma::c2B#0 - (byte) 3 +Simplifying expression containing zero (byte*)CIA2 in [140] (byte) main::block#1 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Simplifying expression containing zero main::tmp#1 in [143] (byte) main::tmp#2 ← (byte) main::tmp#1 | (byte) 0 +Simplifying expression containing zero (byte*)CIA2 in [144] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) main::tmp#2 +Simplifying expression containing zero (byte*)CIA2 in [157] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) main::block#1 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused variable (byte) doplasma::c1A#1 and assignment [45] (byte) doplasma::c1A#1 ← (byte) 3 Eliminating unused variable (byte) doplasma::c1B#1 and assignment [46] (byte) doplasma::c1B#1 ← (byte) 5 @@ -1309,6 +1336,7 @@ Eliminating unused constant (const byte) main::v#0 Eliminating unused constant (const byte) main::block#0 Eliminating unused constant (const byte) main::tmp#0 Eliminating unused constant (const signed word) main::return#2 +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A Eliminating unused constant (const word) Ticks#0 Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const signed word) main::return#0 @@ -1469,9 +1497,9 @@ main::@4: scope:[main] from main [9] call start to:main::@5 main::@5: scope:[main] from main::@4 - [10] (byte) main::block#1 ← *((const nomodify byte*) CIA2_PORT_A) + [10] (byte) main::block#1 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) [11] (byte) main::tmp#1 ← (byte) main::block#1 & (byte) $fc - [12] *((const nomodify byte*) CIA2_PORT_A) ← (byte) main::tmp#1 + [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) main::tmp#1 [13] (byte) main::v#1 ← *((const nomodify byte*) VIC_MEMORY) to:main::@1 main::@1: scope:[main] from main::@5 main::@7 @@ -1480,7 +1508,7 @@ main::@1: scope:[main] from main::@5 main::@7 to:main::@3 main::@3: scope:[main] from main::@1 [16] *((const nomodify byte*) VIC_MEMORY) ← (byte) main::v#1 - [17] *((const nomodify byte*) CIA2_PORT_A) ← (byte) main::block#1 + [17] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) main::block#1 [18] call end to:main::@return main::@return: scope:[main] from main::@3 @@ -1696,6 +1724,20 @@ rand::@return: scope:[rand] from rand VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (word) Ticks (word) Ticks#1 101.0 (word) Ticks#12 202.0 @@ -1933,8 +1975,8 @@ Target platform is c64basic / MOS6502X .pc = $80d "Program" // Global Constants & labels .label VIC_MEMORY = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .label SCREEN1 = $e000 .label SCREEN2 = $e400 .label CHARSET = $e800 @@ -2001,16 +2043,16 @@ main: { jmp __b5 // main::@5 __b5: - // [10] (byte) main::block#1 ← *((const nomodify byte*) CIA2_PORT_A) -- vbuz1=_deref_pbuc1 - lda CIA2_PORT_A + // [10] (byte) main::block#1 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) -- vbuz1=_deref_pbuc1 + lda CIA2 sta.z block // [11] (byte) main::tmp#1 ← (byte) main::block#1 & (byte) $fc -- vbuz1=vbuz2_band_vbuc1 lda #$fc and.z block sta.z tmp - // [12] *((const nomodify byte*) CIA2_PORT_A) ← (byte) main::tmp#1 -- _deref_pbuc1=vbuz1 + // [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) main::tmp#1 -- _deref_pbuc1=vbuz1 lda.z tmp - sta CIA2_PORT_A + sta CIA2 // [13] (byte) main::v#1 ← *((const nomodify byte*) VIC_MEMORY) -- vbuz1=_deref_pbuc1 lda VIC_MEMORY sta.z v @@ -2038,9 +2080,9 @@ main: { // [16] *((const nomodify byte*) VIC_MEMORY) ← (byte) main::v#1 -- _deref_pbuc1=vbuz1 lda.z v sta VIC_MEMORY - // [17] *((const nomodify byte*) CIA2_PORT_A) ← (byte) main::block#1 -- _deref_pbuc1=vbuz1 + // [17] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) main::block#1 -- _deref_pbuc1=vbuz1 lda.z block - sta CIA2_PORT_A + sta CIA2 // [18] call end /* Reset screen colors */ jsr end @@ -2839,6 +2881,7 @@ Uplift Scope [print_uint] 701: zp[2]:39 [ print_uint::w#0 ] Uplift Scope [main] 245.29: zp[2]:2 [ main::count#2 main::count#1 ] 22: zp[1]:30 [ main::tmp#1 ] 2.54: zp[1]:29 [ main::block#1 ] 2.44: zp[1]:31 [ main::v#1 ] Uplift Scope [RADIX] Uplift Scope [print_ln] +Uplift Scope [MOS6526_CIA] Uplift Scope [start] Uplift Scope [end] @@ -2854,6 +2897,7 @@ Uplifting [print_uint] best 131955 combination zp[2]:39 [ print_uint::w#0 ] Uplifting [main] best 131949 combination zp[2]:2 [ main::count#2 main::count#1 ] reg byte a [ main::tmp#1 ] zp[1]:29 [ main::block#1 ] zp[1]:31 [ main::v#1 ] Uplifting [RADIX] best 131949 combination Uplifting [print_ln] best 131949 combination +Uplifting [MOS6526_CIA] best 131949 combination Uplifting [start] best 131949 combination Uplifting [end] best 131949 combination Attempting to uplift remaining variables inzp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ] @@ -2918,8 +2962,8 @@ ASSEMBLER BEFORE OPTIMIZATION .pc = $80d "Program" // Global Constants & labels .label VIC_MEMORY = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .label SCREEN1 = $e000 .label SCREEN2 = $e400 .label CHARSET = $e800 @@ -2985,14 +3029,14 @@ main: { jmp __b5 // main::@5 __b5: - // [10] (byte) main::block#1 ← *((const nomodify byte*) CIA2_PORT_A) -- vbuz1=_deref_pbuc1 - lda CIA2_PORT_A + // [10] (byte) main::block#1 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) -- vbuz1=_deref_pbuc1 + lda CIA2 sta.z block // [11] (byte) main::tmp#1 ← (byte) main::block#1 & (byte) $fc -- vbuaa=vbuz1_band_vbuc1 lda #$fc and.z block - // [12] *((const nomodify byte*) CIA2_PORT_A) ← (byte) main::tmp#1 -- _deref_pbuc1=vbuaa - sta CIA2_PORT_A + // [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) main::tmp#1 -- _deref_pbuc1=vbuaa + sta CIA2 // [13] (byte) main::v#1 ← *((const nomodify byte*) VIC_MEMORY) -- vbuz1=_deref_pbuc1 lda VIC_MEMORY sta.z v @@ -3020,9 +3064,9 @@ main: { // [16] *((const nomodify byte*) VIC_MEMORY) ← (byte) main::v#1 -- _deref_pbuc1=vbuz1 lda.z v sta VIC_MEMORY - // [17] *((const nomodify byte*) CIA2_PORT_A) ← (byte) main::block#1 -- _deref_pbuc1=vbuz1 + // [17] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) main::block#1 -- _deref_pbuc1=vbuz1 lda.z block - sta CIA2_PORT_A + sta CIA2 // [18] call end /* Reset screen colors */ jsr end @@ -3758,7 +3802,21 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const nomodify byte*) CHARSET = (byte*) 59392 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) PAGE1 = (word)(const nomodify byte*) SCREEN1>>(byte) 6&(byte) $f0|(word)(const nomodify byte*) CHARSET>>(byte) $a&(byte) $e (const nomodify byte) PAGE2 = (word)(const nomodify byte*) SCREEN2>>(byte) 6&(byte) $f0|(word)(const nomodify byte*) CHARSET>>(byte) $a&(byte) $e (const byte) RADIX::BINARY = (number) 2 @@ -3964,8 +4022,8 @@ Score: 104143 .pc = $80d "Program" // Global Constants & labels .label VIC_MEMORY = $d018 - // CIA#2 Port A: Serial bus, RS-232, VIC memory bank - .label CIA2_PORT_A = $dd00 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 .label SCREEN1 = $e000 .label SCREEN2 = $e400 .label CHARSET = $e800 @@ -4018,17 +4076,17 @@ main: { // [9] call start jsr start // main::@5 - // block = *CIA2_PORT_A - // [10] (byte) main::block#1 ← *((const nomodify byte*) CIA2_PORT_A) -- vbuz1=_deref_pbuc1 - lda CIA2_PORT_A + // block = CIA2->PORT_A + // [10] (byte) main::block#1 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) -- vbuz1=_deref_pbuc1 + lda CIA2 sta.z block // tmp = block & 0xFC // [11] (byte) main::tmp#1 ← (byte) main::block#1 & (byte) $fc -- vbuaa=vbuz1_band_vbuc1 lda #$fc and.z block - // *CIA2_PORT_A = tmp - // [12] *((const nomodify byte*) CIA2_PORT_A) ← (byte) main::tmp#1 -- _deref_pbuc1=vbuaa - sta CIA2_PORT_A + // CIA2->PORT_A = tmp + // [12] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) main::tmp#1 -- _deref_pbuc1=vbuaa + sta CIA2 // v = *VIC_MEMORY // [13] (byte) main::v#1 ← *((const nomodify byte*) VIC_MEMORY) -- vbuz1=_deref_pbuc1 lda VIC_MEMORY @@ -4055,10 +4113,10 @@ main: { // [16] *((const nomodify byte*) VIC_MEMORY) ← (byte) main::v#1 -- _deref_pbuc1=vbuz1 lda.z v sta VIC_MEMORY - // *CIA2_PORT_A = block - // [17] *((const nomodify byte*) CIA2_PORT_A) ← (byte) main::block#1 -- _deref_pbuc1=vbuz1 + // CIA2->PORT_A = block + // [17] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (byte) main::block#1 -- _deref_pbuc1=vbuz1 lda.z block - sta CIA2_PORT_A + sta CIA2 // end() // [18] call end /* Reset screen colors */ diff --git a/src/test/ref/millfork-benchmarks/plasma-kc.sym b/src/test/ref/millfork-benchmarks/plasma-kc.sym index 0da668ffe..be94a0736 100644 --- a/src/test/ref/millfork-benchmarks/plasma-kc.sym +++ b/src/test/ref/millfork-benchmarks/plasma-kc.sym @@ -4,7 +4,21 @@ (label) @begin (label) @end (const nomodify byte*) CHARSET = (byte*) 59392 -(const nomodify byte*) CIA2_PORT_A = (byte*) 56576 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) PAGE1 = (word)(const nomodify byte*) SCREEN1>>(byte) 6&(byte) $f0|(word)(const nomodify byte*) CHARSET>>(byte) $a&(byte) $e (const nomodify byte) PAGE2 = (word)(const nomodify byte*) SCREEN2>>(byte) 6&(byte) $f0|(word)(const nomodify byte*) CHARSET>>(byte) $a&(byte) $e (const byte) RADIX::BINARY = (number) 2 diff --git a/src/test/ref/millfork-benchmarks/romsum-kc.log b/src/test/ref/millfork-benchmarks/romsum-kc.log index c133713bc..a48126bf6 100644 --- a/src/test/ref/millfork-benchmarks/romsum-kc.log +++ b/src/test/ref/millfork-benchmarks/romsum-kc.log @@ -1,6 +1,12 @@ Resolved forward reference rand_seed to (word) rand_seed Setting inferred volatile on symbol affected by address-of (word) last_time Setting inferred volatile on symbol affected by address-of (word) rand_seed +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -551,6 +557,20 @@ SYMBOL TABLE SSA (const byte) DECIMAL = (number) $a (const byte*) DIGITS[] = (byte*) "0123456789abcdef"z (const byte) HEXADECIMAL = (number) $10 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) OCTAL = (number) 8 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a @@ -1706,6 +1726,20 @@ start::@return: scope:[start] from start VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (word) Ticks (word) Ticks#1 101.0 (word) Ticks#12 202.0 @@ -2770,6 +2804,7 @@ Uplift Scope [print_uint] 701: zp[2]:50 [ print_uint::w#0 ] Uplift Scope [main] 134.67: zp[2]:2 [ main::i#3 main::i#2 ] Uplift Scope [RADIX] Uplift Scope [print_ln] +Uplift Scope [MOS6526_CIA] Uplift Scope [start] Uplift Scope [end] @@ -2785,6 +2820,7 @@ Uplifting [print_uint] best 124674 combination zp[2]:50 [ print_uint::w#0 ] Uplifting [main] best 124674 combination zp[2]:2 [ main::i#3 main::i#2 ] Uplifting [RADIX] best 124674 combination Uplifting [print_ln] best 124674 combination +Uplifting [MOS6526_CIA] best 124674 combination Uplifting [start] best 124674 combination Uplifting [end] best 124674 combination Attempting to uplift remaining variables inzp[1]:11 [ utoa::digit#2 utoa::digit#1 ] @@ -3603,6 +3639,20 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) DIGITS[] = (byte*) "0123456789abcdef"z +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/millfork-benchmarks/romsum-kc.sym b/src/test/ref/millfork-benchmarks/romsum-kc.sym index f2ce25671..ab2af5dc7 100644 --- a/src/test/ref/millfork-benchmarks/romsum-kc.sym +++ b/src/test/ref/millfork-benchmarks/romsum-kc.sym @@ -3,6 +3,20 @@ (label) @begin (label) @end (const byte*) DIGITS[] = (byte*) "0123456789abcdef"z +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/millfork-benchmarks/sieve-kc.log b/src/test/ref/millfork-benchmarks/sieve-kc.log index 3a489ffe7..9c005a459 100644 --- a/src/test/ref/millfork-benchmarks/sieve-kc.log +++ b/src/test/ref/millfork-benchmarks/sieve-kc.log @@ -1,6 +1,12 @@ Resolved forward reference rand_seed to (word) rand_seed Setting inferred volatile on symbol affected by address-of (word) last_time Setting inferred volatile on symbol affected by address-of (word) rand_seed +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -330,6 +336,20 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const nomodify word) COUNT = (word) $4000 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -960,6 +980,20 @@ round::@2: scope:[round] from round::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (word) Ticks (word) Ticks#1 101.0 (word) Ticks#12 202.0 @@ -1591,6 +1625,7 @@ Uplift Scope [round] 35,672.33: zp[2]:11 [ round::S#3 round::S#2 round::S#1 ] 3, Uplift Scope [print_uint] 701: zp[2]:19 [ print_uint::w#0 ] Uplift Scope [RADIX] Uplift Scope [print_ln] +Uplift Scope [MOS6526_CIA] Uplift Scope [start] Uplift Scope [end] Uplift Scope [main] @@ -1602,6 +1637,7 @@ Uplifting [round] best 7402 combination zp[2]:11 [ round::S#3 round::S#2 round:: Uplifting [print_uint] best 7402 combination zp[2]:19 [ print_uint::w#0 ] Uplifting [RADIX] best 7402 combination Uplifting [print_ln] best 7402 combination +Uplifting [MOS6526_CIA] best 7402 combination Uplifting [start] best 7402 combination Uplifting [end] best 7402 combination Uplifting [main] best 7402 combination @@ -2182,6 +2218,20 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const nomodify word) COUNT = (word) $4000 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/millfork-benchmarks/sieve-kc.sym b/src/test/ref/millfork-benchmarks/sieve-kc.sym index 4cd07540c..01df0be6f 100644 --- a/src/test/ref/millfork-benchmarks/sieve-kc.sym +++ b/src/test/ref/millfork-benchmarks/sieve-kc.sym @@ -3,6 +3,20 @@ (label) @begin (label) @end (const nomodify word) COUNT = (word) $4000 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm index f345a4335..0c7616f73 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm @@ -19,8 +19,8 @@ .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts @@ -30,6 +30,7 @@ .const GREEN = 5 // The number of sprites in the multiplexer .const PLEX_COUNT = $20 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // The address of the sprite pointers on the current screen (screen+0x3f8). .label PLEX_SCREEN_PTR = $400+$3f8 .label plex_show_idx = 6 @@ -243,9 +244,9 @@ init: { // asm // enable the interrupt sei - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *IRQ_ENABLE = IRQ_RASTER lda #IRQ_RASTER sta IRQ_ENABLE diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.cfg b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.cfg index f86a6f6cf..d6c5e9193 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.cfg +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.cfg @@ -141,7 +141,7 @@ init::@3: scope:[init] from init::@2 init::@3 to:init::@4 init::@4: scope:[init] from init::@3 asm { sei } - [69] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [69] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [70] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [71] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [72] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log index 03c0b1d49..60ee40db8 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log @@ -1,4 +1,7 @@ Resolved forward reference plex_irq to interrupt(KERNEL_MIN)(void()) plex_irq() +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call plexSetScreen (byte*) plexInit::screen Inlined call call plexFreePrepare @@ -231,7 +234,7 @@ init::@3: scope:[init] from init::@2 init::@3 init::@4: scope:[init] from init::@3 (byte*) PLEX_SCREEN_PTR#20 ← phi( init::@3/(byte*) PLEX_SCREEN_PTR#24 ) asm { sei } - *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() @@ -367,7 +370,7 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 -(const nomodify byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D011 = (byte*)(number) $d011 (const nomodify byte) GREEN = (byte) 5 @@ -375,6 +378,21 @@ SYMBOL TABLE SSA (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*)(number) $d019 (const nomodify void()**) KERNEL_IRQ = (void()**)(number) $314 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const nomodify byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -690,7 +708,7 @@ Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53273 Simplifying constant pointer cast (byte*) 53274 -Simplifying constant pointer cast (byte*) 56333 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 Simplifying constant pointer cast (void()**) 788 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $3f8 @@ -1172,7 +1190,7 @@ init::@3: scope:[init] from init::@2 init::@3 to:init::@4 init::@4: scope:[init] from init::@3 asm { sei } - [69] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [69] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [70] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [71] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [72] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() @@ -1285,6 +1303,20 @@ plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@5 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte*) PLEX_SCREEN_PTR (volatile bool) framedone loadstore 1222.8888888888887 (void()) init() @@ -1487,8 +1519,8 @@ Target platform is c64basic / MOS6502X .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts @@ -1498,6 +1530,7 @@ Target platform is c64basic / MOS6502X .const GREEN = 5 // The number of sprites in the multiplexer .const PLEX_COUNT = $20 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // The address of the sprite pointers on the current screen (screen+0x3f8). .label PLEX_SCREEN_PTR = $400+$3f8 .label plex_show_idx = $d @@ -1897,9 +1930,9 @@ init: { // asm { sei } // enable the interrupt sei - // [69] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [69] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [70] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 lda #IRQ_RASTER sta IRQ_ENABLE @@ -2242,7 +2275,7 @@ Statement [60] (word) init::xp#1 ← (word) init::xp#2 + (byte) 9 [ init::sx#2 i Statement [63] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a Statement [65] *((const nomodify byte*) SPRITES_COLS + (byte) init::ss#2) ← (const nomodify byte) GREEN [ init::ss#2 ] ( main:7::init:10 [ framedone init::ss#2 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:11 [ init::ss#2 init::ss#1 ] -Statement [69] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a +Statement [69] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a Statement [70] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a Statement [71] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a Statement [72] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a @@ -2304,7 +2337,7 @@ Statement [59] *((const word*) PLEX_XPOS + (byte~) init::$3) ← (word) init::xp Statement [60] (word) init::xp#1 ← (word) init::xp#2 + (byte) 9 [ init::sx#2 init::xp#1 ] ( main:7::init:10 [ framedone init::sx#2 init::xp#1 ] { } ) always clobbers reg byte a Statement [63] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a Statement [65] *((const nomodify byte*) SPRITES_COLS + (byte) init::ss#2) ← (const nomodify byte) GREEN [ init::ss#2 ] ( main:7::init:10 [ framedone init::ss#2 ] { } ) always clobbers reg byte a -Statement [69] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a +Statement [69] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a Statement [70] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a Statement [71] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a Statement [72] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a @@ -2361,7 +2394,7 @@ Statement [59] *((const word*) PLEX_XPOS + (byte~) init::$3) ← (word) init::xp Statement [60] (word) init::xp#1 ← (word) init::xp#2 + (byte) 9 [ init::sx#2 init::xp#1 ] ( main:7::init:10 [ framedone init::sx#2 init::xp#1 ] { } ) always clobbers reg byte a Statement [63] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $ff [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a Statement [65] *((const nomodify byte*) SPRITES_COLS + (byte) init::ss#2) ← (const nomodify byte) GREEN [ init::ss#2 ] ( main:7::init:10 [ framedone init::ss#2 ] { } ) always clobbers reg byte a -Statement [69] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a +Statement [69] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a Statement [70] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a Statement [71] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a Statement [72] *((const nomodify void()**) KERNEL_IRQ) ← &interrupt(KERNEL_MIN)(void()) plex_irq() [ ] ( main:7::init:10 [ framedone ] { } ) always clobbers reg byte a @@ -2432,6 +2465,7 @@ Uplift Scope [init] 3,003: zp[1]:11 [ init::ss#2 init::ss#1 ] 2,302.3: zp[1]:8 [ Uplift Scope [] 1,222.89: zp[1]:17 [ framedone ] 325.22: zp[1]:14 [ plex_sprite_idx ] 322.41: zp[1]:16 [ plex_free_next ] 312.03: zp[1]:15 [ plex_sprite_msb ] 300.6: zp[1]:13 [ plex_show_idx ] Uplift Scope [plexShowSprite] 202: zp[1]:26 [ plexShowSprite::plexFreeAdd1_$0 ] 202: zp[1]:27 [ plexShowSprite::plexFreeAdd1_$1 ] 202: zp[1]:28 [ plexShowSprite::plexFreeAdd1_$2 ] 202: zp[1]:29 [ plexShowSprite::xpos_idx#0 ] 202: zp[1]:31 [ plexShowSprite::$2 ] 202: zp[1]:32 [ plexShowSprite::$3 ] 202: zp[1]:33 [ plexShowSprite::$9 ] 202: zp[1]:34 [ plexShowSprite::$5 ] 202: zp[1]:35 [ plexShowSprite::$6 ] 151.5: zp[1]:25 [ plexShowSprite::plexFreeAdd1_ypos#0 ] 101: zp[1]:30 [ plexShowSprite::$11 ] 25.25: zp[1]:24 [ plexShowSprite::plex_sprite_idx2#0 ] Uplift Scope [plex_irq] 11: zp[1]:23 [ plex_irq::$4 ] 4: zp[1]:22 [ plex_irq::plexFreeNextYpos1_return#0 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplifting [plexSort] best 60245 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] zp[1]:20 [ plexSort::s#2 ] zp[1]:5 [ plexSort::m#2 plexSort::m#1 ] zp[1]:19 [ plexSort::nxt_y#0 ] zp[1]:18 [ plexSort::nxt_idx#0 ] @@ -2445,6 +2479,7 @@ Uplifting [] best 57945 combination zp[1]:17 [ framedone ] zp[1]:14 [ plex_sprit Uplifting [plexShowSprite] best 57935 combination reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte x [ plexShowSprite::plexFreeAdd1_$1 ] zp[1]:28 [ plexShowSprite::plexFreeAdd1_$2 ] zp[1]:29 [ plexShowSprite::xpos_idx#0 ] zp[1]:31 [ plexShowSprite::$2 ] zp[1]:32 [ plexShowSprite::$3 ] zp[1]:33 [ plexShowSprite::$9 ] zp[1]:34 [ plexShowSprite::$5 ] zp[1]:35 [ plexShowSprite::$6 ] zp[1]:25 [ plexShowSprite::plexFreeAdd1_ypos#0 ] zp[1]:30 [ plexShowSprite::$11 ] zp[1]:24 [ plexShowSprite::plex_sprite_idx2#0 ] Limited combination testing to 10 combinations of 1572864 possible. Uplifting [plex_irq] best 57872 combination zp[1]:23 [ plex_irq::$4 ] reg byte x [ plex_irq::plexFreeNextYpos1_return#0 ] +Uplifting [MOS6526_CIA] best 57872 combination Uplifting [main] best 57872 combination Attempting to uplift remaining variables inzp[1]:20 [ plexSort::s#2 ] Uplifting [plexSort] best 57272 combination reg byte x [ plexSort::s#2 ] @@ -2527,8 +2562,8 @@ ASSEMBLER BEFORE OPTIMIZATION .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts @@ -2538,6 +2573,7 @@ ASSEMBLER BEFORE OPTIMIZATION .const GREEN = 5 // The number of sprites in the multiplexer .const PLEX_COUNT = $20 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // The address of the sprite pointers on the current screen (screen+0x3f8). .label PLEX_SCREEN_PTR = $400+$3f8 .label plex_show_idx = 6 @@ -2906,9 +2942,9 @@ init: { // asm { sei } // enable the interrupt sei - // [69] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [69] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // [70] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 lda #IRQ_RASTER sta IRQ_ENABLE @@ -3316,7 +3352,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte) GREEN = (byte) 5 @@ -3324,6 +3360,21 @@ FINAL SYMBOL TABLE (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 (const nomodify void()**) KERNEL_IRQ = (void()**) 788 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const nomodify byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -3528,8 +3579,8 @@ Score: 43606 .label IRQ_ENABLE = $d01a // Bits for the IRQ Status/Enable Registers .const IRQ_RASTER = 1 - // CIA#1 Interrupt Status & Control Register - .label CIA1_INTERRUPT = $dc0d + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // Value that disables all CIA interrupts when stored to the CIA Interrupt registers .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts @@ -3539,6 +3590,7 @@ Score: 43606 .const GREEN = 5 // The number of sprites in the multiplexer .const PLEX_COUNT = $20 + .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d // The address of the sprite pointers on the current screen (screen+0x3f8). .label PLEX_SCREEN_PTR = $400+$3f8 .label plex_show_idx = 6 @@ -3877,10 +3929,10 @@ init: { // asm { sei } // enable the interrupt sei - // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR - // [69] *((const nomodify byte*) CIA1_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR + // [69] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 lda #CIA_INTERRUPT_CLEAR - sta CIA1_INTERRUPT + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *IRQ_ENABLE = IRQ_RASTER // [70] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 lda #IRQ_RASTER diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym index a87068322..6a3c7b4b6 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym @@ -5,7 +5,7 @@ (label) @begin (label) @end (const nomodify byte*) BORDERCOL = (byte*) 53280 -(const nomodify byte*) CIA1_INTERRUPT = (byte*) 56333 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const nomodify byte*) D011 = (byte*) 53265 (const nomodify byte) GREEN = (byte) 5 @@ -13,6 +13,21 @@ (const nomodify byte) IRQ_RASTER = (byte) 1 (const nomodify byte*) IRQ_STATUS = (byte*) 53273 (const nomodify void()**) KERNEL_IRQ = (void()**) 788 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const nomodify byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } diff --git a/src/test/ref/plasma-center.log b/src/test/ref/plasma-center.log index 519c24acb..33e610839 100644 --- a/src/test/ref/plasma-center.log +++ b/src/test/ref/plasma-center.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$5 ← call toD018 (const nomodify byte*) SCREEN1 (const nomodify byte*) CHARSET Inlined call (byte~) main::$7 ← call toD018 (const nomodify byte*) SCREEN2 (const nomodify byte*) CHARSET @@ -1414,6 +1416,20 @@ SYMBOL TABLE SSA (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte*) D018 = (byte*)(number) $d018 (const byte*) HEAP_TOP = (byte*)(number) $a000 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte) NUM_SQUARES (byte) NUM_SQUARES#0 (byte) NUM_SQUARES#1 @@ -4456,6 +4472,20 @@ malloc::@return: scope:[malloc] from malloc VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte) NUM_SQUARES (byte*) SCREEN_ANGLE (void*) SCREEN_ANGLE#0 0.05405405405405406 @@ -7443,6 +7473,7 @@ Uplift Scope [init_dist_screen] 70,007: zp[1]:53 [ init_dist_screen::xd#0 init_d Uplift Scope [init_squares] 25,716.86: zp[1]:58 [ init_squares::i#2 init_squares::i#1 ] 20,002: zp[1]:154 [ init_squares::$3 ] 20,002: zp[1]:155 [ init_squares::$4 ] 16,337.07: zp[2]:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 15,001.5: zp[2]:59 [ init_squares::sqr#2 init_squares::sqr#1 ] Uplift Scope [] 12,104.4: zp[2]:63 [ heap_head#12 heap_head#1 ] 6,015.14: zp[2]:19 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] 381.02: zp[1]:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] 372.42: zp[1]:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] 16.15: zp[2]:152 [ SQUARES#1 ] 0.05: zp[2]:69 [ SCREEN_ANGLE#0 ] 0.05: zp[2]:67 [ SCREEN_DIST#0 ] Uplift Scope [malloc] 10,001: zp[2]:65 [ malloc::size#3 ] 3,333.67: zp[2]:156 [ malloc::mem#0 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [RADIX] Uplift Scope [print_char] Uplift Scope [print_cls] @@ -7466,6 +7497,7 @@ Limited combination testing to 100 combinations of 6144 possible. Uplifting [init_squares] best 1346862 combination reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp[2]:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] zp[2]:59 [ init_squares::sqr#2 init_squares::sqr#1 ] Uplifting [] best 1346862 combination zp[2]:63 [ heap_head#12 heap_head#1 ] zp[2]:19 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] zp[1]:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] zp[1]:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] zp[2]:152 [ SQUARES#1 ] zp[2]:69 [ SCREEN_ANGLE#0 ] zp[2]:67 [ SCREEN_DIST#0 ] Uplifting [malloc] best 1346862 combination zp[2]:65 [ malloc::size#3 ] zp[2]:156 [ malloc::mem#0 ] +Uplifting [MOS6526_CIA] best 1346862 combination Uplifting [RADIX] best 1346862 combination Uplifting [print_char] best 1346862 combination Uplifting [print_cls] best 1346862 combination @@ -9572,6 +9604,20 @@ FINAL SYMBOL TABLE (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte*) D018 = (byte*) 53272 (const byte*) HEAP_TOP = (byte*) 40960 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte) NUM_SQUARES (const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30 (const byte) RADIX::BINARY = (number) 2 diff --git a/src/test/ref/plasma-center.sym b/src/test/ref/plasma-center.sym index d438335e6..6826e2653 100644 --- a/src/test/ref/plasma-center.sym +++ b/src/test/ref/plasma-center.sym @@ -13,6 +13,20 @@ (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte*) D018 = (byte*) 53272 (const byte*) HEAP_TOP = (byte*) 40960 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte) NUM_SQUARES (const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30 (const byte) RADIX::BINARY = (number) 2 diff --git a/src/test/ref/processor-port-test.log b/src/test/ref/processor-port-test.log index 3480a9dc5..f05623cc8 100644 --- a/src/test/ref/processor-port-test.log +++ b/src/test/ref/processor-port-test.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -626,6 +628,20 @@ SYMBOL TABLE SSA (const nomodify byte*) BASIC_ROM = (byte*)(number) $a000 (const nomodify byte*) IO_RAM = (byte*)(number) $d000 (const nomodify byte*) KERNAL_ROM = (byte*)(number) $e000 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) PROCPORT = (byte*)(number) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte*) PROCPORT_DDR = (byte*)(number) 0 @@ -2306,6 +2322,20 @@ memset::@2: scope:[memset] from memset::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) main() (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c @@ -3482,6 +3512,7 @@ Uplift Scope [memset] 33,336.67: zp[2]:13 [ memset::dst#2 memset::dst#1 ] Uplift Scope [print_str] 31,254.25: zp[2]:11 [ print_str::str#10 print_str::str#13 print_str::str#0 ] Uplift Scope [print_uchar] 2,318.5: zp[1]:7 [ print_uchar::b#8 print_uchar::b#0 print_uchar::b#5 print_uchar::b#6 print_uchar::b#7 print_uchar::b#1 print_uchar::b#2 print_uchar::b#3 print_uchar::b#4 ] 2,002: zp[1]:15 [ print_uchar::$0 ] 2,002: zp[1]:16 [ print_uchar::$2 ] Uplift Scope [testProcport] 25.25: zp[1]:2 [ testProcport::ddr#23 ] 16.83: zp[1]:3 [ testProcport::port#23 ] 12.62: zp[1]:4 [ testProcport::ddr2#23 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] @@ -3493,6 +3524,7 @@ Uplifting [memset] best 2651 combination zp[2]:13 [ memset::dst#2 memset::dst#1 Uplifting [print_str] best 2651 combination zp[2]:11 [ print_str::str#10 print_str::str#13 print_str::str#0 ] Uplifting [print_uchar] best 2615 combination reg byte x [ print_uchar::b#8 print_uchar::b#0 print_uchar::b#5 print_uchar::b#6 print_uchar::b#7 print_uchar::b#1 print_uchar::b#2 print_uchar::b#3 print_uchar::b#4 ] reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ] Uplifting [testProcport] best 2540 combination reg byte x [ testProcport::ddr#23 ] zp[1]:3 [ testProcport::port#23 ] zp[1]:4 [ testProcport::ddr2#23 ] +Uplifting [MOS6526_CIA] best 2540 combination Uplifting [RADIX] best 2540 combination Uplifting [print_ln] best 2540 combination Uplifting [print_cls] best 2540 combination @@ -4707,6 +4739,20 @@ FINAL SYMBOL TABLE (const nomodify byte*) BASIC_ROM = (byte*) 40960 (const nomodify byte*) IO_RAM = (byte*) 53248 (const nomodify byte*) KERNAL_ROM = (byte*) 57344 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 diff --git a/src/test/ref/processor-port-test.sym b/src/test/ref/processor-port-test.sym index 2ce04f8d3..1fdab6131 100644 --- a/src/test/ref/processor-port-test.sym +++ b/src/test/ref/processor-port-test.sym @@ -4,6 +4,20 @@ (const nomodify byte*) BASIC_ROM = (byte*) 40960 (const nomodify byte*) IO_RAM = (byte*) 53248 (const nomodify byte*) KERNAL_ROM = (byte*) 57344 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 diff --git a/src/test/ref/roll-sprite-msb.log b/src/test/ref/roll-sprite-msb.log index a3c85a003..438fd3da3 100644 --- a/src/test/ref/roll-sprite-msb.log +++ b/src/test/ref/roll-sprite-msb.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -68,6 +70,20 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SPRITES_XMSB = (byte*)(number) $d010 (const nomodify byte*) SPRITES_XPOS = (byte*)(number) $d000 (const nomodify byte*) SPRITES_YPOS = (byte*)(number) $d001 @@ -260,6 +276,20 @@ position_sprite::@1: scope:[position_sprite] from position_sprite VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) main() (byte) main::s (byte) main::s#1 151.5 @@ -511,11 +541,13 @@ Potential registers zp[1]:12 [ position_sprite::$6 ] : zp[1]:12 , reg byte a , r REGISTER UPLIFT SCOPES Uplift Scope [position_sprite] 2,002: zp[1]:9 [ position_sprite::$2 ] 2,002: zp[1]:10 [ position_sprite::$4 ] 2,002: zp[1]:11 [ position_sprite::$5 ] 2,002: zp[1]:12 [ position_sprite::$6 ] 1,001: zp[1]:8 [ position_sprite::$1 ] 443.43: zp[1]:5 [ position_sprite::spriteno#0 ] 420.6: zp[2]:6 [ position_sprite::x#0 ] Uplift Scope [main] 212.1: zp[1]:2 [ main::s#2 main::s#1 ] 143.08: zp[2]:3 [ main::xpos#2 main::xpos#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [] Uplifting [position_sprite] best 937 combination reg byte a [ position_sprite::$2 ] reg byte a [ position_sprite::$4 ] reg byte a [ position_sprite::$5 ] reg byte a [ position_sprite::$6 ] zp[1]:8 [ position_sprite::$1 ] zp[1]:5 [ position_sprite::spriteno#0 ] zp[2]:6 [ position_sprite::x#0 ] Limited combination testing to 100 combinations of 2304 possible. Uplifting [main] best 817 combination reg byte x [ main::s#2 main::s#1 ] zp[2]:3 [ main::xpos#2 main::xpos#1 ] +Uplifting [MOS6526_CIA] best 817 combination Uplifting [] best 817 combination Attempting to uplift remaining variables inzp[1]:8 [ position_sprite::$1 ] Uplifting [position_sprite] best 810 combination reg byte y [ position_sprite::$1 ] @@ -703,6 +735,20 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SPRITES_XMSB = (byte*) 53264 (const nomodify byte*) SPRITES_XPOS = (byte*) 53248 (const nomodify byte*) SPRITES_YPOS = (byte*) 53249 diff --git a/src/test/ref/roll-sprite-msb.sym b/src/test/ref/roll-sprite-msb.sym index f695139bc..132256c45 100644 --- a/src/test/ref/roll-sprite-msb.sym +++ b/src/test/ref/roll-sprite-msb.sym @@ -1,6 +1,20 @@ (label) @1 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SPRITES_XMSB = (byte*) 53264 (const nomodify byte*) SPRITES_XPOS = (byte*) 53248 (const nomodify byte*) SPRITES_YPOS = (byte*) 53249 diff --git a/src/test/ref/scan-desire-problem.log b/src/test/ref/scan-desire-problem.log index fd6322444..83dc85315 100644 --- a/src/test/ref/scan-desire-problem.log +++ b/src/test/ref/scan-desire-problem.log @@ -1,3 +1,11 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) init::$3 ← call toD018 (const nomodify byte*) screen (const nomodify byte*) charset @@ -279,6 +287,20 @@ SYMBOL TABLE SSA (const nomodify byte*) BORDERCOL = (byte*)(number) $d020 (const nomodify byte*) D018 = (byte*)(number) $d018 (const nomodify byte) GREEN = (byte) 5 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) RED = (byte) 2 (const nomodify byte*) SPRITES_COLS = (byte*)(number) $d027 (const nomodify byte*) SPRITES_ENABLE = (byte*)(number) $d015 @@ -1031,6 +1053,20 @@ init_sprites::@return: scope:[init_sprites] from init_sprites VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) draw_block((byte) draw_block::tileno , (byte) draw_block::x , (byte) draw_block::y , (byte) draw_block::color) (byte*~) draw_block::$11 20002.0 (byte*~) draw_block::$12 20002.0 @@ -1861,6 +1897,7 @@ Uplift Scope [mul8u] 350,001,670.33: zp[2]:5 [ mul8u::res#2 mul8u::res#6 mul8u:: Uplift Scope [draw_block] 20,002: zp[1]:22 [ draw_block::y#1 ] 20,002: zp[2]:25 [ draw_block::z#0 ] 20,002: zp[2]:30 [ draw_block::$11 ] 20,002: zp[2]:32 [ draw_block::$12 ] 20,002: zp[2]:34 [ draw_block::$13 ] 20,002: zp[2]:36 [ draw_block::$14 ] 20,002: zp[2]:38 [ draw_block::$15 ] 20,002: zp[2]:40 [ draw_block::$16 ] 20,002: zp[2]:42 [ draw_block::$17 ] 20,002: zp[2]:44 [ draw_block::$18 ] 10,001: zp[1]:29 [ draw_block::drawtile#0 ] 5,625.56: zp[2]:27 [ draw_block::z#1 ] 3,667.33: zp[1]:16 [ draw_block::tileno#0 ] 3,667.33: zp[1]:17 [ draw_block::x#0 ] 3,667.33: zp[1]:18 [ draw_block::y#0 ] 3,333.67: zp[2]:20 [ draw_block::x1#0 ] 2,500.25: zp[1]:19 [ draw_block::tileno#1 ] Uplift Scope [memset] 35,672.33: zp[2]:12 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 1,833.67: zp[2]:47 [ memset::end#0 ] 1,428.71: zp[1]:11 [ memset::c#4 ] 0: zp[2]:9 [ memset::str#3 ] Uplift Scope [main] 2,627.62: zp[1]:3 [ main::y#2 main::y#1 ] 2,002: zp[1]:14 [ main::z#0 ] 2,002: zp[1]:15 [ main::tile#0 ] 411.55: zp[1]:2 [ main::x#2 main::x#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [init] Uplift Scope [init_sprites] Uplift Scope [] @@ -1870,6 +1907,7 @@ Uplifting [draw_block] best 92286 combination reg byte a [ draw_block::y#1 ] zp[ Limited combination testing to 100 combinations of 1296 possible. Uplifting [memset] best 92270 combination zp[2]:12 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:47 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:9 [ memset::str#3 ] Uplifting [main] best 91270 combination zp[1]:3 [ main::y#2 main::y#1 ] reg byte a [ main::z#0 ] reg byte y [ main::tile#0 ] zp[1]:2 [ main::x#2 main::x#1 ] +Uplifting [MOS6526_CIA] best 91270 combination Uplifting [init] best 91270 combination Uplifting [init_sprites] best 91270 combination Uplifting [] best 91270 combination @@ -2497,6 +2535,20 @@ FINAL SYMBOL TABLE (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) D018 = (byte*) 53272 (const nomodify byte) GREEN = (byte) 5 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) RED = (byte) 2 (const nomodify byte*) SPRITES_COLS = (byte*) 53287 (const nomodify byte*) SPRITES_ENABLE = (byte*) 53269 diff --git a/src/test/ref/scan-desire-problem.sym b/src/test/ref/scan-desire-problem.sym index 893014c16..0dd507956 100644 --- a/src/test/ref/scan-desire-problem.sym +++ b/src/test/ref/scan-desire-problem.sym @@ -10,6 +10,20 @@ (const nomodify byte*) BORDERCOL = (byte*) 53280 (const nomodify byte*) D018 = (byte*) 53272 (const nomodify byte) GREEN = (byte) 5 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) RED = (byte) 2 (const nomodify byte*) SPRITES_COLS = (byte*) 53287 (const nomodify byte*) SPRITES_ENABLE = (byte*) 53269 diff --git a/src/test/ref/screen-center-angle.asm b/src/test/ref/screen-center-angle.asm index 62515d7db..46c9b55ca 100644 --- a/src/test/ref/screen-center-angle.asm +++ b/src/test/ref/screen-center-angle.asm @@ -4,12 +4,10 @@ :BasicUpstart(main) .pc = $80d "Program" .label D018 = $d018 - // CIA #2 Timer A+B Value (32-bit) + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -21,6 +19,8 @@ .const CLOCKS_PER_INIT = $12 .label CHARSET = $2000 .label SCREEN = $2800 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f main: { .label BASE_SCREEN = $400 .label BASE_CHARSET = $1000 @@ -513,13 +513,13 @@ atan2_16: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // *CIA2_TIMER_AB = 0xffffffff lda #<$ffffffff sta CIA2_TIMER_AB @@ -529,12 +529,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL // } rts } diff --git a/src/test/ref/screen-center-angle.cfg b/src/test/ref/screen-center-angle.cfg index 0db28f242..43b8403f7 100644 --- a/src/test/ref/screen-center-angle.cfg +++ b/src/test/ref/screen-center-angle.cfg @@ -262,11 +262,11 @@ atan2_16::@1: scope:[atan2_16] from atan2_16 (void()) clock_start() clock_start: scope:[clock_start] from main::@1 - [122] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 - [123] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [122] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 + [123] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [124] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff - [125] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - [126] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START + [125] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [126] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start [127] return diff --git a/src/test/ref/screen-center-angle.log b/src/test/ref/screen-center-angle.log index fbdcbce4e..bfec6a65d 100644 --- a/src/test/ref/screen-center-angle.log +++ b/src/test/ref/screen-center-angle.log @@ -1,5 +1,11 @@ Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (const nomodify byte*) SCREEN (const nomodify byte*) CHARSET Inlined call (byte~) main::$7 ← call toD018 (const byte*) main::BASE_SCREEN (const byte*) main::BASE_CHARSET @@ -303,11 +309,11 @@ clock::@return: scope:[clock] from clock (void()) clock_start() clock_start: scope:[clock_start] from main::@1 - *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES - *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A *((const nomodify dword*) CIA2_TIMER_AB) ← (number) $ffffffff - *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start return @@ -563,9 +569,8 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const nomodify byte*) CHARSET = (byte*)(number) $2000 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const nomodify dword*) CIA2_TIMER_AB = (dword*)(number) $dd04 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*)(number) $dd0e -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*)(number) $dd0f (const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES = (byte) 0 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS = (byte) 0 @@ -578,6 +583,22 @@ SYMBOL TABLE SSA (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte*) D018 = (byte*)(number) $d018 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1116,9 +1137,8 @@ Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) Inlining cast *((const nomodify dword*) CIA2_TIMER_AB) ← (unumber)(number) $ffffffff Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53272 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (dword*) 56580 -Simplifying constant pointer cast (byte*) 56590 -Simplifying constant pointer cast (byte*) 56591 Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 10240 Simplifying constant pointer cast (byte*) 1024 @@ -1420,15 +1440,15 @@ Resolved ranged comparison value [76] if(atan2_16::i#1==rangelast(0,CORDIC_ITERA Resolved ranged next value [191] init_angle_screen::y#1 ← ++ init_angle_screen::y#5 to ++ Resolved ranged comparison value [193] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d Rewriting conditional comparison [165] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3 -Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES in [86] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES -Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS in [87] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES in [86] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES +Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS in [87] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A Successful SSA optimization PassNSimplifyConstantZero Simplifying expression containing zero init_font_hex::charset#2 in [8] *((byte*) init_font_hex::charset#2 + (const byte) init_font_hex::idx#0) ← (byte) 0 -Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A in [87] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (byte) 0|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -Simplifying expression containing zero CIA_TIMER_CONTROL_START in [89] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -Simplifying expression containing zero CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS in [90] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES +Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A in [87] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (byte) 0|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying expression containing zero CIA_TIMER_CONTROL_START in [89] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying expression containing zero CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS in [90] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES Successful SSA optimization PassNSimplifyExpressionWithZero -Simplifying expression containing zero CIA_TIMER_CONTROL_START in [90] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS +Simplifying expression containing zero CIA_TIMER_CONTROL_START in [90] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused variable (byte) init_font_hex::idx#4 and assignment [15] (byte) init_font_hex::idx#4 ← ++ (byte) init_font_hex::idx#3 Eliminating unused constant (const nomodify byte) CIA_TIMER_CONTROL_STOP @@ -1965,11 +1985,11 @@ atan2_16::@1: scope:[atan2_16] from atan2_16 (void()) clock_start() clock_start: scope:[clock_start] from main::@1 - [122] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 - [123] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [122] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 + [123] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [124] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff - [125] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - [126] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START + [125] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [126] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start [127] return @@ -2021,6 +2041,20 @@ init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 200002.0 (byte~) atan2_16::$22 2.00000002E8 @@ -2355,12 +2389,10 @@ Target platform is c64basic / MOS6502X .pc = $80d "Program" // Global Constants & labels .label D018 = $d018 - // CIA #2 Timer A+B Value (32-bit) + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -2372,6 +2404,8 @@ Target platform is c64basic / MOS6502X .const CLOCKS_PER_INIT = $12 .label CHARSET = $2000 .label SCREEN = $2800 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -3212,13 +3246,13 @@ atan2_16: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // [122] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [122] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // [123] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // [123] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // [124] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB @@ -3228,12 +3262,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // [125] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // [125] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // [126] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // [126] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL jmp __breturn // clock_start::@return __breturn: @@ -3495,11 +3529,11 @@ Statement [117] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> Statement [118] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a Statement [120] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a Statement [121] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a -Statement [122] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a -Statement [123] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [122] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [123] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a Statement [124] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a -Statement [125] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a -Statement [126] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [125] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [126] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a Statement [131] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] { } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp[1]:35 [ init_font_hex::c#6 init_font_hex::c#1 ] Removing always clobbered register reg byte y as potential for zp[1]:35 [ init_font_hex::c#6 init_font_hex::c#1 ] @@ -3577,11 +3611,11 @@ Statement [117] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> Statement [118] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a Statement [120] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a Statement [121] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:2::init_angle_screen:10::atan2_16:65 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a -Statement [122] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a -Statement [123] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [122] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [123] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a Statement [124] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a -Statement [125] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a -Statement [126] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [125] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [126] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a Statement [131] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] { } ) always clobbers reg byte a reg byte y Statement [133] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] { } ) always clobbers reg byte a Statement [134] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] { } ) always clobbers reg byte a @@ -3655,6 +3689,7 @@ Uplift Scope [print_ulong_at] 71: zp[4]:55 [ print_ulong_at::dw#0 ] Uplift Scope [clock] 37.33: zp[4]:61 [ clock::return#0 ] 22: zp[4]:43 [ clock::return#2 ] Uplift Scope [main] 22: zp[4]:47 [ main::$4 ] 22: zp[4]:51 [ main::cyclecount#0 ] Uplift Scope [RADIX] +Uplift Scope [MOS6526_CIA] Uplift Scope [clock_start] Uplift Scope [] @@ -3671,6 +3706,7 @@ Uplifting [print_ulong_at] best 1139156 combination zp[4]:55 [ print_ulong_at::d Uplifting [clock] best 1139156 combination zp[4]:61 [ clock::return#0 ] zp[4]:43 [ clock::return#2 ] Uplifting [main] best 1139156 combination zp[4]:47 [ main::$4 ] zp[4]:51 [ main::cyclecount#0 ] Uplifting [RADIX] best 1139156 combination +Uplifting [MOS6526_CIA] best 1139156 combination Uplifting [clock_start] best 1139156 combination Uplifting [] best 1139156 combination Attempting to uplift remaining variables inzp[1]:42 [ init_font_hex::idx#5 init_font_hex::idx#2 ] @@ -3746,12 +3782,10 @@ ASSEMBLER BEFORE OPTIMIZATION .pc = $80d "Program" // Global Constants & labels .label D018 = $d018 - // CIA #2 Timer A+B Value (32-bit) + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -3763,6 +3797,8 @@ ASSEMBLER BEFORE OPTIMIZATION .const CLOCKS_PER_INIT = $12 .label CHARSET = $2000 .label SCREEN = $2800 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -4519,13 +4555,13 @@ atan2_16: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // [122] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [122] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // [123] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // [123] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // [124] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB @@ -4535,12 +4571,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // [125] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // [125] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // [126] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // [126] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL jmp __breturn // clock_start::@return __breturn: @@ -4884,9 +4920,8 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const nomodify byte*) CHARSET = (byte*) 8192 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify dword*) CIA2_TIMER_AB = (dword*) 56580 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_START = (byte) 1 (const nomodify dword) CLOCKS_PER_INIT = (dword) $12 @@ -4896,6 +4931,22 @@ FINAL SYMBOL TABLE (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -5163,12 +5214,10 @@ Score: 1044967 .pc = $80d "Program" // Global Constants & labels .label D018 = $d018 - // CIA #2 Timer A+B Value (32-bit) + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -5180,6 +5229,8 @@ Score: 1044967 .const CLOCKS_PER_INIT = $12 .label CHARSET = $2000 .label SCREEN = $2800 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 @@ -5899,15 +5950,15 @@ atan2_16: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES - // [122] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // [122] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - // [123] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // [123] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // *CIA2_TIMER_AB = 0xffffffff // [124] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff @@ -5918,14 +5969,14 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - // [125] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // [125] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES - // [126] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // [126] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL // clock_start::@return // } // [127] return diff --git a/src/test/ref/screen-center-angle.sym b/src/test/ref/screen-center-angle.sym index 2920312a3..a12a5a42e 100644 --- a/src/test/ref/screen-center-angle.sym +++ b/src/test/ref/screen-center-angle.sym @@ -2,9 +2,8 @@ (label) @begin (label) @end (const nomodify byte*) CHARSET = (byte*) 8192 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify dword*) CIA2_TIMER_AB = (dword*) 56580 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_START = (byte) 1 (const nomodify dword) CLOCKS_PER_INIT = (dword) $12 @@ -14,6 +13,22 @@ (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/screen-center-distance.asm b/src/test/ref/screen-center-distance.asm index 5c9dedf7a..df9770ac2 100644 --- a/src/test/ref/screen-center-distance.asm +++ b/src/test/ref/screen-center-distance.asm @@ -4,12 +4,10 @@ .pc = $80d "Program" .const SIZEOF_WORD = 2 .label D018 = $d018 - // CIA #2 Timer A+B Value (32-bit) + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -19,6 +17,8 @@ .const CLOCKS_PER_INIT = $12 .label CHARSET = $2000 .label SCREEN = $2800 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f // Top of the heap used by malloc() .label HEAP_TOP = $a000 // The number of squares to pre-calculate. Limits what values sqr() can calculate and the result of sqrt() @@ -519,13 +519,13 @@ malloc: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // *CIA2_TIMER_AB = 0xffffffff lda #<$ffffffff sta CIA2_TIMER_AB @@ -535,12 +535,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL // } rts } diff --git a/src/test/ref/screen-center-distance.cfg b/src/test/ref/screen-center-distance.cfg index 4681fddb3..58e41e22a 100644 --- a/src/test/ref/screen-center-distance.cfg +++ b/src/test/ref/screen-center-distance.cfg @@ -290,11 +290,11 @@ malloc::@return: scope:[malloc] from malloc (void()) clock_start() clock_start: scope:[clock_start] from main::@1 - [132] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 - [133] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [132] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 + [133] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [134] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff - [135] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - [136] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START + [135] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [136] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start [137] return diff --git a/src/test/ref/screen-center-distance.log b/src/test/ref/screen-center-distance.log index 13f0480ec..8751e085d 100644 --- a/src/test/ref/screen-center-distance.log +++ b/src/test/ref/screen-center-distance.log @@ -1,5 +1,11 @@ Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (const nomodify byte*) SCREEN (const nomodify byte*) CHARSET Inlined call (byte~) main::$7 ← call toD018 (const byte*) main::BASE_SCREEN (const byte*) main::BASE_CHARSET @@ -293,11 +299,11 @@ clock::@return: scope:[clock] from clock (void()) clock_start() clock_start: scope:[clock_start] from main::@1 - *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES - *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A *((const nomodify dword*) CIA2_TIMER_AB) ← (number) $ffffffff - *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start return @@ -746,9 +752,8 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const nomodify byte*) CHARSET = (byte*)(number) $2000 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const nomodify dword*) CIA2_TIMER_AB = (dword*)(number) $dd04 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*)(number) $dd0e -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*)(number) $dd0f (const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES = (byte) 0 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS = (byte) 0 @@ -758,6 +763,20 @@ SYMBOL TABLE SSA (const nomodify byte*) D018 = (byte*)(number) $d018 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } (const byte*) HEAP_TOP = (byte*)(number) $a000 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte) NUM_SQUARES (byte) NUM_SQUARES#0 (byte) NUM_SQUARES#1 @@ -800,6 +819,8 @@ SYMBOL TABLE SSA (byte) NUM_SQUARES#7 (byte) NUM_SQUARES#8 (byte) NUM_SQUARES#9 +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1480,9 +1501,8 @@ Inlining cast *((const nomodify dword*) CIA2_TIMER_AB) ← (unumber)(number) $ff Inlining cast (byte) NUM_SQUARES#3 ← (unumber)(number) $30 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53272 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (dword*) 56580 -Simplifying constant pointer cast (byte*) 56590 -Simplifying constant pointer cast (byte*) 56591 Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 10240 Simplifying constant pointer cast (byte*) 1024 @@ -1857,15 +1877,15 @@ Resolved ranged comparison value [101] if(init_font_hex::c#1!=rangelast(0,$f)) g Resolved ranged next value [204] init_dist_screen::y#1 ← ++ init_dist_screen::y#10 to ++ Resolved ranged comparison value [206] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d Rewriting conditional comparison [198] if((byte) init_dist_screen::x#2<=(byte) $13) goto init_dist_screen::@6 -Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES in [105] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES -Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS in [106] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES in [105] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES +Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS in [106] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A Successful SSA optimization PassNSimplifyConstantZero Simplifying expression containing zero init_font_hex::charset#2 in [77] *((byte*) init_font_hex::charset#2 + (const byte) init_font_hex::idx#0) ← (byte) 0 -Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A in [106] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (byte) 0|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -Simplifying expression containing zero CIA_TIMER_CONTROL_START in [108] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -Simplifying expression containing zero CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS in [109] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES +Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A in [106] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (byte) 0|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying expression containing zero CIA_TIMER_CONTROL_START in [108] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying expression containing zero CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS in [109] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES Successful SSA optimization PassNSimplifyExpressionWithZero -Simplifying expression containing zero CIA_TIMER_CONTROL_START in [109] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS +Simplifying expression containing zero CIA_TIMER_CONTROL_START in [109] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused variable (byte*) heap_head#1 and assignment [1] (byte*) heap_head#1 ← (byte*) malloc::mem#0 Eliminating unused variable (byte) init_font_hex::idx#4 and assignment [66] (byte) init_font_hex::idx#4 ← ++ (byte) init_font_hex::idx#3 @@ -2455,11 +2475,11 @@ malloc::@return: scope:[malloc] from malloc (void()) clock_start() clock_start: scope:[clock_start] from main::@1 - [132] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 - [133] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [132] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 + [133] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [134] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff - [135] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - [136] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START + [135] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [136] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start [137] return @@ -2511,6 +2531,20 @@ init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte) NUM_SQUARES (word*) SQUARES (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) @@ -2883,12 +2917,10 @@ Target platform is c64basic / MOS6502X // Global Constants & labels .const SIZEOF_WORD = 2 .label D018 = $d018 - // CIA #2 Timer A+B Value (32-bit) + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -2898,6 +2930,8 @@ Target platform is c64basic / MOS6502X .const CLOCKS_PER_INIT = $12 .label CHARSET = $2000 .label SCREEN = $2800 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f // Top of the heap used by malloc() .label HEAP_TOP = $a000 // The number of squares to pre-calculate. Limits what values sqr() can calculate and the result of sqrt() @@ -3805,13 +3839,13 @@ malloc: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // [132] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [132] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // [133] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // [133] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // [134] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB @@ -3821,12 +3855,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // [135] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // [135] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // [136] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // [136] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL jmp __breturn // clock_start::@return __breturn: @@ -4071,11 +4105,11 @@ Removing always clobbered register reg byte y as potential for zp[1]:27 [ init_s Statement [125] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] { } ) always clobbers reg byte a Statement [126] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] { } ) always clobbers reg byte a Statement [128] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] { } ) always clobbers reg byte a -Statement [132] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a -Statement [133] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [132] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [133] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a Statement [134] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a -Statement [135] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a -Statement [136] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [135] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [136] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a Statement [141] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] { } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp[1]:34 [ init_font_hex::c#6 init_font_hex::c#1 ] Removing always clobbered register reg byte y as potential for zp[1]:34 [ init_font_hex::c#6 init_font_hex::c#1 ] @@ -4146,11 +4180,11 @@ Statement [124] *((word*) init_squares::squares#2) ← (word) init_squares::sqr# Statement [125] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] { } ) always clobbers reg byte a Statement [126] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] { } ) always clobbers reg byte a Statement [128] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] { } ) always clobbers reg byte a -Statement [132] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a -Statement [133] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [132] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [133] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a Statement [134] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a -Statement [135] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a -Statement [136] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [135] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [136] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a Statement [141] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] { } ) always clobbers reg byte a reg byte y Statement [143] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] { } ) always clobbers reg byte a Statement [144] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] { } ) always clobbers reg byte a @@ -4213,11 +4247,11 @@ Statement [124] *((word*) init_squares::squares#2) ← (word) init_squares::sqr# Statement [125] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] { } ) always clobbers reg byte a Statement [126] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] { } ) always clobbers reg byte a Statement [128] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:2::init_dist_screen:10::init_squares:50 [ init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] { } ) always clobbers reg byte a -Statement [132] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a -Statement [133] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [132] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [133] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a Statement [134] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a -Statement [135] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a -Statement [136] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [135] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a +Statement [136] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:8 [ ] { } ) always clobbers reg byte a Statement [141] *((byte*) init_font_hex::charset#2) ← (byte) 0 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 ] { } ) always clobbers reg byte a reg byte y Statement [143] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 ] { } ) always clobbers reg byte a Statement [144] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] ( main:2::init_font_hex:5 [ init_font_hex::proto_hi#6 init_font_hex::c#6 init_font_hex::charset#2 init_font_hex::proto_lo#4 init_font_hex::c1#4 init_font_hex::i#2 init_font_hex::idx#5 init_font_hex::$0 init_font_hex::$1 ] { } ) always clobbers reg byte a @@ -4303,6 +4337,7 @@ Uplift Scope [clock] 37.33: zp[4]:60 [ clock::return#0 ] 22: zp[4]:42 [ clock::r Uplift Scope [main] 22: zp[4]:46 [ main::$4 ] 22: zp[4]:50 [ main::cyclecount#0 ] Uplift Scope [RADIX] Uplift Scope [malloc] +Uplift Scope [MOS6526_CIA] Uplift Scope [clock_start] Uplift Scope [] @@ -4322,6 +4357,7 @@ Uplifting [clock] best 239596 combination zp[4]:60 [ clock::return#0 ] zp[4]:42 Uplifting [main] best 239596 combination zp[4]:46 [ main::$4 ] zp[4]:50 [ main::cyclecount#0 ] Uplifting [RADIX] best 239596 combination Uplifting [malloc] best 239596 combination +Uplifting [MOS6526_CIA] best 239596 combination Uplifting [clock_start] best 239596 combination Uplifting [] best 239596 combination Attempting to uplift remaining variables inzp[1]:41 [ init_font_hex::idx#5 init_font_hex::idx#2 ] @@ -4396,12 +4432,10 @@ ASSEMBLER BEFORE OPTIMIZATION // Global Constants & labels .const SIZEOF_WORD = 2 .label D018 = $d018 - // CIA #2 Timer A+B Value (32-bit) + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -4411,6 +4445,8 @@ ASSEMBLER BEFORE OPTIMIZATION .const CLOCKS_PER_INIT = $12 .label CHARSET = $2000 .label SCREEN = $2800 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f // Top of the heap used by malloc() .label HEAP_TOP = $a000 // The number of squares to pre-calculate. Limits what values sqr() can calculate and the result of sqrt() @@ -5198,13 +5234,13 @@ malloc: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // [132] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [132] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // [133] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // [133] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // [134] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB @@ -5214,12 +5250,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // [135] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // [135] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // [136] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // [136] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL jmp __breturn // clock_start::@return __breturn: @@ -5564,17 +5600,32 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const nomodify byte*) CHARSET = (byte*) 8192 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify dword*) CIA2_TIMER_AB = (dword*) 56580 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_START = (byte) 1 (const nomodify dword) CLOCKS_PER_INIT = (dword) $12 (const nomodify byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } (const byte*) HEAP_TOP = (byte*) 40960 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte) NUM_SQUARES (const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30 +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -5866,12 +5917,10 @@ Score: 203667 // Global Constants & labels .const SIZEOF_WORD = 2 .label D018 = $d018 - // CIA #2 Timer A+B Value (32-bit) + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -5881,6 +5930,8 @@ Score: 203667 .const CLOCKS_PER_INIT = $12 .label CHARSET = $2000 .label SCREEN = $2800 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f // Top of the heap used by malloc() .label HEAP_TOP = $a000 // The number of squares to pre-calculate. Limits what values sqr() can calculate and the result of sqrt() @@ -6624,15 +6675,15 @@ malloc: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES - // [132] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // [132] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - // [133] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // [133] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // *CIA2_TIMER_AB = 0xffffffff // [134] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff @@ -6643,14 +6694,14 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - // [135] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // [135] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES - // [136] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // [136] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL // clock_start::@return // } // [137] return diff --git a/src/test/ref/screen-center-distance.sym b/src/test/ref/screen-center-distance.sym index e68b3b4fd..9542d3bc9 100644 --- a/src/test/ref/screen-center-distance.sym +++ b/src/test/ref/screen-center-distance.sym @@ -2,17 +2,32 @@ (label) @begin (label) @end (const nomodify byte*) CHARSET = (byte*) 8192 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify dword*) CIA2_TIMER_AB = (dword*) 56580 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_START = (byte) 1 (const nomodify dword) CLOCKS_PER_INIT = (dword) $12 (const nomodify byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } (const byte*) HEAP_TOP = (byte*) 40960 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte) NUM_SQUARES (const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30 +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/screen-show-spiral-buckets.log b/src/test/ref/screen-show-spiral-buckets.log index 9659771b0..c2f1f3aad 100644 --- a/src/test/ref/screen-show-spiral-buckets.log +++ b/src/test/ref/screen-show-spiral-buckets.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -1306,6 +1308,20 @@ SYMBOL TABLE SSA (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte) FILL_CHAR = (byte) '*' (const byte*) HEAP_TOP = (byte*)(number) $a000 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) NUM_BUCKETS = (byte) $30 (byte) NUM_SQUARES (byte) NUM_SQUARES#0 @@ -3914,6 +3930,20 @@ VARIABLE REGISTER WEIGHTS (void*) BUCKET_IDX#0 0.0425531914893617 (byte*) BUCKET_SIZES (void*) BUCKET_SIZES#0 0.024691358024691357 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte) NUM_SQUARES (byte*) SCREEN_ANGLE (void*) SCREEN_ANGLE#0 0.046511627906976744 @@ -6949,6 +6979,7 @@ Uplift Scope [init_buckets] 3,003: zp[1]:9 [ init_buckets::i#2 init_buckets::i#1 Uplift Scope [main] 6,673.33: zp[2]:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] 3,737.07: zp[1]:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] 2,358.11: zp[2]:4 [ main::min_offset#2 main::min_offset#8 ] 2,002: zp[1]:84 [ main::$24 ] 2,002: zp[2]:85 [ main::fill#0 ] 1,501.5: zp[2]:87 [ main::angle#0 ] 1,334.67: zp[1]:3 [ main::i#2 main::i#1 ] 202: zp[1]:78 [ main::$23 ] 202: zp[2]:82 [ main::fill1#0 ] 125.24: zp[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ] 75.19: zp[1]:81 [ main::bucket_size#0 ] 64.82: zp[2]:79 [ main::bucket#0 ] Uplift Scope [malloc] 13,004: zp[2]:23 [ malloc::size#7 malloc::size#6 ] 2,000.2: zp[2]:109 [ malloc::mem#0 ] Uplift Scope [] 12,140.15: zp[2]:21 [ heap_head#18 heap_head#1 ] 16.15: zp[2]:170 [ SQUARES#1 ] 0.13: zp[2]:64 [ SCREEN_DIST#0 ] 0.05: zp[2]:66 [ SCREEN_ANGLE#0 ] 0.04: zp[2]:72 [ BUCKET_IDX#0 ] 0.03: zp[2]:70 [ BUCKETS#0 ] 0.02: zp[2]:68 [ BUCKET_SIZES#0 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [RADIX] Uplifting [bsearch16u] best 1348976 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp[2]:55 [ bsearch16u::return#1 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::return#7 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$14 ] zp[2]:165 [ bsearch16u::result#0 ] zp[2]:163 [ bsearch16u::pivot#0 ] zp[2]:152 [ bsearch16u::return#3 ] zp[2]:150 [ bsearch16u::key#0 ] @@ -6966,6 +6997,7 @@ Uplifting [main] best 1227016 combination zp[2]:7 [ main::min_offset#5 main::min Limited combination testing to 100 combinations of 256 possible. Uplifting [malloc] best 1227016 combination zp[2]:23 [ malloc::size#7 malloc::size#6 ] zp[2]:109 [ malloc::mem#0 ] Uplifting [] best 1227016 combination zp[2]:21 [ heap_head#18 heap_head#1 ] zp[2]:170 [ SQUARES#1 ] zp[2]:64 [ SCREEN_DIST#0 ] zp[2]:66 [ SCREEN_ANGLE#0 ] zp[2]:72 [ BUCKET_IDX#0 ] zp[2]:70 [ BUCKETS#0 ] zp[2]:68 [ BUCKET_SIZES#0 ] +Uplifting [MOS6526_CIA] best 1227016 combination Uplifting [RADIX] best 1227016 combination Attempting to uplift remaining variables inzp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] Uplifting [init_dist_screen] best 1227016 combination zp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] @@ -9080,6 +9112,20 @@ FINAL SYMBOL TABLE (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte) FILL_CHAR = (byte) '*' (const byte*) HEAP_TOP = (byte*) 40960 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) NUM_BUCKETS = (byte) $30 (byte) NUM_SQUARES (const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30 diff --git a/src/test/ref/screen-show-spiral-buckets.sym b/src/test/ref/screen-show-spiral-buckets.sym index 8eff469b3..2bd922d17 100644 --- a/src/test/ref/screen-show-spiral-buckets.sym +++ b/src/test/ref/screen-show-spiral-buckets.sym @@ -21,6 +21,20 @@ (const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f (const nomodify byte) FILL_CHAR = (byte) '*' (const byte*) HEAP_TOP = (byte*) 40960 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) NUM_BUCKETS = (byte) $30 (byte) NUM_SQUARES (const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30 diff --git a/src/test/ref/semi-struct-2.asm b/src/test/ref/semi-struct-2.asm index f44c20023..ab13ab356 100644 --- a/src/test/ref/semi-struct-2.asm +++ b/src/test/ref/semi-struct-2.asm @@ -21,18 +21,15 @@ :BasicUpstart(main) .pc = $80d "Program" .const KEY_SPACE = $3c - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA #1 Port A data direction register. - .label CIA1_PORT_A_DDR = $dc02 - // CIA #1 Port B data direction register. - .label CIA1_PORT_B_DDR = $dc03 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // The size of a file ENTRY .const SIZEOF_ENTRY = $12 // The maximal number of files .const MAX_FILES = $90 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = 3 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label print_line_cursor = $c .label print_char_cursor = 2 .label print_line_cursor_1 = 4 @@ -277,11 +274,11 @@ keyboard_key_pressed: { // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // ~*CIA1_PORT_B - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // } rts @@ -899,14 +896,14 @@ mul8u: { } // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { - // *CIA1_PORT_A_DDR = $ff + // CIA1->PORT_A_DDR = $ff // Keyboard Matrix Columns Write Mode lda #$ff - sta CIA1_PORT_A_DDR - // *CIA1_PORT_B_DDR = $00 + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA1->PORT_B_DDR = $00 // Keyboard Matrix Columns Read Mode lda #0 - sta CIA1_PORT_B_DDR + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR // } rts } diff --git a/src/test/ref/semi-struct-2.cfg b/src/test/ref/semi-struct-2.cfg index ea1b8887e..d7b6e6b93 100644 --- a/src/test/ref/semi-struct-2.cfg +++ b/src/test/ref/semi-struct-2.cfg @@ -166,8 +166,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [80] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) - [81] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [80] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) + [81] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [82] return @@ -582,8 +582,8 @@ mul8u::@3: scope:[mul8u] from mul8u::@2 mul8u::@4 (void()) keyboard_init() keyboard_init: scope:[keyboard_init] from main - [258] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff - [259] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 + [258] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff + [259] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 to:keyboard_init::@return keyboard_init::@return: scope:[keyboard_init] from keyboard_init [260] return diff --git a/src/test/ref/semi-struct-2.log b/src/test/ref/semi-struct-2.log index 4ad61f098..7a9613a15 100644 --- a/src/test/ref/semi-struct-2.log +++ b/src/test/ref/semi-struct-2.log @@ -1,3 +1,11 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte*~) main::$1 ← call fileEntry (number) 1 Inlined call (byte*~) main::$2 ← call fileEntry (number) 2 @@ -273,8 +281,8 @@ print_cls::@return: scope:[print_cls] from print_cls::@1 (void()) keyboard_init() keyboard_init: scope:[keyboard_init] from main - *((const nomodify byte*) CIA1_PORT_A_DDR) ← (number) $ff - *((const nomodify byte*) CIA1_PORT_B_DDR) ← (number) 0 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) $ff + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (number) 0 to:keyboard_init::@return keyboard_init::@return: scope:[keyboard_init] from keyboard_init return @@ -283,8 +291,8 @@ keyboard_init::@return: scope:[keyboard_init] from keyboard_init (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed (byte) keyboard_matrix_read::rowid#1 ← phi( keyboard_key_pressed/(byte) keyboard_matrix_read::rowid#0 ) - *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) - (byte~) keyboard_matrix_read::$0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) + (byte~) keyboard_matrix_read::$0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) (byte) keyboard_matrix_read::row_pressed_bits#0 ← (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#0 ← (byte) keyboard_matrix_read::row_pressed_bits#0 to:keyboard_matrix_read::@return @@ -1546,12 +1554,27 @@ SYMBOL TABLE SSA (label) @3 (label) @begin (label) @end -(const nomodify byte*) CIA1_PORT_A = (byte*)(number) $dc00 -(const nomodify byte*) CIA1_PORT_A_DDR = (byte*)(number) $dc02 -(const nomodify byte*) CIA1_PORT_B = (byte*)(number) $dc01 -(const nomodify byte*) CIA1_PORT_B_DDR = (byte*)(number) $dc03 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte) KEY_SPACE = (byte) $3c (const nomodify byte) MAX_FILES = (byte) $90 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -2845,8 +2868,8 @@ Adding number conversion cast (unumber) 4 in (byte~) print_uchar::$0 ← (byte) Adding number conversion cast (unumber) $f in (number~) print_uchar::$2 ← (byte) print_uchar::b#11 & (number) $f Adding number conversion cast (unumber) print_uchar::$2 in (number~) print_uchar::$2 ← (byte) print_uchar::b#11 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 -Adding number conversion cast (unumber) $ff in *((const nomodify byte*) CIA1_PORT_A_DDR) ← (number) $ff -Adding number conversion cast (unumber) 0 in *((const nomodify byte*) CIA1_PORT_B_DDR) ← (number) 0 +Adding number conversion cast (unumber) $ff in *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) $ff +Adding number conversion cast (unumber) 0 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (number) 0 Adding number conversion cast (unumber) 7 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#2 & (number) 7 Adding number conversion cast (unumber) keyboard_key_pressed::$0 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#2 & (unumber)(number) 7 Adding number conversion cast (unumber) 3 in (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_key_pressed::key#2 >> (number) 3 @@ -2911,8 +2934,8 @@ Adding number conversion cast (unumber) $11 in (byte*~) printEntry::entryTLo1_$0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast *((const nomodify byte*) CIA1_PORT_A_DDR) ← (unumber)(number) $ff -Inlining cast *((const nomodify byte*) CIA1_PORT_B_DDR) ← (unumber)(number) 0 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) $ff +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (unumber)(number) 0 Inlining cast (byte) main::fileEntry1_idx#0 ← (unumber)(number) 1 Inlining cast (byte) main::fileEntry2_idx#0 ← (unumber)(number) 2 Inlining cast (byte) initEntry::n#0 ← (unumber)(number) 0 @@ -2921,10 +2944,7 @@ Inlining cast *((byte**~) initEntry::$0) ← (byte*)(unumber~) initEntry::$1 Inlining cast *((byte**~) initEntry::$2) ← (byte*)(unumber~) initEntry::$3 Inlining cast *((word**~) initEntry::$6) ← (word*)(unumber~) initEntry::$7 Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (byte*) 56320 -Simplifying constant pointer cast (byte*) 56321 -Simplifying constant pointer cast (byte*) 56322 -Simplifying constant pointer cast (byte*) 56323 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 @@ -3436,6 +3456,7 @@ Converting *(pointer+n) to pointer[n] [307] (byte) print_uchar::b#7 ← *((byte* Converting *(pointer+n) to pointer[n] [316] (byte) print_uchar::b#8 ← *((byte*) printEntry::entryTHi1_return#0) -- *(printEntry::entry#10 + $10) Converting *(pointer+n) to pointer[n] [325] (byte) print_uchar::b#9 ← *((byte*) printEntry::entryTLo1_return#0) -- *(printEntry::entry#10 + $11) Successful SSA optimization Pass2InlineDerefIdx +Simplifying expression containing zero (byte*)CIA1 in [76] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) Simplifying expression containing zero initEntry::entry#10 in [162] (byte*~) initEntry::entryBufDisk1_$0 ← (byte*) initEntry::entry#10 + (byte) 0 Simplifying expression containing zero (byte**)initEntry::entry#10 in [165] *((byte**)(byte*) initEntry::entry#10 + (byte) 0) ← (byte*)(word~) initEntry::$1 Simplifying expression containing zero printEntry::entry#10 in [211] (byte*~) printEntry::entryBufDisk1_$0 ← (byte*) printEntry::entry#10 + (byte) 0 @@ -3468,6 +3489,7 @@ Eliminating unused variable (byte*) printEntry::entryBAddrHi1_return#0 and assig Eliminating unused variable (byte*) printEntry::entryTHi1_return#0 and assignment [211] (byte*) printEntry::entryTHi1_return#0 ← (byte*) printEntry::entry#10 + (byte) $10 Eliminating unused variable (byte*) printEntry::entryTLo1_return#0 and assignment [216] (byte*) printEntry::entryTLo1_return#0 ← (byte*) printEntry::entry#10 + (byte) $11 Eliminating unused constant (const void*) memset::return#2 +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A Successful SSA optimization PassNEliminateUnusedVars Eliminating unused variable (byte*~) initEntry::entryBufDisk1_$0 and assignment [104] (byte*~) initEntry::entryBufDisk1_$0 ← (byte*) initEntry::entry#10 Eliminating unused variable (byte*~) initEntry::entryBufEdit1_$0 and assignment [107] (byte*~) initEntry::entryBufEdit1_$0 ← (byte*) initEntry::entry#10 + (byte) 2 @@ -4096,8 +4118,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [80] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) - [81] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [80] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) + [81] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [82] return @@ -4512,8 +4534,8 @@ mul8u::@3: scope:[mul8u] from mul8u::@2 mul8u::@4 (void()) keyboard_init() keyboard_init: scope:[keyboard_init] from main - [258] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff - [259] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 + [258] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff + [259] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 to:keyboard_init::@return keyboard_init::@return: scope:[keyboard_init] from keyboard_init [260] return @@ -4521,6 +4543,20 @@ keyboard_init::@return: scope:[keyboard_init] from keyboard_init VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) initEntry((byte*) initEntry::entry , (byte) initEntry::n) (word~) initEntry::$1 101.0 (byte~) initEntry::$11 202.0 @@ -4902,18 +4938,15 @@ Target platform is c64basic / MOS6502X .pc = $80d "Program" // Global Constants & labels .const KEY_SPACE = $3c - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA #1 Port A data direction register. - .label CIA1_PORT_A_DDR = $dc02 - // CIA #1 Port B data direction register. - .label CIA1_PORT_B_DDR = $dc03 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // The size of a file ENTRY .const SIZEOF_ENTRY = $12 // The maximal number of files .const MAX_FILES = $90 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = 3 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label print_line_cursor = $2c .label print_char_cursor = 7 .label print_line_cursor_1 = 9 @@ -5436,11 +5469,11 @@ keyboard_key_pressed: { keyboard_matrix_read: { .label return = $2b .label return_1 = $28 - // [80] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // [80] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // [81] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuz1=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [81] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuz1=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff sta.z return jmp __breturn @@ -6676,14 +6709,14 @@ mul8u: { // keyboard_init // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { - // [258] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 + // [258] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Write Mode lda #$ff - sta CIA1_PORT_A_DDR - // [259] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [259] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Read Mode lda #0 - sta CIA1_PORT_B_DDR + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR jmp __breturn // keyboard_init::@return __breturn: @@ -6722,8 +6755,8 @@ Statement [53] (byte*) print_char_cursor#229 ← (byte*) print_line_cursor#1 [ p Statement [55] (byte*) print_char_cursor#208 ← (byte*) print_line_cursor#1 [ print_char_cursor#208 ] ( main:2 [ print_char_cursor#208 ] { { print_char_cursor#165 = print_char_cursor#208 } } ) always clobbers reg byte a Statement [70] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:21::memset:66 [ main::entry1#0 main::entry2#0 memset::dst#2 ] { } main:2::print_cls:42::memset:66 [ main::entry2#0 memset::dst#2 ] { } main:2::print_cls:63::memset:66 [ memset::dst#2 ] { } ) always clobbers reg byte a Statement [72] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:21::memset:66 [ main::entry1#0 main::entry2#0 memset::dst#2 ] { } main:2::print_cls:42::memset:66 [ main::entry2#0 memset::dst#2 ] { } main:2::print_cls:63::memset:66 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y -Statement [80] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:37::keyboard_matrix_read:75 [ main::entry2#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58::keyboard_matrix_read:75 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [81] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:37::keyboard_matrix_read:75 [ main::entry2#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58::keyboard_matrix_read:75 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [80] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:37::keyboard_matrix_read:75 [ main::entry2#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58::keyboard_matrix_read:75 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [81] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:37::keyboard_matrix_read:75 [ main::entry2#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58::keyboard_matrix_read:75 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [85] if((byte) 0!=*((byte*) print_str::str#18)) goto print_str::@2 [ print_str::str#18 print_char_cursor#142 ] ( main:2::print_str:23 [ main::entry1#0 main::entry2#0 print_str::str#18 print_char_cursor#142 ] { } main:2::print_str:35 [ main::entry2#0 print_str::str#18 print_char_cursor#142 ] { { print_char_cursor#165 = print_char_cursor#207 } } main:2::print_str:44 [ main::entry2#0 print_str::str#18 print_char_cursor#142 ] { } main:2::print_str:56 [ print_str::str#18 print_char_cursor#142 ] { { print_char_cursor#165 = print_char_cursor#208 } } main:2::printEntry:30::print_str:102 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#209 } } main:2::printEntry:51::print_str:102 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#209 } } main:2::printEntry:30::print_str:109 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#210 } } main:2::printEntry:51::print_str:109 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#210 } } main:2::printEntry:30::print_str:116 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#211 } } main:2::printEntry:51::print_str:116 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#211 } } main:2::printEntry:30::print_str:123 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#212 } } main:2::printEntry:51::print_str:123 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#212 } } main:2::printEntry:30::print_str:130 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#213 } } main:2::printEntry:51::print_str:130 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#213 } } main:2::printEntry:30::print_str:137 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#214 } } main:2::printEntry:51::print_str:137 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#214 } } main:2::printEntry:30::print_str:144 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#215 } } main:2::printEntry:51::print_str:144 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#215 } } main:2::printEntry:30::print_str:151 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#216 } } main:2::printEntry:51::print_str:151 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#216 } } main:2::printEntry:30::print_str:158 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#217 } } main:2::printEntry:51::print_str:158 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#217 } } main:2::printEntry:30::print_str:165 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#218 } } main:2::printEntry:51::print_str:165 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#218 } } main:2::printEntry:30::print_str:172 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#219 } } main:2::printEntry:51::print_str:172 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#219 } } main:2::printEntry:30::print_str:179 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#220 } } main:2::printEntry:51::print_str:179 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#220 } } main:2::printEntry:30::print_str:186 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#221 } } main:2::printEntry:51::print_str:186 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#221 } } ) always clobbers reg byte a reg byte y Statement [87] (byte) print_char::ch#0 ← *((byte*) print_str::str#18) [ print_str::str#18 print_char_cursor#142 print_char::ch#0 ] ( main:2::print_str:23 [ main::entry1#0 main::entry2#0 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::print_str:35 [ main::entry2#0 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { print_char_cursor#165 = print_char_cursor#207 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::print_str:44 [ main::entry2#0 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::print_str:56 [ print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { print_char_cursor#165 = print_char_cursor#208 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:102 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#209 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:102 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#209 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:109 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#210 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:109 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#210 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:116 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#211 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:116 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#211 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:123 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#212 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:123 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#212 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:130 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#213 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:130 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#213 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:137 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#214 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:137 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#214 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:144 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#215 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:144 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#215 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:151 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#216 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:151 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#216 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:158 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#217 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:158 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#217 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:165 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#218 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:165 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#218 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:172 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#219 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:172 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#219 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:179 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#220 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:179 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#220 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:186 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#221 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:186 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#221 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } ) always clobbers reg byte a reg byte y Statement [91] *((byte*) print_char_cursor#82) ← (byte) print_char::ch#3 [ print_char_cursor#82 ] ( main:2::print_str:23::print_char:88 [ main::entry1#0 main::entry2#0 print_str::str#18 print_char_cursor#82 ] { { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::print_str:35::print_char:88 [ main::entry2#0 print_str::str#18 print_char_cursor#82 ] { { print_char_cursor#165 = print_char_cursor#207 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::print_str:44::print_char:88 [ main::entry2#0 print_str::str#18 print_char_cursor#82 ] { { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::print_str:56::print_char:88 [ print_str::str#18 print_char_cursor#82 ] { { print_char_cursor#165 = print_char_cursor#208 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:102::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#209 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:102::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#209 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:109::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#210 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:109::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#210 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:116::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#211 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:116::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#211 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:123::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#212 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:123::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#212 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:130::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#213 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:130::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#213 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:137::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#214 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:137::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#214 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:144::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#215 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:144::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#215 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:151::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#216 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:151::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#216 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:158::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#217 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:158::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#217 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:165::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#218 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:165::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#218 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:172::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#219 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:172::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#219 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:179::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#220 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:179::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#220 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:186::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#221 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:186::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#221 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_uchar:133::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#2 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uchar:133::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#2 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uchar:140::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#3 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uchar:140::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#3 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uchar:147::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#4 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uchar:147::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#4 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uchar:154::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#5 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uchar:154::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#5 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uchar:168::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#6 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uchar:168::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#6 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uchar:175::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#7 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uchar:175::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#7 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uchar:182::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#8 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uchar:182::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#8 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uchar:189::print_char:196 [ main::entry2#0 print_line_cursor#1 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#9 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uchar:189::print_char:196 [ print_line_cursor#1 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#9 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:105::print_uchar:203::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#5 = print_uint::w#7 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:105::print_uchar:203::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#5 = print_uint::w#7 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:112::print_uchar:203::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#5 = print_uint::w#8 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:112::print_uchar:203::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#5 = print_uint::w#8 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:119::print_uchar:203::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#2 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:119::print_uchar:203::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#2 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:126::print_uchar:203::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:126::print_uchar:203::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:161::print_uchar:203::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#4 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:161::print_uchar:203::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#4 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:105::print_uchar:205::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#5 = print_uint::w#7 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:105::print_uchar:205::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#5 = print_uint::w#7 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:112::print_uchar:205::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#5 = print_uint::w#8 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:112::print_uchar:205::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#5 = print_uint::w#8 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:119::print_uchar:205::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#2 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:119::print_uchar:205::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#2 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:126::print_uchar:205::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:126::print_uchar:205::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:161::print_uchar:205::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#4 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:161::print_uchar:205::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#4 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uchar:133::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#2 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uchar:133::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#2 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uchar:140::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#3 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uchar:140::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#3 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uchar:147::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#4 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uchar:147::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#4 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uchar:154::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#5 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uchar:154::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#5 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uchar:168::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#6 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uchar:168::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#6 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uchar:175::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#7 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uchar:175::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#7 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uchar:182::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#8 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uchar:182::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#8 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uchar:189::print_char:199 [ main::entry2#0 print_line_cursor#1 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#9 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uchar:189::print_char:199 [ print_line_cursor#1 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#9 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uint:105::print_uchar:203::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#5 = print_uint::w#7 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uint:105::print_uchar:203::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#5 = print_uint::w#7 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uint:112::print_uchar:203::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#5 = print_uint::w#8 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uint:112::print_uchar:203::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#5 = print_uint::w#8 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uint:119::print_uchar:203::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#2 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uint:119::print_uchar:203::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#2 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uint:126::print_uchar:203::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uint:126::print_uchar:203::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uint:161::print_uchar:203::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#4 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uint:161::print_uchar:203::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#4 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uint:105::print_uchar:205::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#5 = print_uint::w#7 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:51::print_uint:105::print_uchar:205::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#5 = print_uint::w#7 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:30::print_uint:112::print_uchar:205::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#5 = print_uint::w#8 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:51::print_uint:112::print_uchar:205::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#5 = print_uint::w#8 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:30::print_uint:119::print_uchar:205::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#2 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:51::print_uint:119::print_uchar:205::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#2 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:30::print_uint:126::print_uchar:205::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:51::print_uint:126::print_uchar:205::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:30::print_uint:161::print_uchar:205::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#4 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:51::print_uint:161::print_uchar:205::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#4 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } ) always clobbers reg byte y @@ -6803,8 +6836,8 @@ Statement [245] (byte~) initEntry::$25 ← (byte) $dd + (byte) initEntry::n#10 [ Statement [246] *((byte*) initEntry::entry#10 + (byte) $11) ← (byte~) initEntry::$25 [ ] ( main:2::initEntry:17 [ main::entry1#0 main::entry2#0 ] { { initEntry::entry#0 = initEntry::entry#10 main::entry1#0 } } main:2::initEntry:19 [ main::entry1#0 main::entry2#0 ] { { initEntry::entry#1 = initEntry::entry#10 main::entry2#0 } } ) always clobbers reg byte y Statement [254] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::mul8u:7 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] { { mul8u::return#2 = mul8u::res#2 } } main:2::mul8u:12 [ main::entry1#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] { { mul8u::return#3 = mul8u::res#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:19 [ mul8u::a#3 mul8u::a#6 mul8u::a#0 ] -Statement [258] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff [ ] ( main:2::keyboard_init:5 [ ] { } ) always clobbers reg byte a -Statement [259] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 [ ] ( main:2::keyboard_init:5 [ ] { } ) always clobbers reg byte a +Statement [258] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff [ ] ( main:2::keyboard_init:5 [ ] { } ) always clobbers reg byte a +Statement [259] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 [ ] ( main:2::keyboard_init:5 [ ] { } ) always clobbers reg byte a Statement [8] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mul8u::return#2 ] ( main:2 [ mul8u::return#2 ] { { mul8u::return#2 = mul8u::res#2 } } ) always clobbers reg byte a Statement [9] (word~) main::fileEntry1_$0 ← (word) mul8u::return#2 [ main::fileEntry1_$0 ] ( main:2 [ main::fileEntry1_$0 ] { } ) always clobbers reg byte a Statement [10] (byte*) main::entry1#0 ← (const byte*) files + (word~) main::fileEntry1_$0 [ main::entry1#0 ] ( main:2 [ main::entry1#0 ] { } ) always clobbers reg byte a @@ -6827,8 +6860,8 @@ Statement [53] (byte*) print_char_cursor#229 ← (byte*) print_line_cursor#1 [ p Statement [55] (byte*) print_char_cursor#208 ← (byte*) print_line_cursor#1 [ print_char_cursor#208 ] ( main:2 [ print_char_cursor#208 ] { { print_char_cursor#165 = print_char_cursor#208 } } ) always clobbers reg byte a Statement [70] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:21::memset:66 [ main::entry1#0 main::entry2#0 memset::dst#2 ] { } main:2::print_cls:42::memset:66 [ main::entry2#0 memset::dst#2 ] { } main:2::print_cls:63::memset:66 [ memset::dst#2 ] { } ) always clobbers reg byte a Statement [72] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:21::memset:66 [ main::entry1#0 main::entry2#0 memset::dst#2 ] { } main:2::print_cls:42::memset:66 [ main::entry2#0 memset::dst#2 ] { } main:2::print_cls:63::memset:66 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y -Statement [80] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:37::keyboard_matrix_read:75 [ main::entry2#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58::keyboard_matrix_read:75 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [81] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:37::keyboard_matrix_read:75 [ main::entry2#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58::keyboard_matrix_read:75 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [80] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:37::keyboard_matrix_read:75 [ main::entry2#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58::keyboard_matrix_read:75 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [81] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:37::keyboard_matrix_read:75 [ main::entry2#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } main:2::keyboard_key_pressed:58::keyboard_matrix_read:75 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#3 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Statement [85] if((byte) 0!=*((byte*) print_str::str#18)) goto print_str::@2 [ print_str::str#18 print_char_cursor#142 ] ( main:2::print_str:23 [ main::entry1#0 main::entry2#0 print_str::str#18 print_char_cursor#142 ] { } main:2::print_str:35 [ main::entry2#0 print_str::str#18 print_char_cursor#142 ] { { print_char_cursor#165 = print_char_cursor#207 } } main:2::print_str:44 [ main::entry2#0 print_str::str#18 print_char_cursor#142 ] { } main:2::print_str:56 [ print_str::str#18 print_char_cursor#142 ] { { print_char_cursor#165 = print_char_cursor#208 } } main:2::printEntry:30::print_str:102 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#209 } } main:2::printEntry:51::print_str:102 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#209 } } main:2::printEntry:30::print_str:109 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#210 } } main:2::printEntry:51::print_str:109 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#210 } } main:2::printEntry:30::print_str:116 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#211 } } main:2::printEntry:51::print_str:116 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#211 } } main:2::printEntry:30::print_str:123 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#212 } } main:2::printEntry:51::print_str:123 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#212 } } main:2::printEntry:30::print_str:130 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#213 } } main:2::printEntry:51::print_str:130 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#213 } } main:2::printEntry:30::print_str:137 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#214 } } main:2::printEntry:51::print_str:137 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#214 } } main:2::printEntry:30::print_str:144 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#215 } } main:2::printEntry:51::print_str:144 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#215 } } main:2::printEntry:30::print_str:151 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#216 } } main:2::printEntry:51::print_str:151 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#216 } } main:2::printEntry:30::print_str:158 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#217 } } main:2::printEntry:51::print_str:158 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#217 } } main:2::printEntry:30::print_str:165 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#218 } } main:2::printEntry:51::print_str:165 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#218 } } main:2::printEntry:30::print_str:172 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#219 } } main:2::printEntry:51::print_str:172 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#219 } } main:2::printEntry:30::print_str:179 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#220 } } main:2::printEntry:51::print_str:179 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#220 } } main:2::printEntry:30::print_str:186 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#221 } } main:2::printEntry:51::print_str:186 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#221 } } ) always clobbers reg byte a reg byte y Statement [87] (byte) print_char::ch#0 ← *((byte*) print_str::str#18) [ print_str::str#18 print_char_cursor#142 print_char::ch#0 ] ( main:2::print_str:23 [ main::entry1#0 main::entry2#0 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::print_str:35 [ main::entry2#0 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { print_char_cursor#165 = print_char_cursor#207 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::print_str:44 [ main::entry2#0 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::print_str:56 [ print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { print_char_cursor#165 = print_char_cursor#208 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:102 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#209 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:102 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#209 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:109 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#210 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:109 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#210 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:116 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#211 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:116 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#211 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:123 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#212 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:123 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#212 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:130 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#213 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:130 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#213 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:137 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#214 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:137 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#214 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:144 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#215 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:144 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#215 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:151 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#216 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:151 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#216 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:158 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#217 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:158 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#217 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:165 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#218 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:165 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#218 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:172 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#219 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:172 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#219 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:179 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#220 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:179 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#220 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:186 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#221 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:186 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#142 print_char::ch#0 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#221 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } ) always clobbers reg byte a reg byte y Statement [91] *((byte*) print_char_cursor#82) ← (byte) print_char::ch#3 [ print_char_cursor#82 ] ( main:2::print_str:23::print_char:88 [ main::entry1#0 main::entry2#0 print_str::str#18 print_char_cursor#82 ] { { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::print_str:35::print_char:88 [ main::entry2#0 print_str::str#18 print_char_cursor#82 ] { { print_char_cursor#165 = print_char_cursor#207 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::print_str:44::print_char:88 [ main::entry2#0 print_str::str#18 print_char_cursor#82 ] { { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::print_str:56::print_char:88 [ print_str::str#18 print_char_cursor#82 ] { { print_char_cursor#165 = print_char_cursor#208 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:102::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#209 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:102::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#209 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:109::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#210 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:109::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#210 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:116::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#211 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:116::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#211 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:123::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#212 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:123::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#212 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:130::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#213 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:130::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#213 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:137::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#214 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:137::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#214 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:144::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#215 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:144::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#215 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:151::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#216 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:151::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#216 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:158::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#217 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:158::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#217 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:165::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#218 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:165::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#218 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:172::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#219 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:172::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#219 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:179::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#220 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:179::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#220 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_str:186::print_char:88 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_char_cursor#165 = print_char_cursor#221 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:51::print_str:186::print_char:88 [ print_line_cursor#1 printEntry::entry#10 print_str::str#18 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_char_cursor#165 = print_char_cursor#221 } { print_char::ch#0 = print_char::ch#3 } { print_char_cursor#142 = print_char_cursor#82 } } main:2::printEntry:30::print_uchar:133::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#2 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uchar:133::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#2 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uchar:140::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#3 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uchar:140::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#3 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uchar:147::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#4 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uchar:147::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#4 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uchar:154::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#5 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uchar:154::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#5 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uchar:168::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#6 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uchar:168::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#6 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uchar:175::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#7 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uchar:175::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#7 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uchar:182::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#8 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uchar:182::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#8 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uchar:189::print_char:196 [ main::entry2#0 print_line_cursor#1 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#9 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uchar:189::print_char:196 [ print_line_cursor#1 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#9 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:105::print_uchar:203::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#5 = print_uint::w#7 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:105::print_uchar:203::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#5 = print_uint::w#7 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:112::print_uchar:203::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#5 = print_uint::w#8 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:112::print_uchar:203::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#5 = print_uint::w#8 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:119::print_uchar:203::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#2 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:119::print_uchar:203::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#2 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:126::print_uchar:203::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:126::print_uchar:203::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:161::print_uchar:203::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#4 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:161::print_uchar:203::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#4 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:105::print_uchar:205::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#5 = print_uint::w#7 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:105::print_uchar:205::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#5 = print_uint::w#7 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:112::print_uchar:205::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#5 = print_uint::w#8 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:112::print_uchar:205::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#5 = print_uint::w#8 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:119::print_uchar:205::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#2 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:119::print_uchar:205::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#2 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:126::print_uchar:205::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:126::print_uchar:205::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uint:161::print_uchar:205::print_char:196 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#4 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:51::print_uint:161::print_uchar:205::print_char:196 [ print_line_cursor#1 printEntry::entry#10 print_uchar::b#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#4 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#1 = print_char::ch#3 } } main:2::printEntry:30::print_uchar:133::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#2 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uchar:133::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#2 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uchar:140::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#3 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uchar:140::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#3 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uchar:147::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#4 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uchar:147::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#4 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uchar:154::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#5 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uchar:154::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#5 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uchar:168::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#6 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uchar:168::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#6 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uchar:175::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#7 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uchar:175::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#7 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uchar:182::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#8 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uchar:182::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#8 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uchar:189::print_char:199 [ main::entry2#0 print_line_cursor#1 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uchar::b#10 = print_uchar::b#9 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uchar:189::print_char:199 [ print_line_cursor#1 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uchar::b#10 = print_uchar::b#9 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uint:105::print_uchar:203::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#5 = print_uint::w#7 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uint:105::print_uchar:203::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#5 = print_uint::w#7 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uint:112::print_uchar:203::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#5 = print_uint::w#8 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uint:112::print_uchar:203::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#5 = print_uint::w#8 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uint:119::print_uchar:203::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#2 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uint:119::print_uchar:203::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#2 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uint:126::print_uchar:203::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uint:126::print_uchar:203::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uint:161::print_uchar:203::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#4 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:51::print_uint:161::print_uchar:203::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_uint::w#5 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#4 = print_uint::w#5 } { print_uchar::b#0 = print_uchar::b#10 } { print_char_cursor#142 = print_char_cursor#146 } { print_char::ch#2 = print_char::ch#3 } { print_char_cursor#11 = print_char_cursor#82 } } main:2::printEntry:30::print_uint:105::print_uchar:205::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#5 = print_uint::w#7 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:51::print_uint:105::print_uchar:205::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#5 = print_uint::w#7 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:30::print_uint:112::print_uchar:205::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#5 = print_uint::w#8 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:51::print_uint:112::print_uchar:205::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#5 = print_uint::w#8 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:30::print_uint:119::print_uchar:205::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#2 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:51::print_uint:119::print_uchar:205::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#2 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:30::print_uint:126::print_uchar:205::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:51::print_uint:126::print_uchar:205::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#10 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:30::print_uint:161::print_uchar:205::print_char:199 [ main::entry2#0 print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#0 = printEntry::entry#10 main::entry1#0 } { print_uint::w#4 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } main:2::printEntry:51::print_uint:161::print_uchar:205::print_char:199 [ print_line_cursor#1 printEntry::entry#10 print_char_cursor#82 ] { { printEntry::entry#1 = printEntry::entry#10 main::entry2#0 } { print_uint::w#4 = print_uint::w#5 } { print_uchar::b#1 = print_uchar::b#10 } { print_char_cursor#11 = print_char_cursor#146 print_char_cursor#82 } { print_char::ch#2 = print_char::ch#3 } } ) always clobbers reg byte y @@ -6904,8 +6937,8 @@ Statement [245] (byte~) initEntry::$25 ← (byte) $dd + (byte) initEntry::n#10 [ Statement [246] *((byte*) initEntry::entry#10 + (byte) $11) ← (byte~) initEntry::$25 [ ] ( main:2::initEntry:17 [ main::entry1#0 main::entry2#0 ] { { initEntry::entry#0 = initEntry::entry#10 main::entry1#0 } } main:2::initEntry:19 [ main::entry1#0 main::entry2#0 ] { { initEntry::entry#1 = initEntry::entry#10 main::entry2#0 } } ) always clobbers reg byte y Statement [252] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 [ mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ( main:2::mul8u:7 [ mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] { { mul8u::return#2 = mul8u::res#2 } } main:2::mul8u:12 [ main::entry1#0 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] { { mul8u::return#3 = mul8u::res#2 } } ) always clobbers reg byte a Statement [254] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::mul8u:7 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] { { mul8u::return#2 = mul8u::res#2 } } main:2::mul8u:12 [ main::entry1#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] { { mul8u::return#3 = mul8u::res#2 } } ) always clobbers reg byte a -Statement [258] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff [ ] ( main:2::keyboard_init:5 [ ] { } ) always clobbers reg byte a -Statement [259] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 [ ] ( main:2::keyboard_init:5 [ ] { } ) always clobbers reg byte a +Statement [258] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff [ ] ( main:2::keyboard_init:5 [ ] { } ) always clobbers reg byte a +Statement [259] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 [ ] ( main:2::keyboard_init:5 [ ] { } ) always clobbers reg byte a Potential registers zp[2]:2 [ memset::dst#2 memset::dst#1 ] : zp[2]:2 , Potential registers zp[2]:4 [ print_str::str#18 print_str::str#21 print_str::str#0 ] : zp[2]:4 , Potential registers zp[1]:6 [ print_char::ch#3 print_char::ch#0 print_char::ch#1 print_char::ch#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , @@ -6967,6 +7000,7 @@ Uplift Scope [printEntry] 53.43: zp[2]:11 [ printEntry::entry#10 printEntry::ent Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] +Uplift Scope [MOS6526_CIA] Uplift Scope [keyboard_init] Uplifting [print_char] best 5987 combination reg byte a [ print_char::ch#3 print_char::ch#0 print_char::ch#1 print_char::ch#2 ] @@ -6986,6 +7020,7 @@ Uplifting [printEntry] best 5528 combination zp[2]:11 [ printEntry::entry#10 pri Uplifting [RADIX] best 5528 combination Uplifting [print_ln] best 5528 combination Uplifting [print_cls] best 5528 combination +Uplifting [MOS6526_CIA] best 5528 combination Uplifting [keyboard_init] best 5528 combination Attempting to uplift remaining variables inzp[1]:62 [ initEntry::$19 ] Uplifting [initEntry] best 5524 combination reg byte a [ initEntry::$19 ] @@ -7046,18 +7081,15 @@ ASSEMBLER BEFORE OPTIMIZATION .pc = $80d "Program" // Global Constants & labels .const KEY_SPACE = $3c - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA #1 Port A data direction register. - .label CIA1_PORT_A_DDR = $dc02 - // CIA #1 Port B data direction register. - .label CIA1_PORT_B_DDR = $dc03 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // The size of a file ENTRY .const SIZEOF_ENTRY = $12 // The maximal number of files .const MAX_FILES = $90 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = 3 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label print_line_cursor = $c .label print_char_cursor = 2 .label print_line_cursor_1 = 4 @@ -7536,11 +7568,11 @@ keyboard_key_pressed: { // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. keyboard_matrix_read: { - // [80] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // [80] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // [81] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [81] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff jmp __breturn // keyboard_matrix_read::@return @@ -8741,14 +8773,14 @@ mul8u: { // keyboard_init // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { - // [258] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 + // [258] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Write Mode lda #$ff - sta CIA1_PORT_A_DDR - // [259] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [259] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Read Mode lda #0 - sta CIA1_PORT_B_DDR + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR jmp __breturn // keyboard_init::@return __breturn: @@ -9153,12 +9185,26 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_A_DDR = (byte*) 56322 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 -(const nomodify byte*) CIA1_PORT_B_DDR = (byte*) 56323 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) KEY_SPACE = (byte) $3c (const nomodify byte) MAX_FILES = (byte) $90 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -9605,18 +9651,15 @@ Score: 3925 .pc = $80d "Program" // Global Constants & labels .const KEY_SPACE = $3c - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA #1 Port A data direction register. - .label CIA1_PORT_A_DDR = $dc02 - // CIA #1 Port B data direction register. - .label CIA1_PORT_B_DDR = $dc03 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 // The size of a file ENTRY .const SIZEOF_ENTRY = $12 // The maximal number of files .const MAX_FILES = $90 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = 3 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .label print_line_cursor = $c .label print_char_cursor = 2 .label print_line_cursor_1 = 4 @@ -10030,13 +10073,13 @@ keyboard_key_pressed: { // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] - // [80] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] + // [80] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // ~*CIA1_PORT_B - // [81] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + // [81] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // keyboard_matrix_read::@return // } @@ -11066,16 +11109,16 @@ mul8u: { // keyboard_init // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { - // *CIA1_PORT_A_DDR = $ff - // [258] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 + // CIA1->PORT_A_DDR = $ff + // [258] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Write Mode lda #$ff - sta CIA1_PORT_A_DDR - // *CIA1_PORT_B_DDR = $00 - // [259] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA1->PORT_B_DDR = $00 + // [259] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Read Mode lda #0 - sta CIA1_PORT_B_DDR + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR // keyboard_init::@return // } // [260] return diff --git a/src/test/ref/semi-struct-2.sym b/src/test/ref/semi-struct-2.sym index 33ac25d03..96ac9c2e0 100644 --- a/src/test/ref/semi-struct-2.sym +++ b/src/test/ref/semi-struct-2.sym @@ -1,12 +1,26 @@ (label) @1 (label) @begin (label) @end -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_A_DDR = (byte*) 56322 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 -(const nomodify byte*) CIA1_PORT_B_DDR = (byte*) 56323 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) KEY_SPACE = (byte) $3c (const nomodify byte) MAX_FILES = (byte) $90 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/sieve-min.log b/src/test/ref/sieve-min.log index 2fa8f187d..19d9ec567 100644 --- a/src/test/ref/sieve-min.log +++ b/src/test/ref/sieve-min.log @@ -1,3 +1,9 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -255,6 +261,20 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const nomodify word) COUNT = (word) $4000 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -827,6 +847,20 @@ memset::@2: scope:[memset] from memset::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) main() (byte*~) main::$16 202.0 (word) main::i @@ -1363,6 +1397,7 @@ Uplift Scope [print_uchar] 20,002: zp[1]:22 [ print_uchar::$0 ] 20,002: zp[1]:23 Uplift Scope [main] 2,929.5: zp[2]:8 [ main::j#2 main::j#1 main::j#0 ] 2,237.67: zp[2]:10 [ main::s#2 main::s#1 main::s#0 ] 341.6: zp[2]:2 [ main::i#12 main::i#2 ] 258.11: zp[2]:6 [ main::i#10 main::i#3 ] 229.55: zp[2]:4 [ main::sieve_i#2 main::sieve_i#1 ] 202: zp[2]:18 [ main::$16 ] Uplift Scope [memset] 3,336.67: zp[2]:16 [ memset::dst#2 memset::dst#1 ] Uplift Scope [print_uint] 701: zp[2]:20 [ print_uint::w#0 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [RADIX] Uplifting [print_char] best 10797 combination reg byte a [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] @@ -1371,6 +1406,7 @@ Uplifting [print_uchar] best 10779 combination reg byte a [ print_uchar::$0 ] re Uplifting [main] best 10779 combination zp[2]:8 [ main::j#2 main::j#1 main::j#0 ] zp[2]:10 [ main::s#2 main::s#1 main::s#0 ] zp[2]:2 [ main::i#12 main::i#2 ] zp[2]:6 [ main::i#10 main::i#3 ] zp[2]:4 [ main::sieve_i#2 main::sieve_i#1 ] zp[2]:18 [ main::$16 ] Uplifting [memset] best 10779 combination zp[2]:16 [ memset::dst#2 memset::dst#1 ] Uplifting [print_uint] best 10779 combination zp[2]:20 [ print_uint::w#0 ] +Uplifting [MOS6526_CIA] best 10779 combination Uplifting [RADIX] best 10779 combination Coalescing zero page register [ zp[2]:6 [ main::i#10 main::i#3 ] ] with [ zp[2]:20 [ print_uint::w#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:13 [ print_char_cursor#19 print_char_cursor#27 print_char_cursor#33 print_char_cursor#20 print_char_cursor#26 ] ] with [ zp[2]:2 [ main::i#12 main::i#2 ] ] @@ -1815,6 +1851,20 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const nomodify word) COUNT = (word) $4000 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/sieve-min.sym b/src/test/ref/sieve-min.sym index fd84396d4..b0aad99c1 100644 --- a/src/test/ref/sieve-min.sym +++ b/src/test/ref/sieve-min.sym @@ -2,6 +2,20 @@ (label) @begin (label) @end (const nomodify word) COUNT = (word) $4000 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/sieve.asm b/src/test/ref/sieve.asm index ad9ac40bd..76f3460dd 100644 --- a/src/test/ref/sieve.asm +++ b/src/test/ref/sieve.asm @@ -11,12 +11,10 @@ // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 .label D018 = $d018 - // CIA #2 Timer A+B Value (32-bit) + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -25,6 +23,8 @@ .const COUNT = $4000 /* Up to what number? */ .const SQRT_COUNT = $80 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f /* Sqrt of COUNT */ .label sieve = $1000 // Remainder after unsigned 16-bit division @@ -807,13 +807,13 @@ clock: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // *CIA2_TIMER_AB = 0xffffffff lda #<$ffffffff sta CIA2_TIMER_AB @@ -823,12 +823,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL // } rts } diff --git a/src/test/ref/sieve.cfg b/src/test/ref/sieve.cfg index 7340a03e1..4a8075ca0 100644 --- a/src/test/ref/sieve.cfg +++ b/src/test/ref/sieve.cfg @@ -414,11 +414,11 @@ clock::@return: scope:[clock] from clock (void()) clock_start() clock_start: scope:[clock_start] from main::@21 - [183] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 - [184] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [183] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 + [184] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [185] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff - [186] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - [187] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START + [186] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [187] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start [188] return diff --git a/src/test/ref/sieve.log b/src/test/ref/sieve.log index 75ac7f0ab..a0303f878 100644 --- a/src/test/ref/sieve.log +++ b/src/test/ref/sieve.log @@ -1,3 +1,9 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$0 ← call toD018 (const nomodify byte*) SCREEN (byte*)(number) $1800 @@ -62,11 +68,11 @@ clock::@return: scope:[clock] from clock (void()) clock_start() clock_start: scope:[clock_start] from main::@22 - *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES - *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A *((const nomodify dword*) CIA2_TIMER_AB) ← (number) $ffffffff - *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start return @@ -1056,9 +1062,8 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte) BINARY = (number) 2 +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*)(number) $dd00 (const nomodify dword*) CIA2_TIMER_AB = (dword*)(number) $dd04 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*)(number) $dd0e -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*)(number) $dd0f (const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES = (byte) 0 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS = (byte) 0 @@ -1073,7 +1078,23 @@ SYMBOL TABLE SSA (const byte*) DIGITS[] = (byte*) "0123456789abcdef"z (const nomodify byte) FRAMES_PER_SEC = (byte) $3c (const byte) HEXADECIMAL = (number) $10 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) OCTAL = (number) 8 +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -2022,9 +2043,8 @@ Inlining cast (word) main::i#1 ← (unumber)(number) 2 Inlining cast *((byte*) main::s#2) ← (unumber)(number) 1 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53272 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (dword*) 56580 -Simplifying constant pointer cast (byte*) 56590 -Simplifying constant pointer cast (byte*) 56591 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 4096 Simplifying constant integer cast 0 @@ -2493,14 +2513,14 @@ Resolved ranged next value [38] divr16u::i#1 ← ++ divr16u::i#2 to ++ Resolved ranged comparison value [40] if(divr16u::i#1!=rangelast(0,$f)) goto divr16u::@1 to (number) $10 De-inlining pointer[w] to *(pointer+w) [314] if((byte) 0!=*((const byte*) sieve + (word) main::i#10)) goto main::@11 Successful SSA optimization Pass2DeInlineWordDerefIdx -Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES in [15] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES -Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS in [16] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES in [15] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES +Simplifying constant evaluating to zero (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS in [16] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_STOP|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A in [16] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (byte) 0|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -Simplifying expression containing zero CIA_TIMER_CONTROL_START in [18] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -Simplifying expression containing zero CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS in [19] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES +Simplifying expression containing zero CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A in [16] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (byte) 0|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying expression containing zero CIA_TIMER_CONTROL_START in [18] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A +Simplifying expression containing zero CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_CONTINUOUS in [19] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS|(const nomodify byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES Successful SSA optimization PassNSimplifyExpressionWithZero -Simplifying expression containing zero CIA_TIMER_CONTROL_START in [19] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS +Simplifying expression containing zero CIA_TIMER_CONTROL_START in [19] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_CONTINUOUS Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused variable (void*) memset::return#2 and assignment [145] (void*) memset::return#2 ← (void*) memset::str#3 Eliminating unused variable (void*) memset::return#3 and assignment [162] (void*) memset::return#3 ← (void*) memset::str#3 @@ -3337,11 +3357,11 @@ clock::@return: scope:[clock] from clock (void()) clock_start() clock_start: scope:[clock_start] from main::@21 - [183] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 - [184] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [183] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 + [184] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [185] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff - [186] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - [187] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START + [186] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + [187] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START to:clock_start::@return clock_start::@return: scope:[clock_start] from clock_start [188] return @@ -3381,6 +3401,20 @@ print_cls::@return: scope:[print_cls] from print_cls VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (dword()) clock() (dword) clock::return (dword) clock::return#0 37.33333333333333 @@ -3794,12 +3828,10 @@ Target platform is c64basic / MOS6502X // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 .label D018 = $d018 - // CIA #2 Timer A+B Value (32-bit) + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -3808,6 +3840,8 @@ Target platform is c64basic / MOS6502X .const COUNT = $4000 /* Up to what number? */ .const SQRT_COUNT = $80 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f /* Sqrt of COUNT */ .label sieve = $1000 // Remainder after unsigned 16-bit division @@ -5247,13 +5281,13 @@ clock: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // [183] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [183] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // [184] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // [184] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // [185] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB @@ -5263,12 +5297,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // [186] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // [186] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // [187] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // [187] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL jmp __breturn // clock_start::@return __breturn: @@ -5464,11 +5498,11 @@ Statement [173] if((word) divr16u::rem#6<(const word) div32u16u::divisor#0) goto Statement [175] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) div32u16u::divisor#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::div32u16u:30::divr16u:153 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { div32u16u::dividend#0 = main::cyclecount#0 } { div32u16u::return#0 = div32u16u::return#2 } { divr16u::dividend#1 = divr16u::dividend#5 } { divr16u::return#0 = divr16u::return#2 } } main:2::div32u16u:30::divr16u:158 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { div32u16u::dividend#0 = main::cyclecount#0 } { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::dividend#2 = divr16u::dividend#5 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Statement [179] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::div32u16u:30::divr16u:153 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::return#0 rem16u#1 ] { { div32u16u::dividend#0 = main::cyclecount#0 } { div32u16u::return#0 = div32u16u::return#2 } { divr16u::dividend#1 = divr16u::dividend#5 } { divr16u::return#0 = divr16u::return#2 } } main:2::div32u16u:30::divr16u:158 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] { { div32u16u::dividend#0 = main::cyclecount#0 } { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::dividend#2 = divr16u::dividend#5 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Statement [181] (dword) clock::return#0 ← (dword) $ffffffff - *((const nomodify dword*) CIA2_TIMER_AB) [ clock::return#0 ] ( main:2::clock:25 [ print_line_cursor#1 clock::return#0 ] { { clock::return#0 = clock::return#2 } } ) always clobbers reg byte a -Statement [183] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a -Statement [184] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a +Statement [183] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a +Statement [184] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a Statement [185] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a -Statement [186] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a -Statement [187] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a +Statement [186] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a +Statement [187] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a Statement [190] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:2::memset:19 [ print_line_cursor#1 memset::num#2 memset::str#3 memset::c#4 ] { } main:2::print_cls:7::memset:199 [ memset::num#2 memset::str#3 memset::c#4 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:54 [ memset::c#4 ] Statement [191] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:2::memset:19 [ print_line_cursor#1 memset::str#3 memset::c#4 memset::end#0 ] { } main:2::print_cls:7::memset:199 [ memset::str#3 memset::c#4 memset::end#0 ] { } ) always clobbers reg byte a @@ -5554,11 +5588,11 @@ Statement [173] if((word) divr16u::rem#6<(const word) div32u16u::divisor#0) goto Statement [175] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) div32u16u::divisor#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::div32u16u:30::divr16u:153 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { div32u16u::dividend#0 = main::cyclecount#0 } { div32u16u::return#0 = div32u16u::return#2 } { divr16u::dividend#1 = divr16u::dividend#5 } { divr16u::return#0 = divr16u::return#2 } } main:2::div32u16u:30::divr16u:158 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { div32u16u::dividend#0 = main::cyclecount#0 } { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::dividend#2 = divr16u::dividend#5 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Statement [179] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::div32u16u:30::divr16u:153 [ print_line_cursor#1 main::cyclecount#0 div32u16u::dividend#0 divr16u::return#0 rem16u#1 ] { { div32u16u::dividend#0 = main::cyclecount#0 } { div32u16u::return#0 = div32u16u::return#2 } { divr16u::dividend#1 = divr16u::dividend#5 } { divr16u::return#0 = divr16u::return#2 } } main:2::div32u16u:30::divr16u:158 [ print_line_cursor#1 main::cyclecount#0 div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] { { div32u16u::dividend#0 = main::cyclecount#0 } { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::dividend#2 = divr16u::dividend#5 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Statement [181] (dword) clock::return#0 ← (dword) $ffffffff - *((const nomodify dword*) CIA2_TIMER_AB) [ clock::return#0 ] ( main:2::clock:25 [ print_line_cursor#1 clock::return#0 ] { { clock::return#0 = clock::return#2 } } ) always clobbers reg byte a -Statement [183] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a -Statement [184] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a +Statement [183] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a +Statement [184] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a Statement [185] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a -Statement [186] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a -Statement [187] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a +Statement [186] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a +Statement [187] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START [ ] ( main:2::clock_start:21 [ print_line_cursor#1 ] { } ) always clobbers reg byte a Statement [190] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:2::memset:19 [ print_line_cursor#1 memset::num#2 memset::str#3 memset::c#4 ] { } main:2::print_cls:7::memset:199 [ memset::num#2 memset::str#3 memset::c#4 ] { } ) always clobbers reg byte a Statement [191] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:2::memset:19 [ print_line_cursor#1 memset::str#3 memset::c#4 memset::end#0 ] { } main:2::print_cls:7::memset:199 [ memset::str#3 memset::c#4 memset::end#0 ] { } ) always clobbers reg byte a Statement [192] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:2::memset:19 [ print_line_cursor#1 memset::c#4 memset::end#0 memset::dst#4 ] { } main:2::print_cls:7::memset:199 [ memset::c#4 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a @@ -5643,6 +5677,7 @@ Uplift Scope [print_uint_decimal] 1,236: zp[2]:13 [ print_uint_decimal::w#3 prin Uplift Scope [div32u16u] 202: zp[2]:125 [ div32u16u::quotient_lo#0 ] 42.6: zp[4]:69 [ div32u16u::dividend#0 ] 37.33: zp[4]:127 [ div32u16u::return#0 ] 33.67: zp[2]:121 [ div32u16u::quotient_hi#0 ] 22: zp[4]:73 [ div32u16u::return#2 ] Uplift Scope [print_ulong_decimal] 112: zp[4]:83 [ print_ulong_decimal::w#0 ] Uplift Scope [clock] 37.33: zp[4]:135 [ clock::return#0 ] 22: zp[4]:57 [ clock::return#2 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [clock_start] Uplift Scope [RADIX] Uplift Scope [print_ln] @@ -5662,6 +5697,7 @@ Uplifting [print_uint_decimal] best 100257 combination zp[2]:13 [ print_uint_dec Uplifting [div32u16u] best 100257 combination zp[2]:125 [ div32u16u::quotient_lo#0 ] zp[4]:69 [ div32u16u::dividend#0 ] zp[4]:127 [ div32u16u::return#0 ] zp[2]:121 [ div32u16u::quotient_hi#0 ] zp[4]:73 [ div32u16u::return#2 ] Uplifting [print_ulong_decimal] best 100257 combination zp[4]:83 [ print_ulong_decimal::w#0 ] Uplifting [clock] best 100257 combination zp[4]:135 [ clock::return#0 ] zp[4]:57 [ clock::return#2 ] +Uplifting [MOS6526_CIA] best 100257 combination Uplifting [clock_start] best 100257 combination Uplifting [RADIX] best 100257 combination Uplifting [print_ln] best 100257 combination @@ -5738,12 +5774,10 @@ ASSEMBLER BEFORE OPTIMIZATION // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 .label D018 = $d018 - // CIA #2 Timer A+B Value (32-bit) + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -5752,6 +5786,8 @@ ASSEMBLER BEFORE OPTIMIZATION .const COUNT = $4000 /* Up to what number? */ .const SQRT_COUNT = $80 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f /* Sqrt of COUNT */ .label sieve = $1000 // Remainder after unsigned 16-bit division @@ -7003,13 +7039,13 @@ clock: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // [183] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [183] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // [184] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // [184] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // [185] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff sta CIA2_TIMER_AB @@ -7019,12 +7055,12 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // [186] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // [186] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // [187] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // [187] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL jmp __breturn // clock_start::@return __breturn: @@ -7361,9 +7397,8 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify dword*) CIA2_TIMER_AB = (dword*) 56580 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_START = (byte) 1 (const nomodify word) CLOCKS_PER_FRAME = (word) $4cc8 @@ -7373,6 +7408,22 @@ FINAL SYMBOL TABLE (const nomodify byte*) D018 = (byte*) 53272 (const byte*) DIGITS[] = (byte*) "0123456789abcdef"z (const nomodify byte) FRAMES_PER_SEC = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -7726,12 +7777,10 @@ Score: 82397 // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 .label D018 = $d018 - // CIA #2 Timer A+B Value (32-bit) + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // CIA #2 Timer A Control Register - .label CIA2_TIMER_A_CONTROL = $dd0e - // CIA #2 Timer B Control Register - .label CIA2_TIMER_B_CONTROL = $dd0f // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) @@ -7740,6 +7789,8 @@ Score: 82397 .const COUNT = $4000 /* Up to what number? */ .const SQRT_COUNT = $80 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f /* Sqrt of COUNT */ .label sieve = $1000 // Remainder after unsigned 16-bit division @@ -8912,15 +8963,15 @@ clock: { // Reset & start the processor clock time. The value can be read using clock(). // This uses CIA #2 Timer A+B on the C64 clock_start: { - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES - // [183] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // [183] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Setup CIA#2 timer A to count (down) CPU cycles lda #0 - sta CIA2_TIMER_A_CONTROL - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - // [184] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_STOP | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // [184] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL // *CIA2_TIMER_AB = 0xffffffff // [185] *((const nomodify dword*) CIA2_TIMER_AB) ← (dword) $ffffffff -- _deref_pduc1=vduc2 lda #<$ffffffff @@ -8931,14 +8982,14 @@ clock_start: { sta CIA2_TIMER_AB+2 lda #>$ffffffff>>$10 sta CIA2_TIMER_AB+3 - // *CIA2_TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - // [186] *((const nomodify byte*) CIA2_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 + // CIA2->TIMER_B_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A + // [186] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START|(const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START|CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A - sta CIA2_TIMER_B_CONTROL - // *CIA2_TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES - // [187] *((const nomodify byte*) CIA2_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // CIA2->TIMER_A_CONTROL = CIA_TIMER_CONTROL_START | CIA_TIMER_CONTROL_CONTINUOUS | CIA_TIMER_CONTROL_A_COUNT_CYCLES + // [187] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← (const nomodify byte) CIA_TIMER_CONTROL_START -- _deref_pbuc1=vbuc2 lda #CIA_TIMER_CONTROL_START - sta CIA2_TIMER_A_CONTROL + sta CIA2+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL // clock_start::@return // } // [188] return diff --git a/src/test/ref/sieve.sym b/src/test/ref/sieve.sym index 6d097cfdf..f936b6ef5 100644 --- a/src/test/ref/sieve.sym +++ b/src/test/ref/sieve.sym @@ -1,9 +1,8 @@ (label) @1 (label) @begin (label) @end +(const nomodify struct MOS6526_CIA*) CIA2 = (struct MOS6526_CIA*) 56576 (const nomodify dword*) CIA2_TIMER_AB = (dword*) 56580 -(const nomodify byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 -(const nomodify byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 (const nomodify byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 (const nomodify byte) CIA_TIMER_CONTROL_START = (byte) 1 (const nomodify word) CLOCKS_PER_FRAME = (word) $4cc8 @@ -13,6 +12,22 @@ (const nomodify byte*) D018 = (byte*) 53272 (const byte*) DIGITS[] = (byte*) "0123456789abcdef"z (const nomodify byte) FRAMES_PER_SEC = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/signed-words.log b/src/test/ref/signed-words.log index d08e57ce0..568ef527e 100644 --- a/src/test/ref/signed-words.log +++ b/src/test/ref/signed-words.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -207,6 +209,20 @@ SYMBOL TABLE SSA (label) @3 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) RASTER = (byte*)(number) $d012 (const nomodify byte*) SCREEN = (byte*)(number) $400 (const nomodify byte*) SPRITE = (byte*)(number) $2000 @@ -759,6 +775,20 @@ init::@2: scope:[init] from init::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) anim() (signed word~) anim::$5 2002.0 (signed word~) anim::$7 2002.0 @@ -1275,11 +1305,13 @@ REGISTER UPLIFT SCOPES Uplift Scope [] 5,942.77: zp[2]:6 [ yvel#9 yvel#12 yvel#10 yvel#21 ] 3,473.71: zp[2]:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] 1,952.25: zp[2]:8 [ xpos#9 xpos#12 xpos#10 ] 1,884.77: zp[2]:10 [ ypos#10 ypos#13 ypos#11 ] 1,581.63: zp[2]:2 [ xvel#12 xvel#10 xvel#14 ] Uplift Scope [anim] 2,002: zp[2]:15 [ anim::$5 ] 2,002: zp[2]:19 [ anim::$7 ] 2,002: zp[1]:23 [ anim::$9 ] 500.5: zp[2]:21 [ anim::sprite_y#0 ] 400.4: zp[2]:17 [ anim::sprite_x#0 ] Uplift Scope [init] 3,336.67: zp[2]:12 [ init::sc#2 init::sc#1 ] 3,003: zp[1]:14 [ init::i#2 init::i#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplifting [] best 7892 combination zp[2]:6 [ yvel#9 yvel#12 yvel#10 yvel#21 ] zp[2]:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] zp[2]:8 [ xpos#9 xpos#12 xpos#10 ] zp[2]:10 [ ypos#10 ypos#13 ypos#11 ] zp[2]:2 [ xvel#12 xvel#10 xvel#14 ] Uplifting [anim] best 7886 combination zp[2]:15 [ anim::$5 ] zp[2]:19 [ anim::$7 ] reg byte a [ anim::$9 ] zp[2]:21 [ anim::sprite_y#0 ] zp[2]:17 [ anim::sprite_x#0 ] Uplifting [init] best 7766 combination zp[2]:12 [ init::sc#2 init::sc#1 ] reg byte x [ init::i#2 init::i#1 ] +Uplifting [MOS6526_CIA] best 7766 combination Uplifting [main] best 7766 combination Coalescing zero page register [ zp[2]:15 [ anim::$5 ] ] with [ zp[2]:17 [ anim::sprite_x#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:19 [ anim::$7 ] ] with [ zp[2]:21 [ anim::sprite_y#0 ] ] - score: 1 @@ -1716,6 +1748,20 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte*) SPRITE = (byte*) 8192 diff --git a/src/test/ref/signed-words.sym b/src/test/ref/signed-words.sym index 6cb6698ca..c5e8cc460 100644 --- a/src/test/ref/signed-words.sym +++ b/src/test/ref/signed-words.sym @@ -1,6 +1,20 @@ (label) @1 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte*) SPRITE = (byte*) 8192 diff --git a/src/test/ref/test-comparisons-sword.log b/src/test/ref/test-comparisons-sword.log index 10256b5f3..e060fc466 100644 --- a/src/test/ref/test-comparisons-sword.log +++ b/src/test/ref/test-comparisons-sword.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -636,6 +638,20 @@ SYMBOL TABLE SSA (const nomodify byte) GT = (byte) 2 (const nomodify byte) LE = (byte) 1 (const nomodify byte) LT = (byte) 0 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) NE = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a @@ -1896,6 +1912,20 @@ memset::@2: scope:[memset] from memset::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) compare((signed word) compare::w1 , (signed word) compare::w2 , (byte) compare::op) (byte) compare::op (byte) compare::op#0 101667.83333333331 @@ -3059,6 +3089,7 @@ Uplift Scope [print_sint] 4,933,342.17: zp[2]:14 [ print_sint::w#5 print_sint::w Uplift Scope [compare] 700,007: zp[1]:10 [ compare::r#10 compare::r#12 compare::r#13 compare::r#14 compare::r#15 compare::r#16 compare::r#17 ] 101,667.83: zp[1]:31 [ compare::op#0 ] 33,333.67: zp[2]:8 [ compare::ops#7 ] 25,357.43: zp[2]:27 [ compare::w1#0 ] 22,903.48: zp[2]:29 [ compare::w2#0 ] Uplift Scope [main] 22,985.29: zp[1]:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] 17,729.05: zp[1]:4 [ main::op#2 main::op#1 ] 2,002: zp[1]:24 [ main::$9 ] 1,689.19: zp[1]:3 [ main::j#2 main::j#1 ] 785.86: zp[2]:25 [ main::w2#0 ] 531.68: zp[2]:22 [ main::w1#0 ] 202: zp[1]:21 [ main::$8 ] 165.93: zp[1]:2 [ main::i#2 main::i#1 ] Uplift Scope [memset] 33,336.67: zp[2]:19 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] @@ -3073,6 +3104,7 @@ Uplifting [compare] best 948320 combination zp[1]:10 [ compare::r#10 compare::r# Uplifting [main] best 947880 combination zp[1]:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] zp[1]:4 [ main::op#2 main::op#1 ] reg byte a [ main::$9 ] zp[1]:3 [ main::j#2 main::j#1 ] zp[2]:25 [ main::w2#0 ] zp[2]:22 [ main::w1#0 ] reg byte a [ main::$8 ] zp[1]:2 [ main::i#2 main::i#1 ] Limited combination testing to 100 combinations of 256 possible. Uplifting [memset] best 947880 combination zp[2]:19 [ memset::dst#2 memset::dst#1 ] +Uplifting [MOS6526_CIA] best 947880 combination Uplifting [RADIX] best 947880 combination Uplifting [print_ln] best 947880 combination Uplifting [print_cls] best 947880 combination @@ -4139,6 +4171,20 @@ FINAL SYMBOL TABLE (const nomodify byte) GT = (byte) 2 (const nomodify byte) LE = (byte) 1 (const nomodify byte) LT = (byte) 0 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) NE = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a diff --git a/src/test/ref/test-comparisons-sword.sym b/src/test/ref/test-comparisons-sword.sym index 7fba9004f..1071d9a09 100644 --- a/src/test/ref/test-comparisons-sword.sym +++ b/src/test/ref/test-comparisons-sword.sym @@ -7,6 +7,20 @@ (const nomodify byte) GT = (byte) 2 (const nomodify byte) LE = (byte) 1 (const nomodify byte) LT = (byte) 0 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte) NE = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a diff --git a/src/test/ref/test-comparisons-word.log b/src/test/ref/test-comparisons-word.log index b35b2a26a..65d2e24c6 100644 --- a/src/test/ref/test-comparisons-word.log +++ b/src/test/ref/test-comparisons-word.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -590,6 +592,20 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const nomodify byte) FF = (byte) $57 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1794,6 +1810,20 @@ memset::@2: scope:[memset] from memset::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) compare((word) compare::w1 , (word) compare::w2 , (byte) compare::op) (byte) compare::op (byte) compare::op#0 101667.83333333331 @@ -2882,6 +2912,7 @@ Uplift Scope [print_uint] 1,133,338.67: zp[2]:12 [ print_uint::w#2 print_uint::w Uplift Scope [compare] 700,007: zp[1]:10 [ compare::r#10 compare::r#12 compare::r#13 compare::r#14 compare::r#15 compare::r#16 compare::r#17 ] 101,667.83: zp[1]:31 [ compare::op#0 ] 33,333.67: zp[2]:8 [ compare::ops#7 ] 25,357.43: zp[2]:27 [ compare::w1#0 ] 22,903.48: zp[2]:29 [ compare::w2#0 ] Uplift Scope [main] 22,985.29: zp[1]:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] 17,729.05: zp[1]:4 [ main::op#2 main::op#1 ] 2,002: zp[1]:24 [ main::$9 ] 1,689.19: zp[1]:3 [ main::j#2 main::j#1 ] 785.86: zp[2]:25 [ main::w2#0 ] 531.68: zp[2]:22 [ main::w1#0 ] 202: zp[1]:21 [ main::$8 ] 165.93: zp[1]:2 [ main::i#2 main::i#1 ] Uplift Scope [memset] 33,336.67: zp[2]:19 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] @@ -2895,6 +2926,7 @@ Uplifting [compare] best 948250 combination zp[1]:10 [ compare::r#10 compare::r# Uplifting [main] best 947810 combination zp[1]:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] zp[1]:4 [ main::op#2 main::op#1 ] reg byte a [ main::$9 ] zp[1]:3 [ main::j#2 main::j#1 ] zp[2]:25 [ main::w2#0 ] zp[2]:22 [ main::w1#0 ] reg byte a [ main::$8 ] zp[1]:2 [ main::i#2 main::i#1 ] Limited combination testing to 100 combinations of 256 possible. Uplifting [memset] best 947810 combination zp[2]:19 [ memset::dst#2 memset::dst#1 ] +Uplifting [MOS6526_CIA] best 947810 combination Uplifting [RADIX] best 947810 combination Uplifting [print_ln] best 947810 combination Uplifting [print_cls] best 947810 combination @@ -3888,6 +3920,20 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const nomodify byte) FF = (byte) $57 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/test-comparisons-word.sym b/src/test/ref/test-comparisons-word.sym index 9d4869d0a..9344078a2 100644 --- a/src/test/ref/test-comparisons-word.sym +++ b/src/test/ref/test-comparisons-word.sym @@ -2,6 +2,20 @@ (label) @begin (label) @end (const nomodify byte) FF = (byte) $57 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/test-keyboard-space.asm b/src/test/ref/test-keyboard-space.asm index 19d0d0111..16d28890b 100644 --- a/src/test/ref/test-keyboard-space.asm +++ b/src/test/ref/test-keyboard-space.asm @@ -5,16 +5,13 @@ .const KEY_SPACE = $3c .label RASTER = $d012 .label BGCOL = $d021 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA #1 Port A data direction register. - .label CIA1_PORT_A_DDR = $dc02 - // CIA #1 Port B data direction register. - .label CIA1_PORT_B_DDR = $dc03 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 .const GREEN = 5 .const BLUE = 6 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = 3 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 main: { // keyboard_init() jsr keyboard_init @@ -59,25 +56,25 @@ keyboard_key_pressed: { // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // ~*CIA1_PORT_B - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // } rts } // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { - // *CIA1_PORT_A_DDR = $ff + // CIA1->PORT_A_DDR = $ff // Keyboard Matrix Columns Write Mode lda #$ff - sta CIA1_PORT_A_DDR - // *CIA1_PORT_B_DDR = $00 + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA1->PORT_B_DDR = $00 // Keyboard Matrix Columns Read Mode lda #0 - sta CIA1_PORT_B_DDR + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR // } rts } diff --git a/src/test/ref/test-keyboard-space.cfg b/src/test/ref/test-keyboard-space.cfg index 802653d58..407f09904 100644 --- a/src/test/ref/test-keyboard-space.cfg +++ b/src/test/ref/test-keyboard-space.cfg @@ -48,8 +48,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [20] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) - [21] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [20] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) + [21] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [22] return @@ -57,8 +57,8 @@ keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matri (void()) keyboard_init() keyboard_init: scope:[keyboard_init] from main - [23] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff - [24] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 + [23] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff + [24] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 to:keyboard_init::@return keyboard_init::@return: scope:[keyboard_init] from keyboard_init [25] return diff --git a/src/test/ref/test-keyboard-space.log b/src/test/ref/test-keyboard-space.log index ea37fb4b5..61a29845b 100644 --- a/src/test/ref/test-keyboard-space.log +++ b/src/test/ref/test-keyboard-space.log @@ -1,3 +1,11 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -6,8 +14,8 @@ CONTROL FLOW GRAPH SSA (void()) keyboard_init() keyboard_init: scope:[keyboard_init] from main - *((const nomodify byte*) CIA1_PORT_A_DDR) ← (number) $ff - *((const nomodify byte*) CIA1_PORT_B_DDR) ← (number) 0 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) $ff + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (number) 0 to:keyboard_init::@return keyboard_init::@return: scope:[keyboard_init] from keyboard_init return @@ -16,8 +24,8 @@ keyboard_init::@return: scope:[keyboard_init] from keyboard_init (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed (byte) keyboard_matrix_read::rowid#1 ← phi( keyboard_key_pressed/(byte) keyboard_matrix_read::rowid#0 ) - *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) - (byte~) keyboard_matrix_read::$0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#1) + (byte~) keyboard_matrix_read::$0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) (byte) keyboard_matrix_read::row_pressed_bits#0 ← (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#0 ← (byte) keyboard_matrix_read::row_pressed_bits#0 to:keyboard_matrix_read::@return @@ -98,12 +106,27 @@ SYMBOL TABLE SSA (label) @end (const nomodify byte*) BGCOL = (byte*)(number) $d021 (const nomodify byte) BLUE = (byte) 6 -(const nomodify byte*) CIA1_PORT_A = (byte*)(number) $dc00 -(const nomodify byte*) CIA1_PORT_A_DDR = (byte*)(number) $dc02 -(const nomodify byte*) CIA1_PORT_B = (byte*)(number) $dc01 -(const nomodify byte*) CIA1_PORT_B_DDR = (byte*)(number) $dc03 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte) GREEN = (byte) 5 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 (const nomodify byte*) RASTER = (byte*)(number) $d012 (void()) keyboard_init() (label) keyboard_init::@return @@ -157,23 +180,20 @@ SYMBOL TABLE SSA (label) main::@7 (label) main::@return -Adding number conversion cast (unumber) $ff in *((const nomodify byte*) CIA1_PORT_A_DDR) ← (number) $ff -Adding number conversion cast (unumber) 0 in *((const nomodify byte*) CIA1_PORT_B_DDR) ← (number) 0 +Adding number conversion cast (unumber) $ff in *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) $ff +Adding number conversion cast (unumber) 0 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (number) 0 Adding number conversion cast (unumber) 7 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#1 & (number) 7 Adding number conversion cast (unumber) keyboard_key_pressed::$0 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#1 & (unumber)(number) 7 Adding number conversion cast (unumber) 3 in (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_key_pressed::key#1 >> (number) 3 Adding number conversion cast (unumber) $ff in (bool~) main::$1 ← *((const nomodify byte*) RASTER) != (number) $ff Adding number conversion cast (unumber) 0 in (bool~) main::$3 ← (byte~) main::$2 != (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast *((const nomodify byte*) CIA1_PORT_A_DDR) ← (unumber)(number) $ff -Inlining cast *((const nomodify byte*) CIA1_PORT_B_DDR) ← (unumber)(number) 0 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) $ff +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 53281 -Simplifying constant pointer cast (byte*) 56320 -Simplifying constant pointer cast (byte*) 56321 -Simplifying constant pointer cast (byte*) 56322 -Simplifying constant pointer cast (byte*) 56323 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 Simplifying constant integer cast $ff Simplifying constant integer cast 0 Simplifying constant integer cast 7 @@ -206,6 +226,10 @@ Constant (const byte) keyboard_key_pressed::key#0 = KEY_SPACE Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [17] if(true) goto main::@2 Successful SSA optimization Pass2ConstantIfs +Simplifying expression containing zero (byte*)CIA1 in [4] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A +Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks Constant right-side identified [6] (byte) keyboard_key_pressed::colidx#0 ← (const byte) keyboard_key_pressed::key#0 & (byte) 7 @@ -304,8 +328,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed - [20] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) - [21] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [20] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) + [21] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [22] return @@ -313,8 +337,8 @@ keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matri (void()) keyboard_init() keyboard_init: scope:[keyboard_init] from main - [23] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff - [24] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 + [23] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff + [24] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 to:keyboard_init::@return keyboard_init::@return: scope:[keyboard_init] from keyboard_init [25] return @@ -322,6 +346,20 @@ keyboard_init::@return: scope:[keyboard_init] from keyboard_init VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) keyboard_init() (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) (byte~) keyboard_key_pressed::$2 2002.0 @@ -373,16 +411,13 @@ Target platform is c64basic / MOS6502X .const KEY_SPACE = $3c .label RASTER = $d012 .label BGCOL = $d021 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA #1 Port A data direction register. - .label CIA1_PORT_A_DDR = $dc02 - // CIA #1 Port B data direction register. - .label CIA1_PORT_B_DDR = $dc03 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 .const GREEN = 5 .const BLUE = 6 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = 3 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -488,11 +523,11 @@ keyboard_key_pressed: { keyboard_matrix_read: { .label return = 7 .label return_1 = 4 - // [20] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // [20] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // [21] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuz1=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [21] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuz1=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff sta.z return jmp __breturn @@ -504,14 +539,14 @@ keyboard_matrix_read: { // keyboard_init // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { - // [23] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 + // [23] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Write Mode lda #$ff - sta CIA1_PORT_A_DDR - // [24] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [24] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Read Mode lda #0 - sta CIA1_PORT_B_DDR + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR jmp __breturn // keyboard_init::@return __breturn: @@ -528,10 +563,10 @@ REGISTER UPLIFT POTENTIAL REGISTERS Statement [6] if(*((const nomodify byte*) RASTER)!=(byte) $ff) goto main::@1 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [12] *((const nomodify byte*) BGCOL) ← (const nomodify byte) BLUE [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [13] *((const nomodify byte*) BGCOL) ← (const nomodify byte) GREEN [ ] ( main:2 [ ] { } ) always clobbers reg byte a -Statement [20] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:8::keyboard_matrix_read:15 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [21] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:8::keyboard_matrix_read:15 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [23] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff [ ] ( main:2::keyboard_init:5 [ ] { } ) always clobbers reg byte a -Statement [24] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 [ ] ( main:2::keyboard_init:5 [ ] { } ) always clobbers reg byte a +Statement [20] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) [ ] ( main:2::keyboard_key_pressed:8::keyboard_matrix_read:15 [ ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [21] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_key_pressed:8::keyboard_matrix_read:15 [ keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [23] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff [ ] ( main:2::keyboard_init:5 [ ] { } ) always clobbers reg byte a +Statement [24] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 [ ] ( main:2::keyboard_init:5 [ ] { } ) always clobbers reg byte a Potential registers zp[1]:2 [ keyboard_key_pressed::return#2 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:3 [ main::$2 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:4 [ keyboard_matrix_read::return#2 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , @@ -543,12 +578,14 @@ REGISTER UPLIFT SCOPES Uplift Scope [keyboard_matrix_read] 3,667.33: zp[1]:7 [ keyboard_matrix_read::return#0 ] 2,002: zp[1]:4 [ keyboard_matrix_read::return#2 ] Uplift Scope [keyboard_key_pressed] 2,002: zp[1]:5 [ keyboard_key_pressed::$2 ] 367.33: zp[1]:6 [ keyboard_key_pressed::return#0 ] 202: zp[1]:2 [ keyboard_key_pressed::return#2 ] Uplift Scope [main] 202: zp[1]:3 [ main::$2 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [keyboard_init] Uplift Scope [] Uplifting [keyboard_matrix_read] best 1417 combination reg byte a [ keyboard_matrix_read::return#0 ] reg byte a [ keyboard_matrix_read::return#2 ] Uplifting [keyboard_key_pressed] best 1318 combination reg byte a [ keyboard_key_pressed::$2 ] reg byte a [ keyboard_key_pressed::return#0 ] reg byte a [ keyboard_key_pressed::return#2 ] Uplifting [main] best 1258 combination reg byte a [ main::$2 ] +Uplifting [MOS6526_CIA] best 1258 combination Uplifting [keyboard_init] best 1258 combination Uplifting [] best 1258 combination @@ -563,16 +600,13 @@ ASSEMBLER BEFORE OPTIMIZATION .const KEY_SPACE = $3c .label RASTER = $d012 .label BGCOL = $d021 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA #1 Port A data direction register. - .label CIA1_PORT_A_DDR = $dc02 - // CIA #1 Port B data direction register. - .label CIA1_PORT_B_DDR = $dc03 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 .const GREEN = 5 .const BLUE = 6 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = 3 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -661,11 +695,11 @@ keyboard_key_pressed: { // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. keyboard_matrix_read: { - // [20] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // [20] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // [21] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [21] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff jmp __breturn // keyboard_matrix_read::@return @@ -676,14 +710,14 @@ keyboard_matrix_read: { // keyboard_init // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { - // [23] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 + // [23] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Write Mode lda #$ff - sta CIA1_PORT_A_DDR - // [24] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [24] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Read Mode lda #0 - sta CIA1_PORT_B_DDR + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR jmp __breturn // keyboard_init::@return __breturn: @@ -736,12 +770,26 @@ FINAL SYMBOL TABLE (label) @end (const nomodify byte*) BGCOL = (byte*) 53281 (const nomodify byte) BLUE = (byte) 6 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_A_DDR = (byte*) 56322 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 -(const nomodify byte*) CIA1_PORT_B_DDR = (byte*) 56323 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) GREEN = (byte) 5 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 (const nomodify byte*) RASTER = (byte*) 53266 (void()) keyboard_init() (label) keyboard_init::@return @@ -795,16 +843,13 @@ Score: 1141 .const KEY_SPACE = $3c .label RASTER = $d012 .label BGCOL = $d021 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA #1 Port A data direction register. - .label CIA1_PORT_A_DDR = $dc02 - // CIA #1 Port B data direction register. - .label CIA1_PORT_B_DDR = $dc03 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 .const GREEN = 5 .const BLUE = 6 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = 3 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 @@ -881,13 +926,13 @@ keyboard_key_pressed: { // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] - // [20] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] + // [20] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask+(const byte) keyboard_key_pressed::rowidx#0) -- _deref_pbuc1=_deref_pbuc2 lda keyboard_matrix_row_bitmask+keyboard_key_pressed.rowidx - sta CIA1_PORT_A - // ~*CIA1_PORT_B - // [21] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + // [21] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // keyboard_matrix_read::@return // } @@ -897,16 +942,16 @@ keyboard_matrix_read: { // keyboard_init // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { - // *CIA1_PORT_A_DDR = $ff - // [23] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 + // CIA1->PORT_A_DDR = $ff + // [23] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Write Mode lda #$ff - sta CIA1_PORT_A_DDR - // *CIA1_PORT_B_DDR = $00 - // [24] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA1->PORT_B_DDR = $00 + // [24] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Read Mode lda #0 - sta CIA1_PORT_B_DDR + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR // keyboard_init::@return // } // [25] return diff --git a/src/test/ref/test-keyboard-space.sym b/src/test/ref/test-keyboard-space.sym index 2b97c1379..b072f3d61 100644 --- a/src/test/ref/test-keyboard-space.sym +++ b/src/test/ref/test-keyboard-space.sym @@ -3,12 +3,26 @@ (label) @end (const nomodify byte*) BGCOL = (byte*) 53281 (const nomodify byte) BLUE = (byte) 6 -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_A_DDR = (byte*) 56322 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 -(const nomodify byte*) CIA1_PORT_B_DDR = (byte*) 56323 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) GREEN = (byte) 5 (const nomodify byte) KEY_SPACE = (byte) $3c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 (const nomodify byte*) RASTER = (byte*) 53266 (void()) keyboard_init() (label) keyboard_init::@return diff --git a/src/test/ref/test-keyboard.asm b/src/test/ref/test-keyboard.asm index 21612e23e..997b10fb6 100644 --- a/src/test/ref/test-keyboard.asm +++ b/src/test/ref/test-keyboard.asm @@ -53,14 +53,11 @@ .const KEY_SPACE = $3c .const KEY_Q = $3e .label RASTER = $d012 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA #1 Port A data direction register. - .label CIA1_PORT_A_DDR = $dc02 - // CIA #1 Port B data direction register. - .label CIA1_PORT_B_DDR = $dc03 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = 3 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 main: { .label sc = 2 .label screen = 5 @@ -240,11 +237,11 @@ keyboard_key_pressed: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] lda keyboard_matrix_row_bitmask,x - sta CIA1_PORT_A - // ~*CIA1_PORT_B - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // } rts @@ -262,14 +259,14 @@ keyboard_get_keycode: { } // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { - // *CIA1_PORT_A_DDR = $ff + // CIA1->PORT_A_DDR = $ff // Keyboard Matrix Columns Write Mode lda #$ff - sta CIA1_PORT_A_DDR - // *CIA1_PORT_B_DDR = $00 + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA1->PORT_B_DDR = $00 // Keyboard Matrix Columns Read Mode lda #0 - sta CIA1_PORT_B_DDR + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR // } rts } diff --git a/src/test/ref/test-keyboard.cfg b/src/test/ref/test-keyboard.cfg index a10e7eee5..851192332 100644 --- a/src/test/ref/test-keyboard.cfg +++ b/src/test/ref/test-keyboard.cfg @@ -117,8 +117,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed main::@5 [57] (byte) keyboard_matrix_read::rowid#2 ← phi( keyboard_key_pressed/(byte) keyboard_matrix_read::rowid#0 main::@5/(byte) keyboard_matrix_read::rowid#1 ) - [58] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#2) - [59] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [58] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#2) + [59] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [60] return @@ -134,8 +134,8 @@ keyboard_get_keycode::@return: scope:[keyboard_get_keycode] from keyboard_get_k (void()) keyboard_init() keyboard_init: scope:[keyboard_init] from main::@3 - [63] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff - [64] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 + [63] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff + [64] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 to:keyboard_init::@return keyboard_init::@return: scope:[keyboard_init] from keyboard_init [65] return diff --git a/src/test/ref/test-keyboard.log b/src/test/ref/test-keyboard.log index b26f0882e..bc2a1e1d3 100644 --- a/src/test/ref/test-keyboard.log +++ b/src/test/ref/test-keyboard.log @@ -1,3 +1,11 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -6,8 +14,8 @@ CONTROL FLOW GRAPH SSA (void()) keyboard_init() keyboard_init: scope:[keyboard_init] from main::@3 - *((const nomodify byte*) CIA1_PORT_A_DDR) ← (number) $ff - *((const nomodify byte*) CIA1_PORT_B_DDR) ← (number) 0 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) $ff + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (number) 0 to:keyboard_init::@return keyboard_init::@return: scope:[keyboard_init] from keyboard_init return @@ -16,8 +24,8 @@ keyboard_init::@return: scope:[keyboard_init] from keyboard_init (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed main::@7 (byte) keyboard_matrix_read::rowid#2 ← phi( keyboard_key_pressed/(byte) keyboard_matrix_read::rowid#0 main::@7/(byte) keyboard_matrix_read::rowid#1 ) - *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#2) - (byte~) keyboard_matrix_read::$0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#2) + (byte~) keyboard_matrix_read::$0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) (byte) keyboard_matrix_read::row_pressed_bits#0 ← (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#0 ← (byte) keyboard_matrix_read::row_pressed_bits#0 to:keyboard_matrix_read::@return @@ -233,10 +241,7 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end -(const nomodify byte*) CIA1_PORT_A = (byte*)(number) $dc00 -(const nomodify byte*) CIA1_PORT_A_DDR = (byte*)(number) $dc02 -(const nomodify byte*) CIA1_PORT_B = (byte*)(number) $dc01 -(const nomodify byte*) CIA1_PORT_B_DDR = (byte*)(number) $dc03 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 (const nomodify byte) KEY_0 = (byte) $23 (const nomodify byte) KEY_1 = (byte) $38 (const nomodify byte) KEY_2 = (byte) $3b @@ -287,6 +292,24 @@ SYMBOL TABLE SSA (const nomodify byte) KEY_X = (byte) $17 (const nomodify byte) KEY_Y = (byte) $19 (const nomodify byte) KEY_Z = (byte) $c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 (const nomodify byte*) RASTER = (byte*)(number) $d012 (const to_nomodify byte*) keyboard_char_keycodes[] = { (const nomodify byte) KEY_AT, (const nomodify byte) KEY_A, (const nomodify byte) KEY_B, (const nomodify byte) KEY_C, (const nomodify byte) KEY_D, (const nomodify byte) KEY_E, (const nomodify byte) KEY_F, (const nomodify byte) KEY_G, (const nomodify byte) KEY_H, (const nomodify byte) KEY_I, (const nomodify byte) KEY_J, (const nomodify byte) KEY_K, (const nomodify byte) KEY_L, (const nomodify byte) KEY_M, (const nomodify byte) KEY_N, (const nomodify byte) KEY_O, (const nomodify byte) KEY_P, (const nomodify byte) KEY_Q, (const nomodify byte) KEY_R, (const nomodify byte) KEY_S, (const nomodify byte) KEY_T, (const nomodify byte) KEY_U, (const nomodify byte) KEY_V, (const nomodify byte) KEY_W, (const nomodify byte) KEY_X, (const nomodify byte) KEY_Y, (const nomodify byte) KEY_Z, (byte) $3f, (const nomodify byte) KEY_POUND, (byte) $3f, (const nomodify byte) KEY_ARROW_UP, (const nomodify byte) KEY_ARROW_LEFT, (const nomodify byte) KEY_SPACE, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (const nomodify byte) KEY_ASTERISK, (const nomodify byte) KEY_PLUS, (const nomodify byte) KEY_COMMA, (const nomodify byte) KEY_MINUS, (const nomodify byte) KEY_DOT, (const nomodify byte) KEY_SLASH, (const nomodify byte) KEY_0, (const nomodify byte) KEY_1, (const nomodify byte) KEY_2, (const nomodify byte) KEY_3, (const nomodify byte) KEY_4, (const nomodify byte) KEY_5, (const nomodify byte) KEY_6, (const nomodify byte) KEY_7, (const nomodify byte) KEY_8, (const nomodify byte) KEY_9, (const nomodify byte) KEY_COLON, (const nomodify byte) KEY_SEMICOLON, (byte) $3f, (const nomodify byte) KEY_EQUALS, (byte) $3f, (byte) $3f } (byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch) @@ -456,8 +479,8 @@ SYMBOL TABLE SSA (byte*) main::screen#8 (byte*) main::screen#9 -Adding number conversion cast (unumber) $ff in *((const nomodify byte*) CIA1_PORT_A_DDR) ← (number) $ff -Adding number conversion cast (unumber) 0 in *((const nomodify byte*) CIA1_PORT_B_DDR) ← (number) 0 +Adding number conversion cast (unumber) $ff in *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) $ff +Adding number conversion cast (unumber) 0 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (number) 0 Adding number conversion cast (unumber) 7 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#1 & (number) 7 Adding number conversion cast (unumber) keyboard_key_pressed::$0 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#1 & (unumber)(number) 7 Adding number conversion cast (unumber) 3 in (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_key_pressed::key#1 >> (number) 3 @@ -474,14 +497,11 @@ Adding number conversion cast (unumber) $3f in (bool~) main::$12 ← (byte) main Adding number conversion cast (unumber) 0 in (bool~) main::$15 ← (byte~) main::$14 != (number) 0 Adding number conversion cast (unumber) 5 in (bool~) main::$18 ← (byte) main::i#2 < (number) 5 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast *((const nomodify byte*) CIA1_PORT_A_DDR) ← (unumber)(number) $ff -Inlining cast *((const nomodify byte*) CIA1_PORT_B_DDR) ← (unumber)(number) 0 +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) $ff +Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53266 -Simplifying constant pointer cast (byte*) 56320 -Simplifying constant pointer cast (byte*) 56321 -Simplifying constant pointer cast (byte*) 56322 -Simplifying constant pointer cast (byte*) 56323 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 Simplifying constant integer cast $ff Simplifying constant integer cast 0 Simplifying constant integer cast 7 @@ -584,6 +604,10 @@ Resolved ranged next value [48] main::row#1 ← ++ main::row#2 to ++ Resolved ranged comparison value [50] if(main::row#1!=rangelast(0,7)) goto main::@7 to (number) 8 Resolved ranged next value [62] main::ch#1 ← ++ main::ch#2 to ++ Resolved ranged comparison value [64] if(main::ch#1!=rangelast(0,$3f)) goto main::@14 to (number) $40 +Simplifying expression containing zero (byte*)CIA1 in [4] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#2) +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A +Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks Adding number conversion cast (unumber) 8 in if((byte) main::col#1!=(number) 8) goto main::@8 @@ -804,8 +828,8 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_key_pressed main::@5 [57] (byte) keyboard_matrix_read::rowid#2 ← phi( keyboard_key_pressed/(byte) keyboard_matrix_read::rowid#0 main::@5/(byte) keyboard_matrix_read::rowid#1 ) - [58] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#2) - [59] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) + [58] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#2) + [59] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read [60] return @@ -821,8 +845,8 @@ keyboard_get_keycode::@return: scope:[keyboard_get_keycode] from keyboard_get_k (void()) keyboard_init() keyboard_init: scope:[keyboard_init] from main::@3 - [63] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff - [64] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 + [63] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff + [64] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 to:keyboard_init::@return keyboard_init::@return: scope:[keyboard_init] from keyboard_init [65] return @@ -830,6 +854,20 @@ keyboard_init::@return: scope:[keyboard_init] from keyboard_init VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch) (byte) keyboard_get_keycode::ch (byte) keyboard_get_keycode::ch#0 11002.0 @@ -1025,14 +1063,11 @@ Target platform is c64basic / MOS6502X .const KEY_SPACE = $3c .const KEY_Q = $3e .label RASTER = $d012 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA #1 Port A data direction register. - .label CIA1_PORT_A_DDR = $dc02 - // CIA #1 Port B data direction register. - .label CIA1_PORT_B_DDR = $dc03 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = 3 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -1385,12 +1420,12 @@ keyboard_matrix_read: { .label rowid = $b .label return_1 = $18 .label return_2 = $c - // [58] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#2) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [58] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#2) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy.z rowid lda keyboard_matrix_row_bitmask,y - sta CIA1_PORT_A - // [59] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuz1=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [59] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuz1=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff sta.z return jmp __breturn @@ -1422,14 +1457,14 @@ keyboard_get_keycode: { // keyboard_init // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { - // [63] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 + // [63] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Write Mode lda #$ff - sta CIA1_PORT_A_DDR - // [64] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [64] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Read Mode lda #0 - sta CIA1_PORT_B_DDR + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR jmp __breturn // keyboard_init::@return __breturn: @@ -1461,10 +1496,10 @@ Statement [47] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ ma Statement [50] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#0 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:33 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::key#0 = main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_matrix_read::rowid#2 keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:9 [ main::ch#2 main::ch#1 ] Removing always clobbered register reg byte a as potential for zp[1]:22 [ keyboard_key_pressed::colidx#0 ] -Statement [58] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#2) [ ] ( main:2::keyboard_matrix_read:12 [ main::row#2 main::screen#13 ] { { keyboard_matrix_read::rowid#1 = keyboard_matrix_read::rowid#2 main::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#3 } } main:2::keyboard_key_pressed:33::keyboard_matrix_read:52 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::key#0 = main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_matrix_read::rowid#2 keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [59] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_matrix_read:12 [ main::row#2 main::screen#13 keyboard_matrix_read::return#0 ] { { keyboard_matrix_read::rowid#1 = keyboard_matrix_read::rowid#2 main::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#3 } } main:2::keyboard_key_pressed:33::keyboard_matrix_read:52 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::key#0 = main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_matrix_read::rowid#2 keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [63] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff [ ] ( main:2::keyboard_init:8 [ ] { } ) always clobbers reg byte a -Statement [64] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 [ ] ( main:2::keyboard_init:8 [ ] { } ) always clobbers reg byte a +Statement [58] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#2) [ ] ( main:2::keyboard_matrix_read:12 [ main::row#2 main::screen#13 ] { { keyboard_matrix_read::rowid#1 = keyboard_matrix_read::rowid#2 main::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#3 } } main:2::keyboard_key_pressed:33::keyboard_matrix_read:52 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::key#0 = main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_matrix_read::rowid#2 keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [59] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_matrix_read:12 [ main::row#2 main::screen#13 keyboard_matrix_read::return#0 ] { { keyboard_matrix_read::rowid#1 = keyboard_matrix_read::rowid#2 main::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#3 } } main:2::keyboard_key_pressed:33::keyboard_matrix_read:52 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::key#0 = main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_matrix_read::rowid#2 keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [63] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff [ ] ( main:2::keyboard_init:8 [ ] { } ) always clobbers reg byte a +Statement [64] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 [ ] ( main:2::keyboard_init:8 [ ] { } ) always clobbers reg byte a Statement [6] if((byte*) main::sc#2<(word)(number) $400+(number) $3e8) goto main::@2 [ main::sc#2 ] ( main:2 [ main::sc#2 ] { } ) always clobbers reg byte a Statement [9] if(*((const nomodify byte*) RASTER)!=(byte) $ff) goto main::@4 [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [16] (byte~) main::$4 ← (byte) main::row_pressed_bits#2 & (byte) $80 [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 main::$4 ] ( main:2 [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 main::$4 ] { } ) always clobbers reg byte a @@ -1476,10 +1511,10 @@ Statement [43] *((byte*) main::screen#2 + (byte) main::i#4) ← (byte) ' ' [ mai Statement [46] *((byte*) main::screen#13 + (byte) main::col#2) ← (byte) '1' [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] ( main:2 [ main::row#2 main::screen#13 main::row_pressed_bits#2 main::col#2 ] { } ) always clobbers reg byte a Statement [47] *((byte*) main::sc#2) ← (byte) ' ' [ main::sc#2 ] ( main:2 [ main::sc#2 ] { } ) always clobbers reg byte a reg byte y Statement [50] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#0 >> (byte) 3 [ keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] ( main:2::keyboard_key_pressed:33 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 keyboard_key_pressed::rowidx#0 ] { { keyboard_key_pressed::key#0 = main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_matrix_read::rowid#2 keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [58] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#2) [ ] ( main:2::keyboard_matrix_read:12 [ main::row#2 main::screen#13 ] { { keyboard_matrix_read::rowid#1 = keyboard_matrix_read::rowid#2 main::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#3 } } main:2::keyboard_key_pressed:33::keyboard_matrix_read:52 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::key#0 = main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_matrix_read::rowid#2 keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [59] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_matrix_read:12 [ main::row#2 main::screen#13 keyboard_matrix_read::return#0 ] { { keyboard_matrix_read::rowid#1 = keyboard_matrix_read::rowid#2 main::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#3 } } main:2::keyboard_key_pressed:33::keyboard_matrix_read:52 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::key#0 = main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_matrix_read::rowid#2 keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [63] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff [ ] ( main:2::keyboard_init:8 [ ] { } ) always clobbers reg byte a -Statement [64] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 [ ] ( main:2::keyboard_init:8 [ ] { } ) always clobbers reg byte a +Statement [58] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#2) [ ] ( main:2::keyboard_matrix_read:12 [ main::row#2 main::screen#13 ] { { keyboard_matrix_read::rowid#1 = keyboard_matrix_read::rowid#2 main::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#3 } } main:2::keyboard_key_pressed:33::keyboard_matrix_read:52 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 ] { { keyboard_key_pressed::key#0 = main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_matrix_read::rowid#2 keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [59] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:2::keyboard_matrix_read:12 [ main::row#2 main::screen#13 keyboard_matrix_read::return#0 ] { { keyboard_matrix_read::rowid#1 = keyboard_matrix_read::rowid#2 main::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#3 } } main:2::keyboard_key_pressed:33::keyboard_matrix_read:52 [ main::screen#2 main::ch#2 main::i#3 keyboard_key_pressed::colidx#0 keyboard_matrix_read::return#0 ] { { keyboard_key_pressed::key#0 = main::key#0 } { keyboard_key_pressed::return#0 = keyboard_key_pressed::return#2 } { keyboard_matrix_read::rowid#0 = keyboard_matrix_read::rowid#2 keyboard_key_pressed::rowidx#0 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [63] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff [ ] ( main:2::keyboard_init:8 [ ] { } ) always clobbers reg byte a +Statement [64] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 [ ] ( main:2::keyboard_init:8 [ ] { } ) always clobbers reg byte a Potential registers zp[2]:2 [ main::sc#2 main::sc#1 ] : zp[2]:2 , Potential registers zp[1]:4 [ main::row#2 main::row#1 ] : zp[1]:4 , reg byte x , reg byte y , Potential registers zp[2]:5 [ main::screen#13 main::screen#1 ] : zp[2]:5 , @@ -1510,6 +1545,7 @@ Uplift Scope [keyboard_matrix_read] 133,007: zp[1]:11 [ keyboard_matrix_read::ro Uplift Scope [main] 21,668.83: zp[1]:8 [ main::col#2 main::col#1 ] 20,002: zp[1]:13 [ main::$4 ] 14,870.13: zp[1]:7 [ main::row_pressed_bits#2 main::row_pressed_bits#1 main::row_pressed_bits#0 ] 7,590.92: zp[1]:10 [ main::i#4 main::i#3 main::i#6 main::i#1 main::i#2 ] 2,393.62: zp[2]:5 [ main::screen#13 main::screen#1 ] 2,002: zp[1]:21 [ main::$14 ] 1,787.5: zp[1]:9 [ main::ch#2 main::ch#1 ] 1,716: zp[1]:4 [ main::row#2 main::row#1 ] 1,501.5: zp[1]:18 [ main::key#0 ] 336.67: zp[2]:2 [ main::sc#2 main::sc#1 ] 100.14: zp[2]:14 [ main::screen#2 ] Uplift Scope [keyboard_key_pressed] 20,002: zp[1]:23 [ keyboard_key_pressed::rowidx#0 ] 20,002: zp[1]:25 [ keyboard_key_pressed::$2 ] 10,501.5: zp[1]:19 [ keyboard_key_pressed::key#0 ] 3,667.33: zp[1]:26 [ keyboard_key_pressed::return#0 ] 3,333.67: zp[1]:22 [ keyboard_key_pressed::colidx#0 ] 2,002: zp[1]:20 [ keyboard_key_pressed::return#2 ] Uplift Scope [keyboard_get_keycode] 11,002: zp[1]:16 [ keyboard_get_keycode::ch#0 ] 3,667.33: zp[1]:28 [ keyboard_get_keycode::return#0 ] 2,002: zp[1]:17 [ keyboard_get_keycode::return#2 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [keyboard_init] Uplift Scope [] @@ -1520,6 +1556,7 @@ Limited combination testing to 100 combinations of 15552 possible. Uplifting [keyboard_key_pressed] best 79629 combination reg byte a [ keyboard_key_pressed::rowidx#0 ] zp[1]:25 [ keyboard_key_pressed::$2 ] reg byte x [ keyboard_key_pressed::key#0 ] reg byte a [ keyboard_key_pressed::return#0 ] zp[1]:22 [ keyboard_key_pressed::colidx#0 ] zp[1]:20 [ keyboard_key_pressed::return#2 ] Limited combination testing to 100 combinations of 3072 possible. Uplifting [keyboard_get_keycode] best 78423 combination reg byte x [ keyboard_get_keycode::ch#0 ] reg byte a [ keyboard_get_keycode::return#0 ] reg byte a [ keyboard_get_keycode::return#2 ] +Uplifting [MOS6526_CIA] best 78423 combination Uplifting [keyboard_init] best 78423 combination Uplifting [] best 78423 combination Attempting to uplift remaining variables inzp[1]:25 [ keyboard_key_pressed::$2 ] @@ -1601,14 +1638,11 @@ ASSEMBLER BEFORE OPTIMIZATION .const KEY_SPACE = $3c .const KEY_Q = $3e .label RASTER = $d012 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA #1 Port A data direction register. - .label CIA1_PORT_A_DDR = $dc02 - // CIA #1 Port B data direction register. - .label CIA1_PORT_B_DDR = $dc03 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = 3 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] @@ -1916,11 +1950,11 @@ keyboard_key_pressed: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { - // [58] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#2) -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // [58] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#2) -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda keyboard_matrix_row_bitmask,x - sta CIA1_PORT_A - // [59] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // [59] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff jmp __breturn // keyboard_matrix_read::@return @@ -1946,14 +1980,14 @@ keyboard_get_keycode: { // keyboard_init // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { - // [63] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 + // [63] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Write Mode lda #$ff - sta CIA1_PORT_A_DDR - // [64] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // [64] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Read Mode lda #0 - sta CIA1_PORT_B_DDR + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR jmp __breturn // keyboard_init::@return __breturn: @@ -2050,17 +2084,14 @@ Removing instruction jmp __b12 Succesful ASM optimization Pass5NextJumpElimination Removing instruction __bbegin: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [78] bcc __b2 to bcs -Fixing long branch [84] bcc __b2 to bcs +Fixing long branch [75] bcc __b2 to bcs +Fixing long branch [81] bcc __b2 to bcs FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_A_DDR = (byte*) 56322 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 -(const nomodify byte*) CIA1_PORT_B_DDR = (byte*) 56323 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) KEY_0 = (byte) $23 (const nomodify byte) KEY_1 = (byte) $38 (const nomodify byte) KEY_2 = (byte) $3b @@ -2111,6 +2142,23 @@ FINAL SYMBOL TABLE (const nomodify byte) KEY_X = (byte) $17 (const nomodify byte) KEY_Y = (byte) $19 (const nomodify byte) KEY_Z = (byte) $c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 (const nomodify byte*) RASTER = (byte*) 53266 (const to_nomodify byte*) keyboard_char_keycodes[] = { (const nomodify byte) KEY_AT, (const nomodify byte) KEY_A, (const nomodify byte) KEY_B, (const nomodify byte) KEY_C, (const nomodify byte) KEY_D, (const nomodify byte) KEY_E, (const nomodify byte) KEY_F, (const nomodify byte) KEY_G, (const nomodify byte) KEY_H, (const nomodify byte) KEY_I, (const nomodify byte) KEY_J, (const nomodify byte) KEY_K, (const nomodify byte) KEY_L, (const nomodify byte) KEY_M, (const nomodify byte) KEY_N, (const nomodify byte) KEY_O, (const nomodify byte) KEY_P, (const nomodify byte) KEY_Q, (const nomodify byte) KEY_R, (const nomodify byte) KEY_S, (const nomodify byte) KEY_T, (const nomodify byte) KEY_U, (const nomodify byte) KEY_V, (const nomodify byte) KEY_W, (const nomodify byte) KEY_X, (const nomodify byte) KEY_Y, (const nomodify byte) KEY_Z, (byte) $3f, (const nomodify byte) KEY_POUND, (byte) $3f, (const nomodify byte) KEY_ARROW_UP, (const nomodify byte) KEY_ARROW_LEFT, (const nomodify byte) KEY_SPACE, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (const nomodify byte) KEY_ASTERISK, (const nomodify byte) KEY_PLUS, (const nomodify byte) KEY_COMMA, (const nomodify byte) KEY_MINUS, (const nomodify byte) KEY_DOT, (const nomodify byte) KEY_SLASH, (const nomodify byte) KEY_0, (const nomodify byte) KEY_1, (const nomodify byte) KEY_2, (const nomodify byte) KEY_3, (const nomodify byte) KEY_4, (const nomodify byte) KEY_5, (const nomodify byte) KEY_6, (const nomodify byte) KEY_7, (const nomodify byte) KEY_8, (const nomodify byte) KEY_9, (const nomodify byte) KEY_COLON, (const nomodify byte) KEY_SEMICOLON, (byte) $3f, (const nomodify byte) KEY_EQUALS, (byte) $3f, (byte) $3f } (byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch) @@ -2285,14 +2333,11 @@ Score: 57707 .const KEY_SPACE = $3c .const KEY_Q = $3e .label RASTER = $d012 - // CIA#1 Port A: keyboard matrix columns and joystick #2 - .label CIA1_PORT_A = $dc00 - // CIA#1 Port B: keyboard matrix rows and joystick #1. - .label CIA1_PORT_B = $dc01 - // CIA #1 Port A data direction register. - .label CIA1_PORT_A_DDR = $dc02 - // CIA #1 Port B data direction register. - .label CIA1_PORT_B_DDR = $dc03 + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = 3 + .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 @@ -2579,13 +2624,13 @@ keyboard_key_pressed: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { - // *CIA1_PORT_A = keyboard_matrix_row_bitmask[rowid] - // [58] *((const nomodify byte*) CIA1_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#2) -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] + // [58] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#2) -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda keyboard_matrix_row_bitmask,x - sta CIA1_PORT_A - // ~*CIA1_PORT_B - // [59] (byte) keyboard_matrix_read::return#0 ← ~ *((const nomodify byte*) CIA1_PORT_B) -- vbuaa=_bnot__deref_pbuc1 - lda CIA1_PORT_B + sta CIA1 + // ~CIA1->PORT_B + // [59] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // keyboard_matrix_read::@return // } @@ -2610,16 +2655,16 @@ keyboard_get_keycode: { // keyboard_init // Initialize keyboard reading by setting CIA#$ Data Direction Registers keyboard_init: { - // *CIA1_PORT_A_DDR = $ff - // [63] *((const nomodify byte*) CIA1_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 + // CIA1->PORT_A_DDR = $ff + // [63] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) $ff -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Write Mode lda #$ff - sta CIA1_PORT_A_DDR - // *CIA1_PORT_B_DDR = $00 - // [64] *((const nomodify byte*) CIA1_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR + // CIA1->PORT_B_DDR = $00 + // [64] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Keyboard Matrix Columns Read Mode lda #0 - sta CIA1_PORT_B_DDR + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR // keyboard_init::@return // } // [65] return diff --git a/src/test/ref/test-keyboard.sym b/src/test/ref/test-keyboard.sym index 3cbc68fb0..3736ca94e 100644 --- a/src/test/ref/test-keyboard.sym +++ b/src/test/ref/test-keyboard.sym @@ -1,10 +1,7 @@ (label) @1 (label) @begin (label) @end -(const nomodify byte*) CIA1_PORT_A = (byte*) 56320 -(const nomodify byte*) CIA1_PORT_A_DDR = (byte*) 56322 -(const nomodify byte*) CIA1_PORT_B = (byte*) 56321 -(const nomodify byte*) CIA1_PORT_B_DDR = (byte*) 56323 +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 (const nomodify byte) KEY_0 = (byte) $23 (const nomodify byte) KEY_1 = (byte) $38 (const nomodify byte) KEY_2 = (byte) $3b @@ -55,6 +52,23 @@ (const nomodify byte) KEY_X = (byte) $17 (const nomodify byte) KEY_Y = (byte) $19 (const nomodify byte) KEY_Z = (byte) $c +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 +(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 (const nomodify byte*) RASTER = (byte*) 53266 (const to_nomodify byte*) keyboard_char_keycodes[] = { (const nomodify byte) KEY_AT, (const nomodify byte) KEY_A, (const nomodify byte) KEY_B, (const nomodify byte) KEY_C, (const nomodify byte) KEY_D, (const nomodify byte) KEY_E, (const nomodify byte) KEY_F, (const nomodify byte) KEY_G, (const nomodify byte) KEY_H, (const nomodify byte) KEY_I, (const nomodify byte) KEY_J, (const nomodify byte) KEY_K, (const nomodify byte) KEY_L, (const nomodify byte) KEY_M, (const nomodify byte) KEY_N, (const nomodify byte) KEY_O, (const nomodify byte) KEY_P, (const nomodify byte) KEY_Q, (const nomodify byte) KEY_R, (const nomodify byte) KEY_S, (const nomodify byte) KEY_T, (const nomodify byte) KEY_U, (const nomodify byte) KEY_V, (const nomodify byte) KEY_W, (const nomodify byte) KEY_X, (const nomodify byte) KEY_Y, (const nomodify byte) KEY_Z, (byte) $3f, (const nomodify byte) KEY_POUND, (byte) $3f, (const nomodify byte) KEY_ARROW_UP, (const nomodify byte) KEY_ARROW_LEFT, (const nomodify byte) KEY_SPACE, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (const nomodify byte) KEY_ASTERISK, (const nomodify byte) KEY_PLUS, (const nomodify byte) KEY_COMMA, (const nomodify byte) KEY_MINUS, (const nomodify byte) KEY_DOT, (const nomodify byte) KEY_SLASH, (const nomodify byte) KEY_0, (const nomodify byte) KEY_1, (const nomodify byte) KEY_2, (const nomodify byte) KEY_3, (const nomodify byte) KEY_4, (const nomodify byte) KEY_5, (const nomodify byte) KEY_6, (const nomodify byte) KEY_7, (const nomodify byte) KEY_8, (const nomodify byte) KEY_9, (const nomodify byte) KEY_COLON, (const nomodify byte) KEY_SEMICOLON, (byte) $3f, (const nomodify byte) KEY_EQUALS, (byte) $3f, (byte) $3f } (byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch) diff --git a/src/test/ref/textbox.log b/src/test/ref/textbox.log index 3a2821b64..6e99b72c5 100644 --- a/src/test/ref/textbox.log +++ b/src/test/ref/textbox.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -430,6 +432,20 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) draw_window((byte) draw_window::x1 , (byte) draw_window::y1 , (byte) draw_window::x2 , (byte) draw_window::y2) (number~) draw_window::$0 (number~) draw_window::$1 @@ -1587,6 +1603,20 @@ draw_window::@2: scope:[draw_window] from draw_window::@1 VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) draw_window((byte) draw_window::x1 , (byte) draw_window::y1 , (byte) draw_window::x2 , (byte) draw_window::y2) (word~) draw_window::$14 2000002.0 (word~) draw_window::$15 2000002.0 @@ -3170,6 +3200,7 @@ REGISTER UPLIFT SCOPES Uplift Scope [draw_window] 30,200,005: zp[1]:21 [ draw_window::x3#2 draw_window::x3#1 draw_window::x3#0 ] 20,000,002: zp[2]:73 [ draw_window::$26 ] 20,000,002: zp[2]:75 [ draw_window::$35 ] 2,646,254.75: zp[1]:18 [ draw_window::x#2 draw_window::x#0 draw_window::x#1 ] 2,475,459.09: zp[1]:19 [ draw_window::y#2 draw_window::y#0 draw_window::y#1 ] 2,437,504.5: zp[1]:20 [ draw_window::y3#2 draw_window::y3#1 draw_window::y3#0 ] 2,000,002: zp[1]:69 [ draw_window::$45 ] 2,000,002: zp[1]:70 [ draw_window::$46 ] 2,000,002: zp[1]:77 [ draw_window::$42 ] 2,000,002: zp[1]:78 [ draw_window::$43 ] 2,000,002: zp[2]:81 [ draw_window::$19 ] 2,000,002: zp[2]:83 [ draw_window::$31 ] 2,000,002: zp[2]:85 [ draw_window::$20 ] 2,000,002: zp[2]:87 [ draw_window::$32 ] 2,000,002: zp[2]:89 [ draw_window::$14 ] 2,000,002: zp[2]:91 [ draw_window::$27 ] 2,000,002: zp[2]:93 [ draw_window::$15 ] 2,000,002: zp[2]:95 [ draw_window::$28 ] 1,375,000.25: zp[2]:71 [ draw_window::z#2 ] 750,000.75: zp[2]:79 [ draw_window::z#1 ] 197,229.62: zp[1]:25 [ draw_window::x2#0 ] 60,588.47: zp[2]:45 [ draw_window::z#0 ] 33,850.1: zp[1]:26 [ draw_window::y2#0 ] 32,396.94: zp[1]:23 [ draw_window::x1#0 ] 31,212.24: zp[2]:49 [ draw_window::q#0 ] 20,002: zp[1]:43 [ draw_window::$36 ] 20,002: zp[1]:44 [ draw_window::$37 ] 20,002: zp[1]:47 [ draw_window::$39 ] 20,002: zp[1]:48 [ draw_window::$40 ] 20,002: zp[2]:51 [ draw_window::$2 ] 20,002: zp[2]:53 [ draw_window::$29 ] 20,002: zp[2]:55 [ draw_window::$3 ] 20,002: zp[2]:57 [ draw_window::$30 ] 20,002: zp[2]:59 [ draw_window::$4 ] 20,002: zp[2]:61 [ draw_window::$33 ] 20,002: zp[2]:63 [ draw_window::$5 ] 20,002: zp[2]:65 [ draw_window::$34 ] 10,001: zp[1]:67 [ draw_window::$6 ] 10,001: zp[1]:68 [ draw_window::$8 ] 1,062.62: zp[1]:24 [ draw_window::y1#0 ] Uplift Scope [textbox] 2,566,671.33: zp[1]:12 [ textbox::ls#2 textbox::ls#0 textbox::ls#1 ] 2,314,288.29: zp[1]:13 [ textbox::c#2 textbox::c#1 ] 769,555.81: zp[1]:14 [ textbox::x#5 textbox::x#10 textbox::x#0 textbox::x#7 textbox::x#17 textbox::x#1 textbox::x#12 ] 579,316.05: zp[2]:16 [ textbox::z#5 textbox::z#3 textbox::z#0 textbox::z#4 textbox::z#1 textbox::z#2 ] 460,446.71: zp[1]:15 [ textbox::y#5 textbox::y#12 textbox::y#0 textbox::y#11 textbox::y#1 textbox::y#2 ] 200,002: zp[2]:33 [ textbox::$8 ] 200,002: zp[2]:35 [ textbox::$32 ] 200,002: zp[1]:39 [ textbox::$39 ] 200,002: zp[1]:40 [ textbox::$40 ] 200,002: zp[1]:41 [ textbox::$36 ] 200,002: zp[1]:42 [ textbox::$37 ] 100,001: zp[1]:37 [ textbox::$15 ] 100,001: zp[1]:38 [ textbox::$17 ] 50,000.5: zp[1]:11 [ textbox::i#2 textbox::i#1 ] 48,936.28: zp[2]:9 [ textbox::text#12 ] 6,528.79: zp[1]:5 [ textbox::x1#4 textbox::x1#0 ] 6,478.29: zp[1]:7 [ textbox::x2#4 textbox::x2#0 ] 4,367.44: zp[1]:8 [ textbox::y2#4 textbox::y2#0 ] 2,002: zp[2]:29 [ textbox::$33 ] 2,002: zp[2]:31 [ textbox::$34 ] 1,501.5: zp[2]:27 [ textbox::$31 ] 552.5: zp[1]:6 [ textbox::y1#4 textbox::y1#0 ] Uplift Scope [main] 3,503.5: zp[2]:3 [ main::wait#2 main::wait#1 ] 275.45: zp[1]:2 [ main::x#2 main::x#1 ] 202: zp[1]:22 [ main::$4 ] +Uplift Scope [MOS6526_CIA] Uplift Scope [] Uplifting [draw_window] best 192545 combination reg byte x [ draw_window::x3#2 draw_window::x3#1 draw_window::x3#0 ] zp[2]:73 [ draw_window::$26 ] zp[2]:75 [ draw_window::$35 ] reg byte x [ draw_window::x#2 draw_window::x#0 draw_window::x#1 ] reg byte x [ draw_window::y#2 draw_window::y#0 draw_window::y#1 ] zp[1]:20 [ draw_window::y3#2 draw_window::y3#1 draw_window::y3#0 ] reg byte a [ draw_window::$45 ] reg byte a [ draw_window::$46 ] zp[1]:77 [ draw_window::$42 ] zp[1]:78 [ draw_window::$43 ] zp[2]:81 [ draw_window::$19 ] zp[2]:83 [ draw_window::$31 ] zp[2]:85 [ draw_window::$20 ] zp[2]:87 [ draw_window::$32 ] zp[2]:89 [ draw_window::$14 ] zp[2]:91 [ draw_window::$27 ] zp[2]:93 [ draw_window::$15 ] zp[2]:95 [ draw_window::$28 ] zp[2]:71 [ draw_window::z#2 ] zp[2]:79 [ draw_window::z#1 ] zp[1]:25 [ draw_window::x2#0 ] zp[2]:45 [ draw_window::z#0 ] zp[1]:26 [ draw_window::y2#0 ] zp[1]:23 [ draw_window::x1#0 ] zp[2]:49 [ draw_window::q#0 ] zp[1]:43 [ draw_window::$36 ] zp[1]:44 [ draw_window::$37 ] zp[1]:47 [ draw_window::$39 ] zp[1]:48 [ draw_window::$40 ] zp[2]:51 [ draw_window::$2 ] zp[2]:53 [ draw_window::$29 ] zp[2]:55 [ draw_window::$3 ] zp[2]:57 [ draw_window::$30 ] zp[2]:59 [ draw_window::$4 ] zp[2]:61 [ draw_window::$33 ] zp[2]:63 [ draw_window::$5 ] zp[2]:65 [ draw_window::$34 ] zp[1]:67 [ draw_window::$6 ] zp[1]:68 [ draw_window::$8 ] zp[1]:24 [ draw_window::y1#0 ] @@ -3177,6 +3208,7 @@ Limited combination testing to 100 combinations of 201326592 possible. Uplifting [textbox] best 176245 combination reg byte y [ textbox::ls#2 textbox::ls#0 textbox::ls#1 ] reg byte x [ textbox::c#2 textbox::c#1 ] zp[1]:14 [ textbox::x#5 textbox::x#10 textbox::x#0 textbox::x#7 textbox::x#17 textbox::x#1 textbox::x#12 ] zp[2]:16 [ textbox::z#5 textbox::z#3 textbox::z#0 textbox::z#4 textbox::z#1 textbox::z#2 ] zp[1]:15 [ textbox::y#5 textbox::y#12 textbox::y#0 textbox::y#11 textbox::y#1 textbox::y#2 ] zp[2]:33 [ textbox::$8 ] zp[2]:35 [ textbox::$32 ] reg byte a [ textbox::$39 ] zp[1]:40 [ textbox::$40 ] zp[1]:41 [ textbox::$36 ] zp[1]:42 [ textbox::$37 ] zp[1]:37 [ textbox::$15 ] zp[1]:38 [ textbox::$17 ] zp[1]:11 [ textbox::i#2 textbox::i#1 ] zp[2]:9 [ textbox::text#12 ] zp[1]:5 [ textbox::x1#4 textbox::x1#0 ] zp[1]:7 [ textbox::x2#4 textbox::x2#0 ] zp[1]:8 [ textbox::y2#4 textbox::y2#0 ] zp[2]:29 [ textbox::$33 ] zp[2]:31 [ textbox::$34 ] zp[2]:27 [ textbox::$31 ] zp[1]:6 [ textbox::y1#4 textbox::y1#0 ] Limited combination testing to 100 combinations of 1769472 possible. Uplifting [main] best 176205 combination zp[2]:3 [ main::wait#2 main::wait#1 ] zp[1]:2 [ main::x#2 main::x#1 ] reg byte a [ main::$4 ] +Uplifting [MOS6526_CIA] best 176205 combination Uplifting [] best 176205 combination Attempting to uplift remaining variables inzp[1]:20 [ draw_window::y3#2 draw_window::y3#1 draw_window::y3#0 ] Uplifting [draw_window] best 176205 combination zp[1]:20 [ draw_window::y3#2 draw_window::y3#1 draw_window::y3#0 ] @@ -4277,6 +4309,20 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) draw_window((byte) draw_window::x1 , (byte) draw_window::y1 , (byte) draw_window::x2 , (byte) draw_window::y2) (word~) draw_window::$14 zp[2]:35 2000002.0 (word~) draw_window::$15 zp[2]:37 2000002.0 diff --git a/src/test/ref/textbox.sym b/src/test/ref/textbox.sym index b658f716c..58cdd58cc 100644 --- a/src/test/ref/textbox.sym +++ b/src/test/ref/textbox.sym @@ -1,6 +1,20 @@ (label) @1 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) draw_window((byte) draw_window::x1 , (byte) draw_window::y1 , (byte) draw_window::x2 , (byte) draw_window::y2) (word~) draw_window::$14 zp[2]:35 2000002.0 (word~) draw_window::$15 zp[2]:37 2000002.0 diff --git a/src/test/ref/tod-1.asm b/src/test/ref/tod-1.asm new file mode 100644 index 000000000..f7906a48f --- /dev/null +++ b/src/test/ref/tod-1.asm @@ -0,0 +1,333 @@ +// Time of Day / RTOS test using the 6526 CIA on C64 +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + // The text screen address + .label CONIO_SCREEN_TEXT = $400 + // The color screen address + .label CONIO_SCREEN_COLORS = $d800 + // The screen width + .const CONIO_WIDTH = $28 + // The screen height + .const CONIO_HEIGHT = $19 + // The default text color + .const CONIO_TEXTCOLOR_DEFAULT = $e + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + .const OFFSET_STRUCT_TIME_OF_DAY_SEC = 1 + .const OFFSET_STRUCT_TIME_OF_DAY_MIN = 2 + .const OFFSET_STRUCT_TIME_OF_DAY_HOURS = 3 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f + .const OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS = $b + .const OFFSET_STRUCT_MOS6526_CIA_TOD_MIN = $a + .const OFFSET_STRUCT_MOS6526_CIA_TOD_SEC = 9 + .const OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = 8 + // The current cursor y-position + .label conio_cursor_y = 4 + // The current cursor address + .label conio_cursor_text = 5 + // The current cursor address + .label conio_cursor_color = 7 +main: { + .label tod_MIN = 9 + .label tod_HOURS = $a + // tod_init(TOD_ZERO) + lda TOD_ZERO + sta.z tod_init.tod_TENTHS + lda TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_SEC + sta.z tod_init.tod_SEC + ldx TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_MIN + ldy TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS + jsr tod_init + __b1: + // tod_read() + jsr tod_read + sta.z tod_read.return_MIN + // tod = tod_read() + // gotoxy(0,0) + lda #0 + jsr gotoxy + // tod_str(tod) + sty.z tod_str.tod_TENTHS + stx.z tod_str.tod_SEC + ldy.z tod_MIN + ldx.z tod_HOURS + jsr tod_str + // cputs(tod_str(tod)) + jsr cputs + jmp __b1 +} +// Output a NUL-terminated string at the current cursor position +// cputs(byte* zp(2) s) +cputs: { + .label s = 2 + ldx #0 + lda #tod_buffer + sta.z s+1 + __b1: + // c=*s++ + ldy #0 + lda (s),y + // while(c=*s++) + inc.z s + bne !+ + inc.z s+1 + !: + cmp #0 + bne __b2 + // } + rts + __b2: + // cputc(c) + jsr cputc + jmp __b1 +} +// Output one character at the current cursor position +// Moves the cursor forward +// cputc(byte register(A) c) +cputc: { + // if(c=='\n') + cmp #'\n' + beq __b1 + // *conio_cursor_text++ = c + ldy #0 + sta (conio_cursor_text),y + // *conio_cursor_text++ = c; + inc.z conio_cursor_text + bne !+ + inc.z conio_cursor_text+1 + !: + // *conio_cursor_color++ = conio_textcolor + lda #CONIO_TEXTCOLOR_DEFAULT + ldy #0 + sta (conio_cursor_color),y + // *conio_cursor_color++ = conio_textcolor; + inc.z conio_cursor_color + bne !+ + inc.z conio_cursor_color+1 + !: + // if(++conio_cursor_x==CONIO_WIDTH) + inx + cpx #CONIO_WIDTH + bne __breturn + // if(++conio_cursor_y==CONIO_HEIGHT) + inc.z conio_cursor_y + lda #CONIO_HEIGHT + cmp.z conio_cursor_y + bne __b2 + // gotoxy(0,0) + lda #0 + jsr gotoxy + __b2: + ldx #0 + rts + __breturn: + // } + rts + __b1: + // gotoxy(0, conio_cursor_y+1) + lda.z conio_cursor_y + clc + adc #1 + jsr gotoxy + jmp __b2 +} +// Set the cursor to the specified position +// gotoxy(byte register(A) y) +gotoxy: { + .label __8 = 7 + .label offset = 7 + .label __9 = $d + .label __10 = 7 + // if(y>=CONIO_HEIGHT) + cmp #CONIO_HEIGHT + bcc __b2 + lda #0 + __b2: + // conio_cursor_y = y + sta.z conio_cursor_y + // (unsigned int)y*CONIO_WIDTH + sta.z __8 + lda #0 + sta.z __8+1 + lda.z __8 + asl + sta.z __9 + lda.z __8+1 + rol + sta.z __9+1 + asl.z __9 + rol.z __9+1 + lda.z __10 + clc + adc.z __9 + sta.z __10 + lda.z __10+1 + adc.z __9+1 + sta.z __10+1 + // offset = (unsigned int)y*CONIO_WIDTH + x + asl.z offset + rol.z offset+1 + asl.z offset + rol.z offset+1 + asl.z offset + rol.z offset+1 + // CONIO_SCREEN_TEXT + offset + lda.z offset + clc + adc #CONIO_SCREEN_TEXT + sta.z conio_cursor_text+1 + // CONIO_SCREEN_COLORS + offset + clc + lda.z conio_cursor_color + adc #CONIO_SCREEN_COLORS + sta.z conio_cursor_color+1 + // } + rts +} +// Convert time of day to a human-readable string "hh:mm:ss:10" +// tod_str(byte zp($b) tod_TENTHS, byte zp($c) tod_SEC, byte register(Y) tod_MIN, byte register(X) tod_HOURS) +tod_str: { + .label tod_TENTHS = $b + .label tod_SEC = $c + // tod.HOURS>>4 + txa + lsr + lsr + lsr + lsr + // '0'+(tod.HOURS>>4) + clc + adc #'0' + // tod_buffer[0] = '0'+(tod.HOURS>>4) + sta tod_buffer + // tod.HOURS&0x0f + txa + and #$f + // '0'+(tod.HOURS&0x0f) + clc + adc #'0' + // tod_buffer[1] = '0'+(tod.HOURS&0x0f) + sta tod_buffer+1 + // tod.MIN>>4 + tya + lsr + lsr + lsr + lsr + // '0'+(tod.MIN>>4) + clc + adc #'0' + // tod_buffer[3] = '0'+(tod.MIN>>4) + sta tod_buffer+3 + // tod.MIN&0x0f + tya + and #$f + // '0'+(tod.MIN&0x0f) + clc + adc #'0' + // tod_buffer[4] = '0'+(tod.MIN&0x0f) + sta tod_buffer+4 + // tod.SEC>>4 + lda.z tod_SEC + lsr + lsr + lsr + lsr + // '0'+(tod.SEC>>4) + clc + adc #'0' + // tod_buffer[6] = '0'+(tod.SEC>>4) + sta tod_buffer+6 + // tod.SEC&0x0f + lda #$f + and.z tod_SEC + // '0'+(tod.SEC&0x0f) + clc + adc #'0' + // tod_buffer[7] = '0'+(tod.SEC&0x0f) + sta tod_buffer+7 + // tod.TENTHS>>4 + lda.z tod_TENTHS + lsr + lsr + lsr + lsr + // '0'+(tod.TENTHS>>4) + clc + adc #'0' + // tod_buffer[9] = '0'+(tod.TENTHS>>4) + sta tod_buffer+9 + // tod.TENTHS&0x0f + lda #$f + and.z tod_TENTHS + // '0'+(tod.TENTHS&0x0f) + clc + adc #'0' + // tod_buffer[10] = '0'+(tod.TENTHS&0x0f) + sta tod_buffer+$a + // } + rts +} +// Read time of day +tod_read: { + .label return_HOURS = $a + .label return_MIN = 9 + // hours = CIA1->TOD_HOURS + // Reading sequence is important. TOD latches on reading hours until 10ths is read. + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS + sta.z return_HOURS + // mins = CIA1->TOD_MIN + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_MIN + // secs = CIA1->TOD_SEC + ldx CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_SEC + // tenths = CIA1->TOD_10THS + ldy CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_10THS + // } + rts +} +// Initialize time-of-day clock +// This uses the MOS6526 CIA#1 +// tod_init(byte zp(9) tod_TENTHS, byte zp($a) tod_SEC, byte register(X) tod_MIN, byte register(Y) tod_HOURS) +tod_init: { + .label tod_TENTHS = 9 + .label tod_SEC = $a + // CIA1->TIMER_A_CONTROL |= 0x80 + // Set 50hz (this assumes PAL!) (bit7=1) + lda #$80 + ora CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // CIA1->TIMER_B_CONTROL &= 0x7f + // Writing TOD clock (bit7=0) + lda #$7f + and CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // CIA1->TOD_HOURS = tod.HOURS + // Reset TOD clock + // Writing sequence is important. TOD stops when hours is written and starts when 10ths is written. + sty CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS + // CIA1->TOD_MIN = tod.MIN + stx CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_MIN + // CIA1->TOD_SEC = tod.SEC + lda.z tod_SEC + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_SEC + // CIA1->TOD_10THS = tod.TENTHS + lda.z tod_TENTHS + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_10THS + // } + rts +} + // The buffer used by tod_str() + tod_buffer: .text "00:00:00:00" + .byte 0 + // Time of Day 00:00:00:00 + TOD_ZERO: .byte 0, 0, 0, 0 diff --git a/src/test/ref/tod-1.cfg b/src/test/ref/tod-1.cfg new file mode 100644 index 000000000..ce2658f41 --- /dev/null +++ b/src/test/ref/tod-1.cfg @@ -0,0 +1,178 @@ +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() + +(void()) main() +main: scope:[main] from @1 + [4] (byte) tod_init::tod_TENTHS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO) + [5] (byte) tod_init::tod_SEC#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC) + [6] (byte) tod_init::tod_MIN#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN) + [7] (byte) tod_init::tod_HOURS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS) + [8] call tod_init + to:main::@1 +main::@1: scope:[main] from main main::@4 + [9] phi() + [10] call tod_read + [11] (byte) tod_read::return_TENTHS#2 ← (byte) tod_read::return_TENTHS#0 + [12] (byte) tod_read::return_SEC#2 ← (byte) tod_read::return_SEC#0 + [13] (byte) tod_read::return_MIN#2 ← (byte) tod_read::return_MIN#0 + [14] (byte) tod_read::return_HOURS#2 ← (byte) tod_read::return_HOURS#0 + to:main::@2 +main::@2: scope:[main] from main::@1 + [15] (byte) main::tod_TENTHS#0 ← (byte) tod_read::return_TENTHS#2 + [16] (byte) main::tod_SEC#0 ← (byte) tod_read::return_SEC#2 + [17] (byte) main::tod_MIN#0 ← (byte) tod_read::return_MIN#2 + [18] (byte) main::tod_HOURS#0 ← (byte) tod_read::return_HOURS#2 + [19] call gotoxy + to:main::@3 +main::@3: scope:[main] from main::@2 + [20] (byte) tod_str::tod_TENTHS#0 ← (byte) main::tod_TENTHS#0 + [21] (byte) tod_str::tod_SEC#0 ← (byte) main::tod_SEC#0 + [22] (byte) tod_str::tod_MIN#0 ← (byte) main::tod_MIN#0 + [23] (byte) tod_str::tod_HOURS#0 ← (byte) main::tod_HOURS#0 + [24] call tod_str + to:main::@4 +main::@4: scope:[main] from main::@3 + [25] phi() + [26] call cputs + to:main::@1 + +(void()) cputs((to_nomodify byte*) cputs::s) +cputs: scope:[cputs] from main::@4 + [27] phi() + to:cputs::@1 +cputs::@1: scope:[cputs] from cputs cputs::@2 + [28] (byte*) conio_cursor_color#19 ← phi( cputs/(byte*) conio_cursor_color#1 cputs::@2/(byte*) conio_cursor_color#17 ) + [28] (byte*) conio_cursor_text#19 ← phi( cputs/(byte*) conio_cursor_text#1 cputs::@2/(byte*) conio_cursor_text#17 ) + [28] (byte) conio_cursor_y#20 ← phi( cputs/(byte) conio_cursor_y#1 cputs::@2/(byte) conio_cursor_y#18 ) + [28] (byte) conio_cursor_x#20 ← phi( cputs/(byte) 0 cputs::@2/(byte) conio_cursor_x#18 ) + [28] (to_nomodify byte*) cputs::s#2 ← phi( cputs/(const byte*) tod_buffer cputs::@2/(to_nomodify byte*) cputs::s#0 ) + [29] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#2) + [30] (to_nomodify byte*) cputs::s#0 ← ++ (to_nomodify byte*) cputs::s#2 + [31] if((byte) 0!=(byte) cputs::c#1) goto cputs::@2 + to:cputs::@return +cputs::@return: scope:[cputs] from cputs::@1 + [32] return + to:@return +cputs::@2: scope:[cputs] from cputs::@1 + [33] (byte) cputc::c#0 ← (byte) cputs::c#1 + [34] call cputc + to:cputs::@1 + +(void()) cputc((byte) cputc::c) +cputc: scope:[cputc] from cputs::@2 + [35] if((byte) cputc::c#0==(byte) ' +') goto cputc::@1 + to:cputc::@2 +cputc::@2: scope:[cputc] from cputc + [36] *((byte*) conio_cursor_text#19) ← (byte) cputc::c#0 + [37] (byte*) conio_cursor_text#26 ← ++ (byte*) conio_cursor_text#19 + [38] *((byte*) conio_cursor_color#19) ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT + [39] (byte*) conio_cursor_color#26 ← ++ (byte*) conio_cursor_color#19 + [40] (byte) conio_cursor_x#4 ← ++ (byte) conio_cursor_x#20 + [41] if((byte) conio_cursor_x#4!=(const nomodify byte) CONIO_WIDTH) goto cputc::@return + to:cputc::@3 +cputc::@3: scope:[cputc] from cputc::@2 + [42] (byte) conio_cursor_y#27 ← ++ (byte) conio_cursor_y#20 + [43] if((byte) conio_cursor_y#27!=(const nomodify byte) CONIO_HEIGHT) goto cputc::@return + to:cputc::@4 +cputc::@4: scope:[cputc] from cputc::@3 + [44] phi() + [45] call gotoxy + to:cputc::@return +cputc::@return: scope:[cputc] from cputc::@1 cputc::@2 cputc::@3 cputc::@4 + [46] (byte*) conio_cursor_color#17 ← phi( cputc::@2/(byte*) conio_cursor_color#26 cputc::@3/(byte*) conio_cursor_color#26 cputc::@1/(byte*) conio_cursor_color#1 cputc::@4/(byte*) conio_cursor_color#1 ) + [46] (byte*) conio_cursor_text#17 ← phi( cputc::@2/(byte*) conio_cursor_text#26 cputc::@3/(byte*) conio_cursor_text#26 cputc::@1/(byte*) conio_cursor_text#1 cputc::@4/(byte*) conio_cursor_text#1 ) + [46] (byte) conio_cursor_y#18 ← phi( cputc::@2/(byte) conio_cursor_y#20 cputc::@3/(byte) conio_cursor_y#27 cputc::@1/(byte) conio_cursor_y#1 cputc::@4/(byte) conio_cursor_y#1 ) + [46] (byte) conio_cursor_x#18 ← phi( cputc::@2/(byte) conio_cursor_x#4 cputc::@3/(byte) 0 cputc::@1/(byte) 0 cputc::@4/(byte) 0 ) + [47] return + to:@return +cputc::@1: scope:[cputc] from cputc + [48] (byte) gotoxy::y#1 ← (byte) conio_cursor_y#20 + (byte) 1 + [49] call gotoxy + to:cputc::@return + +(void()) gotoxy((byte) gotoxy::x , (byte) gotoxy::y) +gotoxy: scope:[gotoxy] from cputc::@1 cputc::@4 main::@2 + [50] (byte) gotoxy::y#4 ← phi( cputc::@1/(byte) gotoxy::y#1 cputc::@4/(byte) 0 main::@2/(byte) 0 ) + to:gotoxy::@1 +gotoxy::@1: scope:[gotoxy] from gotoxy + [51] if((byte) gotoxy::y#4<(const nomodify byte) CONIO_HEIGHT) goto gotoxy::@3 + to:gotoxy::@2 +gotoxy::@3: scope:[gotoxy] from gotoxy::@1 + [52] phi() + to:gotoxy::@2 +gotoxy::@2: scope:[gotoxy] from gotoxy::@1 gotoxy::@3 + [53] (byte) gotoxy::y#5 ← phi( gotoxy::@3/(byte) gotoxy::y#4 gotoxy::@1/(byte) 0 ) + [54] (byte) conio_cursor_y#1 ← (byte) gotoxy::y#5 + [55] (word~) gotoxy::$8 ← (word)(byte) gotoxy::y#5 + [56] (word~) gotoxy::$9 ← (word~) gotoxy::$8 << (byte) 2 + [57] (word~) gotoxy::$10 ← (word~) gotoxy::$9 + (word~) gotoxy::$8 + [58] (word) gotoxy::offset#0 ← (word~) gotoxy::$10 << (byte) 3 + [59] (byte*) conio_cursor_text#1 ← (const nomodify byte*) CONIO_SCREEN_TEXT + (word) gotoxy::offset#0 + [60] (byte*) conio_cursor_color#1 ← (const nomodify byte*) CONIO_SCREEN_COLORS + (word) gotoxy::offset#0 + to:gotoxy::@return +gotoxy::@return: scope:[gotoxy] from gotoxy::@2 + [61] return + to:@return + +(byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) +tod_str: scope:[tod_str] from main::@3 + [62] (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#0 >> (byte) 4 + [63] (byte~) tod_str::$1 ← (byte) '0' + (byte~) tod_str::$0 + [64] *((const byte*) tod_buffer) ← (byte~) tod_str::$1 + [65] (byte~) tod_str::$2 ← (byte) tod_str::tod_HOURS#0 & (byte) $f + [66] (byte~) tod_str::$3 ← (byte) '0' + (byte~) tod_str::$2 + [67] *((const byte*) tod_buffer+(byte) 1) ← (byte~) tod_str::$3 + [68] (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#0 >> (byte) 4 + [69] (byte~) tod_str::$5 ← (byte) '0' + (byte~) tod_str::$4 + [70] *((const byte*) tod_buffer+(byte) 3) ← (byte~) tod_str::$5 + [71] (byte~) tod_str::$6 ← (byte) tod_str::tod_MIN#0 & (byte) $f + [72] (byte~) tod_str::$7 ← (byte) '0' + (byte~) tod_str::$6 + [73] *((const byte*) tod_buffer+(byte) 4) ← (byte~) tod_str::$7 + [74] (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#0 >> (byte) 4 + [75] (byte~) tod_str::$9 ← (byte) '0' + (byte~) tod_str::$8 + [76] *((const byte*) tod_buffer+(byte) 6) ← (byte~) tod_str::$9 + [77] (byte~) tod_str::$10 ← (byte) tod_str::tod_SEC#0 & (byte) $f + [78] (byte~) tod_str::$11 ← (byte) '0' + (byte~) tod_str::$10 + [79] *((const byte*) tod_buffer+(byte) 7) ← (byte~) tod_str::$11 + [80] (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#0 >> (byte) 4 + [81] (byte~) tod_str::$13 ← (byte) '0' + (byte~) tod_str::$12 + [82] *((const byte*) tod_buffer+(byte) 9) ← (byte~) tod_str::$13 + [83] (byte~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#0 & (byte) $f + [84] (byte~) tod_str::$15 ← (byte) '0' + (byte~) tod_str::$14 + [85] *((const byte*) tod_buffer+(byte) $a) ← (byte~) tod_str::$15 + to:tod_str::@return +tod_str::@return: scope:[tod_str] from tod_str + [86] return + to:@return + +(struct TIME_OF_DAY()) tod_read() +tod_read: scope:[tod_read] from main::@1 + [87] (byte) tod_read::return_HOURS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) + [88] (byte) tod_read::return_MIN#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) + [89] (byte) tod_read::return_SEC#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) + [90] (byte) tod_read::return_TENTHS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) + to:tod_read::@return +tod_read::@return: scope:[tod_read] from tod_read + [91] return + to:@return + +(void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) +tod_init: scope:[tod_init] from main + [92] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (byte) $80 + [93] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (byte) $7f + [94] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) ← (byte) tod_init::tod_HOURS#0 + [95] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) ← (byte) tod_init::tod_MIN#0 + [96] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) ← (byte) tod_init::tod_SEC#0 + [97] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) ← (byte) tod_init::tod_TENTHS#0 + to:tod_init::@return +tod_init::@return: scope:[tod_init] from tod_init + [98] return + to:@return diff --git a/src/test/ref/tod-1.log b/src/test/ref/tod-1.log new file mode 100644 index 000000000..90dbe434e --- /dev/null +++ b/src/test/ref/tod-1.log @@ -0,0 +1,3871 @@ +Created struct value member variable (byte) tod_init::tod_TENTHS +Created struct value member variable (byte) tod_init::tod_SEC +Created struct value member variable (byte) tod_init::tod_MIN +Created struct value member variable (byte) tod_init::tod_HOURS +Converted struct value to member variables (struct TIME_OF_DAY) tod_init::tod +Created struct value member variable (byte) tod_read::return_TENTHS +Created struct value member variable (byte) tod_read::return_SEC +Created struct value member variable (byte) tod_read::return_MIN +Created struct value member variable (byte) tod_read::return_HOURS +Converted struct value to member variables (struct TIME_OF_DAY) tod_read::return +Created struct value member variable (byte) tod_read::tod_TENTHS +Created struct value member variable (byte) tod_read::tod_SEC +Created struct value member variable (byte) tod_read::tod_MIN +Created struct value member variable (byte) tod_read::tod_HOURS +Converted struct value to member variables (struct TIME_OF_DAY) tod_read::tod +Created struct value member variable (byte) tod_str::tod_TENTHS +Created struct value member variable (byte) tod_str::tod_SEC +Created struct value member variable (byte) tod_str::tod_MIN +Created struct value member variable (byte) tod_str::tod_HOURS +Converted struct value to member variables (struct TIME_OF_DAY) tod_str::tod +Created struct value member variable (byte) main::tod_TENTHS +Created struct value member variable (byte) main::tod_SEC +Created struct value member variable (byte) main::tod_MIN +Created struct value member variable (byte) main::tod_HOURS +Converted struct value to member variables (struct TIME_OF_DAY) main::tod +Created struct value member variable (byte~) main::$1_TENTHS +Created struct value member variable (byte~) main::$1_SEC +Created struct value member variable (byte~) main::$1_MIN +Created struct value member variable (byte~) main::$1_HOURS +Converted struct value to member variables (struct TIME_OF_DAY~) main::$1 +Converted procedure struct value parameter to member unwinding (void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) +Converted procedure struct value parameter to member unwinding (byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) +Unwinding value copy (struct TIME_OF_DAY) tod_read::tod ← (struct TIME_OF_DAY){ (byte) tod_read::tenths, (byte) tod_read::secs, (byte) tod_read::mins, (byte) tod_read::hours } +Adding value simple copy (byte) tod_read::tod_TENTHS ← (byte) tod_read::tenths +Adding value simple copy (byte) tod_read::tod_SEC ← (byte) tod_read::secs +Adding value simple copy (byte) tod_read::tod_MIN ← (byte) tod_read::mins +Adding value simple copy (byte) tod_read::tod_HOURS ← (byte) tod_read::hours +Unwinding value copy (struct TIME_OF_DAY) tod_read::return ← (struct TIME_OF_DAY) tod_read::tod +Adding value simple copy (byte) tod_read::return_TENTHS ← (byte) tod_read::tod_TENTHS +Adding value simple copy (byte) tod_read::return_SEC ← (byte) tod_read::tod_SEC +Adding value simple copy (byte) tod_read::return_MIN ← (byte) tod_read::tod_MIN +Adding value simple copy (byte) tod_read::return_HOURS ← (byte) tod_read::tod_HOURS +Unwinding value copy (struct TIME_OF_DAY) tod_read::return ← (struct TIME_OF_DAY) tod_read::return +Adding value simple copy (byte) tod_read::return_TENTHS ← (byte) tod_read::return_TENTHS +Adding value simple copy (byte) tod_read::return_SEC ← (byte) tod_read::return_SEC +Adding value simple copy (byte) tod_read::return_MIN ← (byte) tod_read::return_MIN +Adding value simple copy (byte) tod_read::return_HOURS ← (byte) tod_read::return_HOURS +Converted procedure struct return value to member unwinding return { (byte) tod_read::return_TENTHS, (byte) tod_read::return_SEC, (byte) tod_read::return_MIN, (byte) tod_read::return_HOURS } +Converted call struct value parameter to member unwinding (void~) main::$0 ← call tod_init *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_TENTHS) *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC) *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN) *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS) +Converted procedure call LValue to member unwinding { (byte~) main::$1_TENTHS, (byte~) main::$1_SEC, (byte~) main::$1_MIN, (byte~) main::$1_HOURS } ← call tod_read +Unwinding value copy (struct TIME_OF_DAY) main::tod ← (struct TIME_OF_DAY~) main::$1 +Adding value simple copy (byte) main::tod_TENTHS ← (byte~) main::$1_TENTHS +Adding value simple copy (byte) main::tod_SEC ← (byte~) main::$1_SEC +Adding value simple copy (byte) main::tod_MIN ← (byte~) main::$1_MIN +Adding value simple copy (byte) main::tod_HOURS ← (byte~) main::$1_HOURS +Converted call struct value parameter to member unwinding (byte*~) main::$3 ← call tod_str (byte) main::tod_TENTHS (byte) main::tod_SEC (byte) main::tod_MIN (byte) main::tod_HOURS +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) +Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.HOURS with member unwinding reference (byte) tod_init::tod_HOURS +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_HOURS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) +Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.MIN with member unwinding reference (byte) tod_init::tod_MIN +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_MIN with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) +Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.SEC with member unwinding reference (byte) tod_init::tod_SEC +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_SEC with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) +Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.TENTHS with member unwinding reference (byte) tod_init::tod_TENTHS +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_10THS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_HOURS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_MIN with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_SEC with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_10THS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) +Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.HOURS with member unwinding reference (byte) tod_str::tod_HOURS +Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.HOURS with member unwinding reference (byte) tod_str::tod_HOURS +Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.MIN with member unwinding reference (byte) tod_str::tod_MIN +Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.MIN with member unwinding reference (byte) tod_str::tod_MIN +Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.SEC with member unwinding reference (byte) tod_str::tod_SEC +Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.SEC with member unwinding reference (byte) tod_str::tod_SEC +Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.TENTHS with member unwinding reference (byte) tod_str::tod_TENTHS +Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.TENTHS with member unwinding reference (byte) tod_str::tod_TENTHS +Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx +Eliminating unused variable with no statement (struct TIME_OF_DAY~) main::$1 +Unwinding list assignment { (byte~) main::$1_TENTHS, (byte~) main::$1_SEC, (byte~) main::$1_MIN, (byte~) main::$1_HOURS } ← { (byte) tod_read::return_TENTHS, (byte) tod_read::return_SEC, (byte) tod_read::return_MIN, (byte) tod_read::return_HOURS } +Unwinding list assignment { (byte) tod_read::return_TENTHS#2, (byte) tod_read::return_SEC#2, (byte) tod_read::return_MIN#2, (byte) tod_read::return_HOURS#2 } ← { (byte) tod_read::return_TENTHS#1, (byte) tod_read::return_SEC#1, (byte) tod_read::return_MIN#1, (byte) tod_read::return_HOURS#1 } + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + (byte) conio_cursor_x#0 ← (byte) 0 + (byte) conio_cursor_y#0 ← (byte) 0 + (byte*) conio_cursor_text#0 ← (const nomodify byte*) CONIO_SCREEN_TEXT + (byte*) conio_cursor_color#0 ← (const nomodify byte*) CONIO_SCREEN_COLORS + (byte) conio_textcolor#0 ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT + to:@1 + +(void()) gotoxy((byte) gotoxy::x , (byte) gotoxy::y) +gotoxy: scope:[gotoxy] from cputc::@1 cputc::@4 main::@4 + (byte) gotoxy::y#6 ← phi( cputc::@1/(byte) gotoxy::y#1 cputc::@4/(byte) gotoxy::y#2 main::@4/(byte) gotoxy::y#3 ) + (byte) gotoxy::x#4 ← phi( cputc::@1/(byte) gotoxy::x#1 cputc::@4/(byte) gotoxy::x#2 main::@4/(byte) gotoxy::x#3 ) + (bool~) gotoxy::$0 ← (byte) gotoxy::x#4 >= (const nomodify byte) CONIO_WIDTH + (bool~) gotoxy::$1 ← ! (bool~) gotoxy::$0 + if((bool~) gotoxy::$1) goto gotoxy::@1 + to:gotoxy::@3 +gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@3 + (byte) gotoxy::x#6 ← phi( gotoxy/(byte) gotoxy::x#4 gotoxy::@3/(byte) gotoxy::x#0 ) + (byte) gotoxy::y#4 ← phi( gotoxy/(byte) gotoxy::y#6 gotoxy::@3/(byte) gotoxy::y#7 ) + (bool~) gotoxy::$2 ← (byte) gotoxy::y#4 >= (const nomodify byte) CONIO_HEIGHT + (bool~) gotoxy::$3 ← ! (bool~) gotoxy::$2 + if((bool~) gotoxy::$3) goto gotoxy::@2 + to:gotoxy::@4 +gotoxy::@3: scope:[gotoxy] from gotoxy + (byte) gotoxy::y#7 ← phi( gotoxy/(byte) gotoxy::y#6 ) + (byte) gotoxy::x#0 ← (number) 0 + to:gotoxy::@1 +gotoxy::@2: scope:[gotoxy] from gotoxy::@1 gotoxy::@4 + (byte) gotoxy::y#5 ← phi( gotoxy::@1/(byte) gotoxy::y#4 gotoxy::@4/(byte) gotoxy::y#0 ) + (byte) gotoxy::x#5 ← phi( gotoxy::@1/(byte) gotoxy::x#6 gotoxy::@4/(byte) gotoxy::x#7 ) + (byte) conio_cursor_x#1 ← (byte) gotoxy::x#5 + (byte) conio_cursor_y#1 ← (byte) gotoxy::y#5 + (word~) gotoxy::$8 ← (word)(byte) gotoxy::y#5 + (word~) gotoxy::$4 ← (word~) gotoxy::$8 * (const nomodify byte) CONIO_WIDTH + (word~) gotoxy::$5 ← (word~) gotoxy::$4 + (byte) gotoxy::x#5 + (word) gotoxy::offset#0 ← (word~) gotoxy::$5 + (byte*~) gotoxy::$6 ← (const nomodify byte*) CONIO_SCREEN_TEXT + (word) gotoxy::offset#0 + (byte*) conio_cursor_text#1 ← (byte*~) gotoxy::$6 + (byte*~) gotoxy::$7 ← (const nomodify byte*) CONIO_SCREEN_COLORS + (word) gotoxy::offset#0 + (byte*) conio_cursor_color#1 ← (byte*~) gotoxy::$7 + to:gotoxy::@return +gotoxy::@4: scope:[gotoxy] from gotoxy::@1 + (byte) gotoxy::x#7 ← phi( gotoxy::@1/(byte) gotoxy::x#6 ) + (byte) gotoxy::y#0 ← (number) 0 + to:gotoxy::@2 +gotoxy::@return: scope:[gotoxy] from gotoxy::@2 + (byte*) conio_cursor_color#13 ← phi( gotoxy::@2/(byte*) conio_cursor_color#1 ) + (byte*) conio_cursor_text#13 ← phi( gotoxy::@2/(byte*) conio_cursor_text#1 ) + (byte) conio_cursor_y#13 ← phi( gotoxy::@2/(byte) conio_cursor_y#1 ) + (byte) conio_cursor_x#14 ← phi( gotoxy::@2/(byte) conio_cursor_x#1 ) + (byte) conio_cursor_x#2 ← (byte) conio_cursor_x#14 + (byte) conio_cursor_y#2 ← (byte) conio_cursor_y#13 + (byte*) conio_cursor_text#2 ← (byte*) conio_cursor_text#13 + (byte*) conio_cursor_color#2 ← (byte*) conio_cursor_color#13 + return + to:@return + +(void()) cputc((byte) cputc::c) +cputc: scope:[cputc] from cputs::@2 + (byte) conio_cursor_x#26 ← phi( cputs::@2/(byte) conio_cursor_x#28 ) + (byte*) conio_cursor_color#25 ← phi( cputs::@2/(byte*) conio_cursor_color#28 ) + (byte) conio_textcolor#2 ← phi( cputs::@2/(byte) conio_textcolor#3 ) + (byte*) conio_cursor_text#25 ← phi( cputs::@2/(byte*) conio_cursor_text#28 ) + (byte) conio_cursor_y#25 ← phi( cputs::@2/(byte) conio_cursor_y#28 ) + (byte) cputc::c#1 ← phi( cputs::@2/(byte) cputc::c#0 ) + (bool~) cputc::$0 ← (byte) cputc::c#1 == (byte) ' +' + if((bool~) cputc::$0) goto cputc::@1 + to:cputc::@2 +cputc::@1: scope:[cputc] from cputc + (byte*) conio_cursor_color#24 ← phi( cputc/(byte*) conio_cursor_color#25 ) + (byte*) conio_cursor_text#24 ← phi( cputc/(byte*) conio_cursor_text#25 ) + (byte) conio_cursor_x#25 ← phi( cputc/(byte) conio_cursor_x#26 ) + (byte) conio_cursor_y#14 ← phi( cputc/(byte) conio_cursor_y#25 ) + (number~) cputc::$6 ← (byte) conio_cursor_y#14 + (number) 1 + (byte) gotoxy::x#1 ← (number) 0 + (byte) gotoxy::y#1 ← (number~) cputc::$6 + call gotoxy + to:cputc::@5 +cputc::@5: scope:[cputc] from cputc::@1 + (byte*) conio_cursor_color#14 ← phi( cputc::@1/(byte*) conio_cursor_color#2 ) + (byte*) conio_cursor_text#14 ← phi( cputc::@1/(byte*) conio_cursor_text#2 ) + (byte) conio_cursor_y#15 ← phi( cputc::@1/(byte) conio_cursor_y#2 ) + (byte) conio_cursor_x#15 ← phi( cputc::@1/(byte) conio_cursor_x#2 ) + (byte) conio_cursor_x#3 ← (byte) conio_cursor_x#15 + (byte) conio_cursor_y#3 ← (byte) conio_cursor_y#15 + (byte*) conio_cursor_text#3 ← (byte*) conio_cursor_text#14 + (byte*) conio_cursor_color#3 ← (byte*) conio_cursor_color#14 + to:cputc::@return +cputc::@2: scope:[cputc] from cputc + (byte) conio_cursor_y#26 ← phi( cputc/(byte) conio_cursor_y#25 ) + (byte) conio_cursor_x#16 ← phi( cputc/(byte) conio_cursor_x#26 ) + (byte*) conio_cursor_color#15 ← phi( cputc/(byte*) conio_cursor_color#25 ) + (byte) conio_textcolor#1 ← phi( cputc/(byte) conio_textcolor#2 ) + (byte*) conio_cursor_text#15 ← phi( cputc/(byte*) conio_cursor_text#25 ) + (byte) cputc::c#2 ← phi( cputc/(byte) cputc::c#1 ) + *((byte*) conio_cursor_text#15) ← (byte) cputc::c#2 + (byte*) conio_cursor_text#4 ← ++ (byte*) conio_cursor_text#15 + *((byte*) conio_cursor_color#15) ← (byte) conio_textcolor#1 + (byte*) conio_cursor_color#4 ← ++ (byte*) conio_cursor_color#15 + (byte) conio_cursor_x#4 ← ++ (byte) conio_cursor_x#16 + (bool~) cputc::$1 ← (byte) conio_cursor_x#4 == (const nomodify byte) CONIO_WIDTH + (bool~) cputc::$2 ← ! (bool~) cputc::$1 + if((bool~) cputc::$2) goto cputc::@return + to:cputc::@3 +cputc::@3: scope:[cputc] from cputc::@2 + (byte*) conio_cursor_color#27 ← phi( cputc::@2/(byte*) conio_cursor_color#4 ) + (byte*) conio_cursor_text#27 ← phi( cputc::@2/(byte*) conio_cursor_text#4 ) + (byte) conio_cursor_y#16 ← phi( cputc::@2/(byte) conio_cursor_y#26 ) + (byte) conio_cursor_x#5 ← (number) 0 + (byte) conio_cursor_y#4 ← ++ (byte) conio_cursor_y#16 + (bool~) cputc::$3 ← (byte) conio_cursor_y#4 == (const nomodify byte) CONIO_HEIGHT + (bool~) cputc::$4 ← ! (bool~) cputc::$3 + if((bool~) cputc::$4) goto cputc::@return + to:cputc::@4 +cputc::@4: scope:[cputc] from cputc::@3 + (byte*) conio_cursor_color#26 ← phi( cputc::@3/(byte*) conio_cursor_color#27 ) + (byte*) conio_cursor_text#26 ← phi( cputc::@3/(byte*) conio_cursor_text#27 ) + (byte) conio_cursor_y#27 ← phi( cputc::@3/(byte) conio_cursor_y#4 ) + (byte) conio_cursor_x#27 ← phi( cputc::@3/(byte) conio_cursor_x#5 ) + (byte) gotoxy::x#2 ← (number) 0 + (byte) gotoxy::y#2 ← (number) 0 + call gotoxy + to:cputc::@6 +cputc::@6: scope:[cputc] from cputc::@4 + (byte*) conio_cursor_color#16 ← phi( cputc::@4/(byte*) conio_cursor_color#2 ) + (byte*) conio_cursor_text#16 ← phi( cputc::@4/(byte*) conio_cursor_text#2 ) + (byte) conio_cursor_y#17 ← phi( cputc::@4/(byte) conio_cursor_y#2 ) + (byte) conio_cursor_x#17 ← phi( cputc::@4/(byte) conio_cursor_x#2 ) + (byte) conio_cursor_x#6 ← (byte) conio_cursor_x#17 + (byte) conio_cursor_y#5 ← (byte) conio_cursor_y#17 + (byte*) conio_cursor_text#5 ← (byte*) conio_cursor_text#16 + (byte*) conio_cursor_color#5 ← (byte*) conio_cursor_color#16 + to:cputc::@return +cputc::@return: scope:[cputc] from cputc::@2 cputc::@3 cputc::@5 cputc::@6 + (byte*) conio_cursor_color#17 ← phi( cputc::@2/(byte*) conio_cursor_color#4 cputc::@3/(byte*) conio_cursor_color#27 cputc::@5/(byte*) conio_cursor_color#3 cputc::@6/(byte*) conio_cursor_color#5 ) + (byte*) conio_cursor_text#17 ← phi( cputc::@2/(byte*) conio_cursor_text#4 cputc::@3/(byte*) conio_cursor_text#27 cputc::@5/(byte*) conio_cursor_text#3 cputc::@6/(byte*) conio_cursor_text#5 ) + (byte) conio_cursor_y#18 ← phi( cputc::@2/(byte) conio_cursor_y#26 cputc::@3/(byte) conio_cursor_y#4 cputc::@5/(byte) conio_cursor_y#3 cputc::@6/(byte) conio_cursor_y#5 ) + (byte) conio_cursor_x#18 ← phi( cputc::@2/(byte) conio_cursor_x#4 cputc::@3/(byte) conio_cursor_x#5 cputc::@5/(byte) conio_cursor_x#3 cputc::@6/(byte) conio_cursor_x#6 ) + (byte) conio_cursor_x#7 ← (byte) conio_cursor_x#18 + (byte) conio_cursor_y#6 ← (byte) conio_cursor_y#18 + (byte*) conio_cursor_text#6 ← (byte*) conio_cursor_text#17 + (byte*) conio_cursor_color#6 ← (byte*) conio_cursor_color#17 + return + to:@return + +(void()) cputs((to_nomodify byte*) cputs::s) +cputs: scope:[cputs] from main::@6 + (byte) conio_textcolor#5 ← phi( main::@6/(byte) conio_textcolor#7 ) + (byte*) conio_cursor_color#34 ← phi( main::@6/(byte*) conio_cursor_color#31 ) + (byte*) conio_cursor_text#34 ← phi( main::@6/(byte*) conio_cursor_text#31 ) + (byte) conio_cursor_y#34 ← phi( main::@6/(byte) conio_cursor_y#31 ) + (byte) conio_cursor_x#34 ← phi( main::@6/(byte) conio_cursor_x#31 ) + (to_nomodify byte*) cputs::s#3 ← phi( main::@6/(to_nomodify byte*) cputs::s#1 ) + (byte) cputs::c#0 ← (byte) 0 + to:cputs::@1 +cputs::@1: scope:[cputs] from cputs cputs::@3 + (byte) conio_textcolor#4 ← phi( cputs/(byte) conio_textcolor#5 cputs::@3/(byte) conio_textcolor#6 ) + (byte*) conio_cursor_color#29 ← phi( cputs/(byte*) conio_cursor_color#34 cputs::@3/(byte*) conio_cursor_color#7 ) + (byte*) conio_cursor_text#29 ← phi( cputs/(byte*) conio_cursor_text#34 cputs::@3/(byte*) conio_cursor_text#7 ) + (byte) conio_cursor_y#29 ← phi( cputs/(byte) conio_cursor_y#34 cputs::@3/(byte) conio_cursor_y#7 ) + (byte) conio_cursor_x#29 ← phi( cputs/(byte) conio_cursor_x#34 cputs::@3/(byte) conio_cursor_x#8 ) + (to_nomodify byte*) cputs::s#2 ← phi( cputs/(to_nomodify byte*) cputs::s#3 cputs::@3/(to_nomodify byte*) cputs::s#4 ) + (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#2) + (to_nomodify byte*) cputs::s#0 ← ++ (to_nomodify byte*) cputs::s#2 + (bool~) cputs::$1 ← (number) 0 != (byte) cputs::c#1 + if((bool~) cputs::$1) goto cputs::@2 + to:cputs::@return +cputs::@2: scope:[cputs] from cputs::@1 + (to_nomodify byte*) cputs::s#5 ← phi( cputs::@1/(to_nomodify byte*) cputs::s#0 ) + (byte) conio_textcolor#3 ← phi( cputs::@1/(byte) conio_textcolor#4 ) + (byte*) conio_cursor_color#28 ← phi( cputs::@1/(byte*) conio_cursor_color#29 ) + (byte*) conio_cursor_text#28 ← phi( cputs::@1/(byte*) conio_cursor_text#29 ) + (byte) conio_cursor_y#28 ← phi( cputs::@1/(byte) conio_cursor_y#29 ) + (byte) conio_cursor_x#28 ← phi( cputs::@1/(byte) conio_cursor_x#29 ) + (byte) cputs::c#2 ← phi( cputs::@1/(byte) cputs::c#1 ) + (byte) cputc::c#0 ← (byte) cputs::c#2 + call cputc + to:cputs::@3 +cputs::@3: scope:[cputs] from cputs::@2 + (byte) conio_textcolor#6 ← phi( cputs::@2/(byte) conio_textcolor#3 ) + (to_nomodify byte*) cputs::s#4 ← phi( cputs::@2/(to_nomodify byte*) cputs::s#5 ) + (byte*) conio_cursor_color#18 ← phi( cputs::@2/(byte*) conio_cursor_color#6 ) + (byte*) conio_cursor_text#18 ← phi( cputs::@2/(byte*) conio_cursor_text#6 ) + (byte) conio_cursor_y#19 ← phi( cputs::@2/(byte) conio_cursor_y#6 ) + (byte) conio_cursor_x#19 ← phi( cputs::@2/(byte) conio_cursor_x#7 ) + (byte) conio_cursor_x#8 ← (byte) conio_cursor_x#19 + (byte) conio_cursor_y#7 ← (byte) conio_cursor_y#19 + (byte*) conio_cursor_text#7 ← (byte*) conio_cursor_text#18 + (byte*) conio_cursor_color#7 ← (byte*) conio_cursor_color#18 + to:cputs::@1 +cputs::@return: scope:[cputs] from cputs::@1 + (byte*) conio_cursor_color#19 ← phi( cputs::@1/(byte*) conio_cursor_color#29 ) + (byte*) conio_cursor_text#19 ← phi( cputs::@1/(byte*) conio_cursor_text#29 ) + (byte) conio_cursor_y#20 ← phi( cputs::@1/(byte) conio_cursor_y#29 ) + (byte) conio_cursor_x#20 ← phi( cputs::@1/(byte) conio_cursor_x#29 ) + (byte) conio_cursor_x#9 ← (byte) conio_cursor_x#20 + (byte) conio_cursor_y#8 ← (byte) conio_cursor_y#20 + (byte*) conio_cursor_text#8 ← (byte*) conio_cursor_text#19 + (byte*) conio_cursor_color#8 ← (byte*) conio_cursor_color#19 + return + to:@return + +(void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) +tod_init: scope:[tod_init] from main + (byte) tod_init::tod_TENTHS#1 ← phi( main/(byte) tod_init::tod_TENTHS#0 ) + (byte) tod_init::tod_SEC#1 ← phi( main/(byte) tod_init::tod_SEC#0 ) + (byte) tod_init::tod_MIN#1 ← phi( main/(byte) tod_init::tod_MIN#0 ) + (byte) tod_init::tod_HOURS#1 ← phi( main/(byte) tod_init::tod_HOURS#0 ) + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (number) $80 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (number) $7f + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) ← (byte) tod_init::tod_HOURS#1 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) ← (byte) tod_init::tod_MIN#1 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) ← (byte) tod_init::tod_SEC#1 + *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) ← (byte) tod_init::tod_TENTHS#1 + to:tod_init::@return +tod_init::@return: scope:[tod_init] from tod_init + return + to:@return + +(struct TIME_OF_DAY()) tod_read() +tod_read: scope:[tod_read] from main::@2 + (byte) tod_read::hours#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) + (byte) tod_read::mins#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) + (byte) tod_read::secs#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) + (byte) tod_read::tenths#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) + (byte) tod_read::tod_TENTHS#0 ← (byte) tod_read::tenths#0 + (byte) tod_read::tod_SEC#0 ← (byte) tod_read::secs#0 + (byte) tod_read::tod_MIN#0 ← (byte) tod_read::mins#0 + (byte) tod_read::tod_HOURS#0 ← (byte) tod_read::hours#0 + (byte) tod_read::return_TENTHS#0 ← (byte) tod_read::tod_TENTHS#0 + (byte) tod_read::return_SEC#0 ← (byte) tod_read::tod_SEC#0 + (byte) tod_read::return_MIN#0 ← (byte) tod_read::tod_MIN#0 + (byte) tod_read::return_HOURS#0 ← (byte) tod_read::tod_HOURS#0 + (struct TIME_OF_DAY) tod_read::return#0 ← struct-unwound {(byte) tod_read::return_TENTHS#0, (byte) tod_read::return_SEC#0, (byte) tod_read::return_MIN#0, (byte) tod_read::return_HOURS#0} + to:tod_read::@return +tod_read::@return: scope:[tod_read] from tod_read + (byte) tod_read::return_HOURS#3 ← phi( tod_read/(byte) tod_read::return_HOURS#0 ) + (byte) tod_read::return_MIN#3 ← phi( tod_read/(byte) tod_read::return_MIN#0 ) + (byte) tod_read::return_SEC#3 ← phi( tod_read/(byte) tod_read::return_SEC#0 ) + (byte) tod_read::return_TENTHS#3 ← phi( tod_read/(byte) tod_read::return_TENTHS#0 ) + (byte) tod_read::return_TENTHS#1 ← (byte) tod_read::return_TENTHS#3 + (byte) tod_read::return_SEC#1 ← (byte) tod_read::return_SEC#3 + (byte) tod_read::return_MIN#1 ← (byte) tod_read::return_MIN#3 + (byte) tod_read::return_HOURS#1 ← (byte) tod_read::return_HOURS#3 + (struct TIME_OF_DAY) tod_read::return#1 ← struct-unwound {(byte) tod_read::return_TENTHS#1, (byte) tod_read::return_SEC#1, (byte) tod_read::return_MIN#1, (byte) tod_read::return_HOURS#1} + return + to:@return + +(byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) +tod_str: scope:[tod_str] from main::@5 + (byte) tod_str::tod_TENTHS#1 ← phi( main::@5/(byte) tod_str::tod_TENTHS#0 ) + (byte) tod_str::tod_SEC#1 ← phi( main::@5/(byte) tod_str::tod_SEC#0 ) + (byte) tod_str::tod_MIN#1 ← phi( main::@5/(byte) tod_str::tod_MIN#0 ) + (byte) tod_str::tod_HOURS#1 ← phi( main::@5/(byte) tod_str::tod_HOURS#0 ) + (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#1 >> (number) 4 + (byte~) tod_str::$1 ← (byte) '0' + (byte~) tod_str::$0 + *((const byte*) tod_buffer + (number) 0) ← (byte~) tod_str::$1 + (number~) tod_str::$2 ← (byte) tod_str::tod_HOURS#1 & (number) $f + (number~) tod_str::$3 ← (byte) '0' + (number~) tod_str::$2 + *((const byte*) tod_buffer + (number) 1) ← (number~) tod_str::$3 + (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#1 >> (number) 4 + (byte~) tod_str::$5 ← (byte) '0' + (byte~) tod_str::$4 + *((const byte*) tod_buffer + (number) 3) ← (byte~) tod_str::$5 + (number~) tod_str::$6 ← (byte) tod_str::tod_MIN#1 & (number) $f + (number~) tod_str::$7 ← (byte) '0' + (number~) tod_str::$6 + *((const byte*) tod_buffer + (number) 4) ← (number~) tod_str::$7 + (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#1 >> (number) 4 + (byte~) tod_str::$9 ← (byte) '0' + (byte~) tod_str::$8 + *((const byte*) tod_buffer + (number) 6) ← (byte~) tod_str::$9 + (number~) tod_str::$10 ← (byte) tod_str::tod_SEC#1 & (number) $f + (number~) tod_str::$11 ← (byte) '0' + (number~) tod_str::$10 + *((const byte*) tod_buffer + (number) 7) ← (number~) tod_str::$11 + (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#1 >> (number) 4 + (byte~) tod_str::$13 ← (byte) '0' + (byte~) tod_str::$12 + *((const byte*) tod_buffer + (number) 9) ← (byte~) tod_str::$13 + (number~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#1 & (number) $f + (number~) tod_str::$15 ← (byte) '0' + (number~) tod_str::$14 + *((const byte*) tod_buffer + (number) $a) ← (number~) tod_str::$15 + (byte*) tod_str::return#0 ← (const byte*) tod_buffer + to:tod_str::@return +tod_str::@return: scope:[tod_str] from tod_str + (byte*) tod_str::return#3 ← phi( tod_str/(byte*) tod_str::return#0 ) + (byte*) tod_str::return#1 ← (byte*) tod_str::return#3 + return + to:@return + +(void()) main() +main: scope:[main] from @1 + (byte) conio_textcolor#14 ← phi( @1/(byte) conio_textcolor#15 ) + (byte*) conio_cursor_color#37 ← phi( @1/(byte*) conio_cursor_color#33 ) + (byte*) conio_cursor_text#37 ← phi( @1/(byte*) conio_cursor_text#33 ) + (byte) conio_cursor_y#37 ← phi( @1/(byte) conio_cursor_y#33 ) + (byte) conio_cursor_x#37 ← phi( @1/(byte) conio_cursor_x#33 ) + (byte) tod_init::tod_TENTHS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_TENTHS) + (byte) tod_init::tod_SEC#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC) + (byte) tod_init::tod_MIN#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN) + (byte) tod_init::tod_HOURS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS) + call tod_init + to:main::@3 +main::@3: scope:[main] from main + (byte) conio_textcolor#12 ← phi( main/(byte) conio_textcolor#14 ) + (byte*) conio_cursor_color#35 ← phi( main/(byte*) conio_cursor_color#37 ) + (byte*) conio_cursor_text#35 ← phi( main/(byte*) conio_cursor_text#37 ) + (byte) conio_cursor_y#35 ← phi( main/(byte) conio_cursor_y#37 ) + (byte) conio_cursor_x#35 ← phi( main/(byte) conio_cursor_x#37 ) + to:main::@1 +main::@1: scope:[main] from main::@3 main::@7 + (byte) conio_textcolor#11 ← phi( main::@3/(byte) conio_textcolor#12 main::@7/(byte) conio_textcolor#13 ) + (byte*) conio_cursor_color#32 ← phi( main::@3/(byte*) conio_cursor_color#35 main::@7/(byte*) conio_cursor_color#10 ) + (byte*) conio_cursor_text#32 ← phi( main::@3/(byte*) conio_cursor_text#35 main::@7/(byte*) conio_cursor_text#10 ) + (byte) conio_cursor_y#32 ← phi( main::@3/(byte) conio_cursor_y#35 main::@7/(byte) conio_cursor_y#10 ) + (byte) conio_cursor_x#32 ← phi( main::@3/(byte) conio_cursor_x#35 main::@7/(byte) conio_cursor_x#11 ) + (bool~) main::$5 ← (number) 0 != (number) 1 + if((bool~) main::$5) goto main::@2 + to:main::@return +main::@2: scope:[main] from main::@1 + (byte) conio_textcolor#10 ← phi( main::@1/(byte) conio_textcolor#11 ) + (byte*) conio_cursor_color#36 ← phi( main::@1/(byte*) conio_cursor_color#32 ) + (byte*) conio_cursor_text#36 ← phi( main::@1/(byte*) conio_cursor_text#32 ) + (byte) conio_cursor_y#36 ← phi( main::@1/(byte) conio_cursor_y#32 ) + (byte) conio_cursor_x#36 ← phi( main::@1/(byte) conio_cursor_x#32 ) + call tod_read + (byte) tod_read::return_TENTHS#2 ← (byte) tod_read::return_TENTHS#1 + (byte) tod_read::return_SEC#2 ← (byte) tod_read::return_SEC#1 + (byte) tod_read::return_MIN#2 ← (byte) tod_read::return_MIN#1 + (byte) tod_read::return_HOURS#2 ← (byte) tod_read::return_HOURS#1 + to:main::@4 +main::@4: scope:[main] from main::@2 + (byte) conio_textcolor#9 ← phi( main::@2/(byte) conio_textcolor#10 ) + (byte*) conio_cursor_color#30 ← phi( main::@2/(byte*) conio_cursor_color#36 ) + (byte*) conio_cursor_text#30 ← phi( main::@2/(byte*) conio_cursor_text#36 ) + (byte) conio_cursor_y#30 ← phi( main::@2/(byte) conio_cursor_y#36 ) + (byte) conio_cursor_x#30 ← phi( main::@2/(byte) conio_cursor_x#36 ) + (byte) tod_read::return_HOURS#4 ← phi( main::@2/(byte) tod_read::return_HOURS#2 ) + (byte) tod_read::return_MIN#4 ← phi( main::@2/(byte) tod_read::return_MIN#2 ) + (byte) tod_read::return_SEC#4 ← phi( main::@2/(byte) tod_read::return_SEC#2 ) + (byte) tod_read::return_TENTHS#4 ← phi( main::@2/(byte) tod_read::return_TENTHS#2 ) + (byte~) main::$1_TENTHS ← (byte) tod_read::return_TENTHS#4 + (byte~) main::$1_SEC ← (byte) tod_read::return_SEC#4 + (byte~) main::$1_MIN ← (byte) tod_read::return_MIN#4 + (byte~) main::$1_HOURS ← (byte) tod_read::return_HOURS#4 + (byte) main::tod_TENTHS#0 ← (byte~) main::$1_TENTHS + (byte) main::tod_SEC#0 ← (byte~) main::$1_SEC + (byte) main::tod_MIN#0 ← (byte~) main::$1_MIN + (byte) main::tod_HOURS#0 ← (byte~) main::$1_HOURS + (byte) gotoxy::x#3 ← (number) 0 + (byte) gotoxy::y#3 ← (number) 0 + call gotoxy + to:main::@5 +main::@5: scope:[main] from main::@4 + (byte) conio_textcolor#8 ← phi( main::@4/(byte) conio_textcolor#9 ) + (byte) main::tod_HOURS#1 ← phi( main::@4/(byte) main::tod_HOURS#0 ) + (byte) main::tod_MIN#1 ← phi( main::@4/(byte) main::tod_MIN#0 ) + (byte) main::tod_SEC#1 ← phi( main::@4/(byte) main::tod_SEC#0 ) + (byte) main::tod_TENTHS#1 ← phi( main::@4/(byte) main::tod_TENTHS#0 ) + (byte*) conio_cursor_color#20 ← phi( main::@4/(byte*) conio_cursor_color#2 ) + (byte*) conio_cursor_text#20 ← phi( main::@4/(byte*) conio_cursor_text#2 ) + (byte) conio_cursor_y#21 ← phi( main::@4/(byte) conio_cursor_y#2 ) + (byte) conio_cursor_x#21 ← phi( main::@4/(byte) conio_cursor_x#2 ) + (byte) conio_cursor_x#10 ← (byte) conio_cursor_x#21 + (byte) conio_cursor_y#9 ← (byte) conio_cursor_y#21 + (byte*) conio_cursor_text#9 ← (byte*) conio_cursor_text#20 + (byte*) conio_cursor_color#9 ← (byte*) conio_cursor_color#20 + (byte) tod_str::tod_TENTHS#0 ← (byte) main::tod_TENTHS#1 + (byte) tod_str::tod_SEC#0 ← (byte) main::tod_SEC#1 + (byte) tod_str::tod_MIN#0 ← (byte) main::tod_MIN#1 + (byte) tod_str::tod_HOURS#0 ← (byte) main::tod_HOURS#1 + call tod_str + (byte*) tod_str::return#2 ← (byte*) tod_str::return#1 + to:main::@6 +main::@6: scope:[main] from main::@5 + (byte) conio_textcolor#7 ← phi( main::@5/(byte) conio_textcolor#8 ) + (byte*) conio_cursor_color#31 ← phi( main::@5/(byte*) conio_cursor_color#9 ) + (byte*) conio_cursor_text#31 ← phi( main::@5/(byte*) conio_cursor_text#9 ) + (byte) conio_cursor_y#31 ← phi( main::@5/(byte) conio_cursor_y#9 ) + (byte) conio_cursor_x#31 ← phi( main::@5/(byte) conio_cursor_x#10 ) + (byte*) tod_str::return#4 ← phi( main::@5/(byte*) tod_str::return#2 ) + (byte*~) main::$3 ← (byte*) tod_str::return#4 + (to_nomodify byte*) cputs::s#1 ← (byte*~) main::$3 + call cputs + to:main::@7 +main::@7: scope:[main] from main::@6 + (byte) conio_textcolor#13 ← phi( main::@6/(byte) conio_textcolor#7 ) + (byte*) conio_cursor_color#21 ← phi( main::@6/(byte*) conio_cursor_color#8 ) + (byte*) conio_cursor_text#21 ← phi( main::@6/(byte*) conio_cursor_text#8 ) + (byte) conio_cursor_y#22 ← phi( main::@6/(byte) conio_cursor_y#8 ) + (byte) conio_cursor_x#22 ← phi( main::@6/(byte) conio_cursor_x#9 ) + (byte) conio_cursor_x#11 ← (byte) conio_cursor_x#22 + (byte) conio_cursor_y#10 ← (byte) conio_cursor_y#22 + (byte*) conio_cursor_text#10 ← (byte*) conio_cursor_text#21 + (byte*) conio_cursor_color#10 ← (byte*) conio_cursor_color#21 + to:main::@1 +main::@return: scope:[main] from main::@1 + (byte*) conio_cursor_color#22 ← phi( main::@1/(byte*) conio_cursor_color#32 ) + (byte*) conio_cursor_text#22 ← phi( main::@1/(byte*) conio_cursor_text#32 ) + (byte) conio_cursor_y#23 ← phi( main::@1/(byte) conio_cursor_y#32 ) + (byte) conio_cursor_x#23 ← phi( main::@1/(byte) conio_cursor_x#32 ) + (byte) conio_cursor_x#12 ← (byte) conio_cursor_x#23 + (byte) conio_cursor_y#11 ← (byte) conio_cursor_y#23 + (byte*) conio_cursor_text#11 ← (byte*) conio_cursor_text#22 + (byte*) conio_cursor_color#11 ← (byte*) conio_cursor_color#22 + return + to:@return +@1: scope:[] from @begin + (byte) conio_textcolor#15 ← phi( @begin/(byte) conio_textcolor#0 ) + (byte*) conio_cursor_color#33 ← phi( @begin/(byte*) conio_cursor_color#0 ) + (byte*) conio_cursor_text#33 ← phi( @begin/(byte*) conio_cursor_text#0 ) + (byte) conio_cursor_y#33 ← phi( @begin/(byte) conio_cursor_y#0 ) + (byte) conio_cursor_x#33 ← phi( @begin/(byte) conio_cursor_x#0 ) + call main + to:@2 +@2: scope:[] from @1 + (byte*) conio_cursor_color#23 ← phi( @1/(byte*) conio_cursor_color#11 ) + (byte*) conio_cursor_text#23 ← phi( @1/(byte*) conio_cursor_text#11 ) + (byte) conio_cursor_y#24 ← phi( @1/(byte) conio_cursor_y#11 ) + (byte) conio_cursor_x#24 ← phi( @1/(byte) conio_cursor_x#12 ) + (byte) conio_cursor_x#13 ← (byte) conio_cursor_x#24 + (byte) conio_cursor_y#12 ← (byte) conio_cursor_y#24 + (byte*) conio_cursor_text#12 ← (byte*) conio_cursor_text#23 + (byte*) conio_cursor_color#12 ← (byte*) conio_cursor_color#23 + to:@end +@end: scope:[] from @2 + +SYMBOL TABLE SSA +(label) @1 +(label) @2 +(label) @begin +(label) @end +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*)(number) $dc00 +(const nomodify byte) CONIO_HEIGHT = (byte) $19 +(const nomodify byte*) CONIO_SCREEN_COLORS = (byte*)(number) $d800 +(const nomodify byte*) CONIO_SCREEN_TEXT = (byte*)(number) $400 +(const nomodify byte) CONIO_TEXTCOLOR_DEFAULT = (byte) $e +(const nomodify byte) CONIO_WIDTH = (byte) $28 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = (byte) 8 +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS = (byte) $b +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN = (byte) $a +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC = (byte) 9 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS = (byte) 3 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN = (byte) 2 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC = (byte) 1 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_TENTHS = (byte) 0 +(byte) TIME_OF_DAY::HOURS +(byte) TIME_OF_DAY::MIN +(byte) TIME_OF_DAY::SEC +(byte) TIME_OF_DAY::TENTHS +(struct TIME_OF_DAY) TOD_ZERO loadstore = { TENTHS: (byte) 0, SEC: (byte) 0, MIN: (byte) 0, HOURS: (byte) 0 } +(byte*) conio_cursor_color +(byte*) conio_cursor_color#0 +(byte*) conio_cursor_color#1 +(byte*) conio_cursor_color#10 +(byte*) conio_cursor_color#11 +(byte*) conio_cursor_color#12 +(byte*) conio_cursor_color#13 +(byte*) conio_cursor_color#14 +(byte*) conio_cursor_color#15 +(byte*) conio_cursor_color#16 +(byte*) conio_cursor_color#17 +(byte*) conio_cursor_color#18 +(byte*) conio_cursor_color#19 +(byte*) conio_cursor_color#2 +(byte*) conio_cursor_color#20 +(byte*) conio_cursor_color#21 +(byte*) conio_cursor_color#22 +(byte*) conio_cursor_color#23 +(byte*) conio_cursor_color#24 +(byte*) conio_cursor_color#25 +(byte*) conio_cursor_color#26 +(byte*) conio_cursor_color#27 +(byte*) conio_cursor_color#28 +(byte*) conio_cursor_color#29 +(byte*) conio_cursor_color#3 +(byte*) conio_cursor_color#30 +(byte*) conio_cursor_color#31 +(byte*) conio_cursor_color#32 +(byte*) conio_cursor_color#33 +(byte*) conio_cursor_color#34 +(byte*) conio_cursor_color#35 +(byte*) conio_cursor_color#36 +(byte*) conio_cursor_color#37 +(byte*) conio_cursor_color#4 +(byte*) conio_cursor_color#5 +(byte*) conio_cursor_color#6 +(byte*) conio_cursor_color#7 +(byte*) conio_cursor_color#8 +(byte*) conio_cursor_color#9 +(byte*) conio_cursor_text +(byte*) conio_cursor_text#0 +(byte*) conio_cursor_text#1 +(byte*) conio_cursor_text#10 +(byte*) conio_cursor_text#11 +(byte*) conio_cursor_text#12 +(byte*) conio_cursor_text#13 +(byte*) conio_cursor_text#14 +(byte*) conio_cursor_text#15 +(byte*) conio_cursor_text#16 +(byte*) conio_cursor_text#17 +(byte*) conio_cursor_text#18 +(byte*) conio_cursor_text#19 +(byte*) conio_cursor_text#2 +(byte*) conio_cursor_text#20 +(byte*) conio_cursor_text#21 +(byte*) conio_cursor_text#22 +(byte*) conio_cursor_text#23 +(byte*) conio_cursor_text#24 +(byte*) conio_cursor_text#25 +(byte*) conio_cursor_text#26 +(byte*) conio_cursor_text#27 +(byte*) conio_cursor_text#28 +(byte*) conio_cursor_text#29 +(byte*) conio_cursor_text#3 +(byte*) conio_cursor_text#30 +(byte*) conio_cursor_text#31 +(byte*) conio_cursor_text#32 +(byte*) conio_cursor_text#33 +(byte*) conio_cursor_text#34 +(byte*) conio_cursor_text#35 +(byte*) conio_cursor_text#36 +(byte*) conio_cursor_text#37 +(byte*) conio_cursor_text#4 +(byte*) conio_cursor_text#5 +(byte*) conio_cursor_text#6 +(byte*) conio_cursor_text#7 +(byte*) conio_cursor_text#8 +(byte*) conio_cursor_text#9 +(byte) conio_cursor_x +(byte) conio_cursor_x#0 +(byte) conio_cursor_x#1 +(byte) conio_cursor_x#10 +(byte) conio_cursor_x#11 +(byte) conio_cursor_x#12 +(byte) conio_cursor_x#13 +(byte) conio_cursor_x#14 +(byte) conio_cursor_x#15 +(byte) conio_cursor_x#16 +(byte) conio_cursor_x#17 +(byte) conio_cursor_x#18 +(byte) conio_cursor_x#19 +(byte) conio_cursor_x#2 +(byte) conio_cursor_x#20 +(byte) conio_cursor_x#21 +(byte) conio_cursor_x#22 +(byte) conio_cursor_x#23 +(byte) conio_cursor_x#24 +(byte) conio_cursor_x#25 +(byte) conio_cursor_x#26 +(byte) conio_cursor_x#27 +(byte) conio_cursor_x#28 +(byte) conio_cursor_x#29 +(byte) conio_cursor_x#3 +(byte) conio_cursor_x#30 +(byte) conio_cursor_x#31 +(byte) conio_cursor_x#32 +(byte) conio_cursor_x#33 +(byte) conio_cursor_x#34 +(byte) conio_cursor_x#35 +(byte) conio_cursor_x#36 +(byte) conio_cursor_x#37 +(byte) conio_cursor_x#4 +(byte) conio_cursor_x#5 +(byte) conio_cursor_x#6 +(byte) conio_cursor_x#7 +(byte) conio_cursor_x#8 +(byte) conio_cursor_x#9 +(byte) conio_cursor_y +(byte) conio_cursor_y#0 +(byte) conio_cursor_y#1 +(byte) conio_cursor_y#10 +(byte) conio_cursor_y#11 +(byte) conio_cursor_y#12 +(byte) conio_cursor_y#13 +(byte) conio_cursor_y#14 +(byte) conio_cursor_y#15 +(byte) conio_cursor_y#16 +(byte) conio_cursor_y#17 +(byte) conio_cursor_y#18 +(byte) conio_cursor_y#19 +(byte) conio_cursor_y#2 +(byte) conio_cursor_y#20 +(byte) conio_cursor_y#21 +(byte) conio_cursor_y#22 +(byte) conio_cursor_y#23 +(byte) conio_cursor_y#24 +(byte) conio_cursor_y#25 +(byte) conio_cursor_y#26 +(byte) conio_cursor_y#27 +(byte) conio_cursor_y#28 +(byte) conio_cursor_y#29 +(byte) conio_cursor_y#3 +(byte) conio_cursor_y#30 +(byte) conio_cursor_y#31 +(byte) conio_cursor_y#32 +(byte) conio_cursor_y#33 +(byte) conio_cursor_y#34 +(byte) conio_cursor_y#35 +(byte) conio_cursor_y#36 +(byte) conio_cursor_y#37 +(byte) conio_cursor_y#4 +(byte) conio_cursor_y#5 +(byte) conio_cursor_y#6 +(byte) conio_cursor_y#7 +(byte) conio_cursor_y#8 +(byte) conio_cursor_y#9 +(byte) conio_textcolor +(byte) conio_textcolor#0 +(byte) conio_textcolor#1 +(byte) conio_textcolor#10 +(byte) conio_textcolor#11 +(byte) conio_textcolor#12 +(byte) conio_textcolor#13 +(byte) conio_textcolor#14 +(byte) conio_textcolor#15 +(byte) conio_textcolor#2 +(byte) conio_textcolor#3 +(byte) conio_textcolor#4 +(byte) conio_textcolor#5 +(byte) conio_textcolor#6 +(byte) conio_textcolor#7 +(byte) conio_textcolor#8 +(byte) conio_textcolor#9 +(void()) cputc((byte) cputc::c) +(bool~) cputc::$0 +(bool~) cputc::$1 +(bool~) cputc::$2 +(bool~) cputc::$3 +(bool~) cputc::$4 +(number~) cputc::$6 +(label) cputc::@1 +(label) cputc::@2 +(label) cputc::@3 +(label) cputc::@4 +(label) cputc::@5 +(label) cputc::@6 +(label) cputc::@return +(byte) cputc::c +(byte) cputc::c#0 +(byte) cputc::c#1 +(byte) cputc::c#2 +(void()) cputs((to_nomodify byte*) cputs::s) +(bool~) cputs::$1 +(label) cputs::@1 +(label) cputs::@2 +(label) cputs::@3 +(label) cputs::@return +(byte) cputs::c +(byte) cputs::c#0 +(byte) cputs::c#1 +(byte) cputs::c#2 +(to_nomodify byte*) cputs::s +(to_nomodify byte*) cputs::s#0 +(to_nomodify byte*) cputs::s#1 +(to_nomodify byte*) cputs::s#2 +(to_nomodify byte*) cputs::s#3 +(to_nomodify byte*) cputs::s#4 +(to_nomodify byte*) cputs::s#5 +(void()) gotoxy((byte) gotoxy::x , (byte) gotoxy::y) +(bool~) gotoxy::$0 +(bool~) gotoxy::$1 +(bool~) gotoxy::$2 +(bool~) gotoxy::$3 +(word~) gotoxy::$4 +(word~) gotoxy::$5 +(byte*~) gotoxy::$6 +(byte*~) gotoxy::$7 +(word~) gotoxy::$8 +(label) gotoxy::@1 +(label) gotoxy::@2 +(label) gotoxy::@3 +(label) gotoxy::@4 +(label) gotoxy::@return +(word) gotoxy::offset +(word) gotoxy::offset#0 +(byte) gotoxy::x +(byte) gotoxy::x#0 +(byte) gotoxy::x#1 +(byte) gotoxy::x#2 +(byte) gotoxy::x#3 +(byte) gotoxy::x#4 +(byte) gotoxy::x#5 +(byte) gotoxy::x#6 +(byte) gotoxy::x#7 +(byte) gotoxy::y +(byte) gotoxy::y#0 +(byte) gotoxy::y#1 +(byte) gotoxy::y#2 +(byte) gotoxy::y#3 +(byte) gotoxy::y#4 +(byte) gotoxy::y#5 +(byte) gotoxy::y#6 +(byte) gotoxy::y#7 +(void()) main() +(byte~) main::$1_HOURS +(byte~) main::$1_MIN +(byte~) main::$1_SEC +(byte~) main::$1_TENTHS +(byte*~) main::$3 +(bool~) main::$5 +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@7 +(label) main::@return +(byte) main::tod_HOURS +(byte) main::tod_HOURS#0 +(byte) main::tod_HOURS#1 +(byte) main::tod_MIN +(byte) main::tod_MIN#0 +(byte) main::tod_MIN#1 +(byte) main::tod_SEC +(byte) main::tod_SEC#0 +(byte) main::tod_SEC#1 +(byte) main::tod_TENTHS +(byte) main::tod_TENTHS#0 +(byte) main::tod_TENTHS#1 +(const byte*) tod_buffer[] = (byte*) "00:00:00:00" +(void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) +(label) tod_init::@return +(struct TIME_OF_DAY) tod_init::tod +(byte) tod_init::tod_HOURS +(byte) tod_init::tod_HOURS#0 +(byte) tod_init::tod_HOURS#1 +(byte) tod_init::tod_MIN +(byte) tod_init::tod_MIN#0 +(byte) tod_init::tod_MIN#1 +(byte) tod_init::tod_SEC +(byte) tod_init::tod_SEC#0 +(byte) tod_init::tod_SEC#1 +(byte) tod_init::tod_TENTHS +(byte) tod_init::tod_TENTHS#0 +(byte) tod_init::tod_TENTHS#1 +(struct TIME_OF_DAY()) tod_read() +(label) tod_read::@return +(byte) tod_read::hours +(byte) tod_read::hours#0 +(byte) tod_read::mins +(byte) tod_read::mins#0 +(struct TIME_OF_DAY) tod_read::return +(struct TIME_OF_DAY) tod_read::return#0 +(struct TIME_OF_DAY) tod_read::return#1 +(byte) tod_read::return_HOURS +(byte) tod_read::return_HOURS#0 +(byte) tod_read::return_HOURS#1 +(byte) tod_read::return_HOURS#2 +(byte) tod_read::return_HOURS#3 +(byte) tod_read::return_HOURS#4 +(byte) tod_read::return_MIN +(byte) tod_read::return_MIN#0 +(byte) tod_read::return_MIN#1 +(byte) tod_read::return_MIN#2 +(byte) tod_read::return_MIN#3 +(byte) tod_read::return_MIN#4 +(byte) tod_read::return_SEC +(byte) tod_read::return_SEC#0 +(byte) tod_read::return_SEC#1 +(byte) tod_read::return_SEC#2 +(byte) tod_read::return_SEC#3 +(byte) tod_read::return_SEC#4 +(byte) tod_read::return_TENTHS +(byte) tod_read::return_TENTHS#0 +(byte) tod_read::return_TENTHS#1 +(byte) tod_read::return_TENTHS#2 +(byte) tod_read::return_TENTHS#3 +(byte) tod_read::return_TENTHS#4 +(byte) tod_read::secs +(byte) tod_read::secs#0 +(byte) tod_read::tenths +(byte) tod_read::tenths#0 +(byte) tod_read::tod_HOURS +(byte) tod_read::tod_HOURS#0 +(byte) tod_read::tod_MIN +(byte) tod_read::tod_MIN#0 +(byte) tod_read::tod_SEC +(byte) tod_read::tod_SEC#0 +(byte) tod_read::tod_TENTHS +(byte) tod_read::tod_TENTHS#0 +(byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) +(byte~) tod_str::$0 +(byte~) tod_str::$1 +(number~) tod_str::$10 +(number~) tod_str::$11 +(byte~) tod_str::$12 +(byte~) tod_str::$13 +(number~) tod_str::$14 +(number~) tod_str::$15 +(number~) tod_str::$2 +(number~) tod_str::$3 +(byte~) tod_str::$4 +(byte~) tod_str::$5 +(number~) tod_str::$6 +(number~) tod_str::$7 +(byte~) tod_str::$8 +(byte~) tod_str::$9 +(label) tod_str::@return +(byte*) tod_str::return +(byte*) tod_str::return#0 +(byte*) tod_str::return#1 +(byte*) tod_str::return#2 +(byte*) tod_str::return#3 +(byte*) tod_str::return#4 +(struct TIME_OF_DAY) tod_str::tod +(byte) tod_str::tod_HOURS +(byte) tod_str::tod_HOURS#0 +(byte) tod_str::tod_HOURS#1 +(byte) tod_str::tod_MIN +(byte) tod_str::tod_MIN#0 +(byte) tod_str::tod_MIN#1 +(byte) tod_str::tod_SEC +(byte) tod_str::tod_SEC#0 +(byte) tod_str::tod_SEC#1 +(byte) tod_str::tod_TENTHS +(byte) tod_str::tod_TENTHS#0 +(byte) tod_str::tod_TENTHS#1 + +Adding number conversion cast (unumber) 0 in (byte) gotoxy::x#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in (byte) gotoxy::y#0 ← (number) 0 +Adding number conversion cast (unumber) 1 in (number~) cputc::$6 ← (byte) conio_cursor_y#14 + (number) 1 +Adding number conversion cast (unumber) cputc::$6 in (number~) cputc::$6 ← (byte) conio_cursor_y#14 + (unumber)(number) 1 +Adding number conversion cast (unumber) 0 in (byte) gotoxy::x#1 ← (number) 0 +Adding number conversion cast (unumber) 0 in (byte) conio_cursor_x#5 ← (number) 0 +Adding number conversion cast (unumber) 0 in (byte) gotoxy::x#2 ← (number) 0 +Adding number conversion cast (unumber) 0 in (byte) gotoxy::y#2 ← (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) cputs::$1 ← (number) 0 != (byte) cputs::c#1 +Adding number conversion cast (unumber) $80 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (number) $80 +Adding number conversion cast (unumber) $7f in *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (number) $7f +Adding number conversion cast (unumber) 4 in (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#1 >> (number) 4 +Adding number conversion cast (unumber) 0 in *((const byte*) tod_buffer + (number) 0) ← (byte~) tod_str::$1 +Adding number conversion cast (unumber) $f in (number~) tod_str::$2 ← (byte) tod_str::tod_HOURS#1 & (number) $f +Adding number conversion cast (unumber) tod_str::$2 in (number~) tod_str::$2 ← (byte) tod_str::tod_HOURS#1 & (unumber)(number) $f +Adding number conversion cast (unumber) tod_str::$3 in (number~) tod_str::$3 ← (byte) '0' + (unumber~) tod_str::$2 +Adding number conversion cast (unumber) 1 in *((const byte*) tod_buffer + (number) 1) ← (unumber~) tod_str::$3 +Adding number conversion cast (unumber) 4 in (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#1 >> (number) 4 +Adding number conversion cast (unumber) 3 in *((const byte*) tod_buffer + (number) 3) ← (byte~) tod_str::$5 +Adding number conversion cast (unumber) $f in (number~) tod_str::$6 ← (byte) tod_str::tod_MIN#1 & (number) $f +Adding number conversion cast (unumber) tod_str::$6 in (number~) tod_str::$6 ← (byte) tod_str::tod_MIN#1 & (unumber)(number) $f +Adding number conversion cast (unumber) tod_str::$7 in (number~) tod_str::$7 ← (byte) '0' + (unumber~) tod_str::$6 +Adding number conversion cast (unumber) 4 in *((const byte*) tod_buffer + (number) 4) ← (unumber~) tod_str::$7 +Adding number conversion cast (unumber) 4 in (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#1 >> (number) 4 +Adding number conversion cast (unumber) 6 in *((const byte*) tod_buffer + (number) 6) ← (byte~) tod_str::$9 +Adding number conversion cast (unumber) $f in (number~) tod_str::$10 ← (byte) tod_str::tod_SEC#1 & (number) $f +Adding number conversion cast (unumber) tod_str::$10 in (number~) tod_str::$10 ← (byte) tod_str::tod_SEC#1 & (unumber)(number) $f +Adding number conversion cast (unumber) tod_str::$11 in (number~) tod_str::$11 ← (byte) '0' + (unumber~) tod_str::$10 +Adding number conversion cast (unumber) 7 in *((const byte*) tod_buffer + (number) 7) ← (unumber~) tod_str::$11 +Adding number conversion cast (unumber) 4 in (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#1 >> (number) 4 +Adding number conversion cast (unumber) 9 in *((const byte*) tod_buffer + (number) 9) ← (byte~) tod_str::$13 +Adding number conversion cast (unumber) $f in (number~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#1 & (number) $f +Adding number conversion cast (unumber) tod_str::$14 in (number~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#1 & (unumber)(number) $f +Adding number conversion cast (unumber) tod_str::$15 in (number~) tod_str::$15 ← (byte) '0' + (unumber~) tod_str::$14 +Adding number conversion cast (unumber) $a in *((const byte*) tod_buffer + (number) $a) ← (unumber~) tod_str::$15 +Adding number conversion cast (unumber) 0 in (byte) gotoxy::x#3 ← (number) 0 +Adding number conversion cast (unumber) 0 in (byte) gotoxy::y#3 ← (number) 0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast (byte) gotoxy::x#0 ← (unumber)(number) 0 +Inlining cast (byte) gotoxy::y#0 ← (unumber)(number) 0 +Inlining cast (byte) gotoxy::x#1 ← (unumber)(number) 0 +Inlining cast (byte) conio_cursor_x#5 ← (unumber)(number) 0 +Inlining cast (byte) gotoxy::x#2 ← (unumber)(number) 0 +Inlining cast (byte) gotoxy::y#2 ← (unumber)(number) 0 +Inlining cast (byte) gotoxy::x#3 ← (unumber)(number) 0 +Inlining cast (byte) gotoxy::y#3 ← (unumber)(number) 0 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (byte*) 1024 +Simplifying constant pointer cast (byte*) 55296 +Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast $80 +Simplifying constant integer cast $7f +Simplifying constant integer cast 4 +Simplifying constant integer cast 0 +Simplifying constant integer cast $f +Simplifying constant integer cast 1 +Simplifying constant integer cast 4 +Simplifying constant integer cast 3 +Simplifying constant integer cast $f +Simplifying constant integer cast 4 +Simplifying constant integer cast 4 +Simplifying constant integer cast 6 +Simplifying constant integer cast $f +Simplifying constant integer cast 7 +Simplifying constant integer cast 4 +Simplifying constant integer cast 9 +Simplifying constant integer cast $f +Simplifying constant integer cast $a +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $80 +Finalized unsigned number type (byte) $7f +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) $f +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 3 +Finalized unsigned number type (byte) $f +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 6 +Finalized unsigned number type (byte) $f +Finalized unsigned number type (byte) 7 +Finalized unsigned number type (byte) 4 +Finalized unsigned number type (byte) 9 +Finalized unsigned number type (byte) $f +Finalized unsigned number type (byte) $a +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to byte in (unumber~) cputc::$6 ← (byte) conio_cursor_y#14 + (byte) 1 +Inferred type updated to byte in (unumber~) tod_str::$2 ← (byte) tod_str::tod_HOURS#1 & (byte) $f +Inferred type updated to byte in (unumber~) tod_str::$3 ← (byte) '0' + (byte~) tod_str::$2 +Inferred type updated to byte in (unumber~) tod_str::$6 ← (byte) tod_str::tod_MIN#1 & (byte) $f +Inferred type updated to byte in (unumber~) tod_str::$7 ← (byte) '0' + (byte~) tod_str::$6 +Inferred type updated to byte in (unumber~) tod_str::$10 ← (byte) tod_str::tod_SEC#1 & (byte) $f +Inferred type updated to byte in (unumber~) tod_str::$11 ← (byte) '0' + (byte~) tod_str::$10 +Inferred type updated to byte in (unumber~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#1 & (byte) $f +Inferred type updated to byte in (unumber~) tod_str::$15 ← (byte) '0' + (byte~) tod_str::$14 +Inversing boolean not [7] (bool~) gotoxy::$1 ← (byte) gotoxy::x#4 < (const nomodify byte) CONIO_WIDTH from [6] (bool~) gotoxy::$0 ← (byte) gotoxy::x#4 >= (const nomodify byte) CONIO_WIDTH +Inversing boolean not [11] (bool~) gotoxy::$3 ← (byte) gotoxy::y#4 < (const nomodify byte) CONIO_HEIGHT from [10] (bool~) gotoxy::$2 ← (byte) gotoxy::y#4 >= (const nomodify byte) CONIO_HEIGHT +Inversing boolean not [54] (bool~) cputc::$2 ← (byte) conio_cursor_x#4 != (const nomodify byte) CONIO_WIDTH from [53] (bool~) cputc::$1 ← (byte) conio_cursor_x#4 == (const nomodify byte) CONIO_WIDTH +Inversing boolean not [60] (bool~) cputc::$4 ← (byte) conio_cursor_y#4 != (const nomodify byte) CONIO_HEIGHT from [59] (bool~) cputc::$3 ← (byte) conio_cursor_y#4 == (const nomodify byte) CONIO_HEIGHT +Successful SSA optimization Pass2UnaryNotSimplification +Alias gotoxy::y#6 = gotoxy::y#7 +Alias gotoxy::offset#0 = gotoxy::$5 +Alias conio_cursor_text#1 = gotoxy::$6 conio_cursor_text#13 conio_cursor_text#2 +Alias conio_cursor_color#1 = gotoxy::$7 conio_cursor_color#13 conio_cursor_color#2 +Alias gotoxy::x#6 = gotoxy::x#7 +Alias conio_cursor_x#1 = conio_cursor_x#14 conio_cursor_x#2 +Alias conio_cursor_y#1 = conio_cursor_y#13 conio_cursor_y#2 +Alias conio_cursor_y#14 = conio_cursor_y#25 conio_cursor_y#26 conio_cursor_y#16 +Alias conio_cursor_x#16 = conio_cursor_x#25 conio_cursor_x#26 +Alias conio_cursor_text#15 = conio_cursor_text#24 conio_cursor_text#25 +Alias conio_cursor_color#15 = conio_cursor_color#24 conio_cursor_color#25 +Alias gotoxy::y#1 = cputc::$6 +Alias conio_cursor_x#15 = conio_cursor_x#3 +Alias conio_cursor_y#15 = conio_cursor_y#3 +Alias conio_cursor_text#14 = conio_cursor_text#3 +Alias conio_cursor_color#14 = conio_cursor_color#3 +Alias cputc::c#1 = cputc::c#2 +Alias conio_textcolor#1 = conio_textcolor#2 +Alias conio_cursor_text#26 = conio_cursor_text#27 conio_cursor_text#4 +Alias conio_cursor_color#26 = conio_cursor_color#27 conio_cursor_color#4 +Alias conio_cursor_x#27 = conio_cursor_x#5 +Alias conio_cursor_y#27 = conio_cursor_y#4 +Alias conio_cursor_x#17 = conio_cursor_x#6 +Alias conio_cursor_y#17 = conio_cursor_y#5 +Alias conio_cursor_text#16 = conio_cursor_text#5 +Alias conio_cursor_color#16 = conio_cursor_color#5 +Alias conio_cursor_x#18 = conio_cursor_x#7 +Alias conio_cursor_y#18 = conio_cursor_y#6 +Alias conio_cursor_text#17 = conio_cursor_text#6 +Alias conio_cursor_color#17 = conio_cursor_color#6 +Alias cputs::c#1 = cputs::c#2 +Alias conio_cursor_x#20 = conio_cursor_x#28 conio_cursor_x#29 conio_cursor_x#9 +Alias conio_cursor_y#20 = conio_cursor_y#28 conio_cursor_y#29 conio_cursor_y#8 +Alias conio_cursor_text#19 = conio_cursor_text#28 conio_cursor_text#29 conio_cursor_text#8 +Alias conio_cursor_color#19 = conio_cursor_color#28 conio_cursor_color#29 conio_cursor_color#8 +Alias conio_textcolor#3 = conio_textcolor#4 conio_textcolor#6 +Alias cputs::s#0 = cputs::s#5 cputs::s#4 +Alias conio_cursor_x#19 = conio_cursor_x#8 +Alias conio_cursor_y#19 = conio_cursor_y#7 +Alias conio_cursor_text#18 = conio_cursor_text#7 +Alias conio_cursor_color#18 = conio_cursor_color#7 +Alias tod_read::return_TENTHS#0 = tod_read::tod_TENTHS#0 tod_read::tenths#0 tod_read::return_TENTHS#3 tod_read::return_TENTHS#1 +Alias tod_read::return_SEC#0 = tod_read::tod_SEC#0 tod_read::secs#0 tod_read::return_SEC#3 tod_read::return_SEC#1 +Alias tod_read::return_MIN#0 = tod_read::tod_MIN#0 tod_read::mins#0 tod_read::return_MIN#3 tod_read::return_MIN#1 +Alias tod_read::return_HOURS#0 = tod_read::tod_HOURS#0 tod_read::hours#0 tod_read::return_HOURS#3 tod_read::return_HOURS#1 +Alias tod_str::return#0 = tod_str::return#3 tod_str::return#1 +Alias conio_cursor_x#35 = conio_cursor_x#37 +Alias conio_cursor_y#35 = conio_cursor_y#37 +Alias conio_cursor_text#35 = conio_cursor_text#37 +Alias conio_cursor_color#35 = conio_cursor_color#37 +Alias conio_textcolor#12 = conio_textcolor#14 +Alias conio_cursor_x#12 = conio_cursor_x#36 conio_cursor_x#32 conio_cursor_x#30 conio_cursor_x#23 +Alias conio_cursor_y#11 = conio_cursor_y#36 conio_cursor_y#32 conio_cursor_y#30 conio_cursor_y#23 +Alias conio_cursor_text#11 = conio_cursor_text#36 conio_cursor_text#32 conio_cursor_text#30 conio_cursor_text#22 +Alias conio_cursor_color#11 = conio_cursor_color#36 conio_cursor_color#32 conio_cursor_color#30 conio_cursor_color#22 +Alias conio_textcolor#10 = conio_textcolor#11 conio_textcolor#9 conio_textcolor#8 conio_textcolor#7 conio_textcolor#13 +Alias tod_read::return_TENTHS#2 = tod_read::return_TENTHS#4 +Alias tod_read::return_SEC#2 = tod_read::return_SEC#4 +Alias tod_read::return_MIN#2 = tod_read::return_MIN#4 +Alias tod_read::return_HOURS#2 = tod_read::return_HOURS#4 +Alias main::tod_TENTHS#0 = main::$1_TENTHS main::tod_TENTHS#1 +Alias main::tod_SEC#0 = main::$1_SEC main::tod_SEC#1 +Alias main::tod_MIN#0 = main::$1_MIN main::tod_MIN#1 +Alias main::tod_HOURS#0 = main::$1_HOURS main::tod_HOURS#1 +Alias conio_cursor_x#10 = conio_cursor_x#21 conio_cursor_x#31 +Alias conio_cursor_y#21 = conio_cursor_y#9 conio_cursor_y#31 +Alias conio_cursor_text#20 = conio_cursor_text#9 conio_cursor_text#31 +Alias conio_cursor_color#20 = conio_cursor_color#9 conio_cursor_color#31 +Alias tod_str::return#2 = tod_str::return#4 +Alias cputs::s#1 = main::$3 +Alias conio_cursor_x#11 = conio_cursor_x#22 +Alias conio_cursor_y#10 = conio_cursor_y#22 +Alias conio_cursor_text#10 = conio_cursor_text#21 +Alias conio_cursor_color#10 = conio_cursor_color#21 +Alias conio_cursor_x#0 = conio_cursor_x#33 +Alias conio_cursor_y#0 = conio_cursor_y#33 +Alias conio_cursor_text#0 = conio_cursor_text#33 +Alias conio_cursor_color#0 = conio_cursor_color#33 +Alias conio_textcolor#0 = conio_textcolor#15 +Alias conio_cursor_x#13 = conio_cursor_x#24 +Alias conio_cursor_y#12 = conio_cursor_y#24 +Alias conio_cursor_text#12 = conio_cursor_text#23 +Alias conio_cursor_color#12 = conio_cursor_color#23 +Successful SSA optimization Pass2AliasElimination +Alias gotoxy::y#4 = gotoxy::y#6 +Alias gotoxy::x#5 = gotoxy::x#6 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) cputc::c#1 (byte) cputc::c#0 +Identical Phi Values (byte) conio_cursor_y#14 (byte) conio_cursor_y#20 +Identical Phi Values (byte*) conio_cursor_text#15 (byte*) conio_cursor_text#19 +Identical Phi Values (byte) conio_textcolor#1 (byte) conio_textcolor#3 +Identical Phi Values (byte*) conio_cursor_color#15 (byte*) conio_cursor_color#19 +Identical Phi Values (byte) conio_cursor_x#16 (byte) conio_cursor_x#20 +Identical Phi Values (byte) conio_cursor_x#15 (byte) conio_cursor_x#1 +Identical Phi Values (byte) conio_cursor_y#15 (byte) conio_cursor_y#1 +Identical Phi Values (byte*) conio_cursor_text#14 (byte*) conio_cursor_text#1 +Identical Phi Values (byte*) conio_cursor_color#14 (byte*) conio_cursor_color#1 +Identical Phi Values (byte) conio_cursor_x#17 (byte) conio_cursor_x#1 +Identical Phi Values (byte) conio_cursor_y#17 (byte) conio_cursor_y#1 +Identical Phi Values (byte*) conio_cursor_text#16 (byte*) conio_cursor_text#1 +Identical Phi Values (byte*) conio_cursor_color#16 (byte*) conio_cursor_color#1 +Identical Phi Values (to_nomodify byte*) cputs::s#3 (to_nomodify byte*) cputs::s#1 +Identical Phi Values (byte) conio_cursor_x#34 (byte) conio_cursor_x#10 +Identical Phi Values (byte) conio_cursor_y#34 (byte) conio_cursor_y#21 +Identical Phi Values (byte*) conio_cursor_text#34 (byte*) conio_cursor_text#20 +Identical Phi Values (byte*) conio_cursor_color#34 (byte*) conio_cursor_color#20 +Identical Phi Values (byte) conio_textcolor#5 (byte) conio_textcolor#10 +Identical Phi Values (byte) conio_textcolor#3 (byte) conio_textcolor#5 +Identical Phi Values (byte) conio_cursor_x#19 (byte) conio_cursor_x#18 +Identical Phi Values (byte) conio_cursor_y#19 (byte) conio_cursor_y#18 +Identical Phi Values (byte*) conio_cursor_text#18 (byte*) conio_cursor_text#17 +Identical Phi Values (byte*) conio_cursor_color#18 (byte*) conio_cursor_color#17 +Identical Phi Values (byte) tod_init::tod_HOURS#1 (byte) tod_init::tod_HOURS#0 +Identical Phi Values (byte) tod_init::tod_MIN#1 (byte) tod_init::tod_MIN#0 +Identical Phi Values (byte) tod_init::tod_SEC#1 (byte) tod_init::tod_SEC#0 +Identical Phi Values (byte) tod_init::tod_TENTHS#1 (byte) tod_init::tod_TENTHS#0 +Identical Phi Values (byte) tod_str::tod_HOURS#1 (byte) tod_str::tod_HOURS#0 +Identical Phi Values (byte) tod_str::tod_MIN#1 (byte) tod_str::tod_MIN#0 +Identical Phi Values (byte) tod_str::tod_SEC#1 (byte) tod_str::tod_SEC#0 +Identical Phi Values (byte) tod_str::tod_TENTHS#1 (byte) tod_str::tod_TENTHS#0 +Identical Phi Values (byte) conio_cursor_x#35 (byte) conio_cursor_x#0 +Identical Phi Values (byte) conio_cursor_y#35 (byte) conio_cursor_y#0 +Identical Phi Values (byte*) conio_cursor_text#35 (byte*) conio_cursor_text#0 +Identical Phi Values (byte*) conio_cursor_color#35 (byte*) conio_cursor_color#0 +Identical Phi Values (byte) conio_textcolor#12 (byte) conio_textcolor#0 +Identical Phi Values (byte) conio_textcolor#10 (byte) conio_textcolor#12 +Identical Phi Values (byte) conio_cursor_x#10 (byte) conio_cursor_x#1 +Identical Phi Values (byte) conio_cursor_y#21 (byte) conio_cursor_y#1 +Identical Phi Values (byte*) conio_cursor_text#20 (byte*) conio_cursor_text#1 +Identical Phi Values (byte*) conio_cursor_color#20 (byte*) conio_cursor_color#1 +Identical Phi Values (byte) conio_cursor_x#11 (byte) conio_cursor_x#20 +Identical Phi Values (byte) conio_cursor_y#10 (byte) conio_cursor_y#20 +Identical Phi Values (byte*) conio_cursor_text#10 (byte*) conio_cursor_text#19 +Identical Phi Values (byte*) conio_cursor_color#10 (byte*) conio_cursor_color#19 +Identical Phi Values (byte) conio_cursor_x#13 (byte) conio_cursor_x#12 +Identical Phi Values (byte) conio_cursor_y#12 (byte) conio_cursor_y#11 +Identical Phi Values (byte*) conio_cursor_text#12 (byte*) conio_cursor_text#11 +Identical Phi Values (byte*) conio_cursor_color#12 (byte*) conio_cursor_color#11 +Successful SSA optimization Pass2IdenticalPhiElimination +Simple Condition (bool~) gotoxy::$1 [7] if((byte) gotoxy::x#4<(const nomodify byte) CONIO_WIDTH) goto gotoxy::@1 +Simple Condition (bool~) gotoxy::$3 [10] if((byte) gotoxy::y#4<(const nomodify byte) CONIO_HEIGHT) goto gotoxy::@2 +Simple Condition (bool~) cputc::$0 [24] if((byte) cputc::c#0==(byte) ' +') goto cputc::@1 +Simple Condition (bool~) cputc::$2 [35] if((byte) conio_cursor_x#4!=(const nomodify byte) CONIO_WIDTH) goto cputc::@return +Simple Condition (bool~) cputc::$4 [39] if((byte) conio_cursor_y#27!=(const nomodify byte) CONIO_HEIGHT) goto cputc::@return +Simple Condition (bool~) cputs::$1 [52] if((byte) 0!=(byte) cputs::c#1) goto cputs::@2 +Simple Condition (bool~) main::$5 [107] if((number) 0!=(number) 1) goto main::@2 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant (const byte) conio_cursor_x#0 = 0 +Constant (const byte) conio_cursor_y#0 = 0 +Constant (const byte*) conio_cursor_text#0 = CONIO_SCREEN_TEXT +Constant (const byte*) conio_cursor_color#0 = CONIO_SCREEN_COLORS +Constant (const byte) conio_textcolor#0 = CONIO_TEXTCOLOR_DEFAULT +Constant (const byte) gotoxy::x#0 = 0 +Constant (const byte) gotoxy::y#0 = 0 +Constant (const byte) gotoxy::x#1 = 0 +Constant (const byte) conio_cursor_x#27 = 0 +Constant (const byte) gotoxy::x#2 = 0 +Constant (const byte) gotoxy::y#2 = 0 +Constant (const byte) cputs::c#0 = 0 +Constant (const byte*) tod_str::return#0 = tod_buffer +Constant (const byte) gotoxy::x#3 = 0 +Constant (const byte) gotoxy::y#3 = 0 +Successful SSA optimization Pass2ConstantIdentification +Constant (const byte*) tod_str::return#2 = tod_str::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant (const to_nomodify byte*) cputs::s#1 = tod_str::return#2 +Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [107] if((number) 0!=(number) 1) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Simplifying expression containing zero tod_buffer in [75] *((const byte*) tod_buffer + (byte) 0) ← (byte~) tod_str::$1 +Simplifying expression containing zero (byte*)&TOD_ZERO in [100] (byte) tod_init::tod_TENTHS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_TENTHS) +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused variable (struct TIME_OF_DAY) tod_read::return#0 and assignment [45] (struct TIME_OF_DAY) tod_read::return#0 ← struct-unwound {(byte) tod_read::return_TENTHS#0, (byte) tod_read::return_SEC#0, (byte) tod_read::return_MIN#0, (byte) tod_read::return_HOURS#0} +Eliminating unused variable (struct TIME_OF_DAY) tod_read::return#1 and assignment [46] (struct TIME_OF_DAY) tod_read::return#1 ← struct-unwound {(byte) tod_read::return_TENTHS#0, (byte) tod_read::return_SEC#0, (byte) tod_read::return_MIN#0, (byte) tod_read::return_HOURS#0} +Eliminating unused variable - keeping the phi block (byte) conio_cursor_x#12 +Eliminating unused variable - keeping the phi block (byte) conio_cursor_y#11 +Eliminating unused variable - keeping the phi block (byte*) conio_cursor_text#11 +Eliminating unused variable - keeping the phi block (byte*) conio_cursor_color#11 +Eliminating unused constant (const byte) cputs::c#0 +Eliminating unused constant (const byte) OFFSET_STRUCT_TIME_OF_DAY_TENTHS +Successful SSA optimization PassNEliminateUnusedVars +Eliminating unused constant (const byte) conio_cursor_x#0 +Eliminating unused constant (const byte) conio_cursor_y#0 +Eliminating unused constant (const byte*) conio_cursor_text#0 +Eliminating unused constant (const byte*) conio_cursor_color#0 +Successful SSA optimization PassNEliminateUnusedVars +Removing unused block main::@return +Successful SSA optimization Pass2EliminateUnusedBlocks +Rewriting multiplication to use shift and addition[8] (word~) gotoxy::$4 ← (word~) gotoxy::$8 * (const nomodify byte) CONIO_WIDTH +Inlining constant with var siblings (const byte) gotoxy::x#0 +Inlining constant with var siblings (const byte) gotoxy::y#0 +Inlining constant with var siblings (const byte) gotoxy::x#1 +Inlining constant with var siblings (const byte) gotoxy::x#2 +Inlining constant with var siblings (const byte) gotoxy::y#2 +Inlining constant with var siblings (const byte) gotoxy::x#3 +Inlining constant with var siblings (const byte) gotoxy::y#3 +Inlining constant with var siblings (const to_nomodify byte*) cputs::s#1 +Inlining constant with var siblings (const byte) conio_cursor_x#27 +Constant inlined gotoxy::y#2 = (byte) 0 +Constant inlined gotoxy::x#3 = (byte) 0 +Constant inlined gotoxy::y#3 = (byte) 0 +Constant inlined cputs::s#1 = (const byte*) tod_buffer +Constant inlined gotoxy::x#0 = (byte) 0 +Constant inlined gotoxy::y#0 = (byte) 0 +Constant inlined gotoxy::x#1 = (byte) 0 +Constant inlined conio_textcolor#0 = (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT +Constant inlined gotoxy::x#2 = (byte) 0 +Constant inlined conio_cursor_x#27 = (byte) 0 +Constant inlined tod_str::return#2 = (const byte*) tod_buffer +Constant inlined tod_str::return#0 = (const byte*) tod_buffer +Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(tod_buffer+1) +Consolidated array index constant in *(tod_buffer+3) +Consolidated array index constant in *(tod_buffer+4) +Consolidated array index constant in *(tod_buffer+6) +Consolidated array index constant in *(tod_buffer+7) +Consolidated array index constant in *(tod_buffer+9) +Consolidated array index constant in *(tod_buffer+$a) +Successful SSA optimization Pass2ConstantAdditionElimination +Alias gotoxy::$4 = gotoxy::$11 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) gotoxy::x#4 (byte) 0 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values (byte) gotoxy::x#5 (byte) 0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant (const byte) conio_cursor_x#1 = 0 +Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [1] if((byte) 0<(const nomodify byte) CONIO_WIDTH) goto gotoxy::@1 +Successful SSA optimization Pass2ConstantIfs +Simplifying expression containing zero gotoxy::$4 in [11] (word) gotoxy::offset#0 ← (word~) gotoxy::$4 + (byte) 0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused block gotoxy::@3 +Successful SSA optimization Pass2EliminateUnusedBlocks +Inlining constant with var siblings (const byte) conio_cursor_x#1 +Constant inlined conio_cursor_x#1 = (byte) 0 +Successful SSA optimization Pass2ConstantInlining +Alias gotoxy::offset#0 = gotoxy::$4 +Successful SSA optimization Pass2AliasElimination +Added new block during phi lifting gotoxy::@5(between gotoxy::@1 and gotoxy::@2) +Added new block during phi lifting cputc::@7(between cputc::@2 and cputc::@return) +Added new block during phi lifting cputc::@8(between cputc::@3 and cputc::@return) +Fixing phi predecessor for conio_cursor_x#18 to new block ( cputc::@3 -> cputc::@8 ) during phi lifting. +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @2 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main::@3 +Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of main::@6 +Adding NOP phi() at start of main::@7 +Adding NOP phi() at start of cputc::@4 +Adding NOP phi() at start of gotoxy::@4 +CALL GRAPH +Calls in [] to main:2 +Calls in [main] to tod_init:9 tod_read:13 gotoxy:22 tod_str:27 cputs:29 +Calls in [cputs] to cputc:40 +Calls in [cputc] to gotoxy:56 gotoxy:71 + +Created 11 initial phi equivalence classes +Coalesced [31] conio_cursor_y#42 ← conio_cursor_y#1 +Coalesced [32] conio_cursor_text#42 ← conio_cursor_text#1 +Coalesced [33] conio_cursor_color#42 ← conio_cursor_color#1 +Coalesced [41] cputs::s#6 ← cputs::s#0 +Coalesced [42] conio_cursor_x#39 ← conio_cursor_x#18 +Coalesced [43] conio_cursor_y#43 ← conio_cursor_y#18 +Coalesced [44] conio_cursor_text#43 ← conio_cursor_text#17 +Coalesced [45] conio_cursor_color#43 ← conio_cursor_color#17 +Coalesced (already) [57] conio_cursor_y#41 ← conio_cursor_y#1 +Coalesced (already) [58] conio_cursor_text#41 ← conio_cursor_text#1 +Coalesced (already) [59] conio_cursor_color#41 ← conio_cursor_color#1 +Coalesced [62] conio_cursor_y#39 ← conio_cursor_y#27 +Coalesced [63] conio_cursor_text#39 ← conio_cursor_text#26 +Coalesced [64] conio_cursor_color#39 ← conio_cursor_color#26 +Coalesced [65] conio_cursor_x#38 ← conio_cursor_x#4 +Coalesced (already) [66] conio_cursor_y#38 ← conio_cursor_y#20 +Coalesced (already) [67] conio_cursor_text#38 ← conio_cursor_text#26 +Coalesced (already) [68] conio_cursor_color#38 ← conio_cursor_color#26 +Coalesced [70] gotoxy::y#8 ← gotoxy::y#1 +Coalesced (already) [72] conio_cursor_y#40 ← conio_cursor_y#1 +Coalesced (already) [73] conio_cursor_text#40 ← conio_cursor_text#1 +Coalesced (already) [74] conio_cursor_color#40 ← conio_cursor_color#1 +Not coalescing [79] conio_cursor_y#1 ← gotoxy::y#5 +Coalesced [87] gotoxy::y#9 ← gotoxy::y#4 +Coalesced down to 6 phi equivalence classes +Culled Empty Block (label) @2 +Culled Empty Block (label) main::@3 +Culled Empty Block (label) main::@1 +Culled Empty Block (label) main::@7 +Culled Empty Block (label) cputs::@3 +Culled Empty Block (label) cputc::@6 +Culled Empty Block (label) cputc::@8 +Culled Empty Block (label) cputc::@7 +Culled Empty Block (label) cputc::@5 +Culled Empty Block (label) gotoxy::@4 +Renumbering block gotoxy::@5 to gotoxy::@3 +Renumbering block main::@2 to main::@1 +Renumbering block main::@4 to main::@2 +Renumbering block main::@5 to main::@3 +Renumbering block main::@6 to main::@4 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of main::@4 +Adding NOP phi() at start of cputs +Adding NOP phi() at start of cputc::@4 +Adding NOP phi() at start of gotoxy::@3 + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() + +(void()) main() +main: scope:[main] from @1 + [4] (byte) tod_init::tod_TENTHS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO) + [5] (byte) tod_init::tod_SEC#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC) + [6] (byte) tod_init::tod_MIN#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN) + [7] (byte) tod_init::tod_HOURS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS) + [8] call tod_init + to:main::@1 +main::@1: scope:[main] from main main::@4 + [9] phi() + [10] call tod_read + [11] (byte) tod_read::return_TENTHS#2 ← (byte) tod_read::return_TENTHS#0 + [12] (byte) tod_read::return_SEC#2 ← (byte) tod_read::return_SEC#0 + [13] (byte) tod_read::return_MIN#2 ← (byte) tod_read::return_MIN#0 + [14] (byte) tod_read::return_HOURS#2 ← (byte) tod_read::return_HOURS#0 + to:main::@2 +main::@2: scope:[main] from main::@1 + [15] (byte) main::tod_TENTHS#0 ← (byte) tod_read::return_TENTHS#2 + [16] (byte) main::tod_SEC#0 ← (byte) tod_read::return_SEC#2 + [17] (byte) main::tod_MIN#0 ← (byte) tod_read::return_MIN#2 + [18] (byte) main::tod_HOURS#0 ← (byte) tod_read::return_HOURS#2 + [19] call gotoxy + to:main::@3 +main::@3: scope:[main] from main::@2 + [20] (byte) tod_str::tod_TENTHS#0 ← (byte) main::tod_TENTHS#0 + [21] (byte) tod_str::tod_SEC#0 ← (byte) main::tod_SEC#0 + [22] (byte) tod_str::tod_MIN#0 ← (byte) main::tod_MIN#0 + [23] (byte) tod_str::tod_HOURS#0 ← (byte) main::tod_HOURS#0 + [24] call tod_str + to:main::@4 +main::@4: scope:[main] from main::@3 + [25] phi() + [26] call cputs + to:main::@1 + +(void()) cputs((to_nomodify byte*) cputs::s) +cputs: scope:[cputs] from main::@4 + [27] phi() + to:cputs::@1 +cputs::@1: scope:[cputs] from cputs cputs::@2 + [28] (byte*) conio_cursor_color#19 ← phi( cputs/(byte*) conio_cursor_color#1 cputs::@2/(byte*) conio_cursor_color#17 ) + [28] (byte*) conio_cursor_text#19 ← phi( cputs/(byte*) conio_cursor_text#1 cputs::@2/(byte*) conio_cursor_text#17 ) + [28] (byte) conio_cursor_y#20 ← phi( cputs/(byte) conio_cursor_y#1 cputs::@2/(byte) conio_cursor_y#18 ) + [28] (byte) conio_cursor_x#20 ← phi( cputs/(byte) 0 cputs::@2/(byte) conio_cursor_x#18 ) + [28] (to_nomodify byte*) cputs::s#2 ← phi( cputs/(const byte*) tod_buffer cputs::@2/(to_nomodify byte*) cputs::s#0 ) + [29] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#2) + [30] (to_nomodify byte*) cputs::s#0 ← ++ (to_nomodify byte*) cputs::s#2 + [31] if((byte) 0!=(byte) cputs::c#1) goto cputs::@2 + to:cputs::@return +cputs::@return: scope:[cputs] from cputs::@1 + [32] return + to:@return +cputs::@2: scope:[cputs] from cputs::@1 + [33] (byte) cputc::c#0 ← (byte) cputs::c#1 + [34] call cputc + to:cputs::@1 + +(void()) cputc((byte) cputc::c) +cputc: scope:[cputc] from cputs::@2 + [35] if((byte) cputc::c#0==(byte) ' +') goto cputc::@1 + to:cputc::@2 +cputc::@2: scope:[cputc] from cputc + [36] *((byte*) conio_cursor_text#19) ← (byte) cputc::c#0 + [37] (byte*) conio_cursor_text#26 ← ++ (byte*) conio_cursor_text#19 + [38] *((byte*) conio_cursor_color#19) ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT + [39] (byte*) conio_cursor_color#26 ← ++ (byte*) conio_cursor_color#19 + [40] (byte) conio_cursor_x#4 ← ++ (byte) conio_cursor_x#20 + [41] if((byte) conio_cursor_x#4!=(const nomodify byte) CONIO_WIDTH) goto cputc::@return + to:cputc::@3 +cputc::@3: scope:[cputc] from cputc::@2 + [42] (byte) conio_cursor_y#27 ← ++ (byte) conio_cursor_y#20 + [43] if((byte) conio_cursor_y#27!=(const nomodify byte) CONIO_HEIGHT) goto cputc::@return + to:cputc::@4 +cputc::@4: scope:[cputc] from cputc::@3 + [44] phi() + [45] call gotoxy + to:cputc::@return +cputc::@return: scope:[cputc] from cputc::@1 cputc::@2 cputc::@3 cputc::@4 + [46] (byte*) conio_cursor_color#17 ← phi( cputc::@2/(byte*) conio_cursor_color#26 cputc::@3/(byte*) conio_cursor_color#26 cputc::@1/(byte*) conio_cursor_color#1 cputc::@4/(byte*) conio_cursor_color#1 ) + [46] (byte*) conio_cursor_text#17 ← phi( cputc::@2/(byte*) conio_cursor_text#26 cputc::@3/(byte*) conio_cursor_text#26 cputc::@1/(byte*) conio_cursor_text#1 cputc::@4/(byte*) conio_cursor_text#1 ) + [46] (byte) conio_cursor_y#18 ← phi( cputc::@2/(byte) conio_cursor_y#20 cputc::@3/(byte) conio_cursor_y#27 cputc::@1/(byte) conio_cursor_y#1 cputc::@4/(byte) conio_cursor_y#1 ) + [46] (byte) conio_cursor_x#18 ← phi( cputc::@2/(byte) conio_cursor_x#4 cputc::@3/(byte) 0 cputc::@1/(byte) 0 cputc::@4/(byte) 0 ) + [47] return + to:@return +cputc::@1: scope:[cputc] from cputc + [48] (byte) gotoxy::y#1 ← (byte) conio_cursor_y#20 + (byte) 1 + [49] call gotoxy + to:cputc::@return + +(void()) gotoxy((byte) gotoxy::x , (byte) gotoxy::y) +gotoxy: scope:[gotoxy] from cputc::@1 cputc::@4 main::@2 + [50] (byte) gotoxy::y#4 ← phi( cputc::@1/(byte) gotoxy::y#1 cputc::@4/(byte) 0 main::@2/(byte) 0 ) + to:gotoxy::@1 +gotoxy::@1: scope:[gotoxy] from gotoxy + [51] if((byte) gotoxy::y#4<(const nomodify byte) CONIO_HEIGHT) goto gotoxy::@3 + to:gotoxy::@2 +gotoxy::@3: scope:[gotoxy] from gotoxy::@1 + [52] phi() + to:gotoxy::@2 +gotoxy::@2: scope:[gotoxy] from gotoxy::@1 gotoxy::@3 + [53] (byte) gotoxy::y#5 ← phi( gotoxy::@3/(byte) gotoxy::y#4 gotoxy::@1/(byte) 0 ) + [54] (byte) conio_cursor_y#1 ← (byte) gotoxy::y#5 + [55] (word~) gotoxy::$8 ← (word)(byte) gotoxy::y#5 + [56] (word~) gotoxy::$9 ← (word~) gotoxy::$8 << (byte) 2 + [57] (word~) gotoxy::$10 ← (word~) gotoxy::$9 + (word~) gotoxy::$8 + [58] (word) gotoxy::offset#0 ← (word~) gotoxy::$10 << (byte) 3 + [59] (byte*) conio_cursor_text#1 ← (const nomodify byte*) CONIO_SCREEN_TEXT + (word) gotoxy::offset#0 + [60] (byte*) conio_cursor_color#1 ← (const nomodify byte*) CONIO_SCREEN_COLORS + (word) gotoxy::offset#0 + to:gotoxy::@return +gotoxy::@return: scope:[gotoxy] from gotoxy::@2 + [61] return + to:@return + +(byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) +tod_str: scope:[tod_str] from main::@3 + [62] (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#0 >> (byte) 4 + [63] (byte~) tod_str::$1 ← (byte) '0' + (byte~) tod_str::$0 + [64] *((const byte*) tod_buffer) ← (byte~) tod_str::$1 + [65] (byte~) tod_str::$2 ← (byte) tod_str::tod_HOURS#0 & (byte) $f + [66] (byte~) tod_str::$3 ← (byte) '0' + (byte~) tod_str::$2 + [67] *((const byte*) tod_buffer+(byte) 1) ← (byte~) tod_str::$3 + [68] (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#0 >> (byte) 4 + [69] (byte~) tod_str::$5 ← (byte) '0' + (byte~) tod_str::$4 + [70] *((const byte*) tod_buffer+(byte) 3) ← (byte~) tod_str::$5 + [71] (byte~) tod_str::$6 ← (byte) tod_str::tod_MIN#0 & (byte) $f + [72] (byte~) tod_str::$7 ← (byte) '0' + (byte~) tod_str::$6 + [73] *((const byte*) tod_buffer+(byte) 4) ← (byte~) tod_str::$7 + [74] (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#0 >> (byte) 4 + [75] (byte~) tod_str::$9 ← (byte) '0' + (byte~) tod_str::$8 + [76] *((const byte*) tod_buffer+(byte) 6) ← (byte~) tod_str::$9 + [77] (byte~) tod_str::$10 ← (byte) tod_str::tod_SEC#0 & (byte) $f + [78] (byte~) tod_str::$11 ← (byte) '0' + (byte~) tod_str::$10 + [79] *((const byte*) tod_buffer+(byte) 7) ← (byte~) tod_str::$11 + [80] (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#0 >> (byte) 4 + [81] (byte~) tod_str::$13 ← (byte) '0' + (byte~) tod_str::$12 + [82] *((const byte*) tod_buffer+(byte) 9) ← (byte~) tod_str::$13 + [83] (byte~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#0 & (byte) $f + [84] (byte~) tod_str::$15 ← (byte) '0' + (byte~) tod_str::$14 + [85] *((const byte*) tod_buffer+(byte) $a) ← (byte~) tod_str::$15 + to:tod_str::@return +tod_str::@return: scope:[tod_str] from tod_str + [86] return + to:@return + +(struct TIME_OF_DAY()) tod_read() +tod_read: scope:[tod_read] from main::@1 + [87] (byte) tod_read::return_HOURS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) + [88] (byte) tod_read::return_MIN#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) + [89] (byte) tod_read::return_SEC#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) + [90] (byte) tod_read::return_TENTHS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) + to:tod_read::@return +tod_read::@return: scope:[tod_read] from tod_read + [91] return + to:@return + +(void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) +tod_init: scope:[tod_init] from main + [92] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (byte) $80 + [93] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (byte) $7f + [94] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) ← (byte) tod_init::tod_HOURS#0 + [95] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) ← (byte) tod_init::tod_MIN#0 + [96] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) ← (byte) tod_init::tod_SEC#0 + [97] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) ← (byte) tod_init::tod_TENTHS#0 + to:tod_init::@return +tod_init::@return: scope:[tod_init] from tod_init + [98] return + to:@return + +null depth in calling loop Loop head: cputs::@1 tails: cputs::@2 blocks: cputs::@2 cputs::@1 in scope cputc +null depth in calling loop Loop head: cputs::@1 tails: cputs::@2 blocks: cputs::@2 cputs::@1 in scope cputc + +VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(byte) TIME_OF_DAY::HOURS +(byte) TIME_OF_DAY::MIN +(byte) TIME_OF_DAY::SEC +(byte) TIME_OF_DAY::TENTHS +(struct TIME_OF_DAY) TOD_ZERO loadstore = { TENTHS: (byte) 0, SEC: (byte) 0, MIN: (byte) 0, HOURS: (byte) 0 } +(byte*) conio_cursor_color +(byte*) conio_cursor_color#1 1000083.6666666666 +(byte*) conio_cursor_color#17 1366668.3333333335 +(byte*) conio_cursor_color#19 233444.88888888888 +(byte*) conio_cursor_color#26 600000.6000000001 +(byte*) conio_cursor_text +(byte*) conio_cursor_text#1 923154.1538461538 +(byte*) conio_cursor_text#17 1366668.3333333335 +(byte*) conio_cursor_text#19 300143.4285714285 +(byte*) conio_cursor_text#26 428571.85714285716 +(byte) conio_cursor_x +(byte) conio_cursor_x#18 366667.3333333334 +(byte) conio_cursor_x#20 110000.20000000001 +(byte) conio_cursor_x#4 1500001.5 +(byte) conio_cursor_y +(byte) conio_cursor_y#1 666722.4444444445 +(byte) conio_cursor_y#18 1366668.3333333335 +(byte) conio_cursor_y#20 258417.08333333337 +(byte) conio_cursor_y#27 1500001.5 +(byte) conio_textcolor +(void()) cputc((byte) cputc::c) +(byte) cputc::c +(byte) cputc::c#0 1050001.5 +(void()) cputs((to_nomodify byte*) cputs::s) +(byte) cputs::c +(byte) cputs::c#1 100001.0 +(to_nomodify byte*) cputs::s +(to_nomodify byte*) cputs::s#0 50000.5 +(to_nomodify byte*) cputs::s#2 150001.5 +(void()) gotoxy((byte) gotoxy::x , (byte) gotoxy::y) +(word~) gotoxy::$10 2.0000002E7 +(word~) gotoxy::$8 1.50000015E7 +(word~) gotoxy::$9 2.0000002E7 +(word) gotoxy::offset +(word) gotoxy::offset#0 1.50000015E7 +(byte) gotoxy::x +(byte) gotoxy::y +(byte) gotoxy::y#1 2000002.0 +(byte) gotoxy::y#4 7000001.0 +(byte) gotoxy::y#5 1.0000001E7 +(void()) main() +(byte) main::tod_HOURS +(byte) main::tod_HOURS#0 40.4 +(byte) main::tod_MIN +(byte) main::tod_MIN#0 40.4 +(byte) main::tod_SEC +(byte) main::tod_SEC#0 40.4 +(byte) main::tod_TENTHS +(byte) main::tod_TENTHS#0 40.4 +(void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) +(struct TIME_OF_DAY) tod_init::tod +(byte) tod_init::tod_HOURS +(byte) tod_init::tod_HOURS#0 37.33333333333333 +(byte) tod_init::tod_MIN +(byte) tod_init::tod_MIN#0 22.4 +(byte) tod_init::tod_SEC +(byte) tod_init::tod_SEC#0 16.0 +(byte) tod_init::tod_TENTHS +(byte) tod_init::tod_TENTHS#0 12.444444444444443 +(struct TIME_OF_DAY()) tod_read() +(byte) tod_read::hours +(byte) tod_read::mins +(struct TIME_OF_DAY) tod_read::return +(byte) tod_read::return_HOURS +(byte) tod_read::return_HOURS#0 122.44444444444446 +(byte) tod_read::return_HOURS#2 50.5 +(byte) tod_read::return_MIN +(byte) tod_read::return_MIN#0 157.42857142857142 +(byte) tod_read::return_MIN#2 50.5 +(byte) tod_read::return_SEC +(byte) tod_read::return_SEC#0 220.39999999999998 +(byte) tod_read::return_SEC#2 50.5 +(byte) tod_read::return_TENTHS +(byte) tod_read::return_TENTHS#0 367.33333333333337 +(byte) tod_read::return_TENTHS#2 50.5 +(byte) tod_read::secs +(byte) tod_read::tenths +(byte) tod_read::tod_HOURS +(byte) tod_read::tod_MIN +(byte) tod_read::tod_SEC +(byte) tod_read::tod_TENTHS +(byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) +(byte~) tod_str::$0 2002.0 +(byte~) tod_str::$1 2002.0 +(byte~) tod_str::$10 2002.0 +(byte~) tod_str::$11 2002.0 +(byte~) tod_str::$12 2002.0 +(byte~) tod_str::$13 2002.0 +(byte~) tod_str::$14 2002.0 +(byte~) tod_str::$15 2002.0 +(byte~) tod_str::$2 2002.0 +(byte~) tod_str::$3 2002.0 +(byte~) tod_str::$4 2002.0 +(byte~) tod_str::$5 2002.0 +(byte~) tod_str::$6 2002.0 +(byte~) tod_str::$7 2002.0 +(byte~) tod_str::$8 2002.0 +(byte~) tod_str::$9 2002.0 +(byte*) tod_str::return +(struct TIME_OF_DAY) tod_str::tod +(byte) tod_str::tod_HOURS +(byte) tod_str::tod_HOURS#0 525.75 +(byte) tod_str::tod_MIN +(byte) tod_str::tod_MIN#0 191.1818181818182 +(byte) tod_str::tod_SEC +(byte) tod_str::tod_SEC#0 116.83333333333334 +(byte) tod_str::tod_TENTHS +(byte) tod_str::tod_TENTHS#0 84.12 + +Initial phi equivalence classes +[ cputs::s#2 cputs::s#0 ] +[ conio_cursor_x#20 conio_cursor_x#18 conio_cursor_x#4 ] +[ conio_cursor_y#20 conio_cursor_y#1 conio_cursor_y#18 conio_cursor_y#27 ] +[ conio_cursor_text#19 conio_cursor_text#1 conio_cursor_text#17 conio_cursor_text#26 ] +[ conio_cursor_color#19 conio_cursor_color#1 conio_cursor_color#17 conio_cursor_color#26 ] +[ gotoxy::y#5 gotoxy::y#4 gotoxy::y#1 ] +Added variable tod_init::tod_TENTHS#0 to live range equivalence class [ tod_init::tod_TENTHS#0 ] +Added variable tod_init::tod_SEC#0 to live range equivalence class [ tod_init::tod_SEC#0 ] +Added variable tod_init::tod_MIN#0 to live range equivalence class [ tod_init::tod_MIN#0 ] +Added variable tod_init::tod_HOURS#0 to live range equivalence class [ tod_init::tod_HOURS#0 ] +Added variable tod_read::return_TENTHS#2 to live range equivalence class [ tod_read::return_TENTHS#2 ] +Added variable tod_read::return_SEC#2 to live range equivalence class [ tod_read::return_SEC#2 ] +Added variable tod_read::return_MIN#2 to live range equivalence class [ tod_read::return_MIN#2 ] +Added variable tod_read::return_HOURS#2 to live range equivalence class [ tod_read::return_HOURS#2 ] +Added variable main::tod_TENTHS#0 to live range equivalence class [ main::tod_TENTHS#0 ] +Added variable main::tod_SEC#0 to live range equivalence class [ main::tod_SEC#0 ] +Added variable main::tod_MIN#0 to live range equivalence class [ main::tod_MIN#0 ] +Added variable main::tod_HOURS#0 to live range equivalence class [ main::tod_HOURS#0 ] +Added variable tod_str::tod_TENTHS#0 to live range equivalence class [ tod_str::tod_TENTHS#0 ] +Added variable tod_str::tod_SEC#0 to live range equivalence class [ tod_str::tod_SEC#0 ] +Added variable tod_str::tod_MIN#0 to live range equivalence class [ tod_str::tod_MIN#0 ] +Added variable tod_str::tod_HOURS#0 to live range equivalence class [ tod_str::tod_HOURS#0 ] +Added variable cputs::c#1 to live range equivalence class [ cputs::c#1 ] +Added variable cputc::c#0 to live range equivalence class [ cputc::c#0 ] +Added variable gotoxy::$8 to live range equivalence class [ gotoxy::$8 ] +Added variable gotoxy::$9 to live range equivalence class [ gotoxy::$9 ] +Added variable gotoxy::$10 to live range equivalence class [ gotoxy::$10 ] +Added variable gotoxy::offset#0 to live range equivalence class [ gotoxy::offset#0 ] +Added variable tod_str::$0 to live range equivalence class [ tod_str::$0 ] +Added variable tod_str::$1 to live range equivalence class [ tod_str::$1 ] +Added variable tod_str::$2 to live range equivalence class [ tod_str::$2 ] +Added variable tod_str::$3 to live range equivalence class [ tod_str::$3 ] +Added variable tod_str::$4 to live range equivalence class [ tod_str::$4 ] +Added variable tod_str::$5 to live range equivalence class [ tod_str::$5 ] +Added variable tod_str::$6 to live range equivalence class [ tod_str::$6 ] +Added variable tod_str::$7 to live range equivalence class [ tod_str::$7 ] +Added variable tod_str::$8 to live range equivalence class [ tod_str::$8 ] +Added variable tod_str::$9 to live range equivalence class [ tod_str::$9 ] +Added variable tod_str::$10 to live range equivalence class [ tod_str::$10 ] +Added variable tod_str::$11 to live range equivalence class [ tod_str::$11 ] +Added variable tod_str::$12 to live range equivalence class [ tod_str::$12 ] +Added variable tod_str::$13 to live range equivalence class [ tod_str::$13 ] +Added variable tod_str::$14 to live range equivalence class [ tod_str::$14 ] +Added variable tod_str::$15 to live range equivalence class [ tod_str::$15 ] +Added variable tod_read::return_HOURS#0 to live range equivalence class [ tod_read::return_HOURS#0 ] +Added variable tod_read::return_MIN#0 to live range equivalence class [ tod_read::return_MIN#0 ] +Added variable tod_read::return_SEC#0 to live range equivalence class [ tod_read::return_SEC#0 ] +Added variable tod_read::return_TENTHS#0 to live range equivalence class [ tod_read::return_TENTHS#0 ] +Added variable TOD_ZERO to live range equivalence class [ TOD_ZERO ] +Complete equivalence classes +[ cputs::s#2 cputs::s#0 ] +[ conio_cursor_x#20 conio_cursor_x#18 conio_cursor_x#4 ] +[ conio_cursor_y#20 conio_cursor_y#1 conio_cursor_y#18 conio_cursor_y#27 ] +[ conio_cursor_text#19 conio_cursor_text#1 conio_cursor_text#17 conio_cursor_text#26 ] +[ conio_cursor_color#19 conio_cursor_color#1 conio_cursor_color#17 conio_cursor_color#26 ] +[ gotoxy::y#5 gotoxy::y#4 gotoxy::y#1 ] +[ tod_init::tod_TENTHS#0 ] +[ tod_init::tod_SEC#0 ] +[ tod_init::tod_MIN#0 ] +[ tod_init::tod_HOURS#0 ] +[ tod_read::return_TENTHS#2 ] +[ tod_read::return_SEC#2 ] +[ tod_read::return_MIN#2 ] +[ tod_read::return_HOURS#2 ] +[ main::tod_TENTHS#0 ] +[ main::tod_SEC#0 ] +[ main::tod_MIN#0 ] +[ main::tod_HOURS#0 ] +[ tod_str::tod_TENTHS#0 ] +[ tod_str::tod_SEC#0 ] +[ tod_str::tod_MIN#0 ] +[ tod_str::tod_HOURS#0 ] +[ cputs::c#1 ] +[ cputc::c#0 ] +[ gotoxy::$8 ] +[ gotoxy::$9 ] +[ gotoxy::$10 ] +[ gotoxy::offset#0 ] +[ tod_str::$0 ] +[ tod_str::$1 ] +[ tod_str::$2 ] +[ tod_str::$3 ] +[ tod_str::$4 ] +[ tod_str::$5 ] +[ tod_str::$6 ] +[ tod_str::$7 ] +[ tod_str::$8 ] +[ tod_str::$9 ] +[ tod_str::$10 ] +[ tod_str::$11 ] +[ tod_str::$12 ] +[ tod_str::$13 ] +[ tod_str::$14 ] +[ tod_str::$15 ] +[ tod_read::return_HOURS#0 ] +[ tod_read::return_MIN#0 ] +[ tod_read::return_SEC#0 ] +[ tod_read::return_TENTHS#0 ] +[ TOD_ZERO ] +Allocated zp[2]:2 [ cputs::s#2 cputs::s#0 ] +Allocated zp[1]:4 [ conio_cursor_x#20 conio_cursor_x#18 conio_cursor_x#4 ] +Allocated zp[1]:5 [ conio_cursor_y#20 conio_cursor_y#1 conio_cursor_y#18 conio_cursor_y#27 ] +Allocated zp[2]:6 [ conio_cursor_text#19 conio_cursor_text#1 conio_cursor_text#17 conio_cursor_text#26 ] +Allocated zp[2]:8 [ conio_cursor_color#19 conio_cursor_color#1 conio_cursor_color#17 conio_cursor_color#26 ] +Allocated zp[1]:10 [ gotoxy::y#5 gotoxy::y#4 gotoxy::y#1 ] +Allocated zp[1]:11 [ tod_init::tod_TENTHS#0 ] +Allocated zp[1]:12 [ tod_init::tod_SEC#0 ] +Allocated zp[1]:13 [ tod_init::tod_MIN#0 ] +Allocated zp[1]:14 [ tod_init::tod_HOURS#0 ] +Allocated zp[1]:15 [ tod_read::return_TENTHS#2 ] +Allocated zp[1]:16 [ tod_read::return_SEC#2 ] +Allocated zp[1]:17 [ tod_read::return_MIN#2 ] +Allocated zp[1]:18 [ tod_read::return_HOURS#2 ] +Allocated zp[1]:19 [ main::tod_TENTHS#0 ] +Allocated zp[1]:20 [ main::tod_SEC#0 ] +Allocated zp[1]:21 [ main::tod_MIN#0 ] +Allocated zp[1]:22 [ main::tod_HOURS#0 ] +Allocated zp[1]:23 [ tod_str::tod_TENTHS#0 ] +Allocated zp[1]:24 [ tod_str::tod_SEC#0 ] +Allocated zp[1]:25 [ tod_str::tod_MIN#0 ] +Allocated zp[1]:26 [ tod_str::tod_HOURS#0 ] +Allocated zp[1]:27 [ cputs::c#1 ] +Allocated zp[1]:28 [ cputc::c#0 ] +Allocated zp[2]:29 [ gotoxy::$8 ] +Allocated zp[2]:31 [ gotoxy::$9 ] +Allocated zp[2]:33 [ gotoxy::$10 ] +Allocated zp[2]:35 [ gotoxy::offset#0 ] +Allocated zp[1]:37 [ tod_str::$0 ] +Allocated zp[1]:38 [ tod_str::$1 ] +Allocated zp[1]:39 [ tod_str::$2 ] +Allocated zp[1]:40 [ tod_str::$3 ] +Allocated zp[1]:41 [ tod_str::$4 ] +Allocated zp[1]:42 [ tod_str::$5 ] +Allocated zp[1]:43 [ tod_str::$6 ] +Allocated zp[1]:44 [ tod_str::$7 ] +Allocated zp[1]:45 [ tod_str::$8 ] +Allocated zp[1]:46 [ tod_str::$9 ] +Allocated zp[1]:47 [ tod_str::$10 ] +Allocated zp[1]:48 [ tod_str::$11 ] +Allocated zp[1]:49 [ tod_str::$12 ] +Allocated zp[1]:50 [ tod_str::$13 ] +Allocated zp[1]:51 [ tod_str::$14 ] +Allocated zp[1]:52 [ tod_str::$15 ] +Allocated zp[1]:53 [ tod_read::return_HOURS#0 ] +Allocated zp[1]:54 [ tod_read::return_MIN#0 ] +Allocated zp[1]:55 [ tod_read::return_SEC#0 ] +Allocated zp[1]:56 [ tod_read::return_TENTHS#0 ] +Allocated mem[4] [ TOD_ZERO ] + +INITIAL ASM +Target platform is c64basic / MOS6502X + // File Comments +// Time of Day / RTOS test using the 6526 CIA on C64 + // Upstart +.pc = $801 "Basic" +:BasicUpstart(__bbegin) +.pc = $80d "Program" + // Global Constants & labels + // The text screen address + .label CONIO_SCREEN_TEXT = $400 + // The color screen address + .label CONIO_SCREEN_COLORS = $d800 + // The screen width + .const CONIO_WIDTH = $28 + // The screen height + .const CONIO_HEIGHT = $19 + // The default text color + .const CONIO_TEXTCOLOR_DEFAULT = $e + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + .const OFFSET_STRUCT_TIME_OF_DAY_SEC = 1 + .const OFFSET_STRUCT_TIME_OF_DAY_MIN = 2 + .const OFFSET_STRUCT_TIME_OF_DAY_HOURS = 3 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f + .const OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS = $b + .const OFFSET_STRUCT_MOS6526_CIA_TOD_MIN = $a + .const OFFSET_STRUCT_MOS6526_CIA_TOD_SEC = 9 + .const OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = 8 + // The current cursor y-position + .label conio_cursor_y = 5 + // The current cursor address + .label conio_cursor_text = 6 + // The current cursor address + .label conio_cursor_color = 8 + // The current cursor x-position + .label conio_cursor_x = 4 + // @begin +__bbegin: + // [1] phi from @begin to @1 [phi:@begin->@1] +__b1_from___bbegin: + jmp __b1 + // @1 +__b1: + // [2] call main + jsr main + // [3] phi from @1 to @end [phi:@1->@end] +__bend_from___b1: + jmp __bend + // @end +__bend: + // main +main: { + .label tod_TENTHS = $13 + .label tod_SEC = $14 + .label tod_MIN = $15 + .label tod_HOURS = $16 + // [4] (byte) tod_init::tod_TENTHS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO) -- vbuz1=_deref_pbuc1 + lda TOD_ZERO + sta.z tod_init.tod_TENTHS + // [5] (byte) tod_init::tod_SEC#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC) -- vbuz1=_deref_pbuc1 + lda TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_SEC + sta.z tod_init.tod_SEC + // [6] (byte) tod_init::tod_MIN#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN) -- vbuz1=_deref_pbuc1 + lda TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_MIN + sta.z tod_init.tod_MIN + // [7] (byte) tod_init::tod_HOURS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS) -- vbuz1=_deref_pbuc1 + lda TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS + sta.z tod_init.tod_HOURS + // [8] call tod_init + jsr tod_init + // [9] phi from main main::@4 to main::@1 [phi:main/main::@4->main::@1] + __b1_from_main: + __b1_from___b4: + jmp __b1 + // main::@1 + __b1: + // [10] call tod_read + jsr tod_read + // [11] (byte) tod_read::return_TENTHS#2 ← (byte) tod_read::return_TENTHS#0 -- vbuz1=vbuz2 + lda.z tod_read.return_TENTHS + sta.z tod_read.return_TENTHS_1 + // [12] (byte) tod_read::return_SEC#2 ← (byte) tod_read::return_SEC#0 -- vbuz1=vbuz2 + lda.z tod_read.return_SEC + sta.z tod_read.return_SEC_1 + // [13] (byte) tod_read::return_MIN#2 ← (byte) tod_read::return_MIN#0 -- vbuz1=vbuz2 + lda.z tod_read.return_MIN + sta.z tod_read.return_MIN_1 + // [14] (byte) tod_read::return_HOURS#2 ← (byte) tod_read::return_HOURS#0 -- vbuz1=vbuz2 + lda.z tod_read.return_HOURS + sta.z tod_read.return_HOURS_1 + jmp __b2 + // main::@2 + __b2: + // [15] (byte) main::tod_TENTHS#0 ← (byte) tod_read::return_TENTHS#2 -- vbuz1=vbuz2 + lda.z tod_read.return_TENTHS_1 + sta.z tod_TENTHS + // [16] (byte) main::tod_SEC#0 ← (byte) tod_read::return_SEC#2 -- vbuz1=vbuz2 + lda.z tod_read.return_SEC_1 + sta.z tod_SEC + // [17] (byte) main::tod_MIN#0 ← (byte) tod_read::return_MIN#2 -- vbuz1=vbuz2 + lda.z tod_read.return_MIN_1 + sta.z tod_MIN + // [18] (byte) main::tod_HOURS#0 ← (byte) tod_read::return_HOURS#2 -- vbuz1=vbuz2 + lda.z tod_read.return_HOURS_1 + sta.z tod_HOURS + // [19] call gotoxy + // [50] phi from main::@2 to gotoxy [phi:main::@2->gotoxy] + gotoxy_from___b2: + // [50] phi (byte) gotoxy::y#4 = (byte) 0 [phi:main::@2->gotoxy#0] -- vbuz1=vbuc1 + lda #0 + sta.z gotoxy.y + jsr gotoxy + jmp __b3 + // main::@3 + __b3: + // [20] (byte) tod_str::tod_TENTHS#0 ← (byte) main::tod_TENTHS#0 -- vbuz1=vbuz2 + lda.z tod_TENTHS + sta.z tod_str.tod_TENTHS + // [21] (byte) tod_str::tod_SEC#0 ← (byte) main::tod_SEC#0 -- vbuz1=vbuz2 + lda.z tod_SEC + sta.z tod_str.tod_SEC + // [22] (byte) tod_str::tod_MIN#0 ← (byte) main::tod_MIN#0 -- vbuz1=vbuz2 + lda.z tod_MIN + sta.z tod_str.tod_MIN + // [23] (byte) tod_str::tod_HOURS#0 ← (byte) main::tod_HOURS#0 -- vbuz1=vbuz2 + lda.z tod_HOURS + sta.z tod_str.tod_HOURS + // [24] call tod_str + jsr tod_str + // [25] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + __b4_from___b3: + jmp __b4 + // main::@4 + __b4: + // [26] call cputs + // [27] phi from main::@4 to cputs [phi:main::@4->cputs] + cputs_from___b4: + jsr cputs + jmp __b1_from___b4 +} + // cputs +// Output a NUL-terminated string at the current cursor position +// cputs(byte* zp(2) s) +cputs: { + .label c = $1b + .label s = 2 + // [28] phi from cputs to cputs::@1 [phi:cputs->cputs::@1] + __b1_from_cputs: + // [28] phi (byte*) conio_cursor_color#19 = (byte*) conio_cursor_color#1 [phi:cputs->cputs::@1#0] -- register_copy + // [28] phi (byte*) conio_cursor_text#19 = (byte*) conio_cursor_text#1 [phi:cputs->cputs::@1#1] -- register_copy + // [28] phi (byte) conio_cursor_y#20 = (byte) conio_cursor_y#1 [phi:cputs->cputs::@1#2] -- register_copy + // [28] phi (byte) conio_cursor_x#20 = (byte) 0 [phi:cputs->cputs::@1#3] -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_x + // [28] phi (to_nomodify byte*) cputs::s#2 = (const byte*) tod_buffer [phi:cputs->cputs::@1#4] -- pbuz1=pbuc1 + lda #tod_buffer + sta.z s+1 + jmp __b1 + // cputs::@1 + __b1: + // [29] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#2) -- vbuz1=_deref_pbuz2 + ldy #0 + lda (s),y + sta.z c + // [30] (to_nomodify byte*) cputs::s#0 ← ++ (to_nomodify byte*) cputs::s#2 -- pbuz1=_inc_pbuz1 + inc.z s + bne !+ + inc.z s+1 + !: + // [31] if((byte) 0!=(byte) cputs::c#1) goto cputs::@2 -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp.z c + bne __b2 + jmp __breturn + // cputs::@return + __breturn: + // [32] return + rts + // cputs::@2 + __b2: + // [33] (byte) cputc::c#0 ← (byte) cputs::c#1 -- vbuz1=vbuz2 + lda.z c + sta.z cputc.c + // [34] call cputc + jsr cputc + // [28] phi from cputs::@2 to cputs::@1 [phi:cputs::@2->cputs::@1] + __b1_from___b2: + // [28] phi (byte*) conio_cursor_color#19 = (byte*) conio_cursor_color#17 [phi:cputs::@2->cputs::@1#0] -- register_copy + // [28] phi (byte*) conio_cursor_text#19 = (byte*) conio_cursor_text#17 [phi:cputs::@2->cputs::@1#1] -- register_copy + // [28] phi (byte) conio_cursor_y#20 = (byte) conio_cursor_y#18 [phi:cputs::@2->cputs::@1#2] -- register_copy + // [28] phi (byte) conio_cursor_x#20 = (byte) conio_cursor_x#18 [phi:cputs::@2->cputs::@1#3] -- register_copy + // [28] phi (to_nomodify byte*) cputs::s#2 = (to_nomodify byte*) cputs::s#0 [phi:cputs::@2->cputs::@1#4] -- register_copy + jmp __b1 +} + // cputc +// Output one character at the current cursor position +// Moves the cursor forward +// cputc(byte zp($1c) c) +cputc: { + .label c = $1c + // [35] if((byte) cputc::c#0==(byte) ' ') goto cputc::@1 -- vbuz1_eq_vbuc1_then_la1 + lda #'\n' + cmp.z c + beq __b1 + jmp __b2 + // cputc::@2 + __b2: + // [36] *((byte*) conio_cursor_text#19) ← (byte) cputc::c#0 -- _deref_pbuz1=vbuz2 + lda.z c + ldy #0 + sta (conio_cursor_text),y + // [37] (byte*) conio_cursor_text#26 ← ++ (byte*) conio_cursor_text#19 -- pbuz1=_inc_pbuz1 + inc.z conio_cursor_text + bne !+ + inc.z conio_cursor_text+1 + !: + // [38] *((byte*) conio_cursor_color#19) ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT -- _deref_pbuz1=vbuc1 + lda #CONIO_TEXTCOLOR_DEFAULT + ldy #0 + sta (conio_cursor_color),y + // [39] (byte*) conio_cursor_color#26 ← ++ (byte*) conio_cursor_color#19 -- pbuz1=_inc_pbuz1 + inc.z conio_cursor_color + bne !+ + inc.z conio_cursor_color+1 + !: + // [40] (byte) conio_cursor_x#4 ← ++ (byte) conio_cursor_x#20 -- vbuz1=_inc_vbuz1 + inc.z conio_cursor_x + // [41] if((byte) conio_cursor_x#4!=(const nomodify byte) CONIO_WIDTH) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1 + lda #CONIO_WIDTH + cmp.z conio_cursor_x + bne __breturn_from___b2 + jmp __b3 + // cputc::@3 + __b3: + // [42] (byte) conio_cursor_y#27 ← ++ (byte) conio_cursor_y#20 -- vbuz1=_inc_vbuz1 + inc.z conio_cursor_y + // [43] if((byte) conio_cursor_y#27!=(const nomodify byte) CONIO_HEIGHT) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1 + lda #CONIO_HEIGHT + cmp.z conio_cursor_y + bne __breturn_from___b3 + // [44] phi from cputc::@3 to cputc::@4 [phi:cputc::@3->cputc::@4] + __b4_from___b3: + jmp __b4 + // cputc::@4 + __b4: + // [45] call gotoxy + // [50] phi from cputc::@4 to gotoxy [phi:cputc::@4->gotoxy] + gotoxy_from___b4: + // [50] phi (byte) gotoxy::y#4 = (byte) 0 [phi:cputc::@4->gotoxy#0] -- vbuz1=vbuc1 + lda #0 + sta.z gotoxy.y + jsr gotoxy + // [46] phi from cputc::@1 cputc::@3 cputc::@4 to cputc::@return [phi:cputc::@1/cputc::@3/cputc::@4->cputc::@return] + __breturn_from___b1: + __breturn_from___b3: + __breturn_from___b4: + // [46] phi (byte*) conio_cursor_color#17 = (byte*) conio_cursor_color#1 [phi:cputc::@1/cputc::@3/cputc::@4->cputc::@return#0] -- register_copy + // [46] phi (byte*) conio_cursor_text#17 = (byte*) conio_cursor_text#1 [phi:cputc::@1/cputc::@3/cputc::@4->cputc::@return#1] -- register_copy + // [46] phi (byte) conio_cursor_y#18 = (byte) conio_cursor_y#1 [phi:cputc::@1/cputc::@3/cputc::@4->cputc::@return#2] -- register_copy + // [46] phi (byte) conio_cursor_x#18 = (byte) 0 [phi:cputc::@1/cputc::@3/cputc::@4->cputc::@return#3] -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_x + jmp __breturn + // [46] phi from cputc::@2 to cputc::@return [phi:cputc::@2->cputc::@return] + __breturn_from___b2: + // [46] phi (byte*) conio_cursor_color#17 = (byte*) conio_cursor_color#26 [phi:cputc::@2->cputc::@return#0] -- register_copy + // [46] phi (byte*) conio_cursor_text#17 = (byte*) conio_cursor_text#26 [phi:cputc::@2->cputc::@return#1] -- register_copy + // [46] phi (byte) conio_cursor_y#18 = (byte) conio_cursor_y#20 [phi:cputc::@2->cputc::@return#2] -- register_copy + // [46] phi (byte) conio_cursor_x#18 = (byte) conio_cursor_x#4 [phi:cputc::@2->cputc::@return#3] -- register_copy + jmp __breturn + // cputc::@return + __breturn: + // [47] return + rts + // cputc::@1 + __b1: + // [48] (byte) gotoxy::y#1 ← (byte) conio_cursor_y#20 + (byte) 1 -- vbuz1=vbuz2_plus_1 + ldy.z conio_cursor_y + iny + sty.z gotoxy.y + // [49] call gotoxy + // [50] phi from cputc::@1 to gotoxy [phi:cputc::@1->gotoxy] + gotoxy_from___b1: + // [50] phi (byte) gotoxy::y#4 = (byte) gotoxy::y#1 [phi:cputc::@1->gotoxy#0] -- register_copy + jsr gotoxy + jmp __breturn_from___b1 +} + // gotoxy +// Set the cursor to the specified position +// gotoxy(byte zp($a) y) +gotoxy: { + .label __8 = $1d + .label offset = $23 + .label y = $a + .label __9 = $1f + .label __10 = $21 + jmp __b1 + // gotoxy::@1 + __b1: + // [51] if((byte) gotoxy::y#4<(const nomodify byte) CONIO_HEIGHT) goto gotoxy::@3 -- vbuz1_lt_vbuc1_then_la1 + lda.z y + cmp #CONIO_HEIGHT + bcc __b3_from___b1 + // [53] phi from gotoxy::@1 to gotoxy::@2 [phi:gotoxy::@1->gotoxy::@2] + __b2_from___b1: + // [53] phi (byte) gotoxy::y#5 = (byte) 0 [phi:gotoxy::@1->gotoxy::@2#0] -- vbuz1=vbuc1 + lda #0 + sta.z y + jmp __b2 + // [52] phi from gotoxy::@1 to gotoxy::@3 [phi:gotoxy::@1->gotoxy::@3] + __b3_from___b1: + jmp __b3 + // gotoxy::@3 + __b3: + // [53] phi from gotoxy::@3 to gotoxy::@2 [phi:gotoxy::@3->gotoxy::@2] + __b2_from___b3: + // [53] phi (byte) gotoxy::y#5 = (byte) gotoxy::y#4 [phi:gotoxy::@3->gotoxy::@2#0] -- register_copy + jmp __b2 + // gotoxy::@2 + __b2: + // [54] (byte) conio_cursor_y#1 ← (byte) gotoxy::y#5 -- vbuz1=vbuz2 + lda.z y + sta.z conio_cursor_y + // [55] (word~) gotoxy::$8 ← (word)(byte) gotoxy::y#5 -- vwuz1=_word_vbuz2 + lda.z y + sta.z __8 + lda #0 + sta.z __8+1 + // [56] (word~) gotoxy::$9 ← (word~) gotoxy::$8 << (byte) 2 -- vwuz1=vwuz2_rol_2 + lda.z __8 + asl + sta.z __9 + lda.z __8+1 + rol + sta.z __9+1 + asl.z __9 + rol.z __9+1 + // [57] (word~) gotoxy::$10 ← (word~) gotoxy::$9 + (word~) gotoxy::$8 -- vwuz1=vwuz2_plus_vwuz3 + lda.z __9 + clc + adc.z __8 + sta.z __10 + lda.z __9+1 + adc.z __8+1 + sta.z __10+1 + // [58] (word) gotoxy::offset#0 ← (word~) gotoxy::$10 << (byte) 3 -- vwuz1=vwuz2_rol_3 + lda.z __10 + asl + sta.z offset + lda.z __10+1 + rol + sta.z offset+1 + asl.z offset + rol.z offset+1 + asl.z offset + rol.z offset+1 + // [59] (byte*) conio_cursor_text#1 ← (const nomodify byte*) CONIO_SCREEN_TEXT + (word) gotoxy::offset#0 -- pbuz1=pbuc1_plus_vwuz2 + lda.z offset + clc + adc #CONIO_SCREEN_TEXT + sta.z conio_cursor_text+1 + // [60] (byte*) conio_cursor_color#1 ← (const nomodify byte*) CONIO_SCREEN_COLORS + (word) gotoxy::offset#0 -- pbuz1=pbuc1_plus_vwuz2 + lda.z offset + clc + adc #CONIO_SCREEN_COLORS + sta.z conio_cursor_color+1 + jmp __breturn + // gotoxy::@return + __breturn: + // [61] return + rts +} + // tod_str +// Convert time of day to a human-readable string "hh:mm:ss:10" +// tod_str(byte zp($17) tod_TENTHS, byte zp($18) tod_SEC, byte zp($19) tod_MIN, byte zp($1a) tod_HOURS) +tod_str: { + .label __0 = $25 + .label __1 = $26 + .label __2 = $27 + .label __3 = $28 + .label __4 = $29 + .label __5 = $2a + .label __6 = $2b + .label __7 = $2c + .label __8 = $2d + .label __9 = $2e + .label __10 = $2f + .label __11 = $30 + .label __12 = $31 + .label __13 = $32 + .label __14 = $33 + .label __15 = $34 + .label tod_TENTHS = $17 + .label tod_SEC = $18 + .label tod_MIN = $19 + .label tod_HOURS = $1a + // [62] (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#0 >> (byte) 4 -- vbuz1=vbuz2_ror_4 + lda.z tod_HOURS + lsr + lsr + lsr + lsr + sta.z __0 + // [63] (byte~) tod_str::$1 ← (byte) '0' + (byte~) tod_str::$0 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __0 + axs #-['0'] + stx.z __1 + // [64] *((const byte*) tod_buffer) ← (byte~) tod_str::$1 -- _deref_pbuc1=vbuz1 + lda.z __1 + sta tod_buffer + // [65] (byte~) tod_str::$2 ← (byte) tod_str::tod_HOURS#0 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 + lda #$f + and.z tod_HOURS + sta.z __2 + // [66] (byte~) tod_str::$3 ← (byte) '0' + (byte~) tod_str::$2 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __2 + axs #-['0'] + stx.z __3 + // [67] *((const byte*) tod_buffer+(byte) 1) ← (byte~) tod_str::$3 -- _deref_pbuc1=vbuz1 + lda.z __3 + sta tod_buffer+1 + // [68] (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#0 >> (byte) 4 -- vbuz1=vbuz2_ror_4 + lda.z tod_MIN + lsr + lsr + lsr + lsr + sta.z __4 + // [69] (byte~) tod_str::$5 ← (byte) '0' + (byte~) tod_str::$4 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __4 + axs #-['0'] + stx.z __5 + // [70] *((const byte*) tod_buffer+(byte) 3) ← (byte~) tod_str::$5 -- _deref_pbuc1=vbuz1 + lda.z __5 + sta tod_buffer+3 + // [71] (byte~) tod_str::$6 ← (byte) tod_str::tod_MIN#0 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 + lda #$f + and.z tod_MIN + sta.z __6 + // [72] (byte~) tod_str::$7 ← (byte) '0' + (byte~) tod_str::$6 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __6 + axs #-['0'] + stx.z __7 + // [73] *((const byte*) tod_buffer+(byte) 4) ← (byte~) tod_str::$7 -- _deref_pbuc1=vbuz1 + lda.z __7 + sta tod_buffer+4 + // [74] (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#0 >> (byte) 4 -- vbuz1=vbuz2_ror_4 + lda.z tod_SEC + lsr + lsr + lsr + lsr + sta.z __8 + // [75] (byte~) tod_str::$9 ← (byte) '0' + (byte~) tod_str::$8 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __8 + axs #-['0'] + stx.z __9 + // [76] *((const byte*) tod_buffer+(byte) 6) ← (byte~) tod_str::$9 -- _deref_pbuc1=vbuz1 + lda.z __9 + sta tod_buffer+6 + // [77] (byte~) tod_str::$10 ← (byte) tod_str::tod_SEC#0 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 + lda #$f + and.z tod_SEC + sta.z __10 + // [78] (byte~) tod_str::$11 ← (byte) '0' + (byte~) tod_str::$10 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __10 + axs #-['0'] + stx.z __11 + // [79] *((const byte*) tod_buffer+(byte) 7) ← (byte~) tod_str::$11 -- _deref_pbuc1=vbuz1 + lda.z __11 + sta tod_buffer+7 + // [80] (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#0 >> (byte) 4 -- vbuz1=vbuz2_ror_4 + lda.z tod_TENTHS + lsr + lsr + lsr + lsr + sta.z __12 + // [81] (byte~) tod_str::$13 ← (byte) '0' + (byte~) tod_str::$12 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __12 + axs #-['0'] + stx.z __13 + // [82] *((const byte*) tod_buffer+(byte) 9) ← (byte~) tod_str::$13 -- _deref_pbuc1=vbuz1 + lda.z __13 + sta tod_buffer+9 + // [83] (byte~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#0 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 + lda #$f + and.z tod_TENTHS + sta.z __14 + // [84] (byte~) tod_str::$15 ← (byte) '0' + (byte~) tod_str::$14 -- vbuz1=vbuc1_plus_vbuz2 + lax.z __14 + axs #-['0'] + stx.z __15 + // [85] *((const byte*) tod_buffer+(byte) $a) ← (byte~) tod_str::$15 -- _deref_pbuc1=vbuz1 + lda.z __15 + sta tod_buffer+$a + jmp __breturn + // tod_str::@return + __breturn: + // [86] return + rts +} + // tod_read +// Read time of day +tod_read: { + .label return_TENTHS = $38 + .label return_SEC = $37 + .label return_MIN = $36 + .label return_HOURS = $35 + .label return_TENTHS_1 = $f + .label return_SEC_1 = $10 + .label return_MIN_1 = $11 + .label return_HOURS_1 = $12 + // [87] (byte) tod_read::return_HOURS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) -- vbuz1=_deref_pbuc1 + // Reading sequence is important. TOD latches on reading hours until 10ths is read. + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS + sta.z return_HOURS + // [88] (byte) tod_read::return_MIN#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) -- vbuz1=_deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_MIN + sta.z return_MIN + // [89] (byte) tod_read::return_SEC#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) -- vbuz1=_deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_SEC + sta.z return_SEC + // [90] (byte) tod_read::return_TENTHS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) -- vbuz1=_deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_10THS + sta.z return_TENTHS + jmp __breturn + // tod_read::@return + __breturn: + // [91] return + rts +} + // tod_init +// Initialize time-of-day clock +// This uses the MOS6526 CIA#1 +// tod_init(byte zp($b) tod_TENTHS, byte zp($c) tod_SEC, byte zp($d) tod_MIN, byte zp($e) tod_HOURS) +tod_init: { + .label tod_TENTHS = $b + .label tod_SEC = $c + .label tod_MIN = $d + .label tod_HOURS = $e + // [92] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc2_bor_vbuc3 + // Set 50hz (this assumes PAL!) (bit7=1) + lda #$80 + ora CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // [93] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc2_band_vbuc3 + // Writing TOD clock (bit7=0) + lda #$7f + and CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // [94] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) ← (byte) tod_init::tod_HOURS#0 -- _deref_pbuc1=vbuz1 + // Reset TOD clock + // Writing sequence is important. TOD stops when hours is written and starts when 10ths is written. + lda.z tod_HOURS + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS + // [95] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) ← (byte) tod_init::tod_MIN#0 -- _deref_pbuc1=vbuz1 + lda.z tod_MIN + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_MIN + // [96] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) ← (byte) tod_init::tod_SEC#0 -- _deref_pbuc1=vbuz1 + lda.z tod_SEC + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_SEC + // [97] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) ← (byte) tod_init::tod_TENTHS#0 -- _deref_pbuc1=vbuz1 + lda.z tod_TENTHS + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_10THS + jmp __breturn + // tod_init::@return + __breturn: + // [98] return + rts +} + // File Data + // The buffer used by tod_str() + tod_buffer: .text "00:00:00:00" + .byte 0 + // Time of Day 00:00:00:00 + TOD_ZERO: .byte 0, 0, 0, 0 + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [29] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#2) [ cputs::s#2 conio_cursor_x#20 conio_cursor_y#20 conio_cursor_text#19 conio_cursor_color#19 cputs::c#1 ] ( main:2::cputs:26 [ cputs::s#2 conio_cursor_x#20 conio_cursor_y#20 conio_cursor_text#19 conio_cursor_color#19 cputs::c#1 ] { } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp[1]:4 [ conio_cursor_x#20 conio_cursor_x#18 conio_cursor_x#4 ] +Removing always clobbered register reg byte y as potential for zp[1]:4 [ conio_cursor_x#20 conio_cursor_x#18 conio_cursor_x#4 ] +Removing always clobbered register reg byte a as potential for zp[1]:5 [ conio_cursor_y#20 conio_cursor_y#1 conio_cursor_y#18 conio_cursor_y#27 ] +Removing always clobbered register reg byte y as potential for zp[1]:5 [ conio_cursor_y#20 conio_cursor_y#1 conio_cursor_y#18 conio_cursor_y#27 ] +Statement [36] *((byte*) conio_cursor_text#19) ← (byte) cputc::c#0 [ conio_cursor_x#20 conio_cursor_y#20 conio_cursor_text#19 conio_cursor_color#19 ] ( main:2::cputs:26::cputc:34 [ cputs::s#0 conio_cursor_x#20 conio_cursor_y#20 conio_cursor_text#19 conio_cursor_color#19 ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte y +Statement [38] *((byte*) conio_cursor_color#19) ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT [ conio_cursor_x#20 conio_cursor_y#20 conio_cursor_color#19 conio_cursor_text#26 ] ( main:2::cputs:26::cputc:34 [ cputs::s#0 conio_cursor_x#20 conio_cursor_y#20 conio_cursor_color#19 conio_cursor_text#26 ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a reg byte y +Statement [55] (word~) gotoxy::$8 ← (word)(byte) gotoxy::y#5 [ conio_cursor_y#1 gotoxy::$8 ] ( main:2::gotoxy:19 [ main::tod_TENTHS#0 main::tod_SEC#0 main::tod_MIN#0 main::tod_HOURS#0 conio_cursor_y#1 gotoxy::$8 ] { } main:2::cputs:26::cputc:34::gotoxy:45 [ cputs::s#0 conio_cursor_y#1 gotoxy::$8 ] { { cputc::c#0 = cputs::c#1 } } main:2::cputs:26::cputc:34::gotoxy:49 [ cputs::s#0 conio_cursor_y#1 gotoxy::$8 ] { { cputc::c#0 = cputs::c#1 } { gotoxy::y#1 = gotoxy::y#4 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:19 [ main::tod_TENTHS#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:20 [ main::tod_SEC#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:21 [ main::tod_MIN#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:22 [ main::tod_HOURS#0 ] +Statement [56] (word~) gotoxy::$9 ← (word~) gotoxy::$8 << (byte) 2 [ conio_cursor_y#1 gotoxy::$8 gotoxy::$9 ] ( main:2::gotoxy:19 [ main::tod_TENTHS#0 main::tod_SEC#0 main::tod_MIN#0 main::tod_HOURS#0 conio_cursor_y#1 gotoxy::$8 gotoxy::$9 ] { } main:2::cputs:26::cputc:34::gotoxy:45 [ cputs::s#0 conio_cursor_y#1 gotoxy::$8 gotoxy::$9 ] { { cputc::c#0 = cputs::c#1 } } main:2::cputs:26::cputc:34::gotoxy:49 [ cputs::s#0 conio_cursor_y#1 gotoxy::$8 gotoxy::$9 ] { { cputc::c#0 = cputs::c#1 } { gotoxy::y#1 = gotoxy::y#4 } } ) always clobbers reg byte a +Statement [57] (word~) gotoxy::$10 ← (word~) gotoxy::$9 + (word~) gotoxy::$8 [ conio_cursor_y#1 gotoxy::$10 ] ( main:2::gotoxy:19 [ main::tod_TENTHS#0 main::tod_SEC#0 main::tod_MIN#0 main::tod_HOURS#0 conio_cursor_y#1 gotoxy::$10 ] { } main:2::cputs:26::cputc:34::gotoxy:45 [ cputs::s#0 conio_cursor_y#1 gotoxy::$10 ] { { cputc::c#0 = cputs::c#1 } } main:2::cputs:26::cputc:34::gotoxy:49 [ cputs::s#0 conio_cursor_y#1 gotoxy::$10 ] { { cputc::c#0 = cputs::c#1 } { gotoxy::y#1 = gotoxy::y#4 } } ) always clobbers reg byte a +Statement [58] (word) gotoxy::offset#0 ← (word~) gotoxy::$10 << (byte) 3 [ conio_cursor_y#1 gotoxy::offset#0 ] ( main:2::gotoxy:19 [ main::tod_TENTHS#0 main::tod_SEC#0 main::tod_MIN#0 main::tod_HOURS#0 conio_cursor_y#1 gotoxy::offset#0 ] { } main:2::cputs:26::cputc:34::gotoxy:45 [ cputs::s#0 conio_cursor_y#1 gotoxy::offset#0 ] { { cputc::c#0 = cputs::c#1 } } main:2::cputs:26::cputc:34::gotoxy:49 [ cputs::s#0 conio_cursor_y#1 gotoxy::offset#0 ] { { cputc::c#0 = cputs::c#1 } { gotoxy::y#1 = gotoxy::y#4 } } ) always clobbers reg byte a +Statement [59] (byte*) conio_cursor_text#1 ← (const nomodify byte*) CONIO_SCREEN_TEXT + (word) gotoxy::offset#0 [ conio_cursor_y#1 conio_cursor_text#1 gotoxy::offset#0 ] ( main:2::gotoxy:19 [ main::tod_TENTHS#0 main::tod_SEC#0 main::tod_MIN#0 main::tod_HOURS#0 conio_cursor_y#1 conio_cursor_text#1 gotoxy::offset#0 ] { } main:2::cputs:26::cputc:34::gotoxy:45 [ cputs::s#0 conio_cursor_y#1 conio_cursor_text#1 gotoxy::offset#0 ] { { cputc::c#0 = cputs::c#1 } } main:2::cputs:26::cputc:34::gotoxy:49 [ cputs::s#0 conio_cursor_y#1 conio_cursor_text#1 gotoxy::offset#0 ] { { cputc::c#0 = cputs::c#1 } { gotoxy::y#1 = gotoxy::y#4 } } ) always clobbers reg byte a +Statement [60] (byte*) conio_cursor_color#1 ← (const nomodify byte*) CONIO_SCREEN_COLORS + (word) gotoxy::offset#0 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 ] ( main:2::gotoxy:19 [ main::tod_TENTHS#0 main::tod_SEC#0 main::tod_MIN#0 main::tod_HOURS#0 conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 ] { } main:2::cputs:26::cputc:34::gotoxy:45 [ cputs::s#0 conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 ] { { cputc::c#0 = cputs::c#1 } } main:2::cputs:26::cputc:34::gotoxy:49 [ cputs::s#0 conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 ] { { cputc::c#0 = cputs::c#1 } { gotoxy::y#1 = gotoxy::y#4 } } ) always clobbers reg byte a +Statement [62] (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#0 >> (byte) 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::tod_HOURS#0 tod_str::$0 ] ( main:2::tod_str:24 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::tod_HOURS#0 tod_str::$0 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:23 [ tod_str::tod_TENTHS#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:24 [ tod_str::tod_SEC#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:25 [ tod_str::tod_MIN#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:26 [ tod_str::tod_HOURS#0 ] +Statement [65] (byte~) tod_str::$2 ← (byte) tod_str::tod_HOURS#0 & (byte) $f [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$2 ] ( main:2::tod_str:24 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$2 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [68] (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#0 >> (byte) 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$4 ] ( main:2::tod_str:24 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$4 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [71] (byte~) tod_str::$6 ← (byte) tod_str::tod_MIN#0 & (byte) $f [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$6 ] ( main:2::tod_str:24 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$6 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [74] (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#0 >> (byte) 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$8 ] ( main:2::tod_str:24 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$8 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [77] (byte~) tod_str::$10 ← (byte) tod_str::tod_SEC#0 & (byte) $f [ tod_str::tod_TENTHS#0 tod_str::$10 ] ( main:2::tod_str:24 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 tod_str::tod_TENTHS#0 tod_str::$10 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [80] (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#0 >> (byte) 4 [ tod_str::tod_TENTHS#0 tod_str::$12 ] ( main:2::tod_str:24 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 tod_str::tod_TENTHS#0 tod_str::$12 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [83] (byte~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#0 & (byte) $f [ tod_str::$14 ] ( main:2::tod_str:24 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 tod_str::$14 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [92] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (byte) $80 [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] ( main:2::tod_init:8 [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:11 [ tod_init::tod_TENTHS#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:12 [ tod_init::tod_SEC#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:13 [ tod_init::tod_MIN#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:14 [ tod_init::tod_HOURS#0 ] +Statement [93] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (byte) $7f [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] ( main:2::tod_init:8 [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] { } ) always clobbers reg byte a +Statement [29] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#2) [ cputs::s#2 conio_cursor_x#20 conio_cursor_y#20 conio_cursor_text#19 conio_cursor_color#19 cputs::c#1 ] ( main:2::cputs:26 [ cputs::s#2 conio_cursor_x#20 conio_cursor_y#20 conio_cursor_text#19 conio_cursor_color#19 cputs::c#1 ] { } ) always clobbers reg byte a reg byte y +Statement [36] *((byte*) conio_cursor_text#19) ← (byte) cputc::c#0 [ conio_cursor_x#20 conio_cursor_y#20 conio_cursor_text#19 conio_cursor_color#19 ] ( main:2::cputs:26::cputc:34 [ cputs::s#0 conio_cursor_x#20 conio_cursor_y#20 conio_cursor_text#19 conio_cursor_color#19 ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte y +Statement [38] *((byte*) conio_cursor_color#19) ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT [ conio_cursor_x#20 conio_cursor_y#20 conio_cursor_color#19 conio_cursor_text#26 ] ( main:2::cputs:26::cputc:34 [ cputs::s#0 conio_cursor_x#20 conio_cursor_y#20 conio_cursor_color#19 conio_cursor_text#26 ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a reg byte y +Statement [55] (word~) gotoxy::$8 ← (word)(byte) gotoxy::y#5 [ conio_cursor_y#1 gotoxy::$8 ] ( main:2::gotoxy:19 [ main::tod_TENTHS#0 main::tod_SEC#0 main::tod_MIN#0 main::tod_HOURS#0 conio_cursor_y#1 gotoxy::$8 ] { } main:2::cputs:26::cputc:34::gotoxy:45 [ cputs::s#0 conio_cursor_y#1 gotoxy::$8 ] { { cputc::c#0 = cputs::c#1 } } main:2::cputs:26::cputc:34::gotoxy:49 [ cputs::s#0 conio_cursor_y#1 gotoxy::$8 ] { { cputc::c#0 = cputs::c#1 } { gotoxy::y#1 = gotoxy::y#4 } } ) always clobbers reg byte a +Statement [56] (word~) gotoxy::$9 ← (word~) gotoxy::$8 << (byte) 2 [ conio_cursor_y#1 gotoxy::$8 gotoxy::$9 ] ( main:2::gotoxy:19 [ main::tod_TENTHS#0 main::tod_SEC#0 main::tod_MIN#0 main::tod_HOURS#0 conio_cursor_y#1 gotoxy::$8 gotoxy::$9 ] { } main:2::cputs:26::cputc:34::gotoxy:45 [ cputs::s#0 conio_cursor_y#1 gotoxy::$8 gotoxy::$9 ] { { cputc::c#0 = cputs::c#1 } } main:2::cputs:26::cputc:34::gotoxy:49 [ cputs::s#0 conio_cursor_y#1 gotoxy::$8 gotoxy::$9 ] { { cputc::c#0 = cputs::c#1 } { gotoxy::y#1 = gotoxy::y#4 } } ) always clobbers reg byte a +Statement [57] (word~) gotoxy::$10 ← (word~) gotoxy::$9 + (word~) gotoxy::$8 [ conio_cursor_y#1 gotoxy::$10 ] ( main:2::gotoxy:19 [ main::tod_TENTHS#0 main::tod_SEC#0 main::tod_MIN#0 main::tod_HOURS#0 conio_cursor_y#1 gotoxy::$10 ] { } main:2::cputs:26::cputc:34::gotoxy:45 [ cputs::s#0 conio_cursor_y#1 gotoxy::$10 ] { { cputc::c#0 = cputs::c#1 } } main:2::cputs:26::cputc:34::gotoxy:49 [ cputs::s#0 conio_cursor_y#1 gotoxy::$10 ] { { cputc::c#0 = cputs::c#1 } { gotoxy::y#1 = gotoxy::y#4 } } ) always clobbers reg byte a +Statement [58] (word) gotoxy::offset#0 ← (word~) gotoxy::$10 << (byte) 3 [ conio_cursor_y#1 gotoxy::offset#0 ] ( main:2::gotoxy:19 [ main::tod_TENTHS#0 main::tod_SEC#0 main::tod_MIN#0 main::tod_HOURS#0 conio_cursor_y#1 gotoxy::offset#0 ] { } main:2::cputs:26::cputc:34::gotoxy:45 [ cputs::s#0 conio_cursor_y#1 gotoxy::offset#0 ] { { cputc::c#0 = cputs::c#1 } } main:2::cputs:26::cputc:34::gotoxy:49 [ cputs::s#0 conio_cursor_y#1 gotoxy::offset#0 ] { { cputc::c#0 = cputs::c#1 } { gotoxy::y#1 = gotoxy::y#4 } } ) always clobbers reg byte a +Statement [59] (byte*) conio_cursor_text#1 ← (const nomodify byte*) CONIO_SCREEN_TEXT + (word) gotoxy::offset#0 [ conio_cursor_y#1 conio_cursor_text#1 gotoxy::offset#0 ] ( main:2::gotoxy:19 [ main::tod_TENTHS#0 main::tod_SEC#0 main::tod_MIN#0 main::tod_HOURS#0 conio_cursor_y#1 conio_cursor_text#1 gotoxy::offset#0 ] { } main:2::cputs:26::cputc:34::gotoxy:45 [ cputs::s#0 conio_cursor_y#1 conio_cursor_text#1 gotoxy::offset#0 ] { { cputc::c#0 = cputs::c#1 } } main:2::cputs:26::cputc:34::gotoxy:49 [ cputs::s#0 conio_cursor_y#1 conio_cursor_text#1 gotoxy::offset#0 ] { { cputc::c#0 = cputs::c#1 } { gotoxy::y#1 = gotoxy::y#4 } } ) always clobbers reg byte a +Statement [60] (byte*) conio_cursor_color#1 ← (const nomodify byte*) CONIO_SCREEN_COLORS + (word) gotoxy::offset#0 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 ] ( main:2::gotoxy:19 [ main::tod_TENTHS#0 main::tod_SEC#0 main::tod_MIN#0 main::tod_HOURS#0 conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 ] { } main:2::cputs:26::cputc:34::gotoxy:45 [ cputs::s#0 conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 ] { { cputc::c#0 = cputs::c#1 } } main:2::cputs:26::cputc:34::gotoxy:49 [ cputs::s#0 conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 ] { { cputc::c#0 = cputs::c#1 } { gotoxy::y#1 = gotoxy::y#4 } } ) always clobbers reg byte a +Statement [62] (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#0 >> (byte) 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::tod_HOURS#0 tod_str::$0 ] ( main:2::tod_str:24 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::tod_HOURS#0 tod_str::$0 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [65] (byte~) tod_str::$2 ← (byte) tod_str::tod_HOURS#0 & (byte) $f [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$2 ] ( main:2::tod_str:24 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$2 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [68] (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#0 >> (byte) 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$4 ] ( main:2::tod_str:24 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$4 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [71] (byte~) tod_str::$6 ← (byte) tod_str::tod_MIN#0 & (byte) $f [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$6 ] ( main:2::tod_str:24 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$6 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [74] (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#0 >> (byte) 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$8 ] ( main:2::tod_str:24 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$8 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [77] (byte~) tod_str::$10 ← (byte) tod_str::tod_SEC#0 & (byte) $f [ tod_str::tod_TENTHS#0 tod_str::$10 ] ( main:2::tod_str:24 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 tod_str::tod_TENTHS#0 tod_str::$10 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [80] (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#0 >> (byte) 4 [ tod_str::tod_TENTHS#0 tod_str::$12 ] ( main:2::tod_str:24 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 tod_str::tod_TENTHS#0 tod_str::$12 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [83] (byte~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#0 & (byte) $f [ tod_str::$14 ] ( main:2::tod_str:24 [ conio_cursor_y#1 conio_cursor_text#1 conio_cursor_color#1 tod_str::$14 ] { { tod_str::tod_TENTHS#0 = main::tod_TENTHS#0 } { tod_str::tod_SEC#0 = main::tod_SEC#0 } { tod_str::tod_MIN#0 = main::tod_MIN#0 } { tod_str::tod_HOURS#0 = main::tod_HOURS#0 } } ) always clobbers reg byte a +Statement [92] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (byte) $80 [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] ( main:2::tod_init:8 [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] { } ) always clobbers reg byte a +Statement [93] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (byte) $7f [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] ( main:2::tod_init:8 [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] { } ) always clobbers reg byte a +Potential registers zp[2]:2 [ cputs::s#2 cputs::s#0 ] : zp[2]:2 , +Potential registers zp[1]:4 [ conio_cursor_x#20 conio_cursor_x#18 conio_cursor_x#4 ] : zp[1]:4 , reg byte x , +Potential registers zp[1]:5 [ conio_cursor_y#20 conio_cursor_y#1 conio_cursor_y#18 conio_cursor_y#27 ] : zp[1]:5 , reg byte x , +Potential registers zp[2]:6 [ conio_cursor_text#19 conio_cursor_text#1 conio_cursor_text#17 conio_cursor_text#26 ] : zp[2]:6 , +Potential registers zp[2]:8 [ conio_cursor_color#19 conio_cursor_color#1 conio_cursor_color#17 conio_cursor_color#26 ] : zp[2]:8 , +Potential registers zp[1]:10 [ gotoxy::y#5 gotoxy::y#4 gotoxy::y#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ tod_init::tod_TENTHS#0 ] : zp[1]:11 , reg byte x , reg byte y , +Potential registers zp[1]:12 [ tod_init::tod_SEC#0 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:13 [ tod_init::tod_MIN#0 ] : zp[1]:13 , reg byte x , reg byte y , +Potential registers zp[1]:14 [ tod_init::tod_HOURS#0 ] : zp[1]:14 , reg byte x , reg byte y , +Potential registers zp[1]:15 [ tod_read::return_TENTHS#2 ] : zp[1]:15 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:16 [ tod_read::return_SEC#2 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:17 [ tod_read::return_MIN#2 ] : zp[1]:17 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:18 [ tod_read::return_HOURS#2 ] : zp[1]:18 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:19 [ main::tod_TENTHS#0 ] : zp[1]:19 , reg byte x , reg byte y , +Potential registers zp[1]:20 [ main::tod_SEC#0 ] : zp[1]:20 , reg byte x , reg byte y , +Potential registers zp[1]:21 [ main::tod_MIN#0 ] : zp[1]:21 , reg byte x , reg byte y , +Potential registers zp[1]:22 [ main::tod_HOURS#0 ] : zp[1]:22 , reg byte x , reg byte y , +Potential registers zp[1]:23 [ tod_str::tod_TENTHS#0 ] : zp[1]:23 , reg byte x , reg byte y , +Potential registers zp[1]:24 [ tod_str::tod_SEC#0 ] : zp[1]:24 , reg byte x , reg byte y , +Potential registers zp[1]:25 [ tod_str::tod_MIN#0 ] : zp[1]:25 , reg byte x , reg byte y , +Potential registers zp[1]:26 [ tod_str::tod_HOURS#0 ] : zp[1]:26 , reg byte x , reg byte y , +Potential registers zp[1]:27 [ cputs::c#1 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:28 [ cputc::c#0 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:29 [ gotoxy::$8 ] : zp[2]:29 , +Potential registers zp[2]:31 [ gotoxy::$9 ] : zp[2]:31 , +Potential registers zp[2]:33 [ gotoxy::$10 ] : zp[2]:33 , +Potential registers zp[2]:35 [ gotoxy::offset#0 ] : zp[2]:35 , +Potential registers zp[1]:37 [ tod_str::$0 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:38 [ tod_str::$1 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:39 [ tod_str::$2 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:40 [ tod_str::$3 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:41 [ tod_str::$4 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:42 [ tod_str::$5 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:43 [ tod_str::$6 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:44 [ tod_str::$7 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:45 [ tod_str::$8 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:46 [ tod_str::$9 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:47 [ tod_str::$10 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:48 [ tod_str::$11 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:49 [ tod_str::$12 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:50 [ tod_str::$13 ] : zp[1]:50 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:51 [ tod_str::$14 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:52 [ tod_str::$15 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:53 [ tod_read::return_HOURS#0 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:54 [ tod_read::return_MIN#0 ] : zp[1]:54 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:55 [ tod_read::return_SEC#0 ] : zp[1]:55 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:56 [ tod_read::return_TENTHS#0 ] : zp[1]:56 , reg byte a , reg byte x , reg byte y , +Potential registers mem[4] [ TOD_ZERO ] : mem[4] , + +REGISTER UPLIFT SCOPES +Uplift Scope [gotoxy] 20,000,002: zp[2]:31 [ gotoxy::$9 ] 20,000,002: zp[2]:33 [ gotoxy::$10 ] 19,000,004: zp[1]:10 [ gotoxy::y#5 gotoxy::y#4 gotoxy::y#1 ] 15,000,001.5: zp[2]:29 [ gotoxy::$8 ] 15,000,001.5: zp[2]:35 [ gotoxy::offset#0 ] +Uplift Scope [] 3,791,809.36: zp[1]:5 [ conio_cursor_y#20 conio_cursor_y#1 conio_cursor_y#18 conio_cursor_y#27 ] 3,200,197.49: zp[2]:8 [ conio_cursor_color#19 conio_cursor_color#1 conio_cursor_color#17 conio_cursor_color#26 ] 3,018,537.77: zp[2]:6 [ conio_cursor_text#19 conio_cursor_text#1 conio_cursor_text#17 conio_cursor_text#26 ] 1,976,669.03: zp[1]:4 [ conio_cursor_x#20 conio_cursor_x#18 conio_cursor_x#4 ] 0: mem[4] [ TOD_ZERO ] +Uplift Scope [cputc] 1,050,001.5: zp[1]:28 [ cputc::c#0 ] +Uplift Scope [cputs] 200,002: zp[2]:2 [ cputs::s#2 cputs::s#0 ] 100,001: zp[1]:27 [ cputs::c#1 ] +Uplift Scope [tod_str] 2,002: zp[1]:37 [ tod_str::$0 ] 2,002: zp[1]:38 [ tod_str::$1 ] 2,002: zp[1]:39 [ tod_str::$2 ] 2,002: zp[1]:40 [ tod_str::$3 ] 2,002: zp[1]:41 [ tod_str::$4 ] 2,002: zp[1]:42 [ tod_str::$5 ] 2,002: zp[1]:43 [ tod_str::$6 ] 2,002: zp[1]:44 [ tod_str::$7 ] 2,002: zp[1]:45 [ tod_str::$8 ] 2,002: zp[1]:46 [ tod_str::$9 ] 2,002: zp[1]:47 [ tod_str::$10 ] 2,002: zp[1]:48 [ tod_str::$11 ] 2,002: zp[1]:49 [ tod_str::$12 ] 2,002: zp[1]:50 [ tod_str::$13 ] 2,002: zp[1]:51 [ tod_str::$14 ] 2,002: zp[1]:52 [ tod_str::$15 ] 525.75: zp[1]:26 [ tod_str::tod_HOURS#0 ] 191.18: zp[1]:25 [ tod_str::tod_MIN#0 ] 116.83: zp[1]:24 [ tod_str::tod_SEC#0 ] 84.12: zp[1]:23 [ tod_str::tod_TENTHS#0 ] +Uplift Scope [tod_read] 367.33: zp[1]:56 [ tod_read::return_TENTHS#0 ] 220.4: zp[1]:55 [ tod_read::return_SEC#0 ] 157.43: zp[1]:54 [ tod_read::return_MIN#0 ] 122.44: zp[1]:53 [ tod_read::return_HOURS#0 ] 50.5: zp[1]:15 [ tod_read::return_TENTHS#2 ] 50.5: zp[1]:16 [ tod_read::return_SEC#2 ] 50.5: zp[1]:17 [ tod_read::return_MIN#2 ] 50.5: zp[1]:18 [ tod_read::return_HOURS#2 ] +Uplift Scope [main] 40.4: zp[1]:19 [ main::tod_TENTHS#0 ] 40.4: zp[1]:20 [ main::tod_SEC#0 ] 40.4: zp[1]:21 [ main::tod_MIN#0 ] 40.4: zp[1]:22 [ main::tod_HOURS#0 ] +Uplift Scope [tod_init] 37.33: zp[1]:14 [ tod_init::tod_HOURS#0 ] 22.4: zp[1]:13 [ tod_init::tod_MIN#0 ] 16: zp[1]:12 [ tod_init::tod_SEC#0 ] 12.44: zp[1]:11 [ tod_init::tod_TENTHS#0 ] +Uplift Scope [TIME_OF_DAY] +Uplift Scope [MOS6526_CIA] + +Uplifting [gotoxy] best 8272 combination zp[2]:31 [ gotoxy::$9 ] zp[2]:33 [ gotoxy::$10 ] reg byte a [ gotoxy::y#5 gotoxy::y#4 gotoxy::y#1 ] zp[2]:29 [ gotoxy::$8 ] zp[2]:35 [ gotoxy::offset#0 ] +Uplifting [] best 7963 combination zp[1]:5 [ conio_cursor_y#20 conio_cursor_y#1 conio_cursor_y#18 conio_cursor_y#27 ] zp[2]:8 [ conio_cursor_color#19 conio_cursor_color#1 conio_cursor_color#17 conio_cursor_color#26 ] zp[2]:6 [ conio_cursor_text#19 conio_cursor_text#1 conio_cursor_text#17 conio_cursor_text#26 ] reg byte x [ conio_cursor_x#20 conio_cursor_x#18 conio_cursor_x#4 ] mem[4] [ TOD_ZERO ] +Uplifting [cputc] best 7657 combination reg byte a [ cputc::c#0 ] +Uplifting [cputs] best 6757 combination zp[2]:2 [ cputs::s#2 cputs::s#0 ] reg byte a [ cputs::c#1 ] +Uplifting [tod_read] best 6658 combination reg byte y [ tod_read::return_TENTHS#0 ] reg byte x [ tod_read::return_SEC#0 ] reg byte a [ tod_read::return_MIN#0 ] zp[1]:53 [ tod_read::return_HOURS#0 ] zp[1]:15 [ tod_read::return_TENTHS#2 ] zp[1]:16 [ tod_read::return_SEC#2 ] zp[1]:17 [ tod_read::return_MIN#2 ] zp[1]:18 [ tod_read::return_HOURS#2 ] +Limited combination testing to 100 combinations of 65536 possible. +Uplifting [main] best 6538 combination reg byte y [ main::tod_TENTHS#0 ] reg byte x [ main::tod_SEC#0 ] zp[1]:21 [ main::tod_MIN#0 ] zp[1]:22 [ main::tod_HOURS#0 ] +Uplifting [tod_init] best 6526 combination reg byte y [ tod_init::tod_HOURS#0 ] reg byte x [ tod_init::tod_MIN#0 ] zp[1]:12 [ tod_init::tod_SEC#0 ] zp[1]:11 [ tod_init::tod_TENTHS#0 ] +Uplifting [TIME_OF_DAY] best 6526 combination +Uplifting [MOS6526_CIA] best 6526 combination +Attempting to uplift remaining variables inzp[1]:5 [ conio_cursor_y#20 conio_cursor_y#1 conio_cursor_y#18 conio_cursor_y#27 ] +Uplifting [] best 6526 combination zp[1]:5 [ conio_cursor_y#20 conio_cursor_y#1 conio_cursor_y#18 conio_cursor_y#27 ] +Attempting to uplift remaining variables inzp[1]:37 [ tod_str::$0 ] +Uplifting [tod_str] best 6522 combination reg byte a [ tod_str::$0 ] +Attempting to uplift remaining variables inzp[1]:38 [ tod_str::$1 ] +Uplifting [tod_str] best 6516 combination reg byte a [ tod_str::$1 ] +Attempting to uplift remaining variables inzp[1]:39 [ tod_str::$2 ] +Uplifting [tod_str] best 6512 combination reg byte a [ tod_str::$2 ] +Attempting to uplift remaining variables inzp[1]:40 [ tod_str::$3 ] +Uplifting [tod_str] best 6506 combination reg byte a [ tod_str::$3 ] +Attempting to uplift remaining variables inzp[1]:41 [ tod_str::$4 ] +Uplifting [tod_str] best 6502 combination reg byte a [ tod_str::$4 ] +Attempting to uplift remaining variables inzp[1]:42 [ tod_str::$5 ] +Uplifting [tod_str] best 6496 combination reg byte a [ tod_str::$5 ] +Attempting to uplift remaining variables inzp[1]:43 [ tod_str::$6 ] +Uplifting [tod_str] best 6492 combination reg byte a [ tod_str::$6 ] +Attempting to uplift remaining variables inzp[1]:44 [ tod_str::$7 ] +Uplifting [tod_str] best 6486 combination reg byte a [ tod_str::$7 ] +Attempting to uplift remaining variables inzp[1]:45 [ tod_str::$8 ] +Uplifting [tod_str] best 6482 combination reg byte a [ tod_str::$8 ] +Attempting to uplift remaining variables inzp[1]:46 [ tod_str::$9 ] +Uplifting [tod_str] best 6476 combination reg byte a [ tod_str::$9 ] +Attempting to uplift remaining variables inzp[1]:47 [ tod_str::$10 ] +Uplifting [tod_str] best 6472 combination reg byte a [ tod_str::$10 ] +Attempting to uplift remaining variables inzp[1]:48 [ tod_str::$11 ] +Uplifting [tod_str] best 6466 combination reg byte a [ tod_str::$11 ] +Attempting to uplift remaining variables inzp[1]:49 [ tod_str::$12 ] +Uplifting [tod_str] best 6462 combination reg byte a [ tod_str::$12 ] +Attempting to uplift remaining variables inzp[1]:50 [ tod_str::$13 ] +Uplifting [tod_str] best 6456 combination reg byte a [ tod_str::$13 ] +Attempting to uplift remaining variables inzp[1]:51 [ tod_str::$14 ] +Uplifting [tod_str] best 6452 combination reg byte a [ tod_str::$14 ] +Attempting to uplift remaining variables inzp[1]:52 [ tod_str::$15 ] +Uplifting [tod_str] best 6446 combination reg byte a [ tod_str::$15 ] +Attempting to uplift remaining variables inzp[1]:26 [ tod_str::tod_HOURS#0 ] +Uplifting [tod_str] best 6414 combination reg byte x [ tod_str::tod_HOURS#0 ] +Attempting to uplift remaining variables inzp[1]:25 [ tod_str::tod_MIN#0 ] +Uplifting [tod_str] best 6382 combination reg byte y [ tod_str::tod_MIN#0 ] +Attempting to uplift remaining variables inzp[1]:53 [ tod_read::return_HOURS#0 ] +Uplifting [tod_read] best 6382 combination zp[1]:53 [ tod_read::return_HOURS#0 ] +Attempting to uplift remaining variables inzp[1]:24 [ tod_str::tod_SEC#0 ] +Uplifting [tod_str] best 6382 combination zp[1]:24 [ tod_str::tod_SEC#0 ] +Attempting to uplift remaining variables inzp[1]:23 [ tod_str::tod_TENTHS#0 ] +Uplifting [tod_str] best 6382 combination zp[1]:23 [ tod_str::tod_TENTHS#0 ] +Attempting to uplift remaining variables inzp[1]:15 [ tod_read::return_TENTHS#2 ] +Uplifting [tod_read] best 6322 combination reg byte y [ tod_read::return_TENTHS#2 ] +Attempting to uplift remaining variables inzp[1]:16 [ tod_read::return_SEC#2 ] +Uplifting [tod_read] best 6262 combination reg byte x [ tod_read::return_SEC#2 ] +Attempting to uplift remaining variables inzp[1]:17 [ tod_read::return_MIN#2 ] +Uplifting [tod_read] best 6262 combination zp[1]:17 [ tod_read::return_MIN#2 ] +Attempting to uplift remaining variables inzp[1]:18 [ tod_read::return_HOURS#2 ] +Uplifting [tod_read] best 6262 combination zp[1]:18 [ tod_read::return_HOURS#2 ] +Attempting to uplift remaining variables inzp[1]:21 [ main::tod_MIN#0 ] +Uplifting [main] best 6262 combination zp[1]:21 [ main::tod_MIN#0 ] +Attempting to uplift remaining variables inzp[1]:22 [ main::tod_HOURS#0 ] +Uplifting [main] best 6262 combination zp[1]:22 [ main::tod_HOURS#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ tod_init::tod_SEC#0 ] +Uplifting [tod_init] best 6262 combination zp[1]:12 [ tod_init::tod_SEC#0 ] +Attempting to uplift remaining variables inzp[1]:11 [ tod_init::tod_TENTHS#0 ] +Uplifting [tod_init] best 6262 combination zp[1]:11 [ tod_init::tod_TENTHS#0 ] +Coalescing zero page register [ zp[2]:8 [ conio_cursor_color#19 conio_cursor_color#1 conio_cursor_color#17 conio_cursor_color#26 ] ] with [ zp[2]:35 [ gotoxy::offset#0 ] ] - score: 1 +Coalescing zero page register [ zp[1]:17 [ tod_read::return_MIN#2 ] ] with [ zp[1]:21 [ main::tod_MIN#0 ] ] - score: 1 +Coalescing zero page register [ zp[1]:18 [ tod_read::return_HOURS#2 ] ] with [ zp[1]:22 [ main::tod_HOURS#0 ] ] - score: 1 +Coalescing zero page register [ zp[1]:18 [ tod_read::return_HOURS#2 main::tod_HOURS#0 ] ] with [ zp[1]:53 [ tod_read::return_HOURS#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:29 [ gotoxy::$8 ] ] with [ zp[2]:33 [ gotoxy::$10 ] ] - score: 1 +Coalescing zero page register [ zp[2]:8 [ conio_cursor_color#19 conio_cursor_color#1 conio_cursor_color#17 conio_cursor_color#26 gotoxy::offset#0 ] ] with [ zp[2]:29 [ gotoxy::$8 gotoxy::$10 ] ] - score: 1 +Coalescing zero page register [ zp[1]:17 [ tod_read::return_MIN#2 main::tod_MIN#0 ] ] with [ zp[1]:11 [ tod_init::tod_TENTHS#0 ] ] +Coalescing zero page register [ zp[1]:18 [ tod_read::return_HOURS#2 main::tod_HOURS#0 tod_read::return_HOURS#0 ] ] with [ zp[1]:12 [ tod_init::tod_SEC#0 ] ] +Allocated (was zp[1]:5) zp[1]:4 [ conio_cursor_y#20 conio_cursor_y#1 conio_cursor_y#18 conio_cursor_y#27 ] +Allocated (was zp[2]:6) zp[2]:5 [ conio_cursor_text#19 conio_cursor_text#1 conio_cursor_text#17 conio_cursor_text#26 ] +Allocated (was zp[2]:8) zp[2]:7 [ conio_cursor_color#19 conio_cursor_color#1 conio_cursor_color#17 conio_cursor_color#26 gotoxy::offset#0 gotoxy::$8 gotoxy::$10 ] +Allocated (was zp[1]:17) zp[1]:9 [ tod_read::return_MIN#2 main::tod_MIN#0 tod_init::tod_TENTHS#0 ] +Allocated (was zp[1]:18) zp[1]:10 [ tod_read::return_HOURS#2 main::tod_HOURS#0 tod_read::return_HOURS#0 tod_init::tod_SEC#0 ] +Allocated (was zp[1]:23) zp[1]:11 [ tod_str::tod_TENTHS#0 ] +Allocated (was zp[1]:24) zp[1]:12 [ tod_str::tod_SEC#0 ] +Allocated (was zp[2]:31) zp[2]:13 [ gotoxy::$9 ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Time of Day / RTOS test using the 6526 CIA on C64 + // Upstart +.pc = $801 "Basic" +:BasicUpstart(__bbegin) +.pc = $80d "Program" + // Global Constants & labels + // The text screen address + .label CONIO_SCREEN_TEXT = $400 + // The color screen address + .label CONIO_SCREEN_COLORS = $d800 + // The screen width + .const CONIO_WIDTH = $28 + // The screen height + .const CONIO_HEIGHT = $19 + // The default text color + .const CONIO_TEXTCOLOR_DEFAULT = $e + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + .const OFFSET_STRUCT_TIME_OF_DAY_SEC = 1 + .const OFFSET_STRUCT_TIME_OF_DAY_MIN = 2 + .const OFFSET_STRUCT_TIME_OF_DAY_HOURS = 3 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f + .const OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS = $b + .const OFFSET_STRUCT_MOS6526_CIA_TOD_MIN = $a + .const OFFSET_STRUCT_MOS6526_CIA_TOD_SEC = 9 + .const OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = 8 + // The current cursor y-position + .label conio_cursor_y = 4 + // The current cursor address + .label conio_cursor_text = 5 + // The current cursor address + .label conio_cursor_color = 7 + // @begin +__bbegin: + // [1] phi from @begin to @1 [phi:@begin->@1] +__b1_from___bbegin: + jmp __b1 + // @1 +__b1: + // [2] call main + jsr main + // [3] phi from @1 to @end [phi:@1->@end] +__bend_from___b1: + jmp __bend + // @end +__bend: + // main +main: { + .label tod_MIN = 9 + .label tod_HOURS = $a + // [4] (byte) tod_init::tod_TENTHS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO) -- vbuz1=_deref_pbuc1 + lda TOD_ZERO + sta.z tod_init.tod_TENTHS + // [5] (byte) tod_init::tod_SEC#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC) -- vbuz1=_deref_pbuc1 + lda TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_SEC + sta.z tod_init.tod_SEC + // [6] (byte) tod_init::tod_MIN#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN) -- vbuxx=_deref_pbuc1 + ldx TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_MIN + // [7] (byte) tod_init::tod_HOURS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS) -- vbuyy=_deref_pbuc1 + ldy TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS + // [8] call tod_init + jsr tod_init + // [9] phi from main main::@4 to main::@1 [phi:main/main::@4->main::@1] + __b1_from_main: + __b1_from___b4: + jmp __b1 + // main::@1 + __b1: + // [10] call tod_read + jsr tod_read + // [11] (byte) tod_read::return_TENTHS#2 ← (byte) tod_read::return_TENTHS#0 + // [12] (byte) tod_read::return_SEC#2 ← (byte) tod_read::return_SEC#0 + // [13] (byte) tod_read::return_MIN#2 ← (byte) tod_read::return_MIN#0 -- vbuz1=vbuaa + sta.z tod_read.return_MIN + // [14] (byte) tod_read::return_HOURS#2 ← (byte) tod_read::return_HOURS#0 + jmp __b2 + // main::@2 + __b2: + // [15] (byte) main::tod_TENTHS#0 ← (byte) tod_read::return_TENTHS#2 + // [16] (byte) main::tod_SEC#0 ← (byte) tod_read::return_SEC#2 + // [17] (byte) main::tod_MIN#0 ← (byte) tod_read::return_MIN#2 + // [18] (byte) main::tod_HOURS#0 ← (byte) tod_read::return_HOURS#2 + // [19] call gotoxy + // [50] phi from main::@2 to gotoxy [phi:main::@2->gotoxy] + gotoxy_from___b2: + // [50] phi (byte) gotoxy::y#4 = (byte) 0 [phi:main::@2->gotoxy#0] -- vbuaa=vbuc1 + lda #0 + jsr gotoxy + jmp __b3 + // main::@3 + __b3: + // [20] (byte) tod_str::tod_TENTHS#0 ← (byte) main::tod_TENTHS#0 -- vbuz1=vbuyy + sty.z tod_str.tod_TENTHS + // [21] (byte) tod_str::tod_SEC#0 ← (byte) main::tod_SEC#0 -- vbuz1=vbuxx + stx.z tod_str.tod_SEC + // [22] (byte) tod_str::tod_MIN#0 ← (byte) main::tod_MIN#0 -- vbuyy=vbuz1 + ldy.z tod_MIN + // [23] (byte) tod_str::tod_HOURS#0 ← (byte) main::tod_HOURS#0 -- vbuxx=vbuz1 + ldx.z tod_HOURS + // [24] call tod_str + jsr tod_str + // [25] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + __b4_from___b3: + jmp __b4 + // main::@4 + __b4: + // [26] call cputs + // [27] phi from main::@4 to cputs [phi:main::@4->cputs] + cputs_from___b4: + jsr cputs + jmp __b1_from___b4 +} + // cputs +// Output a NUL-terminated string at the current cursor position +// cputs(byte* zp(2) s) +cputs: { + .label s = 2 + // [28] phi from cputs to cputs::@1 [phi:cputs->cputs::@1] + __b1_from_cputs: + // [28] phi (byte*) conio_cursor_color#19 = (byte*) conio_cursor_color#1 [phi:cputs->cputs::@1#0] -- register_copy + // [28] phi (byte*) conio_cursor_text#19 = (byte*) conio_cursor_text#1 [phi:cputs->cputs::@1#1] -- register_copy + // [28] phi (byte) conio_cursor_y#20 = (byte) conio_cursor_y#1 [phi:cputs->cputs::@1#2] -- register_copy + // [28] phi (byte) conio_cursor_x#20 = (byte) 0 [phi:cputs->cputs::@1#3] -- vbuxx=vbuc1 + ldx #0 + // [28] phi (to_nomodify byte*) cputs::s#2 = (const byte*) tod_buffer [phi:cputs->cputs::@1#4] -- pbuz1=pbuc1 + lda #tod_buffer + sta.z s+1 + jmp __b1 + // cputs::@1 + __b1: + // [29] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#2) -- vbuaa=_deref_pbuz1 + ldy #0 + lda (s),y + // [30] (to_nomodify byte*) cputs::s#0 ← ++ (to_nomodify byte*) cputs::s#2 -- pbuz1=_inc_pbuz1 + inc.z s + bne !+ + inc.z s+1 + !: + // [31] if((byte) 0!=(byte) cputs::c#1) goto cputs::@2 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 + bne __b2 + jmp __breturn + // cputs::@return + __breturn: + // [32] return + rts + // cputs::@2 + __b2: + // [33] (byte) cputc::c#0 ← (byte) cputs::c#1 + // [34] call cputc + jsr cputc + // [28] phi from cputs::@2 to cputs::@1 [phi:cputs::@2->cputs::@1] + __b1_from___b2: + // [28] phi (byte*) conio_cursor_color#19 = (byte*) conio_cursor_color#17 [phi:cputs::@2->cputs::@1#0] -- register_copy + // [28] phi (byte*) conio_cursor_text#19 = (byte*) conio_cursor_text#17 [phi:cputs::@2->cputs::@1#1] -- register_copy + // [28] phi (byte) conio_cursor_y#20 = (byte) conio_cursor_y#18 [phi:cputs::@2->cputs::@1#2] -- register_copy + // [28] phi (byte) conio_cursor_x#20 = (byte) conio_cursor_x#18 [phi:cputs::@2->cputs::@1#3] -- register_copy + // [28] phi (to_nomodify byte*) cputs::s#2 = (to_nomodify byte*) cputs::s#0 [phi:cputs::@2->cputs::@1#4] -- register_copy + jmp __b1 +} + // cputc +// Output one character at the current cursor position +// Moves the cursor forward +// cputc(byte register(A) c) +cputc: { + // [35] if((byte) cputc::c#0==(byte) ' ') goto cputc::@1 -- vbuaa_eq_vbuc1_then_la1 + cmp #'\n' + beq __b1 + jmp __b2 + // cputc::@2 + __b2: + // [36] *((byte*) conio_cursor_text#19) ← (byte) cputc::c#0 -- _deref_pbuz1=vbuaa + ldy #0 + sta (conio_cursor_text),y + // [37] (byte*) conio_cursor_text#26 ← ++ (byte*) conio_cursor_text#19 -- pbuz1=_inc_pbuz1 + inc.z conio_cursor_text + bne !+ + inc.z conio_cursor_text+1 + !: + // [38] *((byte*) conio_cursor_color#19) ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT -- _deref_pbuz1=vbuc1 + lda #CONIO_TEXTCOLOR_DEFAULT + ldy #0 + sta (conio_cursor_color),y + // [39] (byte*) conio_cursor_color#26 ← ++ (byte*) conio_cursor_color#19 -- pbuz1=_inc_pbuz1 + inc.z conio_cursor_color + bne !+ + inc.z conio_cursor_color+1 + !: + // [40] (byte) conio_cursor_x#4 ← ++ (byte) conio_cursor_x#20 -- vbuxx=_inc_vbuxx + inx + // [41] if((byte) conio_cursor_x#4!=(const nomodify byte) CONIO_WIDTH) goto cputc::@return -- vbuxx_neq_vbuc1_then_la1 + cpx #CONIO_WIDTH + bne __breturn_from___b2 + jmp __b3 + // cputc::@3 + __b3: + // [42] (byte) conio_cursor_y#27 ← ++ (byte) conio_cursor_y#20 -- vbuz1=_inc_vbuz1 + inc.z conio_cursor_y + // [43] if((byte) conio_cursor_y#27!=(const nomodify byte) CONIO_HEIGHT) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1 + lda #CONIO_HEIGHT + cmp.z conio_cursor_y + bne __breturn_from___b3 + // [44] phi from cputc::@3 to cputc::@4 [phi:cputc::@3->cputc::@4] + __b4_from___b3: + jmp __b4 + // cputc::@4 + __b4: + // [45] call gotoxy + // [50] phi from cputc::@4 to gotoxy [phi:cputc::@4->gotoxy] + gotoxy_from___b4: + // [50] phi (byte) gotoxy::y#4 = (byte) 0 [phi:cputc::@4->gotoxy#0] -- vbuaa=vbuc1 + lda #0 + jsr gotoxy + // [46] phi from cputc::@1 cputc::@3 cputc::@4 to cputc::@return [phi:cputc::@1/cputc::@3/cputc::@4->cputc::@return] + __breturn_from___b1: + __breturn_from___b3: + __breturn_from___b4: + // [46] phi (byte*) conio_cursor_color#17 = (byte*) conio_cursor_color#1 [phi:cputc::@1/cputc::@3/cputc::@4->cputc::@return#0] -- register_copy + // [46] phi (byte*) conio_cursor_text#17 = (byte*) conio_cursor_text#1 [phi:cputc::@1/cputc::@3/cputc::@4->cputc::@return#1] -- register_copy + // [46] phi (byte) conio_cursor_y#18 = (byte) conio_cursor_y#1 [phi:cputc::@1/cputc::@3/cputc::@4->cputc::@return#2] -- register_copy + // [46] phi (byte) conio_cursor_x#18 = (byte) 0 [phi:cputc::@1/cputc::@3/cputc::@4->cputc::@return#3] -- vbuxx=vbuc1 + ldx #0 + jmp __breturn + // [46] phi from cputc::@2 to cputc::@return [phi:cputc::@2->cputc::@return] + __breturn_from___b2: + // [46] phi (byte*) conio_cursor_color#17 = (byte*) conio_cursor_color#26 [phi:cputc::@2->cputc::@return#0] -- register_copy + // [46] phi (byte*) conio_cursor_text#17 = (byte*) conio_cursor_text#26 [phi:cputc::@2->cputc::@return#1] -- register_copy + // [46] phi (byte) conio_cursor_y#18 = (byte) conio_cursor_y#20 [phi:cputc::@2->cputc::@return#2] -- register_copy + // [46] phi (byte) conio_cursor_x#18 = (byte) conio_cursor_x#4 [phi:cputc::@2->cputc::@return#3] -- register_copy + jmp __breturn + // cputc::@return + __breturn: + // [47] return + rts + // cputc::@1 + __b1: + // [48] (byte) gotoxy::y#1 ← (byte) conio_cursor_y#20 + (byte) 1 -- vbuaa=vbuz1_plus_1 + lda.z conio_cursor_y + clc + adc #1 + // [49] call gotoxy + // [50] phi from cputc::@1 to gotoxy [phi:cputc::@1->gotoxy] + gotoxy_from___b1: + // [50] phi (byte) gotoxy::y#4 = (byte) gotoxy::y#1 [phi:cputc::@1->gotoxy#0] -- register_copy + jsr gotoxy + jmp __breturn_from___b1 +} + // gotoxy +// Set the cursor to the specified position +// gotoxy(byte register(A) y) +gotoxy: { + .label __8 = 7 + .label offset = 7 + .label __9 = $d + .label __10 = 7 + jmp __b1 + // gotoxy::@1 + __b1: + // [51] if((byte) gotoxy::y#4<(const nomodify byte) CONIO_HEIGHT) goto gotoxy::@3 -- vbuaa_lt_vbuc1_then_la1 + cmp #CONIO_HEIGHT + bcc __b3_from___b1 + // [53] phi from gotoxy::@1 to gotoxy::@2 [phi:gotoxy::@1->gotoxy::@2] + __b2_from___b1: + // [53] phi (byte) gotoxy::y#5 = (byte) 0 [phi:gotoxy::@1->gotoxy::@2#0] -- vbuaa=vbuc1 + lda #0 + jmp __b2 + // [52] phi from gotoxy::@1 to gotoxy::@3 [phi:gotoxy::@1->gotoxy::@3] + __b3_from___b1: + jmp __b3 + // gotoxy::@3 + __b3: + // [53] phi from gotoxy::@3 to gotoxy::@2 [phi:gotoxy::@3->gotoxy::@2] + __b2_from___b3: + // [53] phi (byte) gotoxy::y#5 = (byte) gotoxy::y#4 [phi:gotoxy::@3->gotoxy::@2#0] -- register_copy + jmp __b2 + // gotoxy::@2 + __b2: + // [54] (byte) conio_cursor_y#1 ← (byte) gotoxy::y#5 -- vbuz1=vbuaa + sta.z conio_cursor_y + // [55] (word~) gotoxy::$8 ← (word)(byte) gotoxy::y#5 -- vwuz1=_word_vbuaa + sta.z __8 + lda #0 + sta.z __8+1 + // [56] (word~) gotoxy::$9 ← (word~) gotoxy::$8 << (byte) 2 -- vwuz1=vwuz2_rol_2 + lda.z __8 + asl + sta.z __9 + lda.z __8+1 + rol + sta.z __9+1 + asl.z __9 + rol.z __9+1 + // [57] (word~) gotoxy::$10 ← (word~) gotoxy::$9 + (word~) gotoxy::$8 -- vwuz1=vwuz2_plus_vwuz1 + lda.z __10 + clc + adc.z __9 + sta.z __10 + lda.z __10+1 + adc.z __9+1 + sta.z __10+1 + // [58] (word) gotoxy::offset#0 ← (word~) gotoxy::$10 << (byte) 3 -- vwuz1=vwuz1_rol_3 + asl.z offset + rol.z offset+1 + asl.z offset + rol.z offset+1 + asl.z offset + rol.z offset+1 + // [59] (byte*) conio_cursor_text#1 ← (const nomodify byte*) CONIO_SCREEN_TEXT + (word) gotoxy::offset#0 -- pbuz1=pbuc1_plus_vwuz2 + lda.z offset + clc + adc #CONIO_SCREEN_TEXT + sta.z conio_cursor_text+1 + // [60] (byte*) conio_cursor_color#1 ← (const nomodify byte*) CONIO_SCREEN_COLORS + (word) gotoxy::offset#0 -- pbuz1=pbuc1_plus_vwuz1 + clc + lda.z conio_cursor_color + adc #CONIO_SCREEN_COLORS + sta.z conio_cursor_color+1 + jmp __breturn + // gotoxy::@return + __breturn: + // [61] return + rts +} + // tod_str +// Convert time of day to a human-readable string "hh:mm:ss:10" +// tod_str(byte zp($b) tod_TENTHS, byte zp($c) tod_SEC, byte register(Y) tod_MIN, byte register(X) tod_HOURS) +tod_str: { + .label tod_TENTHS = $b + .label tod_SEC = $c + // [62] (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#0 >> (byte) 4 -- vbuaa=vbuxx_ror_4 + txa + lsr + lsr + lsr + lsr + // [63] (byte~) tod_str::$1 ← (byte) '0' + (byte~) tod_str::$0 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // [64] *((const byte*) tod_buffer) ← (byte~) tod_str::$1 -- _deref_pbuc1=vbuaa + sta tod_buffer + // [65] (byte~) tod_str::$2 ← (byte) tod_str::tod_HOURS#0 & (byte) $f -- vbuaa=vbuxx_band_vbuc1 + txa + and #$f + // [66] (byte~) tod_str::$3 ← (byte) '0' + (byte~) tod_str::$2 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // [67] *((const byte*) tod_buffer+(byte) 1) ← (byte~) tod_str::$3 -- _deref_pbuc1=vbuaa + sta tod_buffer+1 + // [68] (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#0 >> (byte) 4 -- vbuaa=vbuyy_ror_4 + tya + lsr + lsr + lsr + lsr + // [69] (byte~) tod_str::$5 ← (byte) '0' + (byte~) tod_str::$4 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // [70] *((const byte*) tod_buffer+(byte) 3) ← (byte~) tod_str::$5 -- _deref_pbuc1=vbuaa + sta tod_buffer+3 + // [71] (byte~) tod_str::$6 ← (byte) tod_str::tod_MIN#0 & (byte) $f -- vbuaa=vbuyy_band_vbuc1 + tya + and #$f + // [72] (byte~) tod_str::$7 ← (byte) '0' + (byte~) tod_str::$6 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // [73] *((const byte*) tod_buffer+(byte) 4) ← (byte~) tod_str::$7 -- _deref_pbuc1=vbuaa + sta tod_buffer+4 + // [74] (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#0 >> (byte) 4 -- vbuaa=vbuz1_ror_4 + lda.z tod_SEC + lsr + lsr + lsr + lsr + // [75] (byte~) tod_str::$9 ← (byte) '0' + (byte~) tod_str::$8 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // [76] *((const byte*) tod_buffer+(byte) 6) ← (byte~) tod_str::$9 -- _deref_pbuc1=vbuaa + sta tod_buffer+6 + // [77] (byte~) tod_str::$10 ← (byte) tod_str::tod_SEC#0 & (byte) $f -- vbuaa=vbuz1_band_vbuc1 + lda #$f + and.z tod_SEC + // [78] (byte~) tod_str::$11 ← (byte) '0' + (byte~) tod_str::$10 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // [79] *((const byte*) tod_buffer+(byte) 7) ← (byte~) tod_str::$11 -- _deref_pbuc1=vbuaa + sta tod_buffer+7 + // [80] (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#0 >> (byte) 4 -- vbuaa=vbuz1_ror_4 + lda.z tod_TENTHS + lsr + lsr + lsr + lsr + // [81] (byte~) tod_str::$13 ← (byte) '0' + (byte~) tod_str::$12 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // [82] *((const byte*) tod_buffer+(byte) 9) ← (byte~) tod_str::$13 -- _deref_pbuc1=vbuaa + sta tod_buffer+9 + // [83] (byte~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#0 & (byte) $f -- vbuaa=vbuz1_band_vbuc1 + lda #$f + and.z tod_TENTHS + // [84] (byte~) tod_str::$15 ← (byte) '0' + (byte~) tod_str::$14 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // [85] *((const byte*) tod_buffer+(byte) $a) ← (byte~) tod_str::$15 -- _deref_pbuc1=vbuaa + sta tod_buffer+$a + jmp __breturn + // tod_str::@return + __breturn: + // [86] return + rts +} + // tod_read +// Read time of day +tod_read: { + .label return_HOURS = $a + .label return_MIN = 9 + // [87] (byte) tod_read::return_HOURS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) -- vbuz1=_deref_pbuc1 + // Reading sequence is important. TOD latches on reading hours until 10ths is read. + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS + sta.z return_HOURS + // [88] (byte) tod_read::return_MIN#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) -- vbuaa=_deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_MIN + // [89] (byte) tod_read::return_SEC#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) -- vbuxx=_deref_pbuc1 + ldx CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_SEC + // [90] (byte) tod_read::return_TENTHS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) -- vbuyy=_deref_pbuc1 + ldy CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_10THS + jmp __breturn + // tod_read::@return + __breturn: + // [91] return + rts +} + // tod_init +// Initialize time-of-day clock +// This uses the MOS6526 CIA#1 +// tod_init(byte zp(9) tod_TENTHS, byte zp($a) tod_SEC, byte register(X) tod_MIN, byte register(Y) tod_HOURS) +tod_init: { + .label tod_TENTHS = 9 + .label tod_SEC = $a + // [92] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc2_bor_vbuc3 + // Set 50hz (this assumes PAL!) (bit7=1) + lda #$80 + ora CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // [93] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc2_band_vbuc3 + // Writing TOD clock (bit7=0) + lda #$7f + and CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // [94] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) ← (byte) tod_init::tod_HOURS#0 -- _deref_pbuc1=vbuyy + // Reset TOD clock + // Writing sequence is important. TOD stops when hours is written and starts when 10ths is written. + sty CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS + // [95] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) ← (byte) tod_init::tod_MIN#0 -- _deref_pbuc1=vbuxx + stx CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_MIN + // [96] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) ← (byte) tod_init::tod_SEC#0 -- _deref_pbuc1=vbuz1 + lda.z tod_SEC + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_SEC + // [97] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) ← (byte) tod_init::tod_TENTHS#0 -- _deref_pbuc1=vbuz1 + lda.z tod_TENTHS + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_10THS + jmp __breturn + // tod_init::@return + __breturn: + // [98] return + rts +} + // File Data + // The buffer used by tod_str() + tod_buffer: .text "00:00:00:00" + .byte 0 + // Time of Day 00:00:00:00 + TOD_ZERO: .byte 0, 0, 0, 0 + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __bend +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __b3 +Removing instruction jmp __b4 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b2 +Removing instruction jmp __b3 +Removing instruction jmp __b4 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b3 +Removing instruction jmp __b2 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label __b1_from___b4 with __b1 +Replacing label __breturn_from___b2 with __breturn +Replacing label __breturn_from___b3 with __breturn_from___b4 +Replacing label __breturn_from___b1 with __breturn_from___b4 +Replacing label __b3_from___b1 with __b2 +Removing instruction __b1_from___bbegin: +Removing instruction __b1: +Removing instruction __bend_from___b1: +Removing instruction __b1_from_main: +Removing instruction __b1_from___b4: +Removing instruction gotoxy_from___b2: +Removing instruction __b4_from___b3: +Removing instruction cputs_from___b4: +Removing instruction __b4_from___b3: +Removing instruction gotoxy_from___b4: +Removing instruction __breturn_from___b1: +Removing instruction __breturn_from___b3: +Removing instruction __breturn_from___b2: +Removing instruction __b3_from___b1: +Removing instruction __b3: +Removing instruction __b2_from___b3: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __bend: +Removing instruction __b2: +Removing instruction __b3: +Removing instruction __b4: +Removing instruction __b1_from_cputs: +Removing instruction __breturn: +Removing instruction __b1_from___b2: +Removing instruction __b2: +Removing instruction __b3: +Removing instruction __b4: +Removing instruction gotoxy_from___b1: +Removing instruction __b1: +Removing instruction __b2_from___b1: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Updating BasicUpstart to call main directly +Removing instruction jsr main +Succesful ASM optimization Pass5SkipBegin +Replacing jump to rts with rts in jmp __breturn +Succesful ASM optimization Pass5DoubleJumpElimination +Relabelling long label __breturn_from___b4 to __b2 +Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp __b2 +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __bbegin: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +(label) @1 +(label) @begin +(label) @end +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 +(const nomodify byte) CONIO_HEIGHT = (byte) $19 +(const nomodify byte*) CONIO_SCREEN_COLORS = (byte*) 55296 +(const nomodify byte*) CONIO_SCREEN_TEXT = (byte*) 1024 +(const nomodify byte) CONIO_TEXTCOLOR_DEFAULT = (byte) $e +(const nomodify byte) CONIO_WIDTH = (byte) $28 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = (byte) 8 +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS = (byte) $b +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN = (byte) $a +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC = (byte) 9 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS = (byte) 3 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN = (byte) 2 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC = (byte) 1 +(byte) TIME_OF_DAY::HOURS +(byte) TIME_OF_DAY::MIN +(byte) TIME_OF_DAY::SEC +(byte) TIME_OF_DAY::TENTHS +(struct TIME_OF_DAY) TOD_ZERO loadstore mem[4] = { TENTHS: (byte) 0, SEC: (byte) 0, MIN: (byte) 0, HOURS: (byte) 0 } +(byte*) conio_cursor_color +(byte*) conio_cursor_color#1 conio_cursor_color zp[2]:7 1000083.6666666666 +(byte*) conio_cursor_color#17 conio_cursor_color zp[2]:7 1366668.3333333335 +(byte*) conio_cursor_color#19 conio_cursor_color zp[2]:7 233444.88888888888 +(byte*) conio_cursor_color#26 conio_cursor_color zp[2]:7 600000.6000000001 +(byte*) conio_cursor_text +(byte*) conio_cursor_text#1 conio_cursor_text zp[2]:5 923154.1538461538 +(byte*) conio_cursor_text#17 conio_cursor_text zp[2]:5 1366668.3333333335 +(byte*) conio_cursor_text#19 conio_cursor_text zp[2]:5 300143.4285714285 +(byte*) conio_cursor_text#26 conio_cursor_text zp[2]:5 428571.85714285716 +(byte) conio_cursor_x +(byte) conio_cursor_x#18 reg byte x 366667.3333333334 +(byte) conio_cursor_x#20 reg byte x 110000.20000000001 +(byte) conio_cursor_x#4 reg byte x 1500001.5 +(byte) conio_cursor_y +(byte) conio_cursor_y#1 conio_cursor_y zp[1]:4 666722.4444444445 +(byte) conio_cursor_y#18 conio_cursor_y zp[1]:4 1366668.3333333335 +(byte) conio_cursor_y#20 conio_cursor_y zp[1]:4 258417.08333333337 +(byte) conio_cursor_y#27 conio_cursor_y zp[1]:4 1500001.5 +(byte) conio_textcolor +(void()) cputc((byte) cputc::c) +(label) cputc::@1 +(label) cputc::@2 +(label) cputc::@3 +(label) cputc::@4 +(label) cputc::@return +(byte) cputc::c +(byte) cputc::c#0 reg byte a 1050001.5 +(void()) cputs((to_nomodify byte*) cputs::s) +(label) cputs::@1 +(label) cputs::@2 +(label) cputs::@return +(byte) cputs::c +(byte) cputs::c#1 reg byte a 100001.0 +(to_nomodify byte*) cputs::s +(to_nomodify byte*) cputs::s#0 s zp[2]:2 50000.5 +(to_nomodify byte*) cputs::s#2 s zp[2]:2 150001.5 +(void()) gotoxy((byte) gotoxy::x , (byte) gotoxy::y) +(word~) gotoxy::$10 zp[2]:7 2.0000002E7 +(word~) gotoxy::$8 zp[2]:7 1.50000015E7 +(word~) gotoxy::$9 zp[2]:13 2.0000002E7 +(label) gotoxy::@1 +(label) gotoxy::@2 +(label) gotoxy::@3 +(label) gotoxy::@return +(word) gotoxy::offset +(word) gotoxy::offset#0 offset zp[2]:7 1.50000015E7 +(byte) gotoxy::x +(byte) gotoxy::y +(byte) gotoxy::y#1 reg byte a 2000002.0 +(byte) gotoxy::y#4 reg byte a 7000001.0 +(byte) gotoxy::y#5 reg byte a 1.0000001E7 +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(byte) main::tod_HOURS +(byte) main::tod_HOURS#0 tod_HOURS zp[1]:10 40.4 +(byte) main::tod_MIN +(byte) main::tod_MIN#0 tod_MIN zp[1]:9 40.4 +(byte) main::tod_SEC +(byte) main::tod_SEC#0 reg byte x 40.4 +(byte) main::tod_TENTHS +(byte) main::tod_TENTHS#0 reg byte y 40.4 +(const byte*) tod_buffer[] = (byte*) "00:00:00:00" +(void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) +(label) tod_init::@return +(struct TIME_OF_DAY) tod_init::tod +(byte) tod_init::tod_HOURS +(byte) tod_init::tod_HOURS#0 reg byte y 37.33333333333333 +(byte) tod_init::tod_MIN +(byte) tod_init::tod_MIN#0 reg byte x 22.4 +(byte) tod_init::tod_SEC +(byte) tod_init::tod_SEC#0 tod_SEC zp[1]:10 16.0 +(byte) tod_init::tod_TENTHS +(byte) tod_init::tod_TENTHS#0 tod_TENTHS zp[1]:9 12.444444444444443 +(struct TIME_OF_DAY()) tod_read() +(label) tod_read::@return +(byte) tod_read::hours +(byte) tod_read::mins +(struct TIME_OF_DAY) tod_read::return +(byte) tod_read::return_HOURS +(byte) tod_read::return_HOURS#0 return_HOURS zp[1]:10 122.44444444444446 +(byte) tod_read::return_HOURS#2 return_HOURS zp[1]:10 50.5 +(byte) tod_read::return_MIN +(byte) tod_read::return_MIN#0 reg byte a 157.42857142857142 +(byte) tod_read::return_MIN#2 return_MIN zp[1]:9 50.5 +(byte) tod_read::return_SEC +(byte) tod_read::return_SEC#0 reg byte x 220.39999999999998 +(byte) tod_read::return_SEC#2 reg byte x 50.5 +(byte) tod_read::return_TENTHS +(byte) tod_read::return_TENTHS#0 reg byte y 367.33333333333337 +(byte) tod_read::return_TENTHS#2 reg byte y 50.5 +(byte) tod_read::secs +(byte) tod_read::tenths +(byte) tod_read::tod_HOURS +(byte) tod_read::tod_MIN +(byte) tod_read::tod_SEC +(byte) tod_read::tod_TENTHS +(byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) +(byte~) tod_str::$0 reg byte a 2002.0 +(byte~) tod_str::$1 reg byte a 2002.0 +(byte~) tod_str::$10 reg byte a 2002.0 +(byte~) tod_str::$11 reg byte a 2002.0 +(byte~) tod_str::$12 reg byte a 2002.0 +(byte~) tod_str::$13 reg byte a 2002.0 +(byte~) tod_str::$14 reg byte a 2002.0 +(byte~) tod_str::$15 reg byte a 2002.0 +(byte~) tod_str::$2 reg byte a 2002.0 +(byte~) tod_str::$3 reg byte a 2002.0 +(byte~) tod_str::$4 reg byte a 2002.0 +(byte~) tod_str::$5 reg byte a 2002.0 +(byte~) tod_str::$6 reg byte a 2002.0 +(byte~) tod_str::$7 reg byte a 2002.0 +(byte~) tod_str::$8 reg byte a 2002.0 +(byte~) tod_str::$9 reg byte a 2002.0 +(label) tod_str::@return +(byte*) tod_str::return +(struct TIME_OF_DAY) tod_str::tod +(byte) tod_str::tod_HOURS +(byte) tod_str::tod_HOURS#0 reg byte x 525.75 +(byte) tod_str::tod_MIN +(byte) tod_str::tod_MIN#0 reg byte y 191.1818181818182 +(byte) tod_str::tod_SEC +(byte) tod_str::tod_SEC#0 tod_SEC zp[1]:12 116.83333333333334 +(byte) tod_str::tod_TENTHS +(byte) tod_str::tod_TENTHS#0 tod_TENTHS zp[1]:11 84.12 + +zp[2]:2 [ cputs::s#2 cputs::s#0 ] +reg byte x [ conio_cursor_x#20 conio_cursor_x#18 conio_cursor_x#4 ] +zp[1]:4 [ conio_cursor_y#20 conio_cursor_y#1 conio_cursor_y#18 conio_cursor_y#27 ] +zp[2]:5 [ conio_cursor_text#19 conio_cursor_text#1 conio_cursor_text#17 conio_cursor_text#26 ] +zp[2]:7 [ conio_cursor_color#19 conio_cursor_color#1 conio_cursor_color#17 conio_cursor_color#26 gotoxy::offset#0 gotoxy::$8 gotoxy::$10 ] +reg byte a [ gotoxy::y#5 gotoxy::y#4 gotoxy::y#1 ] +reg byte x [ tod_init::tod_MIN#0 ] +reg byte y [ tod_init::tod_HOURS#0 ] +reg byte y [ tod_read::return_TENTHS#2 ] +reg byte x [ tod_read::return_SEC#2 ] +zp[1]:9 [ tod_read::return_MIN#2 main::tod_MIN#0 tod_init::tod_TENTHS#0 ] +zp[1]:10 [ tod_read::return_HOURS#2 main::tod_HOURS#0 tod_read::return_HOURS#0 tod_init::tod_SEC#0 ] +reg byte y [ main::tod_TENTHS#0 ] +reg byte x [ main::tod_SEC#0 ] +zp[1]:11 [ tod_str::tod_TENTHS#0 ] +zp[1]:12 [ tod_str::tod_SEC#0 ] +reg byte y [ tod_str::tod_MIN#0 ] +reg byte x [ tod_str::tod_HOURS#0 ] +reg byte a [ cputs::c#1 ] +reg byte a [ cputc::c#0 ] +zp[2]:13 [ gotoxy::$9 ] +reg byte a [ tod_str::$0 ] +reg byte a [ tod_str::$1 ] +reg byte a [ tod_str::$2 ] +reg byte a [ tod_str::$3 ] +reg byte a [ tod_str::$4 ] +reg byte a [ tod_str::$5 ] +reg byte a [ tod_str::$6 ] +reg byte a [ tod_str::$7 ] +reg byte a [ tod_str::$8 ] +reg byte a [ tod_str::$9 ] +reg byte a [ tod_str::$10 ] +reg byte a [ tod_str::$11 ] +reg byte a [ tod_str::$12 ] +reg byte a [ tod_str::$13 ] +reg byte a [ tod_str::$14 ] +reg byte a [ tod_str::$15 ] +reg byte a [ tod_read::return_MIN#0 ] +reg byte x [ tod_read::return_SEC#0 ] +reg byte y [ tod_read::return_TENTHS#0 ] +mem[4] [ TOD_ZERO ] + + +FINAL ASSEMBLER +Score: 5311 + + // File Comments +// Time of Day / RTOS test using the 6526 CIA on C64 + // Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + // Global Constants & labels + // The text screen address + .label CONIO_SCREEN_TEXT = $400 + // The color screen address + .label CONIO_SCREEN_COLORS = $d800 + // The screen width + .const CONIO_WIDTH = $28 + // The screen height + .const CONIO_HEIGHT = $19 + // The default text color + .const CONIO_TEXTCOLOR_DEFAULT = $e + // The CIA#1: keyboard matrix, joystick #1/#2 + .label CIA1 = $dc00 + .const OFFSET_STRUCT_TIME_OF_DAY_SEC = 1 + .const OFFSET_STRUCT_TIME_OF_DAY_MIN = 2 + .const OFFSET_STRUCT_TIME_OF_DAY_HOURS = 3 + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f + .const OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS = $b + .const OFFSET_STRUCT_MOS6526_CIA_TOD_MIN = $a + .const OFFSET_STRUCT_MOS6526_CIA_TOD_SEC = 9 + .const OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = 8 + // The current cursor y-position + .label conio_cursor_y = 4 + // The current cursor address + .label conio_cursor_text = 5 + // The current cursor address + .label conio_cursor_color = 7 + // @begin + // [1] phi from @begin to @1 [phi:@begin->@1] + // @1 + // [2] call main + // [3] phi from @1 to @end [phi:@1->@end] + // @end + // main +main: { + .label tod_MIN = 9 + .label tod_HOURS = $a + // tod_init(TOD_ZERO) + // [4] (byte) tod_init::tod_TENTHS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO) -- vbuz1=_deref_pbuc1 + lda TOD_ZERO + sta.z tod_init.tod_TENTHS + // [5] (byte) tod_init::tod_SEC#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC) -- vbuz1=_deref_pbuc1 + lda TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_SEC + sta.z tod_init.tod_SEC + // [6] (byte) tod_init::tod_MIN#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN) -- vbuxx=_deref_pbuc1 + ldx TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_MIN + // [7] (byte) tod_init::tod_HOURS#0 ← *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS) -- vbuyy=_deref_pbuc1 + ldy TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS + // [8] call tod_init + jsr tod_init + // [9] phi from main main::@4 to main::@1 [phi:main/main::@4->main::@1] + // main::@1 + __b1: + // tod_read() + // [10] call tod_read + jsr tod_read + // [11] (byte) tod_read::return_TENTHS#2 ← (byte) tod_read::return_TENTHS#0 + // [12] (byte) tod_read::return_SEC#2 ← (byte) tod_read::return_SEC#0 + // [13] (byte) tod_read::return_MIN#2 ← (byte) tod_read::return_MIN#0 -- vbuz1=vbuaa + sta.z tod_read.return_MIN + // [14] (byte) tod_read::return_HOURS#2 ← (byte) tod_read::return_HOURS#0 + // main::@2 + // tod = tod_read() + // [15] (byte) main::tod_TENTHS#0 ← (byte) tod_read::return_TENTHS#2 + // [16] (byte) main::tod_SEC#0 ← (byte) tod_read::return_SEC#2 + // [17] (byte) main::tod_MIN#0 ← (byte) tod_read::return_MIN#2 + // [18] (byte) main::tod_HOURS#0 ← (byte) tod_read::return_HOURS#2 + // gotoxy(0,0) + // [19] call gotoxy + // [50] phi from main::@2 to gotoxy [phi:main::@2->gotoxy] + // [50] phi (byte) gotoxy::y#4 = (byte) 0 [phi:main::@2->gotoxy#0] -- vbuaa=vbuc1 + lda #0 + jsr gotoxy + // main::@3 + // tod_str(tod) + // [20] (byte) tod_str::tod_TENTHS#0 ← (byte) main::tod_TENTHS#0 -- vbuz1=vbuyy + sty.z tod_str.tod_TENTHS + // [21] (byte) tod_str::tod_SEC#0 ← (byte) main::tod_SEC#0 -- vbuz1=vbuxx + stx.z tod_str.tod_SEC + // [22] (byte) tod_str::tod_MIN#0 ← (byte) main::tod_MIN#0 -- vbuyy=vbuz1 + ldy.z tod_MIN + // [23] (byte) tod_str::tod_HOURS#0 ← (byte) main::tod_HOURS#0 -- vbuxx=vbuz1 + ldx.z tod_HOURS + // [24] call tod_str + jsr tod_str + // [25] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // main::@4 + // cputs(tod_str(tod)) + // [26] call cputs + // [27] phi from main::@4 to cputs [phi:main::@4->cputs] + jsr cputs + jmp __b1 +} + // cputs +// Output a NUL-terminated string at the current cursor position +// cputs(byte* zp(2) s) +cputs: { + .label s = 2 + // [28] phi from cputs to cputs::@1 [phi:cputs->cputs::@1] + // [28] phi (byte*) conio_cursor_color#19 = (byte*) conio_cursor_color#1 [phi:cputs->cputs::@1#0] -- register_copy + // [28] phi (byte*) conio_cursor_text#19 = (byte*) conio_cursor_text#1 [phi:cputs->cputs::@1#1] -- register_copy + // [28] phi (byte) conio_cursor_y#20 = (byte) conio_cursor_y#1 [phi:cputs->cputs::@1#2] -- register_copy + // [28] phi (byte) conio_cursor_x#20 = (byte) 0 [phi:cputs->cputs::@1#3] -- vbuxx=vbuc1 + ldx #0 + // [28] phi (to_nomodify byte*) cputs::s#2 = (const byte*) tod_buffer [phi:cputs->cputs::@1#4] -- pbuz1=pbuc1 + lda #tod_buffer + sta.z s+1 + // cputs::@1 + __b1: + // c=*s++ + // [29] (byte) cputs::c#1 ← *((to_nomodify byte*) cputs::s#2) -- vbuaa=_deref_pbuz1 + ldy #0 + lda (s),y + // while(c=*s++) + // [30] (to_nomodify byte*) cputs::s#0 ← ++ (to_nomodify byte*) cputs::s#2 -- pbuz1=_inc_pbuz1 + inc.z s + bne !+ + inc.z s+1 + !: + // [31] if((byte) 0!=(byte) cputs::c#1) goto cputs::@2 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 + bne __b2 + // cputs::@return + // } + // [32] return + rts + // cputs::@2 + __b2: + // cputc(c) + // [33] (byte) cputc::c#0 ← (byte) cputs::c#1 + // [34] call cputc + jsr cputc + // [28] phi from cputs::@2 to cputs::@1 [phi:cputs::@2->cputs::@1] + // [28] phi (byte*) conio_cursor_color#19 = (byte*) conio_cursor_color#17 [phi:cputs::@2->cputs::@1#0] -- register_copy + // [28] phi (byte*) conio_cursor_text#19 = (byte*) conio_cursor_text#17 [phi:cputs::@2->cputs::@1#1] -- register_copy + // [28] phi (byte) conio_cursor_y#20 = (byte) conio_cursor_y#18 [phi:cputs::@2->cputs::@1#2] -- register_copy + // [28] phi (byte) conio_cursor_x#20 = (byte) conio_cursor_x#18 [phi:cputs::@2->cputs::@1#3] -- register_copy + // [28] phi (to_nomodify byte*) cputs::s#2 = (to_nomodify byte*) cputs::s#0 [phi:cputs::@2->cputs::@1#4] -- register_copy + jmp __b1 +} + // cputc +// Output one character at the current cursor position +// Moves the cursor forward +// cputc(byte register(A) c) +cputc: { + // if(c=='\n') + // [35] if((byte) cputc::c#0==(byte) ' ') goto cputc::@1 -- vbuaa_eq_vbuc1_then_la1 + cmp #'\n' + beq __b1 + // cputc::@2 + // *conio_cursor_text++ = c + // [36] *((byte*) conio_cursor_text#19) ← (byte) cputc::c#0 -- _deref_pbuz1=vbuaa + ldy #0 + sta (conio_cursor_text),y + // *conio_cursor_text++ = c; + // [37] (byte*) conio_cursor_text#26 ← ++ (byte*) conio_cursor_text#19 -- pbuz1=_inc_pbuz1 + inc.z conio_cursor_text + bne !+ + inc.z conio_cursor_text+1 + !: + // *conio_cursor_color++ = conio_textcolor + // [38] *((byte*) conio_cursor_color#19) ← (const nomodify byte) CONIO_TEXTCOLOR_DEFAULT -- _deref_pbuz1=vbuc1 + lda #CONIO_TEXTCOLOR_DEFAULT + ldy #0 + sta (conio_cursor_color),y + // *conio_cursor_color++ = conio_textcolor; + // [39] (byte*) conio_cursor_color#26 ← ++ (byte*) conio_cursor_color#19 -- pbuz1=_inc_pbuz1 + inc.z conio_cursor_color + bne !+ + inc.z conio_cursor_color+1 + !: + // if(++conio_cursor_x==CONIO_WIDTH) + // [40] (byte) conio_cursor_x#4 ← ++ (byte) conio_cursor_x#20 -- vbuxx=_inc_vbuxx + inx + // [41] if((byte) conio_cursor_x#4!=(const nomodify byte) CONIO_WIDTH) goto cputc::@return -- vbuxx_neq_vbuc1_then_la1 + cpx #CONIO_WIDTH + bne __breturn + // cputc::@3 + // if(++conio_cursor_y==CONIO_HEIGHT) + // [42] (byte) conio_cursor_y#27 ← ++ (byte) conio_cursor_y#20 -- vbuz1=_inc_vbuz1 + inc.z conio_cursor_y + // [43] if((byte) conio_cursor_y#27!=(const nomodify byte) CONIO_HEIGHT) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1 + lda #CONIO_HEIGHT + cmp.z conio_cursor_y + bne __b2 + // [44] phi from cputc::@3 to cputc::@4 [phi:cputc::@3->cputc::@4] + // cputc::@4 + // gotoxy(0,0) + // [45] call gotoxy + // [50] phi from cputc::@4 to gotoxy [phi:cputc::@4->gotoxy] + // [50] phi (byte) gotoxy::y#4 = (byte) 0 [phi:cputc::@4->gotoxy#0] -- vbuaa=vbuc1 + lda #0 + jsr gotoxy + // [46] phi from cputc::@1 cputc::@3 cputc::@4 to cputc::@return [phi:cputc::@1/cputc::@3/cputc::@4->cputc::@return] + __b2: + // [46] phi (byte*) conio_cursor_color#17 = (byte*) conio_cursor_color#1 [phi:cputc::@1/cputc::@3/cputc::@4->cputc::@return#0] -- register_copy + // [46] phi (byte*) conio_cursor_text#17 = (byte*) conio_cursor_text#1 [phi:cputc::@1/cputc::@3/cputc::@4->cputc::@return#1] -- register_copy + // [46] phi (byte) conio_cursor_y#18 = (byte) conio_cursor_y#1 [phi:cputc::@1/cputc::@3/cputc::@4->cputc::@return#2] -- register_copy + // [46] phi (byte) conio_cursor_x#18 = (byte) 0 [phi:cputc::@1/cputc::@3/cputc::@4->cputc::@return#3] -- vbuxx=vbuc1 + ldx #0 + rts + // [46] phi from cputc::@2 to cputc::@return [phi:cputc::@2->cputc::@return] + // [46] phi (byte*) conio_cursor_color#17 = (byte*) conio_cursor_color#26 [phi:cputc::@2->cputc::@return#0] -- register_copy + // [46] phi (byte*) conio_cursor_text#17 = (byte*) conio_cursor_text#26 [phi:cputc::@2->cputc::@return#1] -- register_copy + // [46] phi (byte) conio_cursor_y#18 = (byte) conio_cursor_y#20 [phi:cputc::@2->cputc::@return#2] -- register_copy + // [46] phi (byte) conio_cursor_x#18 = (byte) conio_cursor_x#4 [phi:cputc::@2->cputc::@return#3] -- register_copy + // cputc::@return + __breturn: + // } + // [47] return + rts + // cputc::@1 + __b1: + // gotoxy(0, conio_cursor_y+1) + // [48] (byte) gotoxy::y#1 ← (byte) conio_cursor_y#20 + (byte) 1 -- vbuaa=vbuz1_plus_1 + lda.z conio_cursor_y + clc + adc #1 + // [49] call gotoxy + // [50] phi from cputc::@1 to gotoxy [phi:cputc::@1->gotoxy] + // [50] phi (byte) gotoxy::y#4 = (byte) gotoxy::y#1 [phi:cputc::@1->gotoxy#0] -- register_copy + jsr gotoxy + jmp __b2 +} + // gotoxy +// Set the cursor to the specified position +// gotoxy(byte register(A) y) +gotoxy: { + .label __8 = 7 + .label offset = 7 + .label __9 = $d + .label __10 = 7 + // gotoxy::@1 + // if(y>=CONIO_HEIGHT) + // [51] if((byte) gotoxy::y#4<(const nomodify byte) CONIO_HEIGHT) goto gotoxy::@3 -- vbuaa_lt_vbuc1_then_la1 + cmp #CONIO_HEIGHT + bcc __b2 + // [53] phi from gotoxy::@1 to gotoxy::@2 [phi:gotoxy::@1->gotoxy::@2] + // [53] phi (byte) gotoxy::y#5 = (byte) 0 [phi:gotoxy::@1->gotoxy::@2#0] -- vbuaa=vbuc1 + lda #0 + // [52] phi from gotoxy::@1 to gotoxy::@3 [phi:gotoxy::@1->gotoxy::@3] + // gotoxy::@3 + // [53] phi from gotoxy::@3 to gotoxy::@2 [phi:gotoxy::@3->gotoxy::@2] + // [53] phi (byte) gotoxy::y#5 = (byte) gotoxy::y#4 [phi:gotoxy::@3->gotoxy::@2#0] -- register_copy + // gotoxy::@2 + __b2: + // conio_cursor_y = y + // [54] (byte) conio_cursor_y#1 ← (byte) gotoxy::y#5 -- vbuz1=vbuaa + sta.z conio_cursor_y + // (unsigned int)y*CONIO_WIDTH + // [55] (word~) gotoxy::$8 ← (word)(byte) gotoxy::y#5 -- vwuz1=_word_vbuaa + sta.z __8 + lda #0 + sta.z __8+1 + // [56] (word~) gotoxy::$9 ← (word~) gotoxy::$8 << (byte) 2 -- vwuz1=vwuz2_rol_2 + lda.z __8 + asl + sta.z __9 + lda.z __8+1 + rol + sta.z __9+1 + asl.z __9 + rol.z __9+1 + // [57] (word~) gotoxy::$10 ← (word~) gotoxy::$9 + (word~) gotoxy::$8 -- vwuz1=vwuz2_plus_vwuz1 + lda.z __10 + clc + adc.z __9 + sta.z __10 + lda.z __10+1 + adc.z __9+1 + sta.z __10+1 + // offset = (unsigned int)y*CONIO_WIDTH + x + // [58] (word) gotoxy::offset#0 ← (word~) gotoxy::$10 << (byte) 3 -- vwuz1=vwuz1_rol_3 + asl.z offset + rol.z offset+1 + asl.z offset + rol.z offset+1 + asl.z offset + rol.z offset+1 + // CONIO_SCREEN_TEXT + offset + // [59] (byte*) conio_cursor_text#1 ← (const nomodify byte*) CONIO_SCREEN_TEXT + (word) gotoxy::offset#0 -- pbuz1=pbuc1_plus_vwuz2 + lda.z offset + clc + adc #CONIO_SCREEN_TEXT + sta.z conio_cursor_text+1 + // CONIO_SCREEN_COLORS + offset + // [60] (byte*) conio_cursor_color#1 ← (const nomodify byte*) CONIO_SCREEN_COLORS + (word) gotoxy::offset#0 -- pbuz1=pbuc1_plus_vwuz1 + clc + lda.z conio_cursor_color + adc #CONIO_SCREEN_COLORS + sta.z conio_cursor_color+1 + // gotoxy::@return + // } + // [61] return + rts +} + // tod_str +// Convert time of day to a human-readable string "hh:mm:ss:10" +// tod_str(byte zp($b) tod_TENTHS, byte zp($c) tod_SEC, byte register(Y) tod_MIN, byte register(X) tod_HOURS) +tod_str: { + .label tod_TENTHS = $b + .label tod_SEC = $c + // tod.HOURS>>4 + // [62] (byte~) tod_str::$0 ← (byte) tod_str::tod_HOURS#0 >> (byte) 4 -- vbuaa=vbuxx_ror_4 + txa + lsr + lsr + lsr + lsr + // '0'+(tod.HOURS>>4) + // [63] (byte~) tod_str::$1 ← (byte) '0' + (byte~) tod_str::$0 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // tod_buffer[0] = '0'+(tod.HOURS>>4) + // [64] *((const byte*) tod_buffer) ← (byte~) tod_str::$1 -- _deref_pbuc1=vbuaa + sta tod_buffer + // tod.HOURS&0x0f + // [65] (byte~) tod_str::$2 ← (byte) tod_str::tod_HOURS#0 & (byte) $f -- vbuaa=vbuxx_band_vbuc1 + txa + and #$f + // '0'+(tod.HOURS&0x0f) + // [66] (byte~) tod_str::$3 ← (byte) '0' + (byte~) tod_str::$2 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // tod_buffer[1] = '0'+(tod.HOURS&0x0f) + // [67] *((const byte*) tod_buffer+(byte) 1) ← (byte~) tod_str::$3 -- _deref_pbuc1=vbuaa + sta tod_buffer+1 + // tod.MIN>>4 + // [68] (byte~) tod_str::$4 ← (byte) tod_str::tod_MIN#0 >> (byte) 4 -- vbuaa=vbuyy_ror_4 + tya + lsr + lsr + lsr + lsr + // '0'+(tod.MIN>>4) + // [69] (byte~) tod_str::$5 ← (byte) '0' + (byte~) tod_str::$4 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // tod_buffer[3] = '0'+(tod.MIN>>4) + // [70] *((const byte*) tod_buffer+(byte) 3) ← (byte~) tod_str::$5 -- _deref_pbuc1=vbuaa + sta tod_buffer+3 + // tod.MIN&0x0f + // [71] (byte~) tod_str::$6 ← (byte) tod_str::tod_MIN#0 & (byte) $f -- vbuaa=vbuyy_band_vbuc1 + tya + and #$f + // '0'+(tod.MIN&0x0f) + // [72] (byte~) tod_str::$7 ← (byte) '0' + (byte~) tod_str::$6 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // tod_buffer[4] = '0'+(tod.MIN&0x0f) + // [73] *((const byte*) tod_buffer+(byte) 4) ← (byte~) tod_str::$7 -- _deref_pbuc1=vbuaa + sta tod_buffer+4 + // tod.SEC>>4 + // [74] (byte~) tod_str::$8 ← (byte) tod_str::tod_SEC#0 >> (byte) 4 -- vbuaa=vbuz1_ror_4 + lda.z tod_SEC + lsr + lsr + lsr + lsr + // '0'+(tod.SEC>>4) + // [75] (byte~) tod_str::$9 ← (byte) '0' + (byte~) tod_str::$8 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // tod_buffer[6] = '0'+(tod.SEC>>4) + // [76] *((const byte*) tod_buffer+(byte) 6) ← (byte~) tod_str::$9 -- _deref_pbuc1=vbuaa + sta tod_buffer+6 + // tod.SEC&0x0f + // [77] (byte~) tod_str::$10 ← (byte) tod_str::tod_SEC#0 & (byte) $f -- vbuaa=vbuz1_band_vbuc1 + lda #$f + and.z tod_SEC + // '0'+(tod.SEC&0x0f) + // [78] (byte~) tod_str::$11 ← (byte) '0' + (byte~) tod_str::$10 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // tod_buffer[7] = '0'+(tod.SEC&0x0f) + // [79] *((const byte*) tod_buffer+(byte) 7) ← (byte~) tod_str::$11 -- _deref_pbuc1=vbuaa + sta tod_buffer+7 + // tod.TENTHS>>4 + // [80] (byte~) tod_str::$12 ← (byte) tod_str::tod_TENTHS#0 >> (byte) 4 -- vbuaa=vbuz1_ror_4 + lda.z tod_TENTHS + lsr + lsr + lsr + lsr + // '0'+(tod.TENTHS>>4) + // [81] (byte~) tod_str::$13 ← (byte) '0' + (byte~) tod_str::$12 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // tod_buffer[9] = '0'+(tod.TENTHS>>4) + // [82] *((const byte*) tod_buffer+(byte) 9) ← (byte~) tod_str::$13 -- _deref_pbuc1=vbuaa + sta tod_buffer+9 + // tod.TENTHS&0x0f + // [83] (byte~) tod_str::$14 ← (byte) tod_str::tod_TENTHS#0 & (byte) $f -- vbuaa=vbuz1_band_vbuc1 + lda #$f + and.z tod_TENTHS + // '0'+(tod.TENTHS&0x0f) + // [84] (byte~) tod_str::$15 ← (byte) '0' + (byte~) tod_str::$14 -- vbuaa=vbuc1_plus_vbuaa + clc + adc #'0' + // tod_buffer[10] = '0'+(tod.TENTHS&0x0f) + // [85] *((const byte*) tod_buffer+(byte) $a) ← (byte~) tod_str::$15 -- _deref_pbuc1=vbuaa + sta tod_buffer+$a + // tod_str::@return + // } + // [86] return + rts +} + // tod_read +// Read time of day +tod_read: { + .label return_HOURS = $a + .label return_MIN = 9 + // hours = CIA1->TOD_HOURS + // [87] (byte) tod_read::return_HOURS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) -- vbuz1=_deref_pbuc1 + // Reading sequence is important. TOD latches on reading hours until 10ths is read. + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS + sta.z return_HOURS + // mins = CIA1->TOD_MIN + // [88] (byte) tod_read::return_MIN#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) -- vbuaa=_deref_pbuc1 + lda CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_MIN + // secs = CIA1->TOD_SEC + // [89] (byte) tod_read::return_SEC#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) -- vbuxx=_deref_pbuc1 + ldx CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_SEC + // tenths = CIA1->TOD_10THS + // [90] (byte) tod_read::return_TENTHS#0 ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) -- vbuyy=_deref_pbuc1 + ldy CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_10THS + // tod_read::@return + // } + // [91] return + rts +} + // tod_init +// Initialize time-of-day clock +// This uses the MOS6526 CIA#1 +// tod_init(byte zp(9) tod_TENTHS, byte zp($a) tod_SEC, byte register(X) tod_MIN, byte register(Y) tod_HOURS) +tod_init: { + .label tod_TENTHS = 9 + .label tod_SEC = $a + // CIA1->TIMER_A_CONTROL |= 0x80 + // [92] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc2_bor_vbuc3 + // Set 50hz (this assumes PAL!) (bit7=1) + lda #$80 + ora CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL + // CIA1->TIMER_B_CONTROL &= 0x7f + // [93] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) ← *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc2_band_vbuc3 + // Writing TOD clock (bit7=0) + lda #$7f + and CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL + // CIA1->TOD_HOURS = tod.HOURS + // [94] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) ← (byte) tod_init::tod_HOURS#0 -- _deref_pbuc1=vbuyy + // Reset TOD clock + // Writing sequence is important. TOD stops when hours is written and starts when 10ths is written. + sty CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS + // CIA1->TOD_MIN = tod.MIN + // [95] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) ← (byte) tod_init::tod_MIN#0 -- _deref_pbuc1=vbuxx + stx CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_MIN + // CIA1->TOD_SEC = tod.SEC + // [96] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) ← (byte) tod_init::tod_SEC#0 -- _deref_pbuc1=vbuz1 + lda.z tod_SEC + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_SEC + // CIA1->TOD_10THS = tod.TENTHS + // [97] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) ← (byte) tod_init::tod_TENTHS#0 -- _deref_pbuc1=vbuz1 + lda.z tod_TENTHS + sta CIA1+OFFSET_STRUCT_MOS6526_CIA_TOD_10THS + // tod_init::@return + // } + // [98] return + rts +} + // File Data + // The buffer used by tod_str() + tod_buffer: .text "00:00:00:00" + .byte 0 + // Time of Day 00:00:00:00 + TOD_ZERO: .byte 0, 0, 0, 0 + diff --git a/src/test/ref/tod-1.sym b/src/test/ref/tod-1.sym new file mode 100644 index 000000000..cab5e63ed --- /dev/null +++ b/src/test/ref/tod-1.sym @@ -0,0 +1,207 @@ +(label) @1 +(label) @begin +(label) @end +(const nomodify struct MOS6526_CIA*) CIA1 = (struct MOS6526_CIA*) 56320 +(const nomodify byte) CONIO_HEIGHT = (byte) $19 +(const nomodify byte*) CONIO_SCREEN_COLORS = (byte*) 55296 +(const nomodify byte*) CONIO_SCREEN_TEXT = (byte*) 1024 +(const nomodify byte) CONIO_TEXTCOLOR_DEFAULT = (byte) $e +(const nomodify byte) CONIO_WIDTH = (byte) $28 +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = (byte) 8 +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS = (byte) $b +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN = (byte) $a +(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC = (byte) 9 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS = (byte) 3 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN = (byte) 2 +(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC = (byte) 1 +(byte) TIME_OF_DAY::HOURS +(byte) TIME_OF_DAY::MIN +(byte) TIME_OF_DAY::SEC +(byte) TIME_OF_DAY::TENTHS +(struct TIME_OF_DAY) TOD_ZERO loadstore mem[4] = { TENTHS: (byte) 0, SEC: (byte) 0, MIN: (byte) 0, HOURS: (byte) 0 } +(byte*) conio_cursor_color +(byte*) conio_cursor_color#1 conio_cursor_color zp[2]:7 1000083.6666666666 +(byte*) conio_cursor_color#17 conio_cursor_color zp[2]:7 1366668.3333333335 +(byte*) conio_cursor_color#19 conio_cursor_color zp[2]:7 233444.88888888888 +(byte*) conio_cursor_color#26 conio_cursor_color zp[2]:7 600000.6000000001 +(byte*) conio_cursor_text +(byte*) conio_cursor_text#1 conio_cursor_text zp[2]:5 923154.1538461538 +(byte*) conio_cursor_text#17 conio_cursor_text zp[2]:5 1366668.3333333335 +(byte*) conio_cursor_text#19 conio_cursor_text zp[2]:5 300143.4285714285 +(byte*) conio_cursor_text#26 conio_cursor_text zp[2]:5 428571.85714285716 +(byte) conio_cursor_x +(byte) conio_cursor_x#18 reg byte x 366667.3333333334 +(byte) conio_cursor_x#20 reg byte x 110000.20000000001 +(byte) conio_cursor_x#4 reg byte x 1500001.5 +(byte) conio_cursor_y +(byte) conio_cursor_y#1 conio_cursor_y zp[1]:4 666722.4444444445 +(byte) conio_cursor_y#18 conio_cursor_y zp[1]:4 1366668.3333333335 +(byte) conio_cursor_y#20 conio_cursor_y zp[1]:4 258417.08333333337 +(byte) conio_cursor_y#27 conio_cursor_y zp[1]:4 1500001.5 +(byte) conio_textcolor +(void()) cputc((byte) cputc::c) +(label) cputc::@1 +(label) cputc::@2 +(label) cputc::@3 +(label) cputc::@4 +(label) cputc::@return +(byte) cputc::c +(byte) cputc::c#0 reg byte a 1050001.5 +(void()) cputs((to_nomodify byte*) cputs::s) +(label) cputs::@1 +(label) cputs::@2 +(label) cputs::@return +(byte) cputs::c +(byte) cputs::c#1 reg byte a 100001.0 +(to_nomodify byte*) cputs::s +(to_nomodify byte*) cputs::s#0 s zp[2]:2 50000.5 +(to_nomodify byte*) cputs::s#2 s zp[2]:2 150001.5 +(void()) gotoxy((byte) gotoxy::x , (byte) gotoxy::y) +(word~) gotoxy::$10 zp[2]:7 2.0000002E7 +(word~) gotoxy::$8 zp[2]:7 1.50000015E7 +(word~) gotoxy::$9 zp[2]:13 2.0000002E7 +(label) gotoxy::@1 +(label) gotoxy::@2 +(label) gotoxy::@3 +(label) gotoxy::@return +(word) gotoxy::offset +(word) gotoxy::offset#0 offset zp[2]:7 1.50000015E7 +(byte) gotoxy::x +(byte) gotoxy::y +(byte) gotoxy::y#1 reg byte a 2000002.0 +(byte) gotoxy::y#4 reg byte a 7000001.0 +(byte) gotoxy::y#5 reg byte a 1.0000001E7 +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(byte) main::tod_HOURS +(byte) main::tod_HOURS#0 tod_HOURS zp[1]:10 40.4 +(byte) main::tod_MIN +(byte) main::tod_MIN#0 tod_MIN zp[1]:9 40.4 +(byte) main::tod_SEC +(byte) main::tod_SEC#0 reg byte x 40.4 +(byte) main::tod_TENTHS +(byte) main::tod_TENTHS#0 reg byte y 40.4 +(const byte*) tod_buffer[] = (byte*) "00:00:00:00" +(void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) +(label) tod_init::@return +(struct TIME_OF_DAY) tod_init::tod +(byte) tod_init::tod_HOURS +(byte) tod_init::tod_HOURS#0 reg byte y 37.33333333333333 +(byte) tod_init::tod_MIN +(byte) tod_init::tod_MIN#0 reg byte x 22.4 +(byte) tod_init::tod_SEC +(byte) tod_init::tod_SEC#0 tod_SEC zp[1]:10 16.0 +(byte) tod_init::tod_TENTHS +(byte) tod_init::tod_TENTHS#0 tod_TENTHS zp[1]:9 12.444444444444443 +(struct TIME_OF_DAY()) tod_read() +(label) tod_read::@return +(byte) tod_read::hours +(byte) tod_read::mins +(struct TIME_OF_DAY) tod_read::return +(byte) tod_read::return_HOURS +(byte) tod_read::return_HOURS#0 return_HOURS zp[1]:10 122.44444444444446 +(byte) tod_read::return_HOURS#2 return_HOURS zp[1]:10 50.5 +(byte) tod_read::return_MIN +(byte) tod_read::return_MIN#0 reg byte a 157.42857142857142 +(byte) tod_read::return_MIN#2 return_MIN zp[1]:9 50.5 +(byte) tod_read::return_SEC +(byte) tod_read::return_SEC#0 reg byte x 220.39999999999998 +(byte) tod_read::return_SEC#2 reg byte x 50.5 +(byte) tod_read::return_TENTHS +(byte) tod_read::return_TENTHS#0 reg byte y 367.33333333333337 +(byte) tod_read::return_TENTHS#2 reg byte y 50.5 +(byte) tod_read::secs +(byte) tod_read::tenths +(byte) tod_read::tod_HOURS +(byte) tod_read::tod_MIN +(byte) tod_read::tod_SEC +(byte) tod_read::tod_TENTHS +(byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) +(byte~) tod_str::$0 reg byte a 2002.0 +(byte~) tod_str::$1 reg byte a 2002.0 +(byte~) tod_str::$10 reg byte a 2002.0 +(byte~) tod_str::$11 reg byte a 2002.0 +(byte~) tod_str::$12 reg byte a 2002.0 +(byte~) tod_str::$13 reg byte a 2002.0 +(byte~) tod_str::$14 reg byte a 2002.0 +(byte~) tod_str::$15 reg byte a 2002.0 +(byte~) tod_str::$2 reg byte a 2002.0 +(byte~) tod_str::$3 reg byte a 2002.0 +(byte~) tod_str::$4 reg byte a 2002.0 +(byte~) tod_str::$5 reg byte a 2002.0 +(byte~) tod_str::$6 reg byte a 2002.0 +(byte~) tod_str::$7 reg byte a 2002.0 +(byte~) tod_str::$8 reg byte a 2002.0 +(byte~) tod_str::$9 reg byte a 2002.0 +(label) tod_str::@return +(byte*) tod_str::return +(struct TIME_OF_DAY) tod_str::tod +(byte) tod_str::tod_HOURS +(byte) tod_str::tod_HOURS#0 reg byte x 525.75 +(byte) tod_str::tod_MIN +(byte) tod_str::tod_MIN#0 reg byte y 191.1818181818182 +(byte) tod_str::tod_SEC +(byte) tod_str::tod_SEC#0 tod_SEC zp[1]:12 116.83333333333334 +(byte) tod_str::tod_TENTHS +(byte) tod_str::tod_TENTHS#0 tod_TENTHS zp[1]:11 84.12 + +zp[2]:2 [ cputs::s#2 cputs::s#0 ] +reg byte x [ conio_cursor_x#20 conio_cursor_x#18 conio_cursor_x#4 ] +zp[1]:4 [ conio_cursor_y#20 conio_cursor_y#1 conio_cursor_y#18 conio_cursor_y#27 ] +zp[2]:5 [ conio_cursor_text#19 conio_cursor_text#1 conio_cursor_text#17 conio_cursor_text#26 ] +zp[2]:7 [ conio_cursor_color#19 conio_cursor_color#1 conio_cursor_color#17 conio_cursor_color#26 gotoxy::offset#0 gotoxy::$8 gotoxy::$10 ] +reg byte a [ gotoxy::y#5 gotoxy::y#4 gotoxy::y#1 ] +reg byte x [ tod_init::tod_MIN#0 ] +reg byte y [ tod_init::tod_HOURS#0 ] +reg byte y [ tod_read::return_TENTHS#2 ] +reg byte x [ tod_read::return_SEC#2 ] +zp[1]:9 [ tod_read::return_MIN#2 main::tod_MIN#0 tod_init::tod_TENTHS#0 ] +zp[1]:10 [ tod_read::return_HOURS#2 main::tod_HOURS#0 tod_read::return_HOURS#0 tod_init::tod_SEC#0 ] +reg byte y [ main::tod_TENTHS#0 ] +reg byte x [ main::tod_SEC#0 ] +zp[1]:11 [ tod_str::tod_TENTHS#0 ] +zp[1]:12 [ tod_str::tod_SEC#0 ] +reg byte y [ tod_str::tod_MIN#0 ] +reg byte x [ tod_str::tod_HOURS#0 ] +reg byte a [ cputs::c#1 ] +reg byte a [ cputc::c#0 ] +zp[2]:13 [ gotoxy::$9 ] +reg byte a [ tod_str::$0 ] +reg byte a [ tod_str::$1 ] +reg byte a [ tod_str::$2 ] +reg byte a [ tod_str::$3 ] +reg byte a [ tod_str::$4 ] +reg byte a [ tod_str::$5 ] +reg byte a [ tod_str::$6 ] +reg byte a [ tod_str::$7 ] +reg byte a [ tod_str::$8 ] +reg byte a [ tod_str::$9 ] +reg byte a [ tod_str::$10 ] +reg byte a [ tod_str::$11 ] +reg byte a [ tod_str::$12 ] +reg byte a [ tod_str::$13 ] +reg byte a [ tod_str::$14 ] +reg byte a [ tod_str::$15 ] +reg byte a [ tod_read::return_MIN#0 ] +reg byte x [ tod_read::return_SEC#0 ] +reg byte y [ tod_read::return_TENTHS#0 ] +mem[4] [ TOD_ZERO ] diff --git a/src/test/ref/zeropage-sinus.log b/src/test/ref/zeropage-sinus.log index 4f73ed153..f872857b9 100644 --- a/src/test/ref/zeropage-sinus.log +++ b/src/test/ref/zeropage-sinus.log @@ -1,3 +1,5 @@ +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) +Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -91,6 +93,20 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*)(number) $400 (const to_nomodify byte*) SINTABLE[(number) $100] = kickasm {{ .for(var i=0;i<$100;i++) .byte round(127.5+127.5*cos(toRadians(360*i/256))) @@ -261,6 +277,20 @@ saveZeropage::@return: scope:[saveZeropage] from saveZeropage VARIABLE REGISTER WEIGHTS +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (void()) animSprite() (void()) main() (void()) restoreZeropage() @@ -451,6 +481,7 @@ Statement asm { ldx#0 !: ldaSINTABLE,x sta$00,x inx bne!- } always clobbers reg Statement asm { ldx#0 !: lda$00,x staZP_STORAGE,x inx bne!- } always clobbers reg byte a reg byte x REGISTER UPLIFT SCOPES +Uplift Scope [MOS6526_CIA] Uplift Scope [main] Uplift Scope [saveZeropage] Uplift Scope [restoreZeropage] @@ -458,6 +489,7 @@ Uplift Scope [sinZeropage] Uplift Scope [animSprite] Uplift Scope [] +Uplifting [MOS6526_CIA] best 417 combination Uplifting [main] best 417 combination Uplifting [saveZeropage] best 417 combination Uplifting [restoreZeropage] best 417 combination @@ -676,6 +708,20 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 1024 (const to_nomodify byte*) SINTABLE[(number) $100] = kickasm {{ .for(var i=0;i<$100;i++) .byte round(127.5+127.5*cos(toRadians(360*i/256))) diff --git a/src/test/ref/zeropage-sinus.sym b/src/test/ref/zeropage-sinus.sym index 062165441..126427526 100644 --- a/src/test/ref/zeropage-sinus.sym +++ b/src/test/ref/zeropage-sinus.sym @@ -1,6 +1,20 @@ (label) @1 (label) @begin (label) @end +(byte) MOS6526_CIA::INTERRUPT +(byte) MOS6526_CIA::PORT_A +(byte) MOS6526_CIA::PORT_A_DDR +(byte) MOS6526_CIA::PORT_B +(byte) MOS6526_CIA::PORT_B_DDR +(byte) MOS6526_CIA::SERIAL_DATA +(word) MOS6526_CIA::TIMER_A +(byte) MOS6526_CIA::TIMER_A_CONTROL +(word) MOS6526_CIA::TIMER_B +(byte) MOS6526_CIA::TIMER_B_CONTROL +(byte) MOS6526_CIA::TOD_10THS +(byte) MOS6526_CIA::TOD_HOURS +(byte) MOS6526_CIA::TOD_MIN +(byte) MOS6526_CIA::TOD_SEC (const nomodify byte*) SCREEN = (byte*) 1024 (const to_nomodify byte*) SINTABLE[(number) $100] = kickasm {{ .for(var i=0;i<$100;i++) .byte round(127.5+127.5*cos(toRadians(360*i/256)))