From 089125ff5e3d7c6c8bef72993a33d847e3f5f5db Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Mon, 21 Dec 2020 01:04:34 +0100 Subject: [PATCH] Implemented new interrupt system supporting more platforms and CPUs. Closes #599 --- .../cache/fragment-cache-csg65ce02.asm | 618 +- .../cache/fragment-cache-mega45gs02.asm | 1391 +- .../fragment/cache/fragment-cache-mos6502.asm | 2 +- .../cache/fragment-cache-mos6502x.asm | 20856 +--------------- .../cache/fragment-cache-rom6502x.asm | 1130 + .../cache/fragment-cache-wdc65c02.asm | 701 +- .../isr_hardware_all_entry.asm | 4 + .../isr_hardware_all_exit.asm | 5 + .../mos6502-common/isr_hardware_all_entry.asm | 5 + .../mos6502-common/isr_hardware_all_exit.asm | 6 + .../isr_hardware_cloba_entry.asm | 1 + .../isr_hardware_cloba_exit.asm | 2 + .../isr_hardware_clobax_entry.asm | 3 + .../isr_hardware_clobax_exit.asm | 4 + .../isr_hardware_clobay_entry.asm | 3 + .../isr_hardware_clobay_exit.asm | 4 + .../isr_hardware_none_entry.asm | 0 .../mos6502-common/isr_hardware_none_exit.asm | 1 + .../mos6502-common/isr_rom_min_c64_entry.asm | 0 .../mos6502-common/isr_rom_min_c64_exit.asm | 1 + .../mos6502-common/isr_rom_min_cx16_entry.asm | 0 .../mos6502-common/isr_rom_min_cx16_exit.asm | 1 + .../mos6502-common/isr_rom_sys_c64_entry.asm | 0 .../mos6502-common/isr_rom_sys_c64_exit.asm | 1 + .../mos6502-common/isr_rom_sys_cx16_entry.asm | 0 .../mos6502-common/isr_rom_sys_cx16_exit.asm | 1 + .../isr_hardware_all_entry.asm | 3 + .../mos6502-selfmod/isr_hardware_all_exit.asm | 4 + .../isr_hardware_clobax_entry.asm | 2 + .../isr_hardware_clobax_exit.asm | 3 + .../isr_hardware_clobay_entry.asm | 2 + .../isr_hardware_clobay_exit.asm | 3 + .../isr_hardware_clobax_entry.asm | 2 + .../isr_hardware_clobax_exit.asm | 3 + .../isr_hardware_clobay_entry.asm | 2 + .../isr_hardware_clobay_exit.asm | 3 + .../isr_hardware_clobx_entry.asm | 1 + .../isr_hardware_clobx_exit.asm | 2 + .../isr_hardware_all_entry.asm | 3 + .../isr_hardware_all_exit.asm | 4 + .../java/dk/camelot64/kickc/Compiler.java | 5 +- .../fragment/AsmFragmentInstanceSpec.java | 2 +- ...va => AsmFragmentInstanceSpecBuilder.java} | 116 +- .../AsmFragmentTemplateSynthesizer.java | 3 +- .../dk/camelot64/kickc/model/Directive.java | 6 +- .../camelot64/kickc/model/TargetPlatform.java | 10 + .../kickc/model/symbols/Procedure.java | 30 +- .../dk/camelot64/kickc/parser/CParser.java | 1 + .../kickc/parser/CTargetPlatformParser.java | 5 + .../dk/camelot64/kickc/parser/KickCLexer.g4 | 2 +- .../camelot64/kickc/parser/KickCLexer.interp | 4 +- .../dk/camelot64/kickc/parser/KickCLexer.java | 1119 +- .../camelot64/kickc/parser/KickCLexer.tokens | 2 +- .../camelot64/kickc/parser/KickCParser.interp | 2 +- .../camelot64/kickc/parser/KickCParser.java | 2 +- .../camelot64/kickc/parser/KickCParser.tokens | 2 +- .../Pass0GenerateStatementSequence.java | 37 +- .../kickc/passes/Pass4CodeGeneration.java | 152 +- .../passes/Pass4InterruptClobberFix.java | 130 +- src/main/kc/target/asm6502.tgt | 1 + src/main/kc/target/atari2600.tgt | 1 + src/main/kc/target/atarixl.tgt | 1 + src/main/kc/target/c64.tgt | 1 + src/main/kc/target/c64basic.tgt | 1 + src/main/kc/target/cx16.tgt | 1 + src/main/kc/target/mega65.tgt | 1 + src/main/kc/target/mega65_c64.tgt | 1 + src/main/kc/target/nes.tgt | 7 +- src/main/kc/target/plus4.tgt | 1 + src/main/kc/target/plus4basic.tgt | 1 + src/main/kc/target/vic20.tgt | 1 + src/main/kc/target/vic20basic.tgt | 1 + .../dk/camelot64/kickc/test/TestPrograms.java | 10 + 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/clobber-a-problem.c | 2 +- .../kc/complex/ataritempest/ataritempest.c | 3 +- src/test/kc/complex/clearscreen/clearscreen.c | 4 +- src/test/kc/complex/lazynes/lazynes.c | 2 +- src/test/kc/complex/lazynes/lazynes.h | 2 +- src/test/kc/complex/nes-balls/kickballs-2.c | 2 +- src/test/kc/complex/nes-balls/kickballs-3.c | 2 +- src/test/kc/complex/polygon/polygon.c | 4 +- .../complex/spritescroller/spritescroller.c | 2 +- src/test/kc/complex/tetris/tetris-sprites.c | 2 +- src/test/kc/const-volatile-problem.c | 2 +- src/test/kc/examples/cx16/rasterbars.c | 15 +- src/test/kc/examples/cx16/sprites.c | 12 +- src/test/kc/examples/cx16/text.c | 2 - src/test/kc/examples/irq/irq-hyperscreen.c | 4 +- src/test/kc/examples/mega65/banked-music.c | 2 +- src/test/kc/examples/mega65/raster65.c | 2 +- src/test/kc/examples/music/music_irq.c | 2 +- src/test/kc/examples/nes/nes-conio.c | 2 +- src/test/kc/examples/nes/nes-demo.c | 2 +- src/test/kc/examples/nes/nes-dxycp.c | 2 +- src/test/kc/examples/nmisamples/nmisamples.c | 4 +- .../kc/interrupt-volatile-reuse-problem1.c | 2 +- .../kc/interrupt-volatile-reuse-problem2.c | 2 +- src/test/kc/irq-hardware-clobber-jsr.c | 2 +- src/test/kc/irq-hardware-clobber.c | 2 +- src/test/kc/irq-hardware-stack.c | 4 +- src/test/kc/irq-hardware.c | 2 +- src/test/kc/irq-idx-problem.c | 2 +- src/test/kc/irq-kernel-minimal.c | 2 +- src/test/kc/irq-kernel.c | 2 +- src/test/kc/irq-local-var-overlap-problem.c | 2 +- src/test/kc/irq-pragma.c | 21 + src/test/kc/irq-raster.c | 2 +- src/test/kc/irq-unknown-type.c | 18 + src/test/kc/irq-volatile-bool-problem.c | 2 +- src/test/kc/kickasm-uses-prevent-deletion.c | 2 +- src/test/kc/longbranch-interrupt-problem.c | 2 +- .../multiplexer-irq/simple-multiplexer-irq.c | 2 +- src/test/kc/no-calledinterrupt.c | 2 +- src/test/kc/no-inlineinterrupt.c | 2 +- src/test/kc/no-paraminterrupt.c | 2 +- src/test/kc/no-returninterrupt.c | 2 +- src/test/kc/test-interrupt-notype.c | 2 +- src/test/kc/test-interrupt-volatile-write.c | 2 +- src/test/kc/test-interrupt-volatile.c | 2 +- src/test/kc/test-interrupt.c | 2 +- src/test/kc/unused-irq.c | 4 +- src/test/ref/bitmap-plot-0.asm | 5 +- src/test/ref/bitmap-plot-0.cfg | 2 +- src/test/ref/bitmap-plot-0.log | 78 +- src/test/ref/bitmap-plot-0.sym | 2 +- src/test/ref/bitmap-plot-1.asm | 5 +- src/test/ref/bitmap-plot-1.cfg | 2 +- src/test/ref/bitmap-plot-1.log | 88 +- src/test/ref/bitmap-plot-1.sym | 2 +- src/test/ref/bitmap-plot-2.asm | 5 +- src/test/ref/bitmap-plot-2.cfg | 2 +- src/test/ref/bitmap-plot-2.log | 90 +- src/test/ref/bitmap-plot-2.sym | 2 +- src/test/ref/clobber-a-problem.asm | 4 +- src/test/ref/clobber-a-problem.cfg | 2 +- src/test/ref/clobber-a-problem.log | 45 +- src/test/ref/clobber-a-problem.sym | 2 +- .../ref/complex/ataritempest/ataritempest.asm | 10 +- .../ref/complex/ataritempest/ataritempest.cfg | 2 +- .../ref/complex/ataritempest/ataritempest.log | 53 +- .../ref/complex/ataritempest/ataritempest.sym | 2 +- .../ref/complex/clearscreen/clearscreen.asm | 17 +- .../ref/complex/clearscreen/clearscreen.cfg | 4 +- .../ref/complex/clearscreen/clearscreen.log | 256 +- .../ref/complex/clearscreen/clearscreen.sym | 4 +- .../ref/complex/nes-balls/kickballs-2.asm | 9 +- .../ref/complex/nes-balls/kickballs-2.cfg | 2 +- .../ref/complex/nes-balls/kickballs-2.log | 115 +- .../ref/complex/nes-balls/kickballs-2.sym | 2 +- .../ref/complex/nes-balls/kickballs-3.asm | 9 +- .../ref/complex/nes-balls/kickballs-3.cfg | 2 +- .../ref/complex/nes-balls/kickballs-3.log | 101 +- .../ref/complex/nes-balls/kickballs-3.sym | 2 +- src/test/ref/complex/polygon/polygon.cfg | 4 +- src/test/ref/complex/polygon/polygon.log | 170 +- src/test/ref/complex/polygon/polygon.sym | 4 +- .../complex/spritescroller/spritescroller.cfg | 2 +- .../complex/spritescroller/spritescroller.log | 124 +- .../complex/spritescroller/spritescroller.sym | 2 +- src/test/ref/complex/tetris/test-sprites.asm | 4 +- src/test/ref/complex/tetris/test-sprites.cfg | 2 +- src/test/ref/complex/tetris/test-sprites.log | 83 +- src/test/ref/complex/tetris/test-sprites.sym | 2 +- src/test/ref/complex/tetris/tetris.asm | 4 +- src/test/ref/complex/tetris/tetris.cfg | 2 +- src/test/ref/complex/tetris/tetris.log | 301 +- src/test/ref/complex/tetris/tetris.sym | 2 +- src/test/ref/const-volatile-problem.cfg | 2 +- src/test/ref/const-volatile-problem.log | 34 +- src/test/ref/const-volatile-problem.sym | 2 +- src/test/ref/cpu-65ce02-eightqueens.asm | 7 +- src/test/ref/cpu-65ce02-eightqueens.log | 72 +- src/test/ref/examples/cx16/rasterbars.asm | 8 +- src/test/ref/examples/cx16/rasterbars.cfg | 59 +- src/test/ref/examples/cx16/rasterbars.log | 347 +- src/test/ref/examples/cx16/rasterbars.sym | 2 +- src/test/ref/examples/cx16/sprites.asm | 10 +- src/test/ref/examples/cx16/sprites.cfg | 2 +- src/test/ref/examples/cx16/sprites.log | 74 +- src/test/ref/examples/cx16/sprites.sym | 10 +- src/test/ref/examples/irq/irq-hyperscreen.asm | 16 - src/test/ref/examples/irq/irq-hyperscreen.cfg | 4 +- src/test/ref/examples/irq/irq-hyperscreen.log | 94 +- src/test/ref/examples/irq/irq-hyperscreen.sym | 4 +- src/test/ref/examples/mega65/banked-music.asm | 14 +- src/test/ref/examples/mega65/banked-music.cfg | 2 +- src/test/ref/examples/mega65/banked-music.log | 101 +- src/test/ref/examples/mega65/banked-music.sym | 2 +- .../ref/examples/mega65/helloworld-mega65.asm | 7 +- .../ref/examples/mega65/helloworld-mega65.log | 24 +- src/test/ref/examples/mega65/raster65.asm | 14 +- src/test/ref/examples/mega65/raster65.cfg | 2 +- src/test/ref/examples/mega65/raster65.log | 147 +- src/test/ref/examples/mega65/raster65.sym | 2 +- src/test/ref/examples/music/music_irq.cfg | 2 +- src/test/ref/examples/music/music_irq.log | 36 +- src/test/ref/examples/music/music_irq.sym | 2 +- src/test/ref/examples/nes/nes-conio.asm | 1 + src/test/ref/examples/nes/nes-conio.cfg | 2 +- src/test/ref/examples/nes/nes-conio.log | 106 +- src/test/ref/examples/nes/nes-conio.sym | 2 +- src/test/ref/examples/nes/nes-demo.asm | 1 + src/test/ref/examples/nes/nes-demo.cfg | 2 +- src/test/ref/examples/nes/nes-demo.log | 60 +- src/test/ref/examples/nes/nes-demo.sym | 2 +- src/test/ref/examples/nes/nes-dxycp.asm | 1 + src/test/ref/examples/nes/nes-dxycp.cfg | 2 +- src/test/ref/examples/nes/nes-dxycp.log | 72 +- src/test/ref/examples/nes/nes-dxycp.sym | 2 +- .../ref/examples/nmisamples/nmisamples.asm | 14 +- .../ref/examples/nmisamples/nmisamples.cfg | 4 +- .../ref/examples/nmisamples/nmisamples.log | 92 +- .../ref/examples/nmisamples/nmisamples.sym | 4 +- .../ref/interrupt-volatile-reuse-problem1.cfg | 2 +- .../ref/interrupt-volatile-reuse-problem1.log | 36 +- .../ref/interrupt-volatile-reuse-problem1.sym | 2 +- .../ref/interrupt-volatile-reuse-problem2.cfg | 2 +- .../ref/interrupt-volatile-reuse-problem2.log | 36 +- .../ref/interrupt-volatile-reuse-problem2.sym | 2 +- src/test/ref/irq-hardware-clobber-jsr.asm | 5 +- src/test/ref/irq-hardware-clobber-jsr.cfg | 2 +- src/test/ref/irq-hardware-clobber-jsr.log | 55 +- src/test/ref/irq-hardware-clobber-jsr.sym | 2 +- src/test/ref/irq-hardware-clobber.asm | 5 +- src/test/ref/irq-hardware-clobber.cfg | 2 +- src/test/ref/irq-hardware-clobber.log | 48 +- src/test/ref/irq-hardware-clobber.sym | 2 +- src/test/ref/irq-hardware-stack.asm | 1 + src/test/ref/irq-hardware-stack.cfg | 2 +- src/test/ref/irq-hardware-stack.log | 32 +- src/test/ref/irq-hardware-stack.sym | 2 +- src/test/ref/irq-hardware.asm | 6 +- src/test/ref/irq-hardware.cfg | 2 +- src/test/ref/irq-hardware.log | 42 +- src/test/ref/irq-hardware.sym | 2 +- src/test/ref/irq-idx-problem.cfg | 2 +- src/test/ref/irq-idx-problem.log | 40 +- src/test/ref/irq-idx-problem.sym | 2 +- src/test/ref/irq-kernel-minimal.cfg | 2 +- src/test/ref/irq-kernel-minimal.log | 36 +- src/test/ref/irq-kernel-minimal.sym | 2 +- src/test/ref/irq-kernel.cfg | 2 +- src/test/ref/irq-kernel.log | 30 +- src/test/ref/irq-kernel.sym | 2 +- .../ref/irq-local-var-overlap-problem.cfg | 2 +- .../ref/irq-local-var-overlap-problem.log | 50 +- .../ref/irq-local-var-overlap-problem.sym | 2 +- src/test/ref/irq-pragma.asm | 32 + src/test/ref/irq-pragma.cfg | 19 + src/test/ref/irq-pragma.log | 223 + src/test/ref/irq-pragma.sym | 5 + src/test/ref/irq-raster.cfg | 2 +- src/test/ref/irq-raster.log | 30 +- src/test/ref/irq-raster.sym | 2 +- src/test/ref/irq-volatile-bool-problem.cfg | 2 +- src/test/ref/irq-volatile-bool-problem.log | 30 +- src/test/ref/irq-volatile-bool-problem.sym | 2 +- .../ref/kickasm-uses-prevent-deletion.cfg | 2 +- .../ref/kickasm-uses-prevent-deletion.log | 30 +- .../ref/kickasm-uses-prevent-deletion.sym | 2 +- src/test/ref/longbranch-interrupt-problem.cfg | 2 +- src/test/ref/longbranch-interrupt-problem.log | 34 +- src/test/ref/longbranch-interrupt-problem.sym | 2 +- .../simple-multiplexer-irq.cfg | 2 +- .../simple-multiplexer-irq.log | 92 +- .../simple-multiplexer-irq.sym | 2 +- src/test/ref/test-interrupt-notype.cfg | 2 +- src/test/ref/test-interrupt-notype.log | 30 +- src/test/ref/test-interrupt-notype.sym | 2 +- .../ref/test-interrupt-volatile-write.cfg | 2 +- .../ref/test-interrupt-volatile-write.log | 34 +- .../ref/test-interrupt-volatile-write.sym | 2 +- src/test/ref/test-interrupt-volatile.cfg | 2 +- src/test/ref/test-interrupt-volatile.log | 34 +- src/test/ref/test-interrupt-volatile.sym | 2 +- src/test/ref/test-interrupt.cfg | 2 +- src/test/ref/test-interrupt.log | 30 +- src/test/ref/test-interrupt.sym | 2 +- src/test/ref/unused-irq.cfg | 4 +- src/test/ref/unused-irq.log | 52 +- src/test/ref/unused-irq.sym | 4 +- 284 files changed, 6338 insertions(+), 24553 deletions(-) create mode 100644 src/main/fragment/cache/fragment-cache-rom6502x.asm create mode 100644 src/main/fragment/csg65ce02-common/isr_hardware_all_entry.asm create mode 100644 src/main/fragment/csg65ce02-common/isr_hardware_all_exit.asm create mode 100644 src/main/fragment/mos6502-common/isr_hardware_all_entry.asm create mode 100644 src/main/fragment/mos6502-common/isr_hardware_all_exit.asm create mode 100644 src/main/fragment/mos6502-common/isr_hardware_cloba_entry.asm create mode 100644 src/main/fragment/mos6502-common/isr_hardware_cloba_exit.asm create mode 100644 src/main/fragment/mos6502-common/isr_hardware_clobax_entry.asm create mode 100644 src/main/fragment/mos6502-common/isr_hardware_clobax_exit.asm create mode 100644 src/main/fragment/mos6502-common/isr_hardware_clobay_entry.asm create mode 100644 src/main/fragment/mos6502-common/isr_hardware_clobay_exit.asm create mode 100644 src/main/fragment/mos6502-common/isr_hardware_none_entry.asm create mode 100644 src/main/fragment/mos6502-common/isr_hardware_none_exit.asm create mode 100644 src/main/fragment/mos6502-common/isr_rom_min_c64_entry.asm create mode 100644 src/main/fragment/mos6502-common/isr_rom_min_c64_exit.asm create mode 100644 src/main/fragment/mos6502-common/isr_rom_min_cx16_entry.asm create mode 100644 src/main/fragment/mos6502-common/isr_rom_min_cx16_exit.asm create mode 100644 src/main/fragment/mos6502-common/isr_rom_sys_c64_entry.asm create mode 100644 src/main/fragment/mos6502-common/isr_rom_sys_c64_exit.asm create mode 100644 src/main/fragment/mos6502-common/isr_rom_sys_cx16_entry.asm create mode 100644 src/main/fragment/mos6502-common/isr_rom_sys_cx16_exit.asm create mode 100644 src/main/fragment/mos6502-selfmod/isr_hardware_all_entry.asm create mode 100644 src/main/fragment/mos6502-selfmod/isr_hardware_all_exit.asm create mode 100644 src/main/fragment/mos6502-selfmod/isr_hardware_clobax_entry.asm create mode 100644 src/main/fragment/mos6502-selfmod/isr_hardware_clobax_exit.asm create mode 100644 src/main/fragment/mos6502-selfmod/isr_hardware_clobay_entry.asm create mode 100644 src/main/fragment/mos6502-selfmod/isr_hardware_clobay_exit.asm create mode 100644 src/main/fragment/wdc65c02-common/isr_hardware_clobax_entry.asm create mode 100644 src/main/fragment/wdc65c02-common/isr_hardware_clobax_exit.asm create mode 100644 src/main/fragment/wdc65c02-common/isr_hardware_clobay_entry.asm create mode 100644 src/main/fragment/wdc65c02-common/isr_hardware_clobay_exit.asm create mode 100644 src/main/fragment/wdc65c02-common/isr_hardware_clobx_entry.asm create mode 100644 src/main/fragment/wdc65c02-common/isr_hardware_clobx_exit.asm create mode 100644 src/main/fragment/wdc65c02-specific/isr_hardware_all_entry.asm create mode 100644 src/main/fragment/wdc65c02-specific/isr_hardware_all_exit.asm rename src/main/java/dk/camelot64/kickc/fragment/{AsmFragmentInstanceSpecFactory.java => AsmFragmentInstanceSpecBuilder.java} (84%) create mode 100644 src/test/kc/irq-pragma.c create mode 100644 src/test/kc/irq-unknown-type.c create mode 100644 src/test/ref/irq-pragma.asm create mode 100644 src/test/ref/irq-pragma.cfg create mode 100644 src/test/ref/irq-pragma.log create mode 100644 src/test/ref/irq-pragma.sym diff --git a/src/main/fragment/cache/fragment-cache-csg65ce02.asm b/src/main/fragment/cache/fragment-cache-csg65ce02.asm index 1d872b48e..29a51e825 100644 --- a/src/main/fragment/cache/fragment-cache-csg65ce02.asm +++ b/src/main/fragment/cache/fragment-cache-csg65ce02.asm @@ -1,244 +1,4 @@ -//KICKC FRAGMENT CACHE 140bf2a915 140bf2c716 -//FRAGMENT vbuzz=vbuc1 -ldz #{c1} -//FRAGMENT vbuzz_lt_vbuc1_then_la1 -cpz #{c1} -bcc {la1} -//FRAGMENT pbuc1_derefidx_vbuzz=vbuzz -tza -tax -sta {c1},x -//FRAGMENT vbuzz=_inc_vbuzz -inz -//FRAGMENT vbsz1=_deref_pbsc1 -lda {c1} -sta {z1} -//FRAGMENT vbsz1=_neg_vbsz2 -lda {z2} -neg -sta {z1} -//FRAGMENT _deref_pbsc1=vbsz1 -lda {z1} -sta {c1} -//FRAGMENT vbsz1=vbsz2_ror_2 -lda {z2} -asr -asr -sta {z1} -//FRAGMENT vbsaa=_deref_pbsc1 -lda {c1} -//FRAGMENT vbsxx=_deref_pbsc1 -ldx {c1} -//FRAGMENT vbsz1=_neg_vbsaa -neg -sta {z1} -//FRAGMENT vbsz1=_neg_vbsxx -txa -neg -sta {z1} -//FRAGMENT vbsz1=_neg_vbsyy -tya -neg -sta {z1} -//FRAGMENT vbsz1=_neg_vbszz -tza -neg -sta {z1} -//FRAGMENT vbsaa=_neg_vbsz1 -lda {z1} -neg -//FRAGMENT vbsaa=_neg_vbsaa -neg -//FRAGMENT vbsaa=_neg_vbsxx -txa -neg -//FRAGMENT vbsaa=_neg_vbsyy -tya -neg -//FRAGMENT vbsaa=_neg_vbszz -tza -neg -//FRAGMENT vbsxx=_neg_vbsz1 -lda {z1} -neg -tax -//FRAGMENT vbsxx=_neg_vbsaa -neg -tax -//FRAGMENT vbsxx=_neg_vbsxx -txa -neg -tax -//FRAGMENT vbsxx=_neg_vbsyy -tya -neg -tax -//FRAGMENT vbsxx=_neg_vbszz -tza -neg -tax -//FRAGMENT vbsyy=_neg_vbsz1 -lda {z1} -neg -tay -//FRAGMENT vbsyy=_neg_vbsaa -neg -tay -//FRAGMENT vbsyy=_neg_vbsxx -txa -neg -tay -//FRAGMENT vbsyy=_neg_vbsyy -tya -neg -tay -//FRAGMENT vbsyy=_neg_vbszz -tza -neg -tay -//FRAGMENT vbszz=_neg_vbsz1 -lda {z1} -neg -taz -//FRAGMENT vbszz=_neg_vbsaa -neg -taz -//FRAGMENT vbszz=_neg_vbsxx -txa -neg -taz -//FRAGMENT vbszz=_neg_vbsyy -tya -neg -taz -//FRAGMENT vbszz=_neg_vbszz -tza -neg -taz -//FRAGMENT _deref_pbsc1=vbsaa -sta {c1} -//FRAGMENT vbsz1=vbsaa_ror_2 -asr -asr -sta {z1} -//FRAGMENT vbsz1=vbsxx_ror_2 -txa -asr -asr -sta {z1} -//FRAGMENT vbsz1=vbsyy_ror_2 -tya -asr -asr -sta {z1} -//FRAGMENT vbsz1=vbszz_ror_2 -tza -asr -asr -sta {z1} -//FRAGMENT vbsaa=vbsz1_ror_2 -lda {z1} -asr -asr -//FRAGMENT vbsaa=vbsaa_ror_2 -asr -asr -//FRAGMENT vbsaa=vbsxx_ror_2 -txa -asr -asr -//FRAGMENT vbsaa=vbsyy_ror_2 -tya -asr -asr -//FRAGMENT vbsaa=vbszz_ror_2 -tza -asr -asr -//FRAGMENT vbsxx=vbsz1_ror_2 -lda {z1} -asr -asr -tax -//FRAGMENT vbsxx=vbsaa_ror_2 -asr -asr -tax -//FRAGMENT vbsxx=vbsxx_ror_2 -txa -asr -asr -tax -//FRAGMENT vbsxx=vbsyy_ror_2 -tya -asr -asr -tax -//FRAGMENT vbsxx=vbszz_ror_2 -tza -asr -asr -tax -//FRAGMENT vbsyy=vbsz1_ror_2 -lda {z1} -asr -asr -tay -//FRAGMENT vbsyy=vbsaa_ror_2 -asr -asr -tay -//FRAGMENT vbsyy=vbsxx_ror_2 -txa -asr -asr -tay -//FRAGMENT vbsyy=vbsyy_ror_2 -tya -asr -asr -tay -//FRAGMENT vbsyy=vbszz_ror_2 -tza -asr -asr -tay -//FRAGMENT vbszz=vbsz1_ror_2 -lda {z1} -asr -asr -taz -//FRAGMENT vbszz=vbsaa_ror_2 -asr -asr -taz -//FRAGMENT vbszz=vbsxx_ror_2 -txa -asr -asr -taz -//FRAGMENT vbszz=vbsyy_ror_2 -tya -asr -asr -taz -//FRAGMENT vbszz=vbszz_ror_2 -tza -asr -asr -taz -//FRAGMENT vbsyy=_deref_pbsc1 -ldy {c1} -//FRAGMENT vbszz=_deref_pbsc1 -lda {c1} -taz -//FRAGMENT _deref_pbsc1=vbsxx -stx {c1} -//FRAGMENT _deref_pbsc1=vbsyy -sty {c1} -//FRAGMENT _deref_pbsc1=vbszz -tza -sta {c1} +//KICKC FRAGMENT CACHE 149935006b 1499351e94 //FRAGMENT vbuz1=vbuc1 lda #{c1} sta {z1} @@ -324,8 +84,8 @@ inc {z1}+1 inc {z1} //FRAGMENT pbuz1_derefidx_vbuz2=vbuc1 lda #{c1} -ldy {z2} -sta ({z1}),y +ldz {z2} +sta ({z1}),z //FRAGMENT vbuz1=_deref_pbuz2 ldy #0 lda ({z2}),y @@ -385,8 +145,8 @@ sta {c1},y dec {z1} //FRAGMENT pbuz1_derefidx_vbuz2=vbuz3 lda {z3} -ldy {z2} -sta ({z1}),y +ldz {z2} +sta ({z1}),z //FRAGMENT vbuz1_neq_vbuc1_then_la1 lda #{c1} cmp {z1} @@ -719,12 +479,20 @@ sta {c1},y cmp #{c1} beq {la1} //FRAGMENT pbuz1_derefidx_vbuz2=vbuaa -ldy {z2} -sta ({z1}),y +ldz {z2} +sta ({z1}),z //FRAGMENT pbuz1_derefidx_vbuz2=vbuxx txa ldz {z2} sta ({z1}),z +//FRAGMENT pbuz1_derefidx_vbuz2=vbuyy +tya +ldz {z2} +sta ({z1}),z +//FRAGMENT pbuz1_derefidx_vbuz2=vbuzz +tza +ldz {z2} +sta ({z1}),z //FRAGMENT vbuaa=_byte_vwuz1 lda {z1} //FRAGMENT vbuxx=_byte_vwuz1 @@ -925,34 +693,6 @@ eor #$ff sec adc {z1} tax -//FRAGMENT vbszz=vbsz1_minus_vbsz2 -lda {z1} -sec -sbc {z2} -taz -//FRAGMENT vbszz=vbsz1_minus_vbsaa -eor #$ff -sec -adc {z1} -taz -//FRAGMENT vbszz=vbsz1_minus_vbsxx -txa -eor #$ff -sec -adc {z1} -taz -//FRAGMENT vbszz=vbsz1_minus_vbsyy -tya -eor #$ff -sec -adc {z1} -taz -//FRAGMENT vbszz=vbsz1_minus_vbszz -tza -eor #$ff -sec -adc {z1} -taz //FRAGMENT vbsz1=vbsxx_minus_vbsz2 txa sec @@ -1005,32 +745,6 @@ stz $ff sec sbc $ff tax -//FRAGMENT vbszz=vbsxx_minus_vbsz1 -txa -sec -sbc {z1} -taz -//FRAGMENT vbszz=vbsxx_minus_vbsaa -sta $ff -txa -sec -sbc $ff -taz -//FRAGMENT vbszz=vbsxx_minus_vbsxx -lda #0 -taz -//FRAGMENT vbszz=vbsxx_minus_vbsyy -txa -sty $ff -sec -sbc $ff -taz -//FRAGMENT vbszz=vbsxx_minus_vbszz -txa -stz $ff -sec -sbc $ff -taz //FRAGMENT vbsz1=vbsyy_minus_vbsz2 tya sec @@ -1083,32 +797,6 @@ stz $ff sec sbc $ff tax -//FRAGMENT vbszz=vbsyy_minus_vbsz1 -tya -sec -sbc {z1} -taz -//FRAGMENT vbszz=vbsyy_minus_vbsaa -sta $ff -tya -sec -sbc $ff -taz -//FRAGMENT vbszz=vbsyy_minus_vbsxx -tya -stx $ff -sec -sbc $ff -taz -//FRAGMENT vbszz=vbsyy_minus_vbsyy -lda #0 -taz -//FRAGMENT vbszz=vbsyy_minus_vbszz -tya -stz $ff -sec -sbc $ff -taz //FRAGMENT vbsz1=vbszz_minus_vbsz2 tza sec @@ -1165,34 +853,6 @@ tax tza lda #0 tax -//FRAGMENT vbszz=vbszz_minus_vbsz1 -tza -sec -sbc {z1} -taz -//FRAGMENT vbszz=vbszz_minus_vbsaa -tay -tza -sty $ff -sec -sbc $ff -taz -//FRAGMENT vbszz=vbszz_minus_vbsxx -tza -stx $ff -sec -sbc $ff -taz -//FRAGMENT vbszz=vbszz_minus_vbsyy -tza -sty $ff -sec -sbc $ff -taz -//FRAGMENT vbszz=vbszz_minus_vbszz -tza -lda #0 -taz //FRAGMENT vbsxx_ge_0_then_la1 cpx #0 bpl {la1} @@ -2220,6 +1880,8 @@ cpx {z1} bcs {la1} //FRAGMENT vbuxx=vbuc1 ldx #{c1} +//FRAGMENT vbuzz=vbuc1 +ldz #{c1} //FRAGMENT vbuzz=vbuz1 ldz {z1} //FRAGMENT vbuz1=vbuzz @@ -2234,6 +1896,8 @@ inx ldy #{c1} //FRAGMENT vbuyy=_inc_vbuyy iny +//FRAGMENT vbuzz=_inc_vbuzz +inz //FRAGMENT vbuz1_ge_vbuxx_then_la1 lda {z1} stx $ff @@ -2290,6 +1954,9 @@ bcc {la1} cpy #{c1} bcc {la1} beq {la1} +//FRAGMENT vbuzz_lt_vbuc1_then_la1 +cpz #{c1} +bcc {la1} //FRAGMENT vbuzz_le_vbuc1_then_la1 cpz #{c1} bcc {la1} @@ -2320,17 +1987,9 @@ taz //FRAGMENT vbuyy_eq_vbuc1_then_la1 cpy #{c1} beq {la1} -//FRAGMENT pbuz1_derefidx_vbuz2=vbuyy -tya -ldy {z2} -sta ({z1}),y //FRAGMENT vbuzz_eq_vbuc1_then_la1 cpz #{c1} beq {la1} -//FRAGMENT pbuz1_derefidx_vbuz2=vbuzz -tza -ldz {z2} -sta ({z1}),z //FRAGMENT vbuz1_lt_vbuxx_then_la1 cpx {z1} beq !+ @@ -2519,3 +2178,236 @@ sta {z1}+1 asw {z1} asw {z1} asw {z1} +//FRAGMENT pbuc1_derefidx_vbuzz=vbuzz +tza +tax +sta {c1},x +//FRAGMENT vbsz1=_deref_pbsc1 +lda {c1} +sta {z1} +//FRAGMENT vbsz1=_neg_vbsz2 +lda {z2} +neg +sta {z1} +//FRAGMENT _deref_pbsc1=vbsz1 +lda {z1} +sta {c1} +//FRAGMENT vbsz1=vbsz2_ror_2 +lda {z2} +asr +asr +sta {z1} +//FRAGMENT vbsaa=_deref_pbsc1 +lda {c1} +//FRAGMENT vbsxx=_deref_pbsc1 +ldx {c1} +//FRAGMENT vbsz1=_neg_vbsaa +neg +sta {z1} +//FRAGMENT vbsz1=_neg_vbsxx +txa +neg +sta {z1} +//FRAGMENT vbsz1=_neg_vbsyy +tya +neg +sta {z1} +//FRAGMENT vbsz1=_neg_vbszz +tza +neg +sta {z1} +//FRAGMENT vbsaa=_neg_vbsz1 +lda {z1} +neg +//FRAGMENT vbsaa=_neg_vbsaa +neg +//FRAGMENT vbsaa=_neg_vbsxx +txa +neg +//FRAGMENT vbsaa=_neg_vbsyy +tya +neg +//FRAGMENT vbsaa=_neg_vbszz +tza +neg +//FRAGMENT vbsxx=_neg_vbsz1 +lda {z1} +neg +tax +//FRAGMENT vbsxx=_neg_vbsaa +neg +tax +//FRAGMENT vbsxx=_neg_vbsxx +txa +neg +tax +//FRAGMENT vbsxx=_neg_vbsyy +tya +neg +tax +//FRAGMENT vbsxx=_neg_vbszz +tza +neg +tax +//FRAGMENT vbsyy=_neg_vbsz1 +lda {z1} +neg +tay +//FRAGMENT vbsyy=_neg_vbsaa +neg +tay +//FRAGMENT vbsyy=_neg_vbsxx +txa +neg +tay +//FRAGMENT vbsyy=_neg_vbsyy +tya +neg +tay +//FRAGMENT vbsyy=_neg_vbszz +tza +neg +tay +//FRAGMENT vbszz=_neg_vbsz1 +lda {z1} +neg +taz +//FRAGMENT vbszz=_neg_vbsaa +neg +taz +//FRAGMENT vbszz=_neg_vbsxx +txa +neg +taz +//FRAGMENT vbszz=_neg_vbsyy +tya +neg +taz +//FRAGMENT vbszz=_neg_vbszz +tza +neg +taz +//FRAGMENT _deref_pbsc1=vbsaa +sta {c1} +//FRAGMENT vbsz1=vbsaa_ror_2 +asr +asr +sta {z1} +//FRAGMENT vbsz1=vbsxx_ror_2 +txa +asr +asr +sta {z1} +//FRAGMENT vbsz1=vbsyy_ror_2 +tya +asr +asr +sta {z1} +//FRAGMENT vbsz1=vbszz_ror_2 +tza +asr +asr +sta {z1} +//FRAGMENT vbsaa=vbsz1_ror_2 +lda {z1} +asr +asr +//FRAGMENT vbsaa=vbsaa_ror_2 +asr +asr +//FRAGMENT vbsaa=vbsxx_ror_2 +txa +asr +asr +//FRAGMENT vbsaa=vbsyy_ror_2 +tya +asr +asr +//FRAGMENT vbsaa=vbszz_ror_2 +tza +asr +asr +//FRAGMENT vbsxx=vbsz1_ror_2 +lda {z1} +asr +asr +tax +//FRAGMENT vbsxx=vbsaa_ror_2 +asr +asr +tax +//FRAGMENT vbsxx=vbsxx_ror_2 +txa +asr +asr +tax +//FRAGMENT vbsxx=vbsyy_ror_2 +tya +asr +asr +tax +//FRAGMENT vbsxx=vbszz_ror_2 +tza +asr +asr +tax +//FRAGMENT vbsyy=vbsz1_ror_2 +lda {z1} +asr +asr +tay +//FRAGMENT vbsyy=vbsaa_ror_2 +asr +asr +tay +//FRAGMENT vbsyy=vbsxx_ror_2 +txa +asr +asr +tay +//FRAGMENT vbsyy=vbsyy_ror_2 +tya +asr +asr +tay +//FRAGMENT vbsyy=vbszz_ror_2 +tza +asr +asr +tay +//FRAGMENT vbszz=vbsz1_ror_2 +lda {z1} +asr +asr +taz +//FRAGMENT vbszz=vbsaa_ror_2 +asr +asr +taz +//FRAGMENT vbszz=vbsxx_ror_2 +txa +asr +asr +taz +//FRAGMENT vbszz=vbsyy_ror_2 +tya +asr +asr +taz +//FRAGMENT vbszz=vbszz_ror_2 +tza +asr +asr +taz +//FRAGMENT vbsyy=_deref_pbsc1 +ldy {c1} +//FRAGMENT vbszz=_deref_pbsc1 +lda {c1} +taz +//FRAGMENT _deref_pbsc1=vbsxx +stx {c1} +//FRAGMENT _deref_pbsc1=vbsyy +sty {c1} +//FRAGMENT _deref_pbsc1=vbszz +tza +sta {c1} diff --git a/src/main/fragment/cache/fragment-cache-mega45gs02.asm b/src/main/fragment/cache/fragment-cache-mega45gs02.asm index c3786ae42..9f8e9e94c 100644 --- a/src/main/fragment/cache/fragment-cache-mega45gs02.asm +++ b/src/main/fragment/cache/fragment-cache-mega45gs02.asm @@ -1,67 +1,24 @@ -//KICKC FRAGMENT CACHE 140bf2a915 140bf2c716 -//FRAGMENT _deref_pbuc1=vbuc2 -lda #{c2} -sta {c1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2 -lda #{c2} -ora {c1} -sta {c1} +//KICKC FRAGMENT CACHE 15355792e7 153557b11b +//FRAGMENT vbuz1=vbuc1 +lda #{c1} +sta {z1} //FRAGMENT pbuz1=pbuc1 lda #<{c1} sta {z1} lda #>{c1} sta {z1}+1 -//FRAGMENT pbuz1_lt_pbuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bcc {la1} -bne !+ -lda {z1} -cmp #<{c1} -bcc {la1} -!: -//FRAGMENT _deref_pbuc1=_deref_pbuc2 -lda {c2} +//FRAGMENT isr_hardware_all_entry +pha +phx +phy +phz +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2 +lda #{c2} +ora {c1} +sta {c1} +//FRAGMENT _deref_pbuc1=vbuc2 +lda #{c2} sta {c1} -//FRAGMENT vbuz1=_lo_pbuz2 -lda {z2} -sta {z1} -//FRAGMENT _deref_pbuz1=vbuz2 -lda {z2} -ldy #0 -sta ({z1}),y -//FRAGMENT pbuz1=_inc_pbuz1 -inw {z1} -//FRAGMENT _deref_pbuz1=vbuc1 -lda #{c1} -ldy #0 -sta ({z1}),y -//FRAGMENT vbuaa=_lo_pbuz1 -lda {z1} -//FRAGMENT vbuxx=_lo_pbuz1 -ldx {z1} -//FRAGMENT _deref_pbuz1=vbuaa -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=vbuxx -txa -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=vbuyy -tya -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=vbuzz -tza -ldy #0 -sta ({z1}),y -//FRAGMENT vbuyy=_lo_pbuz1 -ldy {z1} -//FRAGMENT vbuzz=_lo_pbuz1 -ldz {z1} -//FRAGMENT vbuz1=vbuc1 -lda #{c1} -sta {z1} //FRAGMENT vbuz1=_inc_vbuz1 inc {z1} //FRAGMENT vbuz1=vbuz2 @@ -88,6 +45,8 @@ dec {z1} ldy #0 lda ({z2}),y sta {z1} +//FRAGMENT pbuz1=_inc_pbuz1 +inw {z1} //FRAGMENT vbuz1_neq_0_then_la1 lda {z1} cmp #0 @@ -99,6 +58,12 @@ sta {z1} //FRAGMENT _deref_pbuc1=vbuz1 lda {z1} sta {c1} +//FRAGMENT isr_hardware_all_exit +plz +ply +plx +pla +rti //FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 ldy {z1} lda {c2},y @@ -180,6 +145,10 @@ bne {la1} lda {z1} cmp #<{c1} bne {la1} +//FRAGMENT _deref_pbuz1=vbuc1 +lda #{c1} +ldy #0 +sta ({z1}),y //FRAGMENT vbuaa=vbuz1 lda {z1} //FRAGMENT vbuxx=vbuz1 @@ -1177,443 +1146,6 @@ inc stx {c1} //FRAGMENT _deref_pbuc1=vbuzz stz {c1} -//FRAGMENT vbuz1=_deref_pbuc1_plus_1 -lda {c1} -inc -sta {z1} -//FRAGMENT vwuz1=_word_vbuz2 -lda {z2} -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_rol_2 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwuz1=vwuz2_plus_vwuz3 -lda {z2} -clc -adc {z3} -sta {z1} -lda {z2}+1 -adc {z3}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_rol_4 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT pbuz1=pbuc1_plus_vwuz2 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT 0_neq_vbuz1_then_la1 -lda {z1} -cmp #0 -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuz2=vbuz3 -lda {z3} -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=vbuc1 -lda #{c1} -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1=pbuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT pvoz1=pvoc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1=pbuz1_minus_vbuc1 -sec -lda {z1} -sbc #{c1} -sta {z1} -lda {z1}+1 -sbc #0 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vwuc1 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1_neq_pbuz2_then_la1 -lda {z1}+1 -cmp {z2}+1 -bne {la1} -lda {z1} -cmp {z2} -bne {la1} -//FRAGMENT _deref_pbuz1=_deref_pbuz2 -ldy #0 -lda ({z2}),y -ldy #0 -sta ({z1}),y -//FRAGMENT pbuz1=pbuz2_plus_vbuc1 -lda #{c1} -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vbuaa=_deref_pbuc1_plus_1 -lda {c1} -inc -//FRAGMENT vbuxx=_deref_pbuc1_plus_1 -ldx {c1} -inx -//FRAGMENT vbuz1=vbuxx -stx {z1} -//FRAGMENT vwuz1=_word_vbuxx -txa -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=_word_vbuyy -tya -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=_word_vbuzz -tza -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT 0_neq_vbuaa_then_la1 -cmp #0 -bne {la1} -//FRAGMENT vbuz1=vbuaa -sta {z1} -//FRAGMENT pbuz1_derefidx_vbuz2=vbuaa -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=vbuxx -txa -ldz {z2} -sta ({z1}),z -//FRAGMENT pbuz1_derefidx_vbuz2=vbuyy -tya -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=vbuzz -tza -ldz {z2} -sta ({z1}),z -//FRAGMENT 0_neq_vbuxx_then_la1 -cpx #0 -bne {la1} -//FRAGMENT vbuaa=vbuxx -txa -//FRAGMENT 0_neq_vbuyy_then_la1 -cpy #0 -bne {la1} -//FRAGMENT vbuaa=vbuyy -tya -//FRAGMENT 0_neq_vbuzz_then_la1 -cpz #0 -bne {la1} -//FRAGMENT vbuaa=vbuzz -tza -//FRAGMENT vbuz1=vbuyy -sty {z1} -//FRAGMENT vbuz1=vbuzz -tza -sta {z1} -//FRAGMENT vbuxx=vbuaa -tax -//FRAGMENT vbuyy=_deref_pbuc1_plus_1 -ldy {c1} -iny -//FRAGMENT vbuxx=vbuyy -tya -tax -//FRAGMENT vbuzz=_deref_pbuc1_plus_1 -lda {c1} -inc -taz -//FRAGMENT vbuxx=vbuzz -tza -tax -//FRAGMENT vwuz1=vwuz2_plus_vwuz1 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_plus_vwuz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_rol_4 -asw {z1} -asw {z1} -asw {z1} -asw {z1} -//FRAGMENT vwuz1=vwuc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT pwuz1=pbuc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1=pbuz1_plus_vwuc1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz2 -ldy {z2} -lda ({z3}),y -sta ({z1}),y -//FRAGMENT pwuz1=pwuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT vbuz1=vbuz2_rol_1 -lda {z2} -asl -sta {z1} -//FRAGMENT pwuz1_derefidx_vbuz2=vwuz3 -ldy {z2} -lda {z3} -sta ({z1}),y -iny -lda {z3}+1 -sta ({z1}),y -//FRAGMENT vwuz1=vwuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT _deref_pwuc1=vwuz1 -lda {z1} -sta {c1} -lda {z1}+1 -sta {c1}+1 -//FRAGMENT _deref_qbuc1=_ptr_vbuz1 -lda {z1} -sta {c1} -lda #0 -sta {c1}+1 -//FRAGMENT _deref_qbuc1=pbuz1 -lda {z1} -sta {c1} -lda {z1}+1 -sta {c1}+1 -//FRAGMENT _deref_pwuc1=vwuc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 -//FRAGMENT _deref_qbuc1=pbuc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 -//FRAGMENT pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuaa -tay -lda ({z2}),y -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuxx -txa -tay -lda ({z2}),y -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy -lda ({z2}),y -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuzz=pbuz2_derefidx_vbuzz -tza -tay -lda ({z2}),y -sta ({z1}),y -//FRAGMENT vwuz1=_word_vbuaa -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vbuz1=vbuaa_rol_1 -asl -sta {z1} -//FRAGMENT vbuz1=vbuxx_rol_1 -txa -asl -sta {z1} -//FRAGMENT vbuz1=vbuyy_rol_1 -tya -asl -sta {z1} -//FRAGMENT vbuz1=vbuzz_rol_1 -tza -asl -sta {z1} -//FRAGMENT vbuaa=vbuz1_rol_1 -lda {z1} -asl -//FRAGMENT vbuaa=vbuaa_rol_1 -asl -//FRAGMENT vbuaa=vbuxx_rol_1 -txa -asl -//FRAGMENT vbuaa=vbuyy_rol_1 -tya -asl -//FRAGMENT vbuaa=vbuzz_rol_1 -tza -asl -//FRAGMENT vbuxx=vbuz1_rol_1 -lda {z1} -asl -tax -//FRAGMENT vbuxx=vbuaa_rol_1 -asl -tax -//FRAGMENT vbuxx=vbuxx_rol_1 -txa -asl -tax -//FRAGMENT vbuxx=vbuyy_rol_1 -tya -asl -tax -//FRAGMENT vbuxx=vbuzz_rol_1 -tza -asl -tax -//FRAGMENT vbuyy=vbuz1_rol_1 -lda {z1} -asl -tay -//FRAGMENT vbuyy=vbuaa_rol_1 -asl -tay -//FRAGMENT vbuyy=vbuxx_rol_1 -txa -asl -tay -//FRAGMENT vbuyy=vbuyy_rol_1 -tya -asl -tay -//FRAGMENT vbuyy=vbuzz_rol_1 -tza -asl -tay -//FRAGMENT vbuzz=vbuz1_rol_1 -lda {z1} -asl -taz -//FRAGMENT vbuzz=vbuaa_rol_1 -asl -taz -//FRAGMENT vbuzz=vbuxx_rol_1 -txa -asl -taz -//FRAGMENT vbuzz=vbuyy_rol_1 -tya -asl -taz -//FRAGMENT vbuzz=vbuzz_rol_1 -tza -asl -taz -//FRAGMENT pwuz1_derefidx_vbuaa=vwuz2 -tay -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuxx=vwuz2 -txa -tay -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuyy=vwuz2 -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuzz=vwuz2 -tza -tay -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT _deref_qbuc1=_ptr_vbuxx -txa -sta {c1} -lda #0 -sta {c1}+1 -//FRAGMENT _deref_qbuc1=_ptr_vbuyy -tya -sta {c1} -lda #0 -sta {c1}+1 -//FRAGMENT _deref_qbuc1=_ptr_vbuzz -tza -sta {c1} -lda #0 -sta {c1}+1 //FRAGMENT _deref_pbuc1=_inc__deref_pbuc1 inc {c1} //FRAGMENT vwuz1=vbuc1 @@ -1630,6 +1162,11 @@ dec {c1} //FRAGMENT pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 ldx {z1} inc {c1},x +//FRAGMENT vwuz1=vwuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 //FRAGMENT vbuz1=_lo_vwuz2 lda {z2} sta {z1} @@ -1640,6 +1177,16 @@ sta {z1} lda {z2} ora {z3} sta {z1} +//FRAGMENT _deref_pwuc1=vwuc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 +//FRAGMENT _deref_qbuc1=pbuc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 //FRAGMENT _deref_pbuc1_eq_vbuaa_then_la1 cmp {c1} beq {la1} @@ -1746,857 +1293,3 @@ tay tza sty $ff ora $ff -//FRAGMENT vduz1=vduc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -lda #<{c1}>>$10 -sta {z1}+2 -lda #>{c1}>>$10 -sta {z1}+3 -//FRAGMENT vduz1=vbuc1 -lda #{c1} -sta {z1} -lda #0 -sta {z1}+1 -sta {z1}+2 -sta {z1}+3 -//FRAGMENT vbuz1=vbuc1_plus_vbuz2 -lda #{c1} -clc -adc {z2} -sta {z1} -//FRAGMENT vwuz1=vwuc1_minus_vbuz2 -sec -lda #<{c1} -sbc {z2} -sta {z1} -lda #>{c1} -sbc #0 -sta {z1}+1 -//FRAGMENT vbuz1=vbuz2_ror_5 -lda {z2} -lsr -lsr -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuz1=vbuc1_rol_vbuz2 -lda #{c1} -ldy {z2} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -sta {z1} -//FRAGMENT vwuz1=vwuz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vduz1=vduz2_ror_4 -lda {z2}+3 -lsr -sta {z1}+3 -lda {z2}+2 -ror -sta {z1}+2 -lda {z2}+1 -ror -sta {z1}+1 -lda {z2} -ror -sta {z1} -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -//FRAGMENT vbuz1=_hi__word_vduz2 -lda {z2}+1 -sta {z1} -//FRAGMENT vwuz1=_lo_vduz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vbuz1=vbuc1_plus_vbuaa -clc -adc #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuc1_plus_vbuxx -txa -clc -adc #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuc1_plus_vbuyy -tya -clc -adc #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuc1_plus_vbuzz -tza -clc -adc #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuc1_plus_vbuz1 -lda #{c1} -clc -adc {z1} -//FRAGMENT vbuaa=vbuc1_plus_vbuaa -clc -adc #{c1} -//FRAGMENT vbuaa=vbuc1_plus_vbuxx -txa -clc -adc #{c1} -//FRAGMENT vbuaa=vbuc1_plus_vbuyy -tya -clc -adc #{c1} -//FRAGMENT vbuaa=vbuc1_plus_vbuzz -tza -clc -adc #{c1} -//FRAGMENT vbuxx=vbuc1_plus_vbuz1 -lda #{c1} -clc -adc {z1} -tax -//FRAGMENT vbuxx=vbuc1_plus_vbuaa -clc -adc #{c1} -tax -//FRAGMENT vbuxx=vbuc1_plus_vbuxx -txa -clc -adc #{c1} -tax -//FRAGMENT vbuxx=vbuc1_plus_vbuyy -tya -clc -adc #{c1} -tax -//FRAGMENT vbuxx=vbuc1_plus_vbuzz -tza -clc -adc #{c1} -tax -//FRAGMENT vbuyy=vbuc1_plus_vbuz1 -lda #{c1} -clc -adc {z1} -tay -//FRAGMENT vbuyy=vbuc1_plus_vbuaa -clc -adc #{c1} -tay -//FRAGMENT vbuyy=vbuc1_plus_vbuxx -txa -clc -adc #{c1} -tay -//FRAGMENT vbuyy=vbuc1_plus_vbuyy -tya -clc -adc #{c1} -tay -//FRAGMENT vbuyy=vbuc1_plus_vbuzz -tza -clc -adc #{c1} -tay -//FRAGMENT vbuzz=vbuc1_plus_vbuz1 -lda #{c1} -clc -adc {z1} -taz -//FRAGMENT vbuzz=vbuc1_plus_vbuaa -clc -adc #{c1} -taz -//FRAGMENT vbuzz=vbuc1_plus_vbuxx -txa -clc -adc #{c1} -taz -//FRAGMENT vbuzz=vbuc1_plus_vbuyy -tya -clc -adc #{c1} -taz -//FRAGMENT vbuzz=vbuc1_plus_vbuzz -tza -clc -adc #{c1} -taz -//FRAGMENT vwuz1=vwuc1_minus_vbuaa -tax -stx $ff -lda #<{c1} -sec -sbc $ff -sta {z1} -lda #>{c1} -sbc #00 -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_minus_vbuxx -stx $ff -lda #<{c1} -sec -sbc $ff -sta {z1} -lda #>{c1} -sbc #00 -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_minus_vbuyy -tya -tax -stx $ff -lda #<{c1} -sec -sbc $ff -sta {z1} -lda #>{c1} -sbc #00 -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_minus_vbuzz -tza -tax -stx $ff -lda #<{c1} -sec -sbc $ff -sta {z1} -lda #>{c1} -sbc #00 -sta {z1}+1 -//FRAGMENT vbuz1=vbuxx_ror_5 -txa -lsr -lsr -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuz1=vbuyy_ror_5 -tya -lsr -lsr -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuz1=vbuzz_ror_5 -tza -lsr -lsr -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=vbuz1_ror_5 -lda {z1} -lsr -lsr -lsr -lsr -lsr -//FRAGMENT vbuaa=vbuxx_ror_5 -txa -lsr -lsr -lsr -lsr -lsr -//FRAGMENT vbuaa=vbuyy_ror_5 -tya -lsr -lsr -lsr -lsr -lsr -//FRAGMENT vbuaa=vbuzz_ror_5 -tza -lsr -lsr -lsr -lsr -lsr -//FRAGMENT vbuxx=vbuz1_ror_5 -lda {z1} -lsr -lsr -lsr -lsr -lsr -tax -//FRAGMENT vbuxx=vbuxx_ror_5 -txa -lsr -lsr -lsr -lsr -lsr -tax -//FRAGMENT vbuxx=vbuyy_ror_5 -tya -lsr -lsr -lsr -lsr -lsr -tax -//FRAGMENT vbuxx=vbuzz_ror_5 -tza -lsr -lsr -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=vbuz1_ror_5 -lda {z1} -lsr -lsr -lsr -lsr -lsr -tay -//FRAGMENT vbuyy=vbuxx_ror_5 -txa -lsr -lsr -lsr -lsr -lsr -tay -//FRAGMENT vbuyy=vbuyy_ror_5 -tya -lsr -lsr -lsr -lsr -lsr -tay -//FRAGMENT vbuyy=vbuzz_ror_5 -tza -lsr -lsr -lsr -lsr -lsr -tay -//FRAGMENT vbuzz=vbuz1_ror_5 -lda {z1} -lsr -lsr -lsr -lsr -lsr -taz -//FRAGMENT vbuzz=vbuxx_ror_5 -txa -lsr -lsr -lsr -lsr -lsr -taz -//FRAGMENT vbuzz=vbuyy_ror_5 -tya -lsr -lsr -lsr -lsr -lsr -taz -//FRAGMENT vbuzz=vbuzz_ror_5 -tza -lsr -lsr -lsr -lsr -lsr -taz -//FRAGMENT vbuaa=vbuc1_rol_vbuz1 -lda #{c1} -ldy {z1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -//FRAGMENT vbuxx=vbuc1_rol_vbuz1 -lda #{c1} -ldx {z1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -tax -//FRAGMENT vbuyy=vbuc1_rol_vbuz1 -lda #{c1} -ldy {z1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -tay -//FRAGMENT vbuzz=vbuc1_rol_vbuz1 -lda #{c1} -ldy {z1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -taz -//FRAGMENT vbuz1=vbuc1_rol_vbuaa -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -sta {z1} -//FRAGMENT vbuaa=vbuc1_rol_vbuaa -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -//FRAGMENT vbuxx=vbuc1_rol_vbuaa -tax -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -tax -//FRAGMENT vbuyy=vbuc1_rol_vbuaa -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -tay -//FRAGMENT vbuzz=vbuc1_rol_vbuaa -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -taz -//FRAGMENT vbuz1=vbuc1_rol_vbuxx -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -sta {z1} -//FRAGMENT vbuaa=vbuc1_rol_vbuxx -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -//FRAGMENT vbuxx=vbuc1_rol_vbuxx -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -tax -//FRAGMENT vbuyy=vbuc1_rol_vbuxx -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -tay -//FRAGMENT vbuzz=vbuc1_rol_vbuxx -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -taz -//FRAGMENT vbuz1=vbuc1_rol_vbuyy -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -sta {z1} -//FRAGMENT vbuaa=vbuc1_rol_vbuyy -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -//FRAGMENT vbuxx=vbuc1_rol_vbuyy -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -tax -//FRAGMENT vbuyy=vbuc1_rol_vbuyy -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -tay -//FRAGMENT vbuzz=vbuc1_rol_vbuyy -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -taz -//FRAGMENT vbuz1=vbuc1_rol_vbuzz -tza -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -sta {z1} -//FRAGMENT vbuaa=vbuc1_rol_vbuzz -tza -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -//FRAGMENT vbuxx=vbuc1_rol_vbuzz -tza -tax -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -tax -//FRAGMENT vbuyy=vbuc1_rol_vbuzz -tza -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -tay -//FRAGMENT vbuzz=vbuc1_rol_vbuzz -tza -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -taz -//FRAGMENT vbuaa=_hi__word_vduz1 -lda {z1}+1 -//FRAGMENT vbuxx=_hi__word_vduz1 -ldx {z1}+1 -//FRAGMENT vbuaa=vbuz1_bor_vbuz2 -lda {z1} -ora {z2} -//FRAGMENT vbuxx=vbuz1_bor_vbuz2 -lda {z1} -ora {z2} -tax -//FRAGMENT vbuyy=vbuz1_bor_vbuz2 -lda {z1} -ora {z2} -tay -//FRAGMENT vbuzz=vbuz1_bor_vbuz2 -lda {z1} -ora {z2} -taz -//FRAGMENT vbuaa=vbuxx_bor_vbuz1 -txa -ora {z1} -//FRAGMENT vbuxx=vbuxx_bor_vbuz1 -txa -ora {z1} -tax -//FRAGMENT vbuyy=vbuxx_bor_vbuz1 -txa -ora {z1} -tay -//FRAGMENT vbuzz=vbuxx_bor_vbuz1 -txa -ora {z1} -taz -//FRAGMENT vbuaa=vbuyy_bor_vbuz1 -tya -ora {z1} -//FRAGMENT vbuxx=vbuyy_bor_vbuz1 -tya -ora {z1} -tax -//FRAGMENT vbuyy=vbuyy_bor_vbuz1 -tya -ora {z1} -tay -//FRAGMENT vbuzz=vbuyy_bor_vbuz1 -tya -ora {z1} -taz -//FRAGMENT vbuaa=vbuzz_bor_vbuz1 -tza -ora {z1} -//FRAGMENT vbuxx=vbuzz_bor_vbuz1 -tza -ora {z1} -tax -//FRAGMENT vbuyy=vbuzz_bor_vbuz1 -tza -ora {z1} -tay -//FRAGMENT vbuzz=vbuzz_bor_vbuz1 -tza -ora {z1} -taz -//FRAGMENT vbuxx=vbuxx_bor_vbuaa -stx $ff -ora $ff -tax -//FRAGMENT vbuyy=vbuxx_bor_vbuaa -stx $ff -ora $ff -tay -//FRAGMENT vbuzz=vbuxx_bor_vbuaa -stx $ff -ora $ff -taz -//FRAGMENT vbuxx=vbuyy_bor_vbuaa -sty $ff -ora $ff -tax -//FRAGMENT vbuyy=vbuyy_bor_vbuaa -sty $ff -ora $ff -tay -//FRAGMENT vbuzz=vbuyy_bor_vbuaa -sty $ff -ora $ff -taz -//FRAGMENT vbuxx=vbuzz_bor_vbuaa -tax -tza -stx $ff -ora $ff -tax -//FRAGMENT vbuyy=vbuzz_bor_vbuaa -tay -tza -sty $ff -ora $ff -tay -//FRAGMENT vbuzz=vbuzz_bor_vbuaa -tay -tza -sty $ff -ora $ff -taz -//FRAGMENT vbuaa=vbuz1_bor_vbuxx -txa -ora {z1} -//FRAGMENT vbuxx=vbuz1_bor_vbuxx -txa -ora {z1} -tax -//FRAGMENT vbuyy=vbuz1_bor_vbuxx -txa -ora {z1} -tay -//FRAGMENT vbuzz=vbuz1_bor_vbuxx -txa -ora {z1} -taz -//FRAGMENT vbuyy=_hi__word_vduz1 -ldy {z1}+1 -//FRAGMENT vbuzz=_hi__word_vduz1 -lda {z1}+1 -taz -//FRAGMENT pbuc1_derefidx_vbuyy=vbuaa -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuzz=vbuaa -tax -tza -tay -txa -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuyy=vbuxx -txa -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuzz=vbuxx -tza -tay -txa -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuzz=vbuyy -tza -tax -tya -sta {c1},x -//FRAGMENT vbuyy=vbuaa -tay -//FRAGMENT vbuzz=vbuaa -taz -//FRAGMENT 0_neq_pbuc1_derefidx_vbuz1_then_la1 -ldy {z1} -lda {c1},y -cmp #0 -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuz1=vbuz1 -ldy {z1} -tya -sta {c1},y -//FRAGMENT 0_neq_pbuc1_derefidx_vbuaa_then_la1 -tay -lda {c1},y -cmp #0 -bne {la1} -//FRAGMENT 0_neq_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -cmp #0 -bne {la1} -//FRAGMENT 0_neq_pbuc1_derefidx_vbuyy_then_la1 -lda {c1},y -cmp #0 -bne {la1} -//FRAGMENT 0_neq_pbuc1_derefidx_vbuzz_then_la1 -tza -tay -lda {c1},y -cmp #0 -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuxx=vbuxx -txa -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=vbuyy -tya -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuzz=vbuzz -tza -tax -sta {c1},x -//FRAGMENT _deref_pduc1=vduz1 -ldq {z1} -stq {c1} -//FRAGMENT vduz1=vduz1_plus_vduz2 -clc -ldq {z1} -adcq {z2} -stq {z1} -//FRAGMENT vduz1=vduz1_plus_vbuz2 -lda {z2} -clc -adc {z1} -sta {z1} -lda {z1}+1 -adc #0 -sta {z1}+1 -lda {z1}+2 -adc #0 -sta {z1}+2 -lda {z1}+3 -adc #0 -sta {z1}+3 -//FRAGMENT vduz1=vwuc1 -NO_SYNTHESIS -//FRAGMENT vduz1=vwsc1 -NO_SYNTHESIS diff --git a/src/main/fragment/cache/fragment-cache-mos6502.asm b/src/main/fragment/cache/fragment-cache-mos6502.asm index 7da2f9157..abf47acfd 100644 --- a/src/main/fragment/cache/fragment-cache-mos6502.asm +++ b/src/main/fragment/cache/fragment-cache-mos6502.asm @@ -1,4 +1,4 @@ -//KICKC FRAGMENT CACHE 140bf2a915 140bf2c716 +//KICKC FRAGMENT CACHE 149935006b 1499351e94 //FRAGMENT vbuz1=vbuc1 lda #{c1} sta {z1} diff --git a/src/main/fragment/cache/fragment-cache-mos6502x.asm b/src/main/fragment/cache/fragment-cache-mos6502x.asm index 85cb501cb..ba006c864 100644 --- a/src/main/fragment/cache/fragment-cache-mos6502x.asm +++ b/src/main/fragment/cache/fragment-cache-mos6502x.asm @@ -1,38 +1,350 @@ -//KICKC FRAGMENT CACHE 140bf2a915 140bf2c716 -//FRAGMENT vbuz1=vbuc1 -lda #{c1} -sta {z1} +//KICKC FRAGMENT CACHE 15355792e7 153557b11b //FRAGMENT pbuz1=pbuc1 lda #<{c1} sta {z1} lda #>{c1} sta {z1}+1 -//FRAGMENT vwuz1=vwuc1 -lda #<{c1} +//FRAGMENT pvoz1=pvoz2 +lda {z2} sta {z1} -lda #>{c1} +lda {z2}+1 sta {z1}+1 -//FRAGMENT vwsz1=vwsc1 -lda #<{c1} +//FRAGMENT isr_hardware_all_entry +sta rega+1 +stx regx+1 +sty regy+1 +//FRAGMENT _deref_pbuc1=vbuc2 +lda #{c2} +sta {c1} +//FRAGMENT _deref_qprc1=pprc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 +//FRAGMENT isr_hardware_all_exit +rega: lda #0 +regx: ldx #0 +regy: ldy #0 +rti +//FRAGMENT pbuz1=pbuz2_minus_vwuc1 +lda {z2} +sec +sbc #<{c1} sta {z1} -lda #>{c1} +lda {z2}+1 +sbc #>{c1} sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_plus_vbsc1 -clc +//FRAGMENT pbuz1=pbuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1_neq_pbuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne {la1} lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT vbuz1=vbuc1 +lda #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuz2_rol_1 +lda {z2} +asl +sta {z1} +//FRAGMENT vbuz1=vbuz2_plus_vbuz3 +lda {z2} +clc +adc {z3} +sta {z1} +//FRAGMENT pssc1_derefidx_vbuz1=_deref_pssc2_memcpy_vbuc3 +ldx {z1} +ldy #0 +!: +lda {c2},y +sta {c1},x +inx +iny +cpy #{c3} +bne !- +//FRAGMENT vbuz1=_inc_vbuz1 +inc {z1} +//FRAGMENT vbuz1_neq_vbuc1_then_la1 +lda #{c1} +cmp {z1} +bne {la1} +//FRAGMENT vbuz1=vbuz2 +lda {z2} +sta {z1} +//FRAGMENT _deref_pbuc1=_inc__deref_pbuc1 +inc {c1} +//FRAGMENT _deref_pbuz1=_deref_pbuz2 +ldy #0 +lda ({z2}),y +ldy #0 +sta ({z1}),y +//FRAGMENT pbuz1=_inc_pbuz1 +inc {z1} +bne !+ +inc {z1}+1 +!: +//FRAGMENT pssz1=pssc1_plus_vbuz2 +lda {z2} +clc adc #<{c1} sta {z1} -lda {z1}+1 -adc #>{c1} +lda #>{c1} +adc #0 sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_plus_vwuc1 -clc +//FRAGMENT vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2 +ldy #{c2} +lda ({z2}),y +tay +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +sta {z1} +//FRAGMENT pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1 +lda #{c2} +ldy #{c1} +cmp ({z1}),y +beq {la1} +//FRAGMENT pbuz1_derefidx_vbuc1_neq_vbuc2_then_la1 +ldy #{c1} +lda ({z1}),y + +cmp #{c2} +bne {la1} +//FRAGMENT _deref_(qbuz1_derefidx_vbuc1)=vbuc2 +ldx #{c2} +ldy #{c1} +lda ({z1}),y +sta !+ +1 +iny +lda ({z1}),y +sta !+ +2 +!: stx $ffff +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuz1 +lda {c1} +ora {z1} +sta {c1} +//FRAGMENT pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 +ldy #{c3} +lda ({z1}),y +ldy #{c2} +pha +lda ({z1}),y +tay +pla +sta {c1},y +//FRAGMENT pbuz1_derefidx_vbuc1=vbuc2 +lda #{c2} +ldy #{c1} +sta ({z1}),y +//FRAGMENT vwuz1=_deref_pwuz2_ror_4 +ldy #0 +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +//FRAGMENT vbuz1=_hi_vwuz2 +lda {z2}+1 +sta {z1} +//FRAGMENT 0_neq_vbuz1_then_la1 lda {z1} +cmp #0 +bne {la1} +//FRAGMENT vbuz1=vbuc1_bxor_vbuz2 +lda #{c1} +eor {z2} +sta {z1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuz1 +lda {c1} +and {z1} +sta {c1} +//FRAGMENT pbuc1_derefidx_vbuz1=_byte_vwuz2 +ldy {z1} +lda {z2} +sta {c1},y +//FRAGMENT vwuz1=pwuz2_derefidx_vbuc1_ror_4 +ldy #{c1} +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +//FRAGMENT vbuz1=_byte_vwuz2 +lda {z2} +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuz1=vbuz2 +lda {z2} +ldy {z1} +sta {c1},y +//FRAGMENT _deref_pwuz1_lt_vwuc1_then_la1 +ldy #1 +lda ({z1}),y +cmp #>{c1} +bcc {la1} +bne !+ +dey +lda ({z1}),y +cmp #<{c1} +bcc {la1} +!: +//FRAGMENT _deref_pwuz1_gt_vwuc1_then_la1 +ldy #1 +lda #>{c1} +cmp ({z1}),y +bcc {la1} +bne !+ +dey +lda #<{c1} +cmp ({z1}),y +bcc {la1} +!: +//FRAGMENT pwuz1_derefidx_vbuc1_lt_vwuc2_then_la1 +ldy #{c1} +iny +lda ({z1}),y +cmp #>{c2} +bcc {la1} +bne !+ +dey +lda ({z1}),y +cmp #<{c2} +bcc {la1} +!: +//FRAGMENT pwuz1_derefidx_vbuc1_gt_vwuc2_then_la1 +ldy #{c1} +iny +lda #>{c2} +cmp ({z1}),y +bcc {la1} +bne !+ +dey +lda #<{c2} +cmp ({z1}),y +bcc {la1} +!: +//FRAGMENT vwuz1=vwuz2_ror_3 +lda {z2}+1 +lsr +sta {z1}+1 +lda {z2} +ror +sta {z1} +lsr {z1}+1 +ror {z1} +lsr {z1}+1 +ror {z1} +//FRAGMENT vbuz1=vbuz2_minus_vbuc1 +lax {z2} +axs #{c1} +stx {z1} +//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuz2 +ldx {z2} +ldy #{c1} +clc +lda ({z1}),y +adc {c2},x +sta ({z1}),y +iny +lda ({z1}),y +adc {c2}+1,x +sta ({z1}),y +//FRAGMENT _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1 +ldy #{c1} +sty $ff +clc +lda ({z1}),y +ldy #0 +adc ({z1}),y +sta ({z1}),y +ldy $ff +iny +lda ({z1}),y +ldy #1 +adc ({z1}),y +sta ({z1}),y +//FRAGMENT vbuz1=vbuz2_ror_3 +lda {z2} +lsr +lsr +lsr +sta {z1} +//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2 +ldy #{c2} +clc +lda ({z1}),y +ldy #{c1} +adc ({z1}),y +sta ({z1}),y +ldy #{c2}+1 +lda ({z1}),y +ldy #{c1}+1 +adc ({z1}),y +sta ({z1}),y +//FRAGMENT pbuz1=pbuz2_plus_vwuc1 +clc +lda {z2} adc #<{c1} sta {z1} -lda {z1}+1 +lda {z2}+1 adc #>{c1} sta {z1}+1 +//FRAGMENT vbuz1_lt_vbuc1_then_la1 +lda {z1} +cmp #{c1} +bcc {la1} +//FRAGMENT pbuz1=pbuz1_minus_vbuc1 +sec +lda {z1} +sbc #{c1} +sta {z1} +lda {z1}+1 +sbc #0 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT vbuz1=vbuc1_minus_vbuz2 +lda #{c1} +sec +sbc {z2} +sta {z1} +//FRAGMENT vwuz1=vbuz2_word_vbuc1 +lda {z2} +ldy #{c1} +sta {z1}+1 +sty {z1} //FRAGMENT vwsz1=vwsz2 lda {z2} sta {z1} @@ -43,337 +355,89 @@ lda {z2} sta {z1} lda {z2}+1 sta {z1}+1 -//FRAGMENT vbuz1=_inc_vbuz1 -inc {z1} -//FRAGMENT vbuz1_neq_vbuc1_then_la1 -lda #{c1} -cmp {z1} -bne {la1} -//FRAGMENT pbuz1=pbuz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwsz1_lt_0_then_la1 -lda {z1}+1 -bmi {la1} -//FRAGMENT vwsz1=_neg_vwsz1 -sec -lda #0 -sbc {z1} -sta {z1} -lda #0 -sbc {z1}+1 -sta {z1}+1 -//FRAGMENT _deref_pbuz1=vbuz2 -lda {z2} -ldy #0 -sta ({z1}),y -//FRAGMENT pbuz1=_inc_pbuz1 -inc {z1} -bne !+ -inc {z1}+1 -!: -//FRAGMENT vbuz1=_hi_vwuz2 -lda {z2}+1 -sta {z1} -//FRAGMENT vbuz1=_lo_vwuz2 -lda {z2} -sta {z1} -//FRAGMENT pbuz1=pbuz1_plus_vbuc1 +//FRAGMENT vwuz1=vwuz2_plus_vbuc1 lda #{c1} clc -adc {z1} +adc {z2} sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT pbuz1_lt_pbuz2_then_la1 -lda {z1}+1 -cmp {z2}+1 -bcc {la1} -bne !+ -lda {z1} -cmp {z2} -bcc {la1} -!: -//FRAGMENT vbuz1=vbuz2_ror_4 -lda {z2} -lsr -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2 +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1_derefidx_vbuz2=vbuz3 +lda {z3} ldy {z2} -lda {c1},y -sta {z1} -//FRAGMENT vbuz1=vbuz2_band_vbuc1 -lda #{c1} -and {z2} -sta {z1} -//FRAGMENT vbuxx_neq_vbuc1_then_la1 -cpx #{c1} -bne {la1} -//FRAGMENT _deref_pbuz1=vbuaa -ldy #0 sta ({z1}),y -//FRAGMENT _deref_pbuz1=vbuxx -txa -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=vbuyy -tya -ldy #0 -sta ({z1}),y -//FRAGMENT vbuaa=_hi_vwuz1 -lda {z1}+1 -//FRAGMENT vbuxx=_hi_vwuz1 -ldx {z1}+1 -//FRAGMENT vbuaa=_lo_vwuz1 -lda {z1} -//FRAGMENT vbuxx=_lo_vwuz1 -ldx {z1} -//FRAGMENT vbuaa=vbuz1_ror_4 -lda {z1} -lsr -lsr -lsr -lsr -//FRAGMENT vbuxx=vbuz1_ror_4 -lda {z1} -lsr -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=vbuz1_ror_4 -lda {z1} -lsr -lsr -lsr -lsr -tay -//FRAGMENT vbuz1=vbuaa_ror_4 -lsr -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=vbuaa_ror_4 -lsr -lsr -lsr -lsr -//FRAGMENT vbuxx=vbuaa_ror_4 -lsr -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=vbuaa_ror_4 -lsr -lsr -lsr -lsr -tay -//FRAGMENT vbuz1=vbuxx_ror_4 -txa -lsr -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=vbuxx_ror_4 -txa -lsr -lsr -lsr -lsr -//FRAGMENT vbuxx=vbuxx_ror_4 -txa -lsr -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=vbuxx_ror_4 -txa -lsr -lsr -lsr -lsr -tay -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1 -ldy {z1} -ldx {c1},y -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1 -ldx {z1} -ldy {c1},x -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa -tay -lda {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa -tay -ldx {c1},y -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa -tax -ldy {c1},x -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx -lda {c1},x -sta {z1} -//FRAGMENT vbuz1=vbuxx_band_vbuc1 -lda #{c1} -sax {z1} -//FRAGMENT vbuaa=vbuz1_band_vbuc1 -lda #{c1} -and {z1} -//FRAGMENT vbuaa=vbuxx_band_vbuc1 -txa -and #{c1} -//FRAGMENT vbuxx=vbuz1_band_vbuc1 -lda #{c1} -and {z1} -tax -//FRAGMENT vbuxx=vbuxx_band_vbuc1 -lda #{c1} -axs #0 -//FRAGMENT vbuyy=vbuz1_band_vbuc1 -lda #{c1} -and {z1} -tay -//FRAGMENT vbuyy=vbuxx_band_vbuc1 -txa -and #{c1} -tay -//FRAGMENT vbuaa=vbuc1 -lda #{c1} -//FRAGMENT vbuxx=vbuc1 -ldx #{c1} -//FRAGMENT vbuyy=vbuc1 -ldy #{c1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx -lda {c1},x -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy -lda {c1},y -//FRAGMENT vbuz1_lt_vbuc1_then_la1 -lda {z1} -cmp #{c1} -bcc {la1} -//FRAGMENT pbuc1_derefidx_vbuz1=vbuc2 -lda #{c2} -ldy {z1} -sta {c1},y -//FRAGMENT _deref_pbuc1=vbuc2 -lda #{c2} -sta {c1} -//FRAGMENT vbuz1=vbuz1_plus_2 -lda {z1} -clc -adc #2 -sta {z1} -//FRAGMENT vbuaa_lt_vbuc1_then_la1 -cmp #{c1} -bcc {la1} -//FRAGMENT pbuc1_derefidx_vbuaa=vbuc2 -tay -lda #{c2} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=vbuc2 -lda #{c2} -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=vbuc2 -lda #{c2} -sta {c1},y -//FRAGMENT vbuxx=vbuxx_plus_2 -inx -inx -//FRAGMENT vbuxx_lt_vbuc1_then_la1 -cpx #{c1} -bcc {la1} -//FRAGMENT vbuyy_lt_vbuc1_then_la1 -cpy #{c1} -bcc {la1} -//FRAGMENT vbuyy=vbuyy_plus_2 -iny -iny -//FRAGMENT vwuz1_lt_vwuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bcc {la1} -bne !+ -lda {z1} -cmp #<{c1} -bcc {la1} -!: -//FRAGMENT vbsz1=vbsz2 +//FRAGMENT vbuz1=_neg_vbuz2 lda {z2} -sta {z1} -//FRAGMENT vbuz1=_hi_vwsz2 -lda {z2}+1 +eor #$ff +clc +adc #$01 sta {z1} //FRAGMENT vbuz1=vbuc1_plus_vbuz2 lax {z2} axs #-[{c1}] stx {z1} -//FRAGMENT vbuz1=vbuz2 -lda {z2} -sta {z1} -//FRAGMENT vwuz1=vwuz1_plus_vwuz2 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=_inc_vwuz1 -inc {z1} -bne !+ -inc {z1}+1 -!: -//FRAGMENT pbuz1_neq_pbuc1_then_la1 +//FRAGMENT vbuz1=_dec_vbuz1 +dec {z1} +//FRAGMENT pbuz1_lt_pbuc1_then_la1 lda {z1}+1 cmp #>{c1} -bne {la1} +bcc {la1} +bne !+ lda {z1} cmp #<{c1} -bne {la1} +bcc {la1} +!: +//FRAGMENT pbuc1_derefidx_vbuz1=vbuc2 +lda #{c2} +ldy {z1} +sta {c1},y //FRAGMENT _deref_pbuz1=vbuc1 lda #{c1} ldy #0 sta ({z1}),y -//FRAGMENT 0_neq__deref_pbuz1_then_la1 -ldy #0 -lda ({z1}),y -cmp #0 -bne {la1} -//FRAGMENT vbuz1=_deref_pbuz2 -ldy #0 +//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +sta {c1} +//FRAGMENT pbuz1_derefidx_vbuz2_eq_vbuc1_then_la1 +lda #{c1} +ldy {z2} +cmp ({z1}),y +beq {la1} +//FRAGMENT vbuz1=pbuz2_derefidx_vbuz3 +ldy {z3} lda ({z2}),y sta {z1} -//FRAGMENT vwuz1=vwuz1_minus_vwuc1 +//FRAGMENT vbuz1_ge_vbuz2_then_la1 lda {z1} -sec -sbc #<{c1} +cmp {z2} +bcs {la1} +//FRAGMENT vbuz1_eq_vbuc1_then_la1 +lda #{c1} +cmp {z1} +beq {la1} +//FRAGMENT vwuz1=_word_vbuz2 +lda {z2} sta {z1} -lda {z1}+1 -sbc #>{c1} +lda #0 sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_minus_vwuz1 -sec -lda #<{c1} -sbc {z1} +//FRAGMENT vwuz1=vwuz2_rol_2 +lda {z2} +asl sta {z1} -lda #>{c1} -sbc {z1}+1 +lda {z2}+1 +rol +sta {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT vwuz1=vwuz2_plus_vwuz3 +lda {z2} +clc +adc {z3} +sta {z1} +lda {z2}+1 +adc {z3}+1 sta {z1}+1 //FRAGMENT vwuz1=vwuz2_rol_3 lda {z2} @@ -386,474 +450,260 @@ asl {z1} rol {z1}+1 asl {z1} rol {z1}+1 -//FRAGMENT vbuz1=vbuz2_minus_vbuz3 -lda {z2} -sec -sbc {z3} -sta {z1} -//FRAGMENT vbuz1=vbuz2_plus_vbuz3 +//FRAGMENT pbuz1=pbuz2_plus_vwuz3 lda {z2} clc adc {z3} sta {z1} -//FRAGMENT vbuz1=_dec_vbuz1 -dec {z1} -//FRAGMENT vbuz1_eq_0_then_la1 -lda {z1} -cmp #0 -beq {la1} -//FRAGMENT vbsz1=_neg_vbsz2 -lda {z2} -eor #$ff -clc -adc #$01 -sta {z1} -//FRAGMENT vbsz1_ge_0_then_la1 -lda {z1} -cmp #0 -bpl {la1} -//FRAGMENT vbuz1=vbuz2_minus_vbuc1 -lax {z2} -axs #{c1} -stx {z1} -//FRAGMENT vwuz1=vwuz1_sethi_vbuz2 -lda {z2} +lda {z2}+1 +adc {z3}+1 sta {z1}+1 -//FRAGMENT vbsz1_lt_0_then_la1 -lda {z1} -bmi {la1} -//FRAGMENT vbsz1=_neg_vbsz1 -lda {z1} -eor #$ff +//FRAGMENT pbuz1_derefidx_vbuz2=vbuc1 +lda #{c1} +ldy {z2} +sta ({z1}),y +//FRAGMENT pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 +lda #{c2} +ldy {z1} +cmp {c1},y +bne {la1} +//FRAGMENT vwuz1=vwuz2_plus_vbuz3 +lda {z3} clc -adc #$01 +adc {z2} sta {z1} -//FRAGMENT vwuz1=vbuc1 +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuc1_plus_vwuz2 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1=_deref_pbuz2 +ldy #0 +lda ({z2}),y +sta {z1} +//FRAGMENT vwuz1=vwuz2_rol_6 +lda {z2}+1 +lsr +sta $ff +lda {z2} +ror +sta {z1}+1 +lda #0 +ror +sta {z1} +lsr $ff +ror {z1}+1 +ror {z1} +//FRAGMENT vwuz1=vbuc1_plus_vwuz2 +lda #{c1} +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_rol_4 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT vbuz1=vbuz2_rol_3 +lda {z2} +asl +asl +asl +sta {z1} +//FRAGMENT pwuc1_derefidx_vbuz1=vwuz2 +ldy {z1} +lda {z2} +sta {c1},y +lda {z2}+1 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=_word_vbuz2 +lda {z2} +ldy {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=vwuc2 +ldy {z1} +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +//FRAGMENT qbuc1_derefidx_vbuz1=pbuz2 +ldy {z1} +lda {z2} +sta {c1},y +lda {z2}+1 +sta {c1}+1,y +//FRAGMENT vwsz1_ge_0_then_la1 +lda {z1}+1 +bpl {la1} +//FRAGMENT vwsz1=_neg_vwsz2 +sec +lda #0 +sbc {z2} +sta {z1} +lda #0 +sbc {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuc1 lda #<{c1} sta {z1} lda #>{c1} sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_rol_1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwuz1=vwuz1_bor_vbuc1 -lda #{c1} +//FRAGMENT vwsz1_neq_0_then_la1 +lda {z1}+1 ora {z1} -sta {z1} -//FRAGMENT vwuz1=vwuz2_rol_vbuz3 -lda {z2} -sta {z1} +bne {la1} +//FRAGMENT vwuz1=vwuz2_ror_1 lda {z2}+1 +lsr sta {z1}+1 -ldy {z3} -beq !e+ -!: -asl {z1} -rol {z1}+1 -dey -bne !- -!e: -//FRAGMENT vwuz1=_word_vbuz2 lda {z2} +ror +sta {z1} +//FRAGMENT vwuz1=vwuc1_minus_vwuz1 +sec +lda #<{c1} +sbc {z1} +sta {z1} +lda #>{c1} +sbc {z1}+1 +sta {z1}+1 +//FRAGMENT vwuz1=_neg_vwuz1 +sec +lda #0 +sbc {z1} sta {z1} lda #0 +sbc {z1}+1 sta {z1}+1 -//FRAGMENT vbuz1_neq_0_then_la1 +//FRAGMENT vbuz1_ge_vbuc1_then_la1 +lda {z1} +cmp #{c1} +bcs {la1} +//FRAGMENT 0_eq_vbuz1_then_la1 lda {z1} cmp #0 -bne {la1} -//FRAGMENT vbuz1=vbuz1_ror_1 -lsr {z1} -//FRAGMENT vbsaa=vbsz1 -lda {z1} -//FRAGMENT vbsxx=vbsz1 -ldx {z1} -//FRAGMENT vbsz1=vbsaa -sta {z1} -//FRAGMENT vbuaa=_hi_vwsz1 +beq {la1} +//FRAGMENT vwsz1=vwsz1_ror_1 lda {z1}+1 -//FRAGMENT vbuxx=_hi_vwsz1 -ldx {z1}+1 -//FRAGMENT vbuaa=vbuc1_plus_vbuz1 -lda #{c1} -clc -adc {z1} -//FRAGMENT vbuxx=vbuc1_plus_vbuz1 -lax {z1} -axs #-[{c1}] -//FRAGMENT vbuyy=vbuc1_plus_vbuz1 -lda #{c1} -clc -adc {z1} -tay -//FRAGMENT vbuz1=vbuc1_plus_vbuaa -clc -adc #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuc1_plus_vbuaa -clc -adc #{c1} -//FRAGMENT vbuxx=vbuc1_plus_vbuaa -tax -axs #-[{c1}] -//FRAGMENT vbuz1=vbuxx -stx {z1} -//FRAGMENT vbuaa=_deref_pbuz1 -ldy #0 -lda ({z1}),y -//FRAGMENT vbuxx=_deref_pbuz1 -ldy #0 -lda ({z1}),y -tax -//FRAGMENT vbuyy=_deref_pbuz1 -ldy #0 -lda ({z1}),y -tay -//FRAGMENT vbuz1=vbuyy_ror_4 -tya -lsr -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=vbuyy_ror_4 -tya -lsr -lsr -lsr -lsr -//FRAGMENT vbuxx=vbuyy_ror_4 -tya -lsr -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=vbuyy_ror_4 -tya -lsr -lsr -lsr -lsr -tay -//FRAGMENT vbuz1=vbuyy_band_vbuc1 -tya -and #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuyy_band_vbuc1 -tya -and #{c1} -//FRAGMENT vbuxx=vbuyy_band_vbuc1 -ldx #{c1} -tya -axs #0 -//FRAGMENT vbuyy=vbuyy_band_vbuc1 -tya -and #{c1} -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuz1 +cmp #$80 +ror {z1}+1 +ror {z1} +//FRAGMENT vwsz1=vwsz1_minus_vwsz2 lda {z1} -//FRAGMENT vbuxx=vbuz1 -ldx {z1} -//FRAGMENT vbuz1=vbuaa -sta {z1} -//FRAGMENT vbuz1=vbuaa_minus_vbuz2 sec sbc {z2} sta {z1} -//FRAGMENT vbuz1=vbuxx_minus_vbuz2 -txa -sec -sbc {z2} -sta {z1} -//FRAGMENT vbuz1=vbuyy_minus_vbuz2 -tya -sec -sbc {z2} -sta {z1} -//FRAGMENT vbuz1=vbuz2_minus_vbuaa -eor #$ff -sec +lda {z1}+1 +sbc {z2}+1 +sta {z1}+1 +//FRAGMENT vwsz1=vwsz1_plus_vwsz2 +lda {z1} +clc adc {z2} sta {z1} -//FRAGMENT vbuz1=vbuaa_minus_vbuaa -lda #0 -sta {z1} -//FRAGMENT vbuz1=vbuxx_minus_vbuaa -sta $ff -txa +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 +ldy {z2} sec -sbc $ff -sta {z1} -//FRAGMENT vbuz1=vbuyy_minus_vbuaa -sta $ff -tya -sec -sbc $ff -sta {z1} -//FRAGMENT vbuz1=vbuz2_minus_vbuxx -txa -eor #$ff -sec -adc {z2} -sta {z1} -//FRAGMENT vbuz1=vbuaa_minus_vbuxx -stx $ff -sec -sbc $ff -sta {z1} -//FRAGMENT vbuz1=vbuxx_minus_vbuxx -lda #0 -sta {z1} -//FRAGMENT vbuz1=vbuyy_minus_vbuxx -tya -stx $ff -sec -sbc $ff -sta {z1} -//FRAGMENT vbuz1=vbuz2_minus_vbuyy -tya -eor #$ff -sec -adc {z2} -sta {z1} -//FRAGMENT vbuz1=vbuaa_minus_vbuyy -sty $ff -sec -sbc $ff -sta {z1} -//FRAGMENT vbuz1=vbuxx_minus_vbuyy -txa -sty $ff -sec -sbc $ff -sta {z1} -//FRAGMENT vbuz1=vbuyy_minus_vbuyy -lda #0 -sta {z1} -//FRAGMENT vbuaa=vbuz1_minus_vbuz2 lda {z1} -sec -sbc {z2} -//FRAGMENT vbuaa=vbuaa_minus_vbuz1 -sec -sbc {z1} -//FRAGMENT vbuaa=vbuxx_minus_vbuz1 -txa -sec -sbc {z1} -//FRAGMENT vbuaa=vbuyy_minus_vbuz1 -tya -sec -sbc {z1} -//FRAGMENT vbuaa=vbuz1_minus_vbuaa -eor #$ff -sec -adc {z1} -//FRAGMENT vbuaa=vbuaa_minus_vbuaa -lda #0 -//FRAGMENT vbuaa=vbuxx_minus_vbuaa -sta $ff -txa -sec -sbc $ff -//FRAGMENT vbuaa=vbuyy_minus_vbuaa -sta $ff -tya -sec -sbc $ff -//FRAGMENT vbuaa=vbuz1_minus_vbuxx -txa -eor #$ff -sec -adc {z1} -//FRAGMENT vbuaa=vbuaa_minus_vbuxx -stx $ff -sec -sbc $ff -//FRAGMENT vbuaa=vbuxx_minus_vbuxx -lda #0 -//FRAGMENT vbuaa=vbuyy_minus_vbuxx -tya -stx $ff -sec -sbc $ff -//FRAGMENT vbuaa=vbuz1_minus_vbuyy -tya -eor #$ff -sec -adc {z1} -//FRAGMENT vbuaa=vbuaa_minus_vbuyy -sty $ff -sec -sbc $ff -//FRAGMENT vbuaa=vbuxx_minus_vbuyy -txa -sty $ff -sec -sbc $ff -//FRAGMENT vbuaa=vbuyy_minus_vbuyy -lda #0 -//FRAGMENT vbuxx=vbuz1_minus_vbuz2 +sbc {c1},y +sta {z1} +lda {z1}+1 +sbc {c1}+1,y +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 +ldy {z2} +clc lda {z1} -sec -sbc {z2} -tax -//FRAGMENT vbuxx=vbuaa_minus_vbuz1 -sec -sbc {z1} -tax -//FRAGMENT vbuxx=vbuxx_minus_vbuz1 +adc {c1},y +sta {z1} +lda {z1}+1 +adc {c1}+1,y +sta {z1}+1 +//FRAGMENT vwsz1=vwsz1_ror_2 +lda {z1}+1 +cmp #$80 +ror {z1}+1 +ror {z1} +lda {z1}+1 +cmp #$80 +ror {z1}+1 +ror {z1} +//FRAGMENT vbuz1=vbuz1_minus_2 +dec {z1} +dec {z1} +//FRAGMENT vbuz1=vbuaa_rol_1 +asl +sta {z1} +//FRAGMENT vbuz1=vbuxx_rol_1 txa -sec -sbc {z1} -tax -//FRAGMENT vbuxx=vbuyy_minus_vbuz1 +asl +sta {z1} +//FRAGMENT vbuz1=vbuyy_rol_1 tya -sec -sbc {z1} -tax -//FRAGMENT vbuxx=vbuz1_minus_vbuaa -eor #$ff -sec -adc {z1} -tax -//FRAGMENT vbuxx=vbuaa_minus_vbuaa -lda #0 -tax -//FRAGMENT vbuxx=vbuxx_minus_vbuaa -sta $ff -txa -sec -sbc $ff -tax -//FRAGMENT vbuxx=vbuyy_minus_vbuaa -sta $ff -tya -sec -sbc $ff -tax -//FRAGMENT vbuxx=vbuz1_minus_vbuxx -txa -eor #$ff -sec -adc {z1} -tax -//FRAGMENT vbuxx=vbuaa_minus_vbuxx -stx $ff -sec -sbc $ff -tax -//FRAGMENT vbuxx=vbuxx_minus_vbuxx -lda #0 -tax -//FRAGMENT vbuxx=vbuyy_minus_vbuxx -tya -stx $ff -sec -sbc $ff -tax -//FRAGMENT vbuxx=vbuz1_minus_vbuyy -tya -eor #$ff -sec -adc {z1} -tax -//FRAGMENT vbuxx=vbuaa_minus_vbuyy -sty $ff -sec -sbc $ff -tax -//FRAGMENT vbuxx=vbuxx_minus_vbuyy -txa -sty $ff -sec -sbc $ff -tax -//FRAGMENT vbuxx=vbuyy_minus_vbuyy -lda #0 -tax -//FRAGMENT vbuyy=vbuz1_minus_vbuz2 +asl +sta {z1} +//FRAGMENT vbuaa=vbuz1_rol_1 lda {z1} -sec -sbc {z2} -tay -//FRAGMENT vbuyy=vbuaa_minus_vbuz1 -sec -sbc {z1} -tay -//FRAGMENT vbuyy=vbuxx_minus_vbuz1 +asl +//FRAGMENT vbuaa=vbuaa_rol_1 +asl +//FRAGMENT vbuaa=vbuxx_rol_1 txa -sec -sbc {z1} -tay -//FRAGMENT vbuyy=vbuyy_minus_vbuz1 +asl +//FRAGMENT vbuaa=vbuyy_rol_1 tya -sec -sbc {z1} -tay -//FRAGMENT vbuyy=vbuz1_minus_vbuaa -eor #$ff -sec -adc {z1} -tay -//FRAGMENT vbuyy=vbuaa_minus_vbuaa -lda #0 -tay -//FRAGMENT vbuyy=vbuxx_minus_vbuaa -sta $ff +asl +//FRAGMENT vbuxx=vbuz1_rol_1 +lda {z1} +asl +tax +//FRAGMENT vbuxx=vbuaa_rol_1 +asl +tax +//FRAGMENT vbuxx=vbuxx_rol_1 txa -sec -sbc $ff -tay -//FRAGMENT vbuyy=vbuyy_minus_vbuaa -sta $ff +asl +tax +//FRAGMENT vbuxx=vbuyy_rol_1 tya -sec -sbc $ff +asl +tax +//FRAGMENT vbuyy=vbuz1_rol_1 +lda {z1} +asl tay -//FRAGMENT vbuyy=vbuz1_minus_vbuxx +//FRAGMENT vbuyy=vbuaa_rol_1 +asl +tay +//FRAGMENT vbuyy=vbuxx_rol_1 txa -eor #$ff -sec -adc {z1} +asl tay -//FRAGMENT vbuyy=vbuaa_minus_vbuxx -stx $ff -sec -sbc $ff -tay -//FRAGMENT vbuyy=vbuxx_minus_vbuxx -lda #0 -tay -//FRAGMENT vbuyy=vbuyy_minus_vbuxx +//FRAGMENT vbuyy=vbuyy_rol_1 tya -stx $ff -sec -sbc $ff -tay -//FRAGMENT vbuyy=vbuz1_minus_vbuyy -tya -eor #$ff -sec -adc {z1} -tay -//FRAGMENT vbuyy=vbuaa_minus_vbuyy -sty $ff -sec -sbc $ff -tay -//FRAGMENT vbuyy=vbuxx_minus_vbuyy -txa -sty $ff -sec -sbc $ff -tay -//FRAGMENT vbuyy=vbuyy_minus_vbuyy -lda #0 +asl tay //FRAGMENT vbuaa=vbuz1_plus_vbuz2 lda {z1} @@ -869,21 +719,6 @@ lda {z1} clc adc {z2} tay -//FRAGMENT vbuz1=vbuz2_plus_vbuaa -clc -adc {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_plus_vbuaa -clc -adc {z1} -//FRAGMENT vbuxx=vbuz1_plus_vbuaa -clc -adc {z1} -tax -//FRAGMENT vbuyy=vbuz1_plus_vbuaa -clc -adc {z1} -tay //FRAGMENT vbuz1=vbuz2_plus_vbuxx txa clc @@ -922,6 +757,59 @@ tya clc adc {z1} tay +//FRAGMENT vbuz1=vbuaa_plus_vbuz2 +clc +adc {z2} +sta {z1} +//FRAGMENT vbuaa=vbuaa_plus_vbuz1 +clc +adc {z1} +//FRAGMENT vbuxx=vbuaa_plus_vbuz1 +clc +adc {z1} +tax +//FRAGMENT vbuyy=vbuaa_plus_vbuz1 +clc +adc {z1} +tay +//FRAGMENT vbuz1=vbuaa_plus_vbuxx +stx $ff +clc +adc $ff +sta {z1} +//FRAGMENT vbuaa=vbuaa_plus_vbuxx +stx $ff +clc +adc $ff +//FRAGMENT vbuxx=vbuaa_plus_vbuxx +stx $ff +clc +adc $ff +tax +//FRAGMENT vbuyy=vbuaa_plus_vbuxx +stx $ff +clc +adc $ff +tay +//FRAGMENT vbuz1=vbuaa_plus_vbuyy +sty $ff +clc +adc $ff +sta {z1} +//FRAGMENT vbuaa=vbuaa_plus_vbuyy +sty $ff +clc +adc $ff +//FRAGMENT vbuxx=vbuaa_plus_vbuyy +sty $ff +clc +adc $ff +tax +//FRAGMENT vbuyy=vbuaa_plus_vbuyy +sty $ff +clc +adc $ff +tay //FRAGMENT vbuz1=vbuxx_plus_vbuz2 txa clc @@ -941,25 +829,6 @@ txa clc adc {z1} tay -//FRAGMENT vbuz1=vbuxx_plus_vbuaa -stx $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbuaa=vbuxx_plus_vbuaa -stx $ff -clc -adc $ff -//FRAGMENT vbuxx=vbuxx_plus_vbuaa -stx $ff -clc -adc $ff -tax -//FRAGMENT vbuyy=vbuxx_plus_vbuaa -stx $ff -clc -adc $ff -tay //FRAGMENT vbuz1=vbuxx_plus_vbuxx txa asl @@ -1017,25 +886,6 @@ tya clc adc {z1} tay -//FRAGMENT vbuz1=vbuyy_plus_vbuaa -sty $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbuaa=vbuyy_plus_vbuaa -sty $ff -clc -adc $ff -//FRAGMENT vbuxx=vbuyy_plus_vbuaa -sty $ff -clc -adc $ff -tax -//FRAGMENT vbuyy=vbuyy_plus_vbuaa -sty $ff -clc -adc $ff -tay //FRAGMENT vbuz1=vbuyy_plus_vbuxx txa sty $ff @@ -1074,94 +924,152 @@ tax tya asl tay -//FRAGMENT vbuxx_eq_0_then_la1 +//FRAGMENT pssc1_derefidx_vbuaa=_deref_pssc2_memcpy_vbuc3 +tax +ldy #0 +!: +lda {c2},y +sta {c1},x +inx +iny +cpy #{c3} +bne !- +//FRAGMENT pssc1_derefidx_vbuxx=_deref_pssc2_memcpy_vbuc3 +ldy #0 +!: +lda {c2},y +sta {c1},x +inx +iny +cpy #{c3} +bne !- +//FRAGMENT pssc1_derefidx_vbuyy=_deref_pssc2_memcpy_vbuc3 +ldx #0 +!: +lda {c2},x +sta {c1},y +iny +inx +cpx #{c3} +bne !- +//FRAGMENT vbuaa=vbuz1 +lda {z1} +//FRAGMENT vbuxx=vbuz1 +ldx {z1} +//FRAGMENT vbuz1=vbuaa +sta {z1} +//FRAGMENT vbuaa_neq_vbuc1_then_la1 +cmp #{c1} +bne {la1} +//FRAGMENT pssz1=pssc1_plus_vbuaa +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT pssz1=pssc1_plus_vbuxx +txa +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT pssz1=pssc1_plus_vbuyy +tya +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT vbuaa=vbuc1_rol_pbuz1_derefidx_vbuc2 +ldy #{c2} +lda ({z1}),y +tay +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +//FRAGMENT vbuxx=vbuc1_rol_pbuz1_derefidx_vbuc2 +ldy #{c2} +lda ({z1}),y +tax +lda #{c1} cpx #0 -beq {la1} -//FRAGMENT vbsaa=_neg_vbsz1 +beq !e+ +!: +asl +dex +bne !- +!e: +tax +//FRAGMENT vbuyy=vbuc1_rol_pbuz1_derefidx_vbuc2 +ldy #{c2} +lda ({z1}),y +tay +lda #{c1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +tay +//FRAGMENT vbuaa=_hi_vwuz1 +lda {z1}+1 +//FRAGMENT vbuxx=_hi_vwuz1 +ldx {z1}+1 +//FRAGMENT 0_neq_vbuaa_then_la1 +cmp #0 +bne {la1} +//FRAGMENT vbuaa=vbuc1_bxor_vbuz1 +lda #{c1} +eor {z1} +//FRAGMENT vbuxx=vbuc1_bxor_vbuz1 +lda #{c1} +eor {z1} +tax +//FRAGMENT vbuyy=vbuc1_bxor_vbuz1 +lda #{c1} +eor {z1} +tay +//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuaa +and {c1} +sta {c1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuxx +txa +and {c1} +sta {c1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuyy +tya +and {c1} +sta {c1} +//FRAGMENT vbuaa=_byte_vwuz1 lda {z1} -eor #$ff -clc -adc #$01 -//FRAGMENT vbsxx=_neg_vbsz1 +//FRAGMENT vbuxx=_byte_vwuz1 lda {z1} -eor #$ff -clc -adc #$01 tax -//FRAGMENT vbsyy=_neg_vbsz1 +//FRAGMENT vbuyy=_byte_vwuz1 lda {z1} -eor #$ff -clc -adc #$01 tay -//FRAGMENT vbsz1=_neg_vbsaa -eor #$ff -clc -adc #$01 -sta {z1} -//FRAGMENT vbsaa=_neg_vbsaa -eor #$ff -clc -adc #$01 -//FRAGMENT vbsxx=_neg_vbsaa -eor #$ff -clc -adc #$01 -tax -//FRAGMENT vbsyy=_neg_vbsaa -eor #$ff -clc -adc #$01 -tay -//FRAGMENT vbsz1=_neg_vbsxx +//FRAGMENT pbuc1_derefidx_vbuz1=vbuaa +ldy {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=vbuxx +ldy {z1} txa -eor #$ff -clc -adc #$01 -sta {z1} -//FRAGMENT vbsaa=_neg_vbsxx -txa -eor #$ff -clc -adc #$01 -//FRAGMENT vbsxx=_neg_vbsxx -txa -eor #$ff -clc -adc #$01 -tax -//FRAGMENT vbsyy=_neg_vbsxx -txa -eor #$ff -clc -adc #$01 -tay -//FRAGMENT vbsz1=_neg_vbsyy +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuz1=vbuyy tya -eor #$ff -clc -adc #$01 -sta {z1} -//FRAGMENT vbsaa=_neg_vbsyy -tya -eor #$ff -clc -adc #$01 -//FRAGMENT vbsxx=_neg_vbsyy -tya -eor #$ff -clc -adc #$01 -tax -//FRAGMENT vbsyy=_neg_vbsyy -tya -eor #$ff -clc -adc #$01 -tay -//FRAGMENT vbsxx_ge_0_then_la1 -cpx #0 -bpl {la1} +ldy {z1} +sta {c1},y //FRAGMENT vbuz1=vbuaa_minus_vbuc1 sec sbc #{c1} @@ -1196,5918 +1104,90 @@ axs #{c1} //FRAGMENT vbuxx=vbuaa_minus_vbuc1 tax axs #{c1} -//FRAGMENT vwuz1=vwuz1_sethi_vbuaa -sta {z1}+1 -//FRAGMENT vbsaa_lt_0_then_la1 -cmp #0 -bmi {la1} -//FRAGMENT vbuz1=vbuaa_band_vbuc1 -and #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuaa_band_vbuc1 -and #{c1} -//FRAGMENT vbuxx=vbuaa_band_vbuc1 -ldx #{c1} -axs #0 -//FRAGMENT vbuaa_eq_0_then_la1 -cmp #0 -beq {la1} -//FRAGMENT vwuz1=vwuz2_rol_vbuxx -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -cpx #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -dex -bne !- -!e: -//FRAGMENT vwuz1=vwuz2_rol_vbuyy -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -cpy #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -dey -bne !- -!e: -//FRAGMENT vwuz1=_word_vbuaa -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=_word_vbuxx -txa -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=_word_vbuyy -tya -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vbuxx_neq_0_then_la1 -cpx #0 -bne {la1} -//FRAGMENT vbsz1=vbsxx -stx {z1} -//FRAGMENT vbuyy_eq_0_then_la1 -cpy #0 -beq {la1} -//FRAGMENT vbuxx=vbuxx_ror_1 -txa -lsr +//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa +ldy #{c1} tax -//FRAGMENT vbuyy=vbuz1 -ldy {z1} -//FRAGMENT vbuyy_neq_0_then_la1 -cpy #0 -bne {la1} -//FRAGMENT vbuyy=vbuyy_ror_1 -tya -lsr -tay -//FRAGMENT vbuyy=_hi_vwuz1 -ldy {z1}+1 -//FRAGMENT vbuyy=vbuaa_band_vbuc1 -and #{c1} -tay -//FRAGMENT vbuxx=_inc_vbuxx -inx -//FRAGMENT vbuyy=_inc_vbuyy -iny -//FRAGMENT vbuyy_neq_vbuc1_then_la1 -cpy #{c1} -bne {la1} -//FRAGMENT vbuxx=vbuaa -tax -//FRAGMENT vbuxx=vbuyy -tya -tax -//FRAGMENT vbuaa=vbuyy -tya -//FRAGMENT vbuz1=vbuyy -sty {z1} -//FRAGMENT vbuaa=vbuxx -txa -//FRAGMENT vbuaa=_dec_vbuaa -sec -sbc #1 -//FRAGMENT vbuxx=_dec_vbuxx -dex -//FRAGMENT vbuyy=_dec_vbuyy -dey -//FRAGMENT vbsz1=vbsyy -sty {z1} -//FRAGMENT vbsaa=vbsxx -txa -//FRAGMENT vbsaa=vbsyy -tya -//FRAGMENT vbsxx=vbsaa -tax -//FRAGMENT vbsxx=vbsyy -tya -tax -//FRAGMENT vbsyy=vbsz1 -ldy {z1} -//FRAGMENT vbsyy=vbsaa -tay -//FRAGMENT vbsyy=vbsxx -txa -tay -//FRAGMENT vbuyy=vbuaa -tay -//FRAGMENT vwuz1=vwuz1_sethi_vbuxx -stx {z1}+1 -//FRAGMENT vbuxx=vbuxx_minus_vbuc1 -txa -axs #{c1} -//FRAGMENT vbuxx=vbuyy_minus_vbuc1 -tya -tax -axs #{c1} -//FRAGMENT vbuyy=vbuz1_minus_vbuc1 -lda {z1} -sec -sbc #{c1} -tay -//FRAGMENT vwuz1=vwuz1_sethi_vbuyy -sty {z1}+1 -//FRAGMENT vbuyy=vbuaa_minus_vbuc1 -sec -sbc #{c1} -tay -//FRAGMENT vbuyy=vbuxx_minus_vbuc1 -txa -sec -sbc #{c1} -tay -//FRAGMENT vbuyy=vbuyy_minus_vbuc1 -tya -sec -sbc #{c1} -tay -//FRAGMENT vbsyy_ge_0_then_la1 -cpy #0 -bpl {la1} -//FRAGMENT vbsxx_lt_0_then_la1 -cpx #0 -bmi {la1} -//FRAGMENT vbuz1=vbuc1_plus_vbuxx -txa -axs #-[{c1}] -stx {z1} -//FRAGMENT vbuyy=_hi_vwsz1 -ldy {z1}+1 -//FRAGMENT vbuz1=vbuc1_plus_vbuyy -tya -clc -adc #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuc1_plus__hi_vwsz2 -lda #{c1} -clc -adc {z2}+1 -sta {z1} -//FRAGMENT vwuz1=vwuz1_rol_3 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwuz1=vwuz1_rol_vbuz2 -ldy {z2} -beq !e+ -!: -asl {z1} -rol {z1}+1 -dey -bne !- -!e: -//FRAGMENT vbuz1_eq_vbuz2_then_la1 -lda {z1} -cmp {z2} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuz1=vbuz2 -lda {z2} -ldy {z1} -sta {c1},y -//FRAGMENT vbuz1_eq_vbuaa_then_la1 -cmp {z1} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuz1=vbuxx -ldy {z1} -txa -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=vbuyy -tya -ldy {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=vbuz1 -lda {z1} -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=vbuxx -txa -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=vbuyy -tya -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=vbuz1 -lda {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuyy=vbuxx -txa -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuyy=vbuyy -tya -sta {c1},y -//FRAGMENT vbuz1_eq_vbuyy_then_la1 -tya -cmp {z1} -beq {la1} -//FRAGMENT vbuyy_eq_vbuz1_then_la1 -tya -cmp {z1} -beq {la1} -//FRAGMENT vbuyy_eq_vbuaa_then_la1 -tax -sty $ff -cpx $ff -beq {la1} -//FRAGMENT vwuz1=vwuz2_plus_1 -clc -lda {z2} -adc #1 -sta {z1} -lda {z2}+1 -adc #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_rol_1 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -//FRAGMENT pwuz1=pwuc1_plus_vwuz2 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=_deref_pwuz2_plus__deref_pwuz3 -ldy #0 -clc -lda ({z2}),y -adc ({z3}),y -sta {z1} -iny -lda ({z2}),y -adc ({z3}),y -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_plus__deref_pwuz3 -ldy #0 -clc -lda {z2} -adc ({z3}),y -sta {z1} -iny -lda {z2}+1 -adc ({z3}),y -sta {z1}+1 -//FRAGMENT vwuz1_neq_vwuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bne {la1} -lda {z1} -cmp #<{c1} -bne {la1} -//FRAGMENT vwuz1=_deref_pwuz2 -ldy #0 -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT vduz1=vduz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -//FRAGMENT vwuz1=_lo_vduz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT pvoz1=_deref_qvoc1 -lda {c1} -sta {z1} -lda {c1}+1 -sta {z1}+1 -//FRAGMENT 0_neq_vbuz1_then_la1 -lda {z1} -cmp #0 -bne {la1} -//FRAGMENT vbuz1=_deref_pbuc1 -lda {c1} -sta {z1} -//FRAGMENT vduz1=_dword_vwuz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda #0 -sta {z1}+2 -sta {z1}+3 -//FRAGMENT vduz1=vduc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -lda #<{c1}>>$10 -sta {z1}+2 -lda #>{c1}>>$10 -sta {z1}+3 -//FRAGMENT vwuz1_neq_0_then_la1 -lda {z1} -ora {z1}+1 -bne {la1} -//FRAGMENT vbuz1=vwuz2_band_vbuc1 -lda #{c1} -and {z2} -sta {z1} -//FRAGMENT vduz1=vduz1_plus_vduz2 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -lda {z1}+2 -adc {z2}+2 -sta {z1}+2 -lda {z1}+3 -adc {z2}+3 -sta {z1}+3 -//FRAGMENT vwuz1=vwuz1_ror_1 -lsr {z1}+1 -ror {z1} -//FRAGMENT vduz1=vduz1_rol_1 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -//FRAGMENT vwuz1_le_0_then_la1 -lda {z1} -bne !+ -lda {z1}+1 -beq {la1} -!: -//FRAGMENT pbuz1=pbuz2_plus_vwuz3 -lda {z2} -clc -adc {z3} -sta {z1} -lda {z2}+1 -adc {z3}+1 -sta {z1}+1 -//FRAGMENT pbuz1_neq_pbuz2_then_la1 -lda {z1}+1 -cmp {z2}+1 -bne {la1} -lda {z1} -cmp {z2} -bne {la1} -//FRAGMENT _deref_pwuc1=vbuc2 -lda #0 -sta {c1}+1 -lda #<{c2} -sta {c1} -//FRAGMENT vbuz1_eq_vbuc1_then_la1 -lda #{c1} -cmp {z1} -beq {la1} -//FRAGMENT vbuz1=pbuc1_derefidx_(_deref_pbuc2) -ldy {c2} -lda {c1},y -sta {z1} -//FRAGMENT _deref_pwuc1=_inc__deref_pwuc1 -inc {c1} -bne !+ -inc {c1}+1 -!: -//FRAGMENT _deref_pwuc1_eq_vbuc2_then_la1 -lda {c1}+1 -bne !+ -lda {c1} -cmp #{c2} -beq {la1} -!: -//FRAGMENT vbuz1=_byte_vwuz2 -lda {z2} -sta {z1} -//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -ldy #0 -sta ({z1}),y -//FRAGMENT pbuz1=_inc_pbuz2 -clc -lda {z2} -adc #1 -sta {z1} -lda {z2}+1 -adc #0 -sta {z1}+1 -//FRAGMENT vbuz1=vbuz2_rol_1 -lda {z2} -asl -sta {z1} -//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1_ge_vwuz2_then_la1 -lda {z2}+1 -cmp {z1}+1 -bne !+ -lda {z2} -cmp {z1} -beq {la1} -!: -bcc {la1} -//FRAGMENT 0_eq_vbuz1_then_la1 -lda {z1} -cmp #0 -beq {la1} -//FRAGMENT vbuz1=_byte_vduz2 -lda {z2} -sta {z1} -//FRAGMENT vbuz1=vbuz2_rol_2 -lda {z2} -asl -asl -sta {z1} -//FRAGMENT vduz1=pduc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -lda {c1}+2,y -sta {z1}+2 -lda {c1}+3,y -sta {z1}+3 -//FRAGMENT vduz1_ge_vduz2_then_la1 -lda {z1}+3 -cmp {z2}+3 -bcc !+ -bne {la1} -lda {z1}+2 -cmp {z2}+2 -bcc !+ -bne {la1} -lda {z1}+1 -cmp {z2}+1 -bcc !+ -bne {la1} -lda {z1} -cmp {z2} -bcs {la1} -!: -//FRAGMENT _deref_(_deref_qbuc1)=_deref_pbuc2 -lda {c2} -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT _deref_pbuc1=vbuz1 -lda {z1} -sta {c1} -//FRAGMENT _deref_qbuc1=pbuz1 -lda {z1} -sta {c1} -lda {z1}+1 -sta {c1}+1 -//FRAGMENT vbuz1=vbuz2_bxor_vbuc1 -lda #{c1} -eor {z2} -sta {z1} -//FRAGMENT _deref_(_deref_qbuc1)=vbuz1 -lda {z1} -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT _deref_pbuc1=_inc__deref_pbuc1 -inc {c1} -//FRAGMENT _deref_pbuc1_neq_vbuc2_then_la1 -lda #{c2} -cmp {c1} -bne {la1} -//FRAGMENT _deref_(_deref_qbuc1)=_deref_(_deref_qbuc1)_bxor_vbuc2 -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -lda ($fe),y -eor #{c2} -sta ($fe),y -//FRAGMENT pbuz1=_deref_qbuc1 -lda {c1} -sta {z1} -lda {c1}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vbuc1 -lda #{c1} -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pvoz1=pvoz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vwuc1 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_minus_vwuz2 -lda {z1} -sec -sbc {z2} -sta {z1} -lda {z1}+1 -sbc {z2}+1 -sta {z1}+1 -//FRAGMENT vduz1=vduz1_minus_vduz2 -lda {z1} -sec -sbc {z2} -sta {z1} -lda {z1}+1 -sbc {z2}+1 -sta {z1}+1 -lda {z1}+2 -sbc {z2}+2 -sta {z1}+2 -lda {z1}+3 -sbc {z2}+3 -sta {z1}+3 -//FRAGMENT vwuz1=_word__deref_pbuc1 -lda {c1} -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_rol_2 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwuz1=vwuz2_plus_vwuz3 -lda {z2} -clc -adc {z3} -sta {z1} -lda {z2}+1 -adc {z3}+1 -sta {z1}+1 -//FRAGMENT pbuz1=_deref_qbuc1_plus_vwuz2 -clc -lda {z2} -adc {c1} -sta {z1} -lda {z2}+1 -adc {c1}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus__deref_pwuc1 -clc -lda {c1} -adc {z2} -sta {z1} -lda {c1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT _deref_pbuz1=_deref_pbuz2 -ldy #0 -lda ({z2}),y -ldy #0 -sta ({z1}),y -//FRAGMENT 0_neq_vbuaa_then_la1 -cmp #0 -bne {la1} -//FRAGMENT vbuaa=_deref_pbuc1 -lda {c1} -//FRAGMENT vbuxx=_deref_pbuc1 -ldx {c1} -//FRAGMENT vbuaa=vwuz1_band_vbuc1 -lda #{c1} -and {z1} -//FRAGMENT vbuxx=vwuz1_band_vbuc1 -lda #{c1} -and {z1} -tax -//FRAGMENT vbuyy=vwuz1_band_vbuc1 -lda #{c1} -and {z1} -tay -//FRAGMENT vbuaa=pbuc1_derefidx_(_deref_pbuc2) -ldy {c2} -lda {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_(_deref_pbuc2) -ldy {c2} -ldx {c1},y -//FRAGMENT vbuyy=pbuc1_derefidx_(_deref_pbuc2) -ldx {c2} -ldy {c1},x -//FRAGMENT vbuaa=_byte_vwuz1 -lda {z1} -//FRAGMENT vbuxx=_byte_vwuz1 -lda {z1} -tax -//FRAGMENT vbuyy=_byte_vwuz1 -lda {z1} -tay -//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuaa -tay -lda {c1},y -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuxx -lda {c1},x -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbuyy -lda {c1},y -ldy #0 -sta ({z1}),y -//FRAGMENT vbuaa=vbuz1_rol_1 -lda {z1} -asl -//FRAGMENT vbuxx=vbuz1_rol_1 -lda {z1} -asl -tax -//FRAGMENT vbuyy=vbuz1_rol_1 -lda {z1} -asl -tay -//FRAGMENT vbuz1=vbuaa_rol_1 -asl -sta {z1} -//FRAGMENT vbuaa=vbuaa_rol_1 -asl -//FRAGMENT vbuxx=vbuaa_rol_1 -asl -tax -//FRAGMENT vbuyy=vbuaa_rol_1 -asl -tay -//FRAGMENT vbuz1=vbuxx_rol_1 -txa -asl -sta {z1} -//FRAGMENT vbuaa=vbuxx_rol_1 -txa -asl -//FRAGMENT vbuxx=vbuxx_rol_1 -txa -asl -tax -//FRAGMENT vbuyy=vbuxx_rol_1 -txa -asl -tay -//FRAGMENT vbuz1=vbuyy_rol_1 -tya -asl -sta {z1} -//FRAGMENT vbuaa=vbuyy_rol_1 -tya -asl -//FRAGMENT vbuxx=vbuyy_rol_1 -tya -asl -tax -//FRAGMENT vbuyy=vbuyy_rol_1 -tya -asl -tay -//FRAGMENT vwuz1=pwuc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx -lda {c1},x -sta {z1} -lda {c1}+1,x -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT 0_neq_vbuxx_then_la1 -cpx #0 -bne {la1} -//FRAGMENT 0_eq_vbuaa_then_la1 -cmp #0 -beq {la1} -//FRAGMENT vbuaa=_byte_vduz1 -lda {z1} -//FRAGMENT vbuxx=_byte_vduz1 -lda {z1} -tax -//FRAGMENT vbuyy=_byte_vduz1 -lda {z1} -tay -//FRAGMENT vbuz1=vbuaa_rol_2 -asl -asl -sta {z1} -//FRAGMENT vbuz1=vbuxx_rol_2 -txa -asl -asl -sta {z1} -//FRAGMENT vbuz1=vbuyy_rol_2 -tya -asl -asl -sta {z1} -//FRAGMENT vbuaa=vbuz1_rol_2 -lda {z1} -asl -asl -//FRAGMENT vbuaa=vbuaa_rol_2 -asl -asl -//FRAGMENT vbuaa=vbuxx_rol_2 -txa -asl -asl -//FRAGMENT vbuaa=vbuyy_rol_2 -tya -asl -asl -//FRAGMENT vbuxx=vbuz1_rol_2 -lda {z1} -asl -asl -tax -//FRAGMENT vbuxx=vbuaa_rol_2 -asl -asl -tax -//FRAGMENT vbuxx=vbuxx_rol_2 -txa -asl -asl -tax -//FRAGMENT vbuxx=vbuyy_rol_2 -tya -asl -asl -tax -//FRAGMENT vbuyy=vbuz1_rol_2 -lda {z1} -asl -asl -tay -//FRAGMENT vbuyy=vbuaa_rol_2 -asl -asl -tay -//FRAGMENT vbuyy=vbuxx_rol_2 -txa -asl -asl -tay -//FRAGMENT vbuyy=vbuyy_rol_2 -tya -asl -asl -tay -//FRAGMENT vduz1=pduc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -lda {c1}+2,y -sta {z1}+2 -lda {c1}+3,y -sta {z1}+3 -//FRAGMENT vduz1=pduc1_derefidx_vbuxx -lda {c1},x -sta {z1} -lda {c1}+1,x -sta {z1}+1 -lda {c1}+2,x -sta {z1}+2 -lda {c1}+3,x -sta {z1}+3 -//FRAGMENT vduz1=pduc1_derefidx_vbuyy -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -lda {c1}+2,y -sta {z1}+2 -lda {c1}+3,y -sta {z1}+3 -//FRAGMENT _deref_pbuc1=vbuaa -sta {c1} -//FRAGMENT vbuaa=vbuz1_bxor_vbuc1 -lda #{c1} -eor {z1} -//FRAGMENT vbuxx=vbuz1_bxor_vbuc1 -lda #{c1} -eor {z1} -tax -//FRAGMENT vbuyy=vbuz1_bxor_vbuc1 -lda #{c1} -eor {z1} -tay -//FRAGMENT vbuz1=vbuxx_bxor_vbuc1 -txa -eor #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuxx_bxor_vbuc1 -txa -eor #{c1} -//FRAGMENT vbuxx=vbuxx_bxor_vbuc1 -txa -eor #{c1} -tax -//FRAGMENT vbuyy=vbuxx_bxor_vbuc1 -txa -eor #{c1} -tay -//FRAGMENT vbuz1=vbuyy_bxor_vbuc1 -tya -eor #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuyy_bxor_vbuc1 -tya -eor #{c1} -//FRAGMENT vbuxx=vbuyy_bxor_vbuc1 -tya -eor #{c1} -tax -//FRAGMENT vbuyy=vbuyy_bxor_vbuc1 -tya -eor #{c1} -tay -//FRAGMENT _deref_(_deref_qbuc1)=vbuaa -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT _deref_(_deref_qbuc1)=vbuxx -txa -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT _deref_(_deref_qbuc1)=vbuyy -tya -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT _deref_pbuc1=vbuxx -stx {c1} -//FRAGMENT _deref_pbuc1=vbuyy -sty {c1} -//FRAGMENT 0_neq_vbuyy_then_la1 -cpy #0 -bne {la1} -//FRAGMENT 0_eq_vbuxx_then_la1 -cpx #0 -beq {la1} -//FRAGMENT vbuyy=_deref_pbuc1 -ldy {c1} -//FRAGMENT 0_eq_vbuyy_then_la1 -cpy #0 -beq {la1} -//FRAGMENT vwuz1=_deref_pwuz1 -ldy #0 -lda ({z1}),y -pha -iny -lda ({z1}),y -sta {z1}+1 -pla -sta {z1} -//FRAGMENT pbuz1=pbuz2_plus_vwuz1 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=_deref_pwuz1_plus__deref_pwuz2 -ldy #0 clc lda ({z1}),y -adc ({z2}),y -pha -iny -lda ({z1}),y -adc ({z2}),y -sta {z1}+1 -pla -sta {z1} -//FRAGMENT vwuz1=vwuz2_plus__deref_pwuz1 -ldy #0 -clc -lda ({z1}),y -adc {z2} -pha -iny -lda ({z1}),y -adc {z2}+1 -sta {z1}+1 -pla -sta {z1} -//FRAGMENT vwuz1=vwuz2_plus_vwuz1 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=_deref_qbuc1_plus_vwuz1 -clc -lda {z1} -adc {c1} -sta {z1} -lda {z1}+1 -adc {c1}+1 -sta {z1}+1 -//FRAGMENT pwuz1=pwuc1_plus_vwuz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1=pbuz1_plus_vwuc1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1=pbuz1_plus__deref_pwuc1 -clc -lda {c1} -adc {z1} -sta {z1} -lda {c1}+1 -adc {z1}+1 -sta {z1}+1 -//FRAGMENT vbuz1=vbuz2_minus_1 -ldx {z2} -dex -stx {z1} -//FRAGMENT pbuz1_derefidx_vbuz2_neq_vbuz3_then_la1 -ldy {z2} -lda ({z1}),y - -cmp {z3} -bne {la1} -//FRAGMENT vbuz1_lt_vbuz2_then_la1 -lda {z1} -cmp {z2} -bcc {la1} -//FRAGMENT vbuz1_le_vbuz2_then_la1 -lda {z2} -cmp {z1} -bcs {la1} -//FRAGMENT _deref_pbuz1_neq_vbuz2_then_la1 -ldy #0 -lda ({z1}),y -cmp {z2} -bne {la1} -//FRAGMENT pbuz1=pbuc1_plus_vwuz2 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1_derefidx_vbuz2=vbuc1 -lda #{c1} -ldy {z2} -sta ({z1}),y -//FRAGMENT vbuz1_le_vbuc1_then_la1 -lda #{c1} -cmp {z1} -bcs {la1} -//FRAGMENT pbuz1_derefidx_vbuz2=vbuz3 -lda {z3} -ldy {z2} -sta ({z1}),y -//FRAGMENT pvoz1=pvoc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1=pbuz1_minus_vbuc1 -sec -lda {z1} -sbc #{c1} -sta {z1} -lda {z1}+1 -sbc #0 -sta {z1}+1 -//FRAGMENT vbuaa=vbuz1_minus_1 -lda {z1} -sec -sbc #1 -//FRAGMENT pbuz1_derefidx_vbuaa_neq_vbuz2_then_la1 -tay -lda ({z1}),y - -cmp {z2} -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuxx_neq_vbuz2_then_la1 -txa -tay -lda ({z1}),y - -cmp {z2} -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuyy_neq_vbuz2_then_la1 -lda ({z1}),y - -cmp {z2} -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuz2_neq_vbuxx_then_la1 -ldy {z2} -lda ({z1}),y - -tay -stx $ff -cpy $ff -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuaa_neq_vbuxx_then_la1 -tay -lda ({z1}),y - -tay -stx $ff -cpy $ff -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuxx_neq_vbuxx_then_la1 -txa -tay -lda ({z1}),y - -tay -stx $ff -cpy $ff -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuyy_neq_vbuxx_then_la1 -lda ({z1}),y - -tay -stx $ff -cpy $ff -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuz2_neq_vbuyy_then_la1 -tya -ldy {z2} -tax -lda ({z1}),y - -tay -stx $ff -cpy $ff -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuaa_neq_vbuyy_then_la1 -NO_SYNTHESIS -//FRAGMENT pbuz1_derefidx_vbuxx_neq_vbuyy_then_la1 -NO_SYNTHESIS -//FRAGMENT pbuz1_derefidx_vbuyy_neq_vbuyy_then_la1 -lda ({z1}),y - -tax -stx $ff -cpy $ff -bne {la1} -//FRAGMENT vbuxx_lt_vbuz1_then_la1 -cpx {z1} -bcc {la1} -//FRAGMENT vbuxx_le_vbuz1_then_la1 -lda {z1} -stx $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuz1_le_vbuxx_then_la1 -cpx {z1} -bcs {la1} -//FRAGMENT vbuxx_eq_vbuc1_then_la1 -cpx #{c1} -beq {la1} -//FRAGMENT _deref_pbuz1_neq_vbuxx_then_la1 -ldy #0 -lda ({z1}),y -tay -stx $ff -cpy $ff -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuaa=vbuc1 -tay -lda #{c1} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=vbuc1 -txa -tay -lda #{c1} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=vbuc1 -lda #{c1} -sta ({z1}),y -//FRAGMENT vbuaa_le_vbuc1_then_la1 -cmp #{c1} -bcc {la1} -beq {la1} -//FRAGMENT vbuz1=vbuaa_plus_vbuz2 -clc -adc {z2} -sta {z1} -//FRAGMENT vbuaa=vbuaa_plus_vbuz1 -clc -adc {z1} -//FRAGMENT vbuxx=vbuaa_plus_vbuz1 -clc -adc {z1} -tax -//FRAGMENT vbuyy=vbuaa_plus_vbuz1 -clc -adc {z1} -tay -//FRAGMENT vbuz1=vbuaa_plus_vbuxx -stx $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbuaa=vbuaa_plus_vbuxx -stx $ff -clc -adc $ff -//FRAGMENT vbuxx=vbuaa_plus_vbuxx -stx $ff -clc -adc $ff -tax -//FRAGMENT vbuyy=vbuaa_plus_vbuxx -stx $ff -clc -adc $ff -tay -//FRAGMENT vbuz1=vbuaa_plus_vbuyy -sty $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbuaa=vbuaa_plus_vbuyy -sty $ff -clc -adc $ff -//FRAGMENT vbuxx=vbuaa_plus_vbuyy -sty $ff -clc -adc $ff -tax -//FRAGMENT vbuyy=vbuaa_plus_vbuyy -sty $ff -clc -adc $ff -tay -//FRAGMENT vbuaa_eq_vbuc1_then_la1 -cmp #{c1} -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuz2=vbuaa -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=vbuxx -ldy {z2} -txa -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=vbuyy -tya -ldy {z2} -sta ({z1}),y -//FRAGMENT vbuxx_le_vbuc1_then_la1 -cpx #{c1} -bcc {la1} -beq {la1} -//FRAGMENT vbuyy_eq_vbuc1_then_la1 -cpy #{c1} -beq {la1} -//FRAGMENT vbuyy_le_vbuc1_then_la1 -cpy #{c1} -bcc {la1} -beq {la1} -//FRAGMENT vbuxx=vbuz1_minus_1 -ldx {z1} -dex -//FRAGMENT vbuyy=vbuz1_minus_1 -lda {z1} -tay -dey -//FRAGMENT vbuz1=vbuz1_plus_vbuaa -clc -adc {z1} -sta {z1} -//FRAGMENT pbuz1=pbuc1_plus_vwuz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1_derefidx_vbuz2_neq_vbuc1_then_la1 -ldy {z2} -lda ({z1}),y - -cmp #{c1} -bne {la1} -//FRAGMENT vbuz1=vbuz1_plus_vbuz2 -lda {z1} -clc -adc {z2} -sta {z1} -//FRAGMENT vbuz1=vbuz1_minus_vbuc1 -lax {z1} -axs #{c1} -stx {z1} -//FRAGMENT pbuz1=pbuz1_plus_vbuz2 -lda {z2} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT vwuz1=vwuz1_plus_vbuz2 -lda {z2} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT pbuz1_derefidx_vbuxx_neq_vbuc1_then_la1 -txa -tay -lda ({z1}),y - -cmp #{c1} -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuyy_neq_vbuc1_then_la1 -lda ({z1}),y - -cmp #{c1} -bne {la1} -//FRAGMENT vbuz1=vbuz1_plus_vbuxx -txa -clc -adc {z1} -sta {z1} -//FRAGMENT vbuz1=vbuz1_plus_vbuyy -tya -clc -adc {z1} -sta {z1} -//FRAGMENT pbuz1=pbuz1_plus_vbuaa -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT pbuz1=pbuz1_plus_vbuxx -txa -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT pbuz1=pbuz1_plus_vbuyy -tya -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT vwuz1=vwuz1_plus_vbuxx -txa -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT vwuz1=vwuz1_plus_vbuyy -tya -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT _deref_pbuz1_neq_vbuc1_then_la1 -ldy #0 -lda ({z1}),y -cmp #{c1} -bne {la1} -//FRAGMENT 0_eq_pbuc1_derefidx_vbuz1_then_la1 -ldy {z1} -lda {c1},y -cmp #0 -beq {la1} -//FRAGMENT 0_eq__deref_pbuz1_then_la1 -ldy #0 -lda ({z1}),y -cmp #0 -beq {la1} -//FRAGMENT _deref_pbuz1_eq_vbuc1_then_la1 -lda #{c1} -ldy #0 -cmp ({z1}),y -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuz2_neq_pbuz3_derefidx_vbuz2_then_la1 -ldy {z2} -lda ({z1}),y - -tax -lda ({z3}),y - -tay -stx $ff -cpy $ff -bne {la1} -//FRAGMENT 0_eq_pbuc1_derefidx_vbuaa_then_la1 -tay -lda {c1},y -cmp #0 -beq {la1} -//FRAGMENT 0_eq_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -cmp #0 -beq {la1} -//FRAGMENT 0_eq_pbuc1_derefidx_vbuyy_then_la1 -lda {c1},y -cmp #0 -beq {la1} -//FRAGMENT vbuaa_neq_vbuc1_then_la1 -cmp #{c1} -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuaa_neq_pbuz2_derefidx_vbuaa_then_la1 -tay -lda ({z1}),y - -tax -lda ({z2}),y - -tay -stx $ff -cpy $ff -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuxx_neq_pbuz2_derefidx_vbuxx_then_la1 -txa -tay -lda ({z1}),y - -tax -lda ({z2}),y - -tay -stx $ff -cpy $ff -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuyy_neq_pbuz2_derefidx_vbuyy_then_la1 -lda ({z1}),y - -tax -lda ({z2}),y - -tay -stx $ff -cpy $ff -bne {la1} -//FRAGMENT vbuz1_ge_vbuc1_then_la1 -lda {z1} -cmp #{c1} -bcs {la1} -//FRAGMENT vbuaa_ge_vbuc1_then_la1 -cmp #{c1} -bcs {la1} -//FRAGMENT vbuaa_neq_0_then_la1 -cmp #0 -bne {la1} -//FRAGMENT vbuxx_ge_vbuc1_then_la1 -cpx #{c1} -bcs {la1} -//FRAGMENT vbuyy_ge_vbuc1_then_la1 -cpy #{c1} -bcs {la1} -//FRAGMENT 0_neq_pbuz1_derefidx_vbuz2_then_la1 -ldy {z2} -lda ({z1}),y - -cmp #0 -bne {la1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuz2 -ldy {z2} -lda ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=vbuaa -stx $ff -ldy $ff -sta ({z1}),y -//FRAGMENT 0_neq_pbuz1_derefidx_vbuaa_then_la1 -tay -lda ({z1}),y - -cmp #0 -bne {la1} -//FRAGMENT 0_neq_pbuz1_derefidx_vbuxx_then_la1 -txa -tay -lda ({z1}),y - -cmp #0 -bne {la1} -//FRAGMENT 0_neq_pbuz1_derefidx_vbuyy_then_la1 -lda ({z1}),y - -cmp #0 -bne {la1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuxx -txa -tay -lda ({z1}),y -//FRAGMENT vbuaa=pbuz1_derefidx_vbuyy -lda ({z1}),y -//FRAGMENT vbuz1_neq_vbuz2_then_la1 -lda {z1} -cmp {z2} -bne {la1} -//FRAGMENT vbuz1_gt_vbuz2_then_la1 -lda {z2} -cmp {z1} -bcc {la1} -//FRAGMENT vbuz1=vbuz1_minus_vbuz2 -lda {z1} -sec -sbc {z2} -sta {z1} -//FRAGMENT vbuz1_neq_vbuaa_then_la1 -cmp {z1} -bne {la1} -//FRAGMENT vbuz1_gt_vbuaa_then_la1 -cmp {z1} -bcc {la1} -//FRAGMENT vbuz1=vbuz1_minus_vbuaa -eor #$ff -sec -adc {z1} -sta {z1} -//FRAGMENT vbuz1=vbuz1_minus_vbuxx -txa -eor #$ff -sec -adc {z1} -sta {z1} -//FRAGMENT vbuz1=vbuz1_minus_vbuyy -tya -eor #$ff -sec -adc {z1} -sta {z1} -//FRAGMENT vbuz1_neq_vbuxx_then_la1 -cpx {z1} -bne {la1} -//FRAGMENT vbuz1_gt_vbuxx_then_la1 -cpx {z1} -bcc {la1} -//FRAGMENT vbuz1_neq_vbuyy_then_la1 -cpy {z1} -bne {la1} -//FRAGMENT vbuz1_gt_vbuyy_then_la1 -cpy {z1} -bcc {la1} -//FRAGMENT vbuxx_neq_vbuz1_then_la1 -cpx {z1} -bne {la1} -//FRAGMENT vbuxx_gt_vbuz1_then_la1 -cpx {z1} -beq !+ -bcs {la1} -!: -//FRAGMENT vbuxx_neq_vbuyy_then_la1 -stx $ff -cpy $ff -bne {la1} -//FRAGMENT vbuxx_gt_vbuyy_then_la1 -stx $ff -cpy $ff -bcc {la1} -//FRAGMENT vbuyy_neq_vbuz1_then_la1 -cpy {z1} -bne {la1} -//FRAGMENT vbuyy_gt_vbuz1_then_la1 -cpy {z1} -beq !+ -bcs {la1} -!: -//FRAGMENT vbuyy_neq_vbuxx_then_la1 -stx $ff -cpy $ff -bne {la1} -//FRAGMENT vbuyy_gt_vbuxx_then_la1 -sty $ff -cpx $ff -bcc {la1} -//FRAGMENT vbuyy=vbuxx -txa -tay -//FRAGMENT pbuc1_derefidx_vbuz1=vbuz1 -ldy {z1} -tya -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuaa=vbuaa -tax -sta {c1},x -//FRAGMENT vbuaa=_inc_vbuaa -clc -adc #1 -//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_vbuc2 -ldy {z1} -clc -lda {c1},y -adc #{c2} -sta {c1},y -lda {c1}+1,y -adc #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_pwuc2_derefidx_vbuz1 -ldy {z1} -clc -lda {c1},y -adc {c2},y -sta {c1},y -lda {c1}+1,y -adc {c2}+1,y -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuaa=pwuc1_derefidx_vbuaa_plus_vbuc2 -tay -clc -lda {c1},y -adc #{c2} -sta {c1},y -lda {c1}+1,y -adc #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_vbuc2 -clc -lda {c1},x -adc #{c2} -sta {c1},x -lda {c1}+1,x -adc #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_vbuc2 -clc -lda {c1},y -adc #{c2} -sta {c1},y -lda {c1}+1,y -adc #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_pwuc2_derefidx_vbuxx -txa -tay -txa -sty $ff -ldx $ff -tay -clc -lda {c1},y adc {c2},x -sta {c1},y -lda {c1}+1,y -adc {c2}+1,x -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_pwuc2_derefidx_vbuyy -clc -lda {c1},y -adc {c2},y -sta {c1},y -lda {c1}+1,y -adc {c2}+1,y -sta {c1}+1,y -//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2 -lda #{c2} -ora {c1} -sta {c1} -//FRAGMENT _deref_qprc1=pprc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 -//FRAGMENT _deref_pbuc1_lt_vbuc2_then_la1 -lda {c1} -cmp #{c2} -bcc {la1} -//FRAGMENT qbuz1=qbuc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT vbsz1=vbsc1 -lda #{c1} -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -//FRAGMENT vwsz1=vwsz2_plus_vwsc1 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vwsz2_rol_1 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -//FRAGMENT vbuz1=vbuz1_plus_vbuc1 -lax {z1} -axs #-[{c1}] -stx {z1} -//FRAGMENT vbsz1=vbsz1_plus_vbsc1 -lax {z1} -axs #-[{c1}] -stx {z1} -//FRAGMENT _deref_pbuc1=_deref_pbuc2 -lda {c2} -sta {c1} -//FRAGMENT pbuz1=pbuc1_plus_vbuz2 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pwuc1_derefidx_vbuz1=vwuz2 -ldy {z1} -lda {z2} -sta {c1},y -lda {z2}+1 -sta {c1}+1,y -//FRAGMENT qbuc1_derefidx_vbuz1=pbuc2 -ldy {z1} -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT pbuz1=qbuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT pbuz1_derefidx_vbuc1=vbuc2 -lda #{c2} -ldy #{c1} -sta ({z1}),y -//FRAGMENT vbuz1=vbuz2_ror_2 -lda {z2} -lsr -lsr -sta {z1} -//FRAGMENT vbuz1=vbuz2_ror_3 -lda {z2} -lsr -lsr -lsr -sta {z1} -//FRAGMENT pbuz1=pbuz2_plus_vbuz3 -lda {z3} -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT _deref_qbuz1=pbuz2 -ldy #0 -lda {z2} sta ({z1}),y iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT qbuz1=qbuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuz2 -ldy {z2} -lda {c2},y -ldy #{c1} -sta ({z1}),y -//FRAGMENT vbuz1=vbuz2_band__deref_pbuc1 -lda {c1} -and {z2} -sta {z1} -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz2 -ldy {z2} -lda ({z3}),y -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2_eq_pbuz3_derefidx_vbuz2_then_la1 -ldy {z2} lda ({z1}),y - -cmp ({z3}),y -beq {la1} -//FRAGMENT vbuz1_gt_0_then_la1 -lda {z1} -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c2},y -sta {c1},y -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_band_vbuc2 -lda #{c2} -ldy {z2} -and {c1},y -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_ror_1 -ldy {z2} -lda {c1},y -lsr -sta {z1} -//FRAGMENT vbuz1=vbuz2_bor_vbuz3 -lda {z2} -ora {z3} -sta {z1} -//FRAGMENT _deref_pbuz1=_deref_pbuc1 -lda {c1} -ldy #0 +adc {c2}+1,x sta ({z1}),y -//FRAGMENT _deref_pbsc1_ge_0_then_la1 -lda {c1} -cmp #0 -bpl {la1} -//FRAGMENT vbuz1=vbuz2_minus__deref_pbuc1 -lda {z2} -sec -sbc {c1} -sta {z1} -//FRAGMENT vbuz1=_bnot__deref_pbuc1 -lda {c1} -eor #$ff -sta {z1} -//FRAGMENT vwuz1=_deref_pbuc1_word__deref_pbuc2 -lda {c2} -sta {z1} -lda {c1} -sta {z1}+1 -//FRAGMENT vbsz1=pbsc1_derefidx_vbuxx -lda {c1},x -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbuyy -lda {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -//FRAGMENT vbsaa=pbsc1_derefidx_vbuxx -lda {c1},x -//FRAGMENT vbsaa=pbsc1_derefidx_vbuyy -lda {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbuz1 -ldy {z1} -ldx {c1},y -//FRAGMENT vbuxx=vbuxx_plus_vbuc1 -txa -axs #-[{c1}] -//FRAGMENT vbuyy=vbuyy_plus_vbuc1 -tya +//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuxx +ldy #{c1} clc -adc #{c1} -tay -//FRAGMENT vbsxx=vbsxx_plus_vbsc1 -txa -axs #-[{c1}] -//FRAGMENT vbsyy=vbsyy_plus_vbsc1 +lda ({z1}),y +adc {c2},x +sta ({z1}),y +iny +lda ({z1}),y +adc {c2}+1,x +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuyy tya -clc -adc #{c1} -tay -//FRAGMENT pbuz1=pbuc1_plus_vbuaa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_plus_vbuxx -txa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_plus_vbuyy -tya -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pwuc1_derefidx_vbuaa=vwuz1 -tay -lda {z1} -sta {c1},y -lda {z1}+1 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=vwuz1 -lda {z1} -sta {c1},x -lda {z1}+1 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=vwuz1 -lda {z1} -sta {c1},y -lda {z1}+1 -sta {c1}+1,y -//FRAGMENT qbuc1_derefidx_vbuaa=pbuc2 -tay -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT qbuc1_derefidx_vbuxx=pbuc2 -lda #<{c2} -sta {c1},x -lda #>{c2} -sta {c1}+1,x -//FRAGMENT qbuc1_derefidx_vbuyy=pbuc2 -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT pbuz1=qbuc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT pbuz1=qbuc1_derefidx_vbuxx -lda {c1},x -sta {z1} -lda {c1}+1,x -sta {z1}+1 -//FRAGMENT pbuz1=qbuc1_derefidx_vbuyy -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT vbuz1=vbuaa_ror_2 -lsr -lsr -sta {z1} -//FRAGMENT vbuz1=vbuxx_ror_2 -txa -lsr -lsr -sta {z1} -//FRAGMENT vbuz1=vbuyy_ror_2 -tya -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=vbuz1_ror_2 -lda {z1} -lsr -lsr -//FRAGMENT vbuaa=vbuaa_ror_2 -lsr -lsr -//FRAGMENT vbuaa=vbuxx_ror_2 -txa -lsr -lsr -//FRAGMENT vbuaa=vbuyy_ror_2 -tya -lsr -lsr -//FRAGMENT vbuxx=vbuz1_ror_2 -lda {z1} -lsr -lsr +ldy #{c1} tax -//FRAGMENT vbuxx=vbuaa_ror_2 -lsr -lsr -tax -//FRAGMENT vbuxx=vbuxx_ror_2 +clc +lda ({z1}),y +adc {c2},x +sta ({z1}),y +iny +lda ({z1}),y +adc {c2}+1,x +sta ({z1}),y +//FRAGMENT vbuz1=vbuxx_ror_3 txa lsr lsr -tax -//FRAGMENT vbuxx=vbuyy_ror_2 -tya lsr -lsr -tax -//FRAGMENT vbuyy=vbuz1_ror_2 -lda {z1} -lsr -lsr -tay -//FRAGMENT vbuyy=vbuaa_ror_2 -lsr -lsr -tay -//FRAGMENT vbuyy=vbuxx_ror_2 -txa -lsr -lsr -tay -//FRAGMENT vbuyy=vbuyy_ror_2 -tya -lsr -lsr -tay +sta {z1} //FRAGMENT vbuaa=vbuz1_ror_3 lda {z1} lsr lsr lsr +//FRAGMENT vbuaa=vbuxx_ror_3 +txa +lsr +lsr +lsr //FRAGMENT vbuxx=vbuz1_ror_3 lda {z1} lsr lsr lsr tax +//FRAGMENT vbuxx=vbuxx_ror_3 +txa +lsr +lsr +lsr +tax //FRAGMENT vbuyy=vbuz1_ror_3 lda {z1} lsr lsr lsr tay -//FRAGMENT vbuz1=vbuxx_ror_3 -txa -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=vbuxx_ror_3 -txa -lsr -lsr -lsr -//FRAGMENT vbuxx=vbuxx_ror_3 -txa -lsr -lsr -lsr -tax //FRAGMENT vbuyy=vbuxx_ror_3 txa lsr lsr lsr tay -//FRAGMENT vbuz1=vbuyy_ror_3 -tya -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=vbuyy_ror_3 -tya -lsr -lsr -lsr -//FRAGMENT vbuxx=vbuyy_ror_3 -tya -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=vbuyy_ror_3 -tya -lsr -lsr -lsr -tay -//FRAGMENT pbuz1=pbuz2_plus_vbuxx -txa -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vbuyy -tya -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuxx -lda {c2},x -ldy #{c1} -sta ({z1}),y -//FRAGMENT vbuaa=vbuz1_band__deref_pbuc1 -lda {c1} -and {z1} -//FRAGMENT vbuxx=vbuz1_band__deref_pbuc1 -lda {c1} -and {z1} -tax -//FRAGMENT vbuyy=vbuz1_band__deref_pbuc1 -lda {c1} -and {z1} -tay -//FRAGMENT vbuz1=vbuaa_band__deref_pbuc1 -and {c1} -sta {z1} -//FRAGMENT vbuaa=vbuaa_band__deref_pbuc1 -and {c1} -//FRAGMENT vbuxx=vbuaa_band__deref_pbuc1 -ldx {c1} -axs #0 -//FRAGMENT vbuaa_neq_vbuz1_then_la1 -cmp {z1} -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuaa -tay -lda ({z2}),y -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuxx -txa -tay -lda ({z2}),y -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuyy -lda ({z2}),y -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa_eq_pbuz2_derefidx_vbuaa_then_la1 -tay -lda ({z1}),y - -cmp ({z2}),y -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuxx_eq_pbuz2_derefidx_vbuxx_then_la1 -txa -tay -lda ({z1}),y - -cmp ({z2}),y -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuyy_eq_pbuz2_derefidx_vbuyy_then_la1 -lda ({z1}),y - -cmp ({z2}),y -beq {la1} -//FRAGMENT vbuaa_gt_0_then_la1 -cmp #0 -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuaa -tay -lda {c2},y -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx -lda {c2},x -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuyy -lda {c2},y -sta {c1},y -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_band_vbuc2 -tay -lda #{c2} -and {c1},y -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_band_vbuc2 -lda #{c2} -ldy {z1} -and {c1},y -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_band_vbuc2 -tay -lda #{c2} -and {c1},y -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_band_vbuc2 -lda #{c2} -ldx {z1} -and {c1},x -tax -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_band_vbuc2 -tax -lda #{c2} -and {c1},x -tax -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -tax -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_band_vbuc2 -lda #{c2} -ldy {z1} -and {c1},y -tay -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_band_vbuc2 -tay -lda #{c2} -and {c1},y -tay -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -tay -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_ror_1 -lda {c1},x -lsr -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_ror_1 -lda {c1},y -lsr -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_ror_1 -ldy {z1} -lda {c1},y -lsr -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_ror_1 -lda {c1},x -lsr -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_ror_1 -lda {c1},y -lsr -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_ror_1 -ldx {z1} -lda {c1},x -lsr -tax -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_ror_1 -lda {c1},x -lsr -tax -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_ror_1 -lda {c1},y -lsr -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_ror_1 -ldy {z1} -lda {c1},y -lsr -tay -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_ror_1 -lda {c1},x -lsr -tay -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_ror_1 -lda {c1},y -lsr -tay -//FRAGMENT vbuaa=vbuz1_bor_vbuz2 -lda {z1} -ora {z2} -//FRAGMENT vbuxx=vbuz1_bor_vbuz2 -lda {z1} -ora {z2} -tax -//FRAGMENT vbuyy=vbuz1_bor_vbuz2 -lda {z1} -ora {z2} -tay -//FRAGMENT vbuz1=vbuxx_bor_vbuz2 -txa -ora {z2} -sta {z1} -//FRAGMENT vbuaa=vbuxx_bor_vbuz1 -txa -ora {z1} -//FRAGMENT vbuxx=vbuxx_bor_vbuz1 -txa -ora {z1} -tax -//FRAGMENT vbuyy=vbuxx_bor_vbuz1 -txa -ora {z1} -tay -//FRAGMENT vbuz1=vbuyy_bor_vbuz2 -tya -ora {z2} -sta {z1} -//FRAGMENT vbuaa=vbuyy_bor_vbuz1 -tya -ora {z1} -//FRAGMENT vbuxx=vbuyy_bor_vbuz1 -tya -ora {z1} -tax -//FRAGMENT vbuyy=vbuyy_bor_vbuz1 -tya -ora {z1} -tay -//FRAGMENT vbuz1=vbuz2_bor_vbuaa -ora {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_bor_vbuaa -ora {z1} -//FRAGMENT vbuxx=vbuz1_bor_vbuaa -ora {z1} -tax -//FRAGMENT vbuyy=vbuz1_bor_vbuaa -ora {z1} -tay -//FRAGMENT vbuz1=vbuxx_bor_vbuaa -stx $ff -ora $ff -sta {z1} -//FRAGMENT vbuaa=vbuxx_bor_vbuaa -stx $ff -ora $ff -//FRAGMENT vbuxx=vbuxx_bor_vbuaa -stx $ff -ora $ff -tax -//FRAGMENT vbuyy=vbuxx_bor_vbuaa -stx $ff -ora $ff -tay -//FRAGMENT vbuz1=vbuyy_bor_vbuaa -sty $ff -ora $ff -sta {z1} -//FRAGMENT vbuaa=vbuyy_bor_vbuaa -sty $ff -ora $ff -//FRAGMENT vbuxx=vbuyy_bor_vbuaa -sty $ff -ora $ff -tax -//FRAGMENT vbuyy=vbuyy_bor_vbuaa -sty $ff -ora $ff -tay -//FRAGMENT vbuz1=vbuz2_bor_vbuxx -txa -ora {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_bor_vbuxx -txa -ora {z1} -//FRAGMENT vbuxx=vbuz1_bor_vbuxx -txa -ora {z1} -tax -//FRAGMENT vbuyy=vbuz1_bor_vbuxx -txa -ora {z1} -tay -//FRAGMENT vbuz1=vbuxx_bor_vbuxx -stx {z1} -//FRAGMENT pbuc1_derefidx_vbuz1=vbuaa -ldy {z1} -sta {c1},y -//FRAGMENT vbuaa=vbuz1_minus__deref_pbuc1 -lda {z1} -sec -sbc {c1} -//FRAGMENT vbuxx=vbuz1_minus__deref_pbuc1 -lda {z1} -sec -sbc {c1} -tax -//FRAGMENT vbuyy=vbuz1_minus__deref_pbuc1 -lda {z1} -sec -sbc {c1} -tay -//FRAGMENT vbuz1=vbuaa_minus__deref_pbuc1 -sec -sbc {c1} -sta {z1} -//FRAGMENT vbuaa=vbuaa_minus__deref_pbuc1 -sec -sbc {c1} -//FRAGMENT vbuxx=vbuaa_minus__deref_pbuc1 -sec -sbc {c1} -tax -//FRAGMENT vbuyy=vbuaa_minus__deref_pbuc1 -sec -sbc {c1} -tay -//FRAGMENT vbuz1=vbuxx_minus__deref_pbuc1 -txa -sec -sbc {c1} -sta {z1} -//FRAGMENT vbuaa=vbuxx_minus__deref_pbuc1 -txa -sec -sbc {c1} -//FRAGMENT vbuxx=vbuxx_minus__deref_pbuc1 -txa -sec -sbc {c1} -tax -//FRAGMENT vbuyy=vbuxx_minus__deref_pbuc1 -txa -sec -sbc {c1} -tay -//FRAGMENT vbuz1=vbuyy_minus__deref_pbuc1 -tya -sec -sbc {c1} -sta {z1} -//FRAGMENT vbuaa=vbuyy_minus__deref_pbuc1 -tya -sec -sbc {c1} -//FRAGMENT vbuxx=vbuyy_minus__deref_pbuc1 -tya -sec -sbc {c1} -tax -//FRAGMENT vbuyy=vbuyy_minus__deref_pbuc1 -tya -sec -sbc {c1} -tay -//FRAGMENT vbuaa=_bnot__deref_pbuc1 -lda {c1} -eor #$ff -//FRAGMENT vbuxx=_bnot__deref_pbuc1 -lda {c1} -eor #$ff -tax -//FRAGMENT vbuyy=_bnot__deref_pbuc1 -lda {c1} -eor #$ff -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbuz1 -ldx {z1} -ldy {c1},x -//FRAGMENT vbuxx_gt_0_then_la1 -cpx #0 -bne {la1} -//FRAGMENT vbuz1=vbuyy_bor_vbuxx -txa -sty $ff -ora $ff -sta {z1} -//FRAGMENT vbuyy_gt_0_then_la1 -cpy #0 -bne {la1} -//FRAGMENT vbuyy=_lo_vwuz1 -ldy {z1} -//FRAGMENT vbuz1=vbuxx_band__deref_pbuc1 -lda {c1} -sax {z1} -//FRAGMENT vbuz1=vbuyy_band__deref_pbuc1 -tya -and {c1} -sta {z1} -//FRAGMENT vbuaa=vbuxx_band__deref_pbuc1 -txa -and {c1} -//FRAGMENT vbuaa=vbuyy_band__deref_pbuc1 -tya -and {c1} -//FRAGMENT vbuxx=vbuxx_band__deref_pbuc1 -lda {c1} -axs #0 -//FRAGMENT vbuxx=vbuyy_band__deref_pbuc1 -ldx {c1} -tya -axs #0 -//FRAGMENT vbuyy=vbuaa_band__deref_pbuc1 -and {c1} -tay -//FRAGMENT vbuyy=vbuxx_band__deref_pbuc1 -txa -and {c1} -tay -//FRAGMENT vbuyy=vbuyy_band__deref_pbuc1 -tya -and {c1} -tay -//FRAGMENT pbuc1_derefidx_vbuxx=vbuaa -sta {c1},x -//FRAGMENT vwsz1=vwsz1_plus_vwsc1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_rol_1 -asl {z1} -rol {z1}+1 -//FRAGMENT vbuz1=vbuz2_plus_vbuc1 -lax {z2} -axs #-[{c1}] -stx {z1} -//FRAGMENT vbuaa=vbuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -//FRAGMENT vbuxx=vbuz1_plus_vbuc1 -lax {z1} -axs #-[{c1}] -//FRAGMENT vbuyy=vbuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -tay -//FRAGMENT vbuz1=vbuaa_plus_vbuc1 -clc -adc #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuaa_plus_vbuc1 -clc -adc #{c1} -//FRAGMENT vbuxx=vbuaa_plus_vbuc1 -tax -axs #-[{c1}] -//FRAGMENT pbuc1_derefidx_vbuaa=vbuz1 -tay -lda {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuyy=vbuaa -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuaa=vbuxx -tay -txa -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuaa=vbuyy -tax -tya -sta {c1},x -//FRAGMENT vbuyy=vbuaa_plus_vbuc1 -clc -adc #{c1} -tay -//FRAGMENT vbuz1=vbuxx_plus_vbuc1 -txa -axs #-[{c1}] -stx {z1} -//FRAGMENT vbuaa=vbuxx_plus_vbuc1 -txa -clc -adc #{c1} -//FRAGMENT vbuyy=vbuxx_plus_vbuc1 -txa -clc -adc #{c1} -tay -//FRAGMENT vbuz1=vbuyy_plus_vbuc1 -tya -clc -adc #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuyy_plus_vbuc1 -tya -clc -adc #{c1} -//FRAGMENT vbuxx=vbuyy_plus_vbuc1 -tya -tax -axs #-[{c1}] -//FRAGMENT vbuz1=_inc_vbuz2 -ldy {z2} -iny -sty {z1} -//FRAGMENT vbuz1=_inc_vbuaa -clc -adc #1 -sta {z1} -//FRAGMENT vbuz1=_inc_vbuxx -inx -stx {z1} -//FRAGMENT vbuz1=_inc_vbuyy -iny -sty {z1} -//FRAGMENT vbuaa=_inc_vbuz1 -lda {z1} -clc -adc #1 -//FRAGMENT vbuaa=_inc_vbuxx -inx -txa -//FRAGMENT vbuaa=_inc_vbuyy -iny -tya -//FRAGMENT vbuxx=_inc_vbuz1 -ldx {z1} -inx -//FRAGMENT vbuxx=_inc_vbuaa -tax -inx -//FRAGMENT vbuxx=_inc_vbuyy -tya -tax -inx -//FRAGMENT vbuyy=_inc_vbuz1 -ldy {z1} -iny -//FRAGMENT vbuyy=_inc_vbuaa -tay -iny -//FRAGMENT vbuyy=_inc_vbuxx -txa -tay -iny -//FRAGMENT vwsz1=vwsz2_minus_vbsc1 -lda {z2} -sec -sbc #{c1} -sta {z1} -lda {z2}+1 -sbc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_minus_vbsc1 +//FRAGMENT vbuyy=vbuz1_minus_vbuc1 lda {z1} sec sbc #{c1} -sta {z1} -lda {z1}+1 -sbc #>{c1} -sta {z1}+1 -//FRAGMENT pwsc1_derefidx_vbuz1=vwsz2 -ldy {z1} -lda {z2} -sta {c1},y -lda {z2}+1 -sta {c1}+1,y -//FRAGMENT pwsc1_derefidx_vbuaa=vwsz1 tay -lda {z1} -sta {c1},y -lda {z1}+1 -sta {c1}+1,y -//FRAGMENT pwsc1_derefidx_vbuxx=vwsz1 -lda {z1} -sta {c1},x -lda {z1}+1 -sta {c1}+1,x -//FRAGMENT pwsc1_derefidx_vbuyy=vwsz1 -lda {z1} -sta {c1},y -lda {z1}+1 -sta {c1}+1,y -//FRAGMENT vbuz1=_bnot_vbuz2 -lda {z2} -eor #$ff -sta {z1} -//FRAGMENT vbuaa=_bnot_vbuz1 -lda {z1} -eor #$ff -//FRAGMENT vbuxx=_bnot_vbuz1 -lda {z1} -eor #$ff -tax -//FRAGMENT vbuyy=_bnot_vbuz1 -lda {z1} -eor #$ff -tay -//FRAGMENT vbuz1=_bnot_vbuaa -eor #$ff -sta {z1} -//FRAGMENT vbuaa=_bnot_vbuaa -eor #$ff -//FRAGMENT vbuxx=_bnot_vbuaa -eor #$ff -tax -//FRAGMENT vbuyy=_bnot_vbuaa -eor #$ff -tay -//FRAGMENT vbuz1=_bnot_vbuxx -txa -eor #$ff -sta {z1} -//FRAGMENT vbuaa=_bnot_vbuxx -txa -eor #$ff -//FRAGMENT vbuxx=_bnot_vbuxx -txa -eor #$ff -tax -//FRAGMENT vbuyy=_bnot_vbuxx -txa -eor #$ff -tay -//FRAGMENT vbuz1=_bnot_vbuyy -tya -eor #$ff -sta {z1} -//FRAGMENT vbuaa=_bnot_vbuyy -tya -eor #$ff -//FRAGMENT vbuxx=_bnot_vbuyy -tya -eor #$ff -tax -//FRAGMENT vbuyy=_bnot_vbuyy -tya -eor #$ff -tay -//FRAGMENT _deref_pbuc1_neq_0_then_la1 -lda {c1} -cmp #0 -bne {la1} -//FRAGMENT pbum1=pbuc1 -lda #<{c1} -sta {m1} -lda #>{c1} -sta {m1}+1 -//FRAGMENT vbum1=vbuc1 -lda #{c1} -sta {m1} -//FRAGMENT _deref_pbum1=vbuc1 -lda #{c1} -ldy {m1} -sty $fe -ldy {m1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT pbum1=_inc_pbum1 -inc {m1} -bne !+ -inc {m1}+1 -!: -//FRAGMENT vbum1=_inc_vbum1 -inc {m1} -//FRAGMENT vbum1_neq_vbuc1_then_la1 -lda #{c1} -cmp {m1} -bne {la1} -//FRAGMENT pbuz1_lt_pbuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bcc {la1} -bne !+ -lda {z1} -cmp #<{c1} -bcc {la1} -!: -//FRAGMENT vboz1=vbuz2_eq_vbuc1 -lda {z2} -eor #{c1} -beq !+ -lda #1 -!: -eor #1 -sta {z1} -//FRAGMENT vboz1=vboz2 -lda {z2} -sta {z1} -//FRAGMENT vboz1_then_la1 -lda {z1} -cmp #0 -bne {la1} -//FRAGMENT vboz1=vbuz2_neq_vbuc1 -lda {z2} -eor #{c1} -beq !+ -lda #1 -!: -sta {z1} -//FRAGMENT vboz1=vboz2_or_vboz3 -lda {z2} -ora {z3} -sta {z1} -//FRAGMENT vboaa=vbuz1_eq_vbuc1 -lda {z1} -eor #{c1} -beq !+ -lda #1 -!: -eor #1 -//FRAGMENT vboxx=vbuz1_eq_vbuc1 -lda {z1} -eor #{c1} -beq !+ -lda #1 -!: -eor #1 -tax -//FRAGMENT vboyy=vbuz1_eq_vbuc1 -lda {z1} -eor #{c1} -beq !+ -lda #1 -!: -eor #1 -tay -//FRAGMENT vboz1=vbuaa_eq_vbuc1 -eor #{c1} -beq !+ -lda #1 -!: -eor #1 -sta {z1} -//FRAGMENT vboaa=vbuaa_eq_vbuc1 -eor #{c1} -beq !+ -lda #1 -!: -eor #1 -//FRAGMENT vboxx=vbuaa_eq_vbuc1 -eor #{c1} -beq !+ -lda #1 -!: -eor #1 -tax -//FRAGMENT vboyy=vbuaa_eq_vbuc1 -eor #{c1} -beq !+ -lda #1 -!: -eor #1 -tay -//FRAGMENT vboz1=vbuxx_eq_vbuc1 -lda #1 -cpx #{c1} -beq !+ -lda #0 -!: -sta {z1} -//FRAGMENT vboaa=vbuxx_eq_vbuc1 -lda #1 -cpx #{c1} -beq !+ -lda #0 -!: -//FRAGMENT vboxx=vbuxx_eq_vbuc1 -lda #1 -cpx #{c1} -beq !+ -lda #0 -!: -tax -//FRAGMENT vboyy=vbuxx_eq_vbuc1 -lda #1 -cpx #{c1} -beq !+ -lda #0 -!: -tay -//FRAGMENT vboz1=vbuyy_eq_vbuc1 -lda #1 -cpy #{c1} -beq !+ -lda #0 -!: -sta {z1} -//FRAGMENT vboaa=vbuyy_eq_vbuc1 -lda #1 -cpy #{c1} -beq !+ -lda #0 -!: -//FRAGMENT vboxx=vbuyy_eq_vbuc1 -lda #1 -cpy #{c1} -beq !+ -lda #0 -!: -tax -//FRAGMENT vboyy=vbuyy_eq_vbuc1 -lda #1 -cpy #{c1} -beq !+ -lda #0 -!: -tay -//FRAGMENT vboz1=vboaa -sta {z1} -//FRAGMENT vboaa=vboz1 -lda {z1} -//FRAGMENT vboxx=vboz1 -ldx {z1} -//FRAGMENT vboaa_then_la1 -cmp #0 -bne {la1} -//FRAGMENT vboaa=vbuz1_neq_vbuc1 -lda {z1} -eor #{c1} -beq !+ -lda #1 -!: -//FRAGMENT vboxx=vbuz1_neq_vbuc1 -lda {z1} -eor #{c1} -beq !+ -lda #1 -!: -tax -//FRAGMENT vboyy=vbuz1_neq_vbuc1 -lda {z1} -eor #{c1} -beq !+ -lda #1 -!: -tay -//FRAGMENT vboz1=vbuaa_neq_vbuc1 -eor #{c1} -beq !+ -lda #1 -!: -sta {z1} -//FRAGMENT vboaa=vbuaa_neq_vbuc1 -eor #{c1} -beq !+ -lda #1 -!: -//FRAGMENT vboxx=vbuaa_neq_vbuc1 -eor #{c1} -beq !+ -lda #1 -!: -tax -//FRAGMENT vboyy=vbuaa_neq_vbuc1 -eor #{c1} -beq !+ -lda #1 -!: -tay -//FRAGMENT vboz1=vbuxx_neq_vbuc1 -lda #0 -cpx #{c1} -beq !+ -lda #1 -!: -sta {z1} -//FRAGMENT vboaa=vbuxx_neq_vbuc1 -lda #0 -cpx #{c1} -beq !+ -lda #1 -!: -//FRAGMENT vboxx=vbuxx_neq_vbuc1 -lda #0 -cpx #{c1} -beq !+ -lda #1 -!: -tax -//FRAGMENT vboyy=vbuxx_neq_vbuc1 -lda #0 -cpx #{c1} -beq !+ -lda #1 -!: -tay -//FRAGMENT vboz1=vbuyy_neq_vbuc1 -lda #0 -cpy #{c1} -beq !+ -lda #1 -!: -sta {z1} -//FRAGMENT vboaa=vbuyy_neq_vbuc1 -lda #0 -cpy #{c1} -beq !+ -lda #1 -!: -//FRAGMENT vboxx=vbuyy_neq_vbuc1 -lda #0 -cpy #{c1} -beq !+ -lda #1 -!: -tax -//FRAGMENT vboyy=vbuyy_neq_vbuc1 -lda #0 -cpy #{c1} -beq !+ -lda #1 -!: -tay -//FRAGMENT vboz1=vboz2_or_vboaa -ora {z2} -sta {z1} -//FRAGMENT vboz1=vboz2_or_vboxx -txa -ora {z2} -sta {z1} -//FRAGMENT vboz1=vboz2_or_vboyy -tya -ora {z2} -sta {z1} -//FRAGMENT vboz1=vboxx_or_vboz2 -txa -ora {z2} -sta {z1} -//FRAGMENT vboz1=vboxx_or_vboaa -stx $ff -ora $ff -sta {z1} -//FRAGMENT vboz1=vboxx_or_vboxx -txa -stx $ff -ora $ff -sta {z1} -//FRAGMENT vboz1=vboxx_or_vboyy -txa -sty $ff -ora $ff -sta {z1} -//FRAGMENT vboz1=vboyy_or_vboz2 -tya -ora {z2} -sta {z1} -//FRAGMENT vboz1=vboyy_or_vboaa -sty $ff -ora $ff -sta {z1} -//FRAGMENT vboz1=vboyy_or_vboxx -txa -sty $ff -ora $ff -sta {z1} -//FRAGMENT vboz1=vboyy_or_vboyy -tya -sty $ff -ora $ff -sta {z1} -//FRAGMENT vboaa=vboz1_or_vboz2 -lda {z1} -ora {z2} -//FRAGMENT vboaa=vboz1_or_vboaa -ora {z1} -//FRAGMENT vboaa=vboz1_or_vboxx -txa -ora {z1} -//FRAGMENT vboaa=vboz1_or_vboyy -tya -ora {z1} -//FRAGMENT vboaa=vboxx_or_vboz1 -txa -ora {z1} -//FRAGMENT vboaa=vboxx_or_vboaa -stx $ff -ora $ff -//FRAGMENT vboaa=vboxx_or_vboxx -txa -stx $ff -ora $ff -//FRAGMENT vboaa=vboxx_or_vboyy -txa -sty $ff -ora $ff -//FRAGMENT vboaa=vboyy_or_vboz1 -tya -ora {z1} -//FRAGMENT vboaa=vboyy_or_vboaa -sty $ff -ora $ff -//FRAGMENT vboaa=vboyy_or_vboxx -txa -sty $ff -ora $ff -//FRAGMENT vboaa=vboyy_or_vboyy -tya -sty $ff -ora $ff -//FRAGMENT vboxx=vboz1_or_vboz2 -lda {z1} -ora {z2} -tax -//FRAGMENT vboxx=vboz1_or_vboaa -ora {z1} -tax -//FRAGMENT vboxx=vboz1_or_vboxx -txa -ora {z1} -tax -//FRAGMENT vboxx=vboz1_or_vboyy -tya -ora {z1} -tax -//FRAGMENT vboxx=vboxx_or_vboz1 -txa -ora {z1} -tax -//FRAGMENT vboxx=vboxx_or_vboaa -stx $ff -ora $ff -tax -//FRAGMENT vboxx=vboxx_or_vboxx -txa -stx $ff -ora $ff -tax -//FRAGMENT vboxx=vboxx_or_vboyy -txa -sty $ff -ora $ff -tax -//FRAGMENT vboxx=vboyy_or_vboz1 -tya -ora {z1} -tax -//FRAGMENT vboxx=vboyy_or_vboaa -sty $ff -ora $ff -tax -//FRAGMENT vboxx=vboyy_or_vboxx -txa -sty $ff -ora $ff -tax -//FRAGMENT vboxx=vboyy_or_vboyy -tya -sty $ff -ora $ff -tax -//FRAGMENT vboyy=vboz1_or_vboz2 -lda {z1} -ora {z2} -tay -//FRAGMENT vboyy=vboz1_or_vboaa -ora {z1} -tay -//FRAGMENT vboyy=vboz1_or_vboxx -txa -ora {z1} -tay -//FRAGMENT vboyy=vboz1_or_vboyy -tya -ora {z1} -tay -//FRAGMENT vboyy=vboxx_or_vboz1 -txa -ora {z1} -tay -//FRAGMENT vboyy=vboxx_or_vboaa -stx $ff -ora $ff -tay -//FRAGMENT vboyy=vboxx_or_vboxx -txa -stx $ff -ora $ff -tay -//FRAGMENT vboyy=vboxx_or_vboyy -txa -sty $ff -ora $ff -tay -//FRAGMENT vboyy=vboyy_or_vboz1 -tya -ora {z1} -tay -//FRAGMENT vboyy=vboyy_or_vboaa -sty $ff -ora $ff -tay -//FRAGMENT vboyy=vboyy_or_vboxx -txa -sty $ff -ora $ff -tay -//FRAGMENT vboyy=vboyy_or_vboyy -tya -sty $ff -ora $ff -tay -//FRAGMENT vboxx_then_la1 -cpx #0 -bne {la1} -//FRAGMENT vboyy=vboz1 -ldy {z1} -//FRAGMENT vboyy_then_la1 -cpy #0 -bne {la1} -//FRAGMENT vboyy=vboaa -tay -//FRAGMENT vboaa=vboyy -tya -//FRAGMENT vbuz1=vbuc1_rol_vbuz2 -lda #{c1} -ldy {z2} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -sta {z1} -//FRAGMENT vbuaa=vbuc1_rol_vbuz1 -lda #{c1} -ldy {z1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -//FRAGMENT vbuxx=vbuc1_rol_vbuz1 -lda #{c1} -ldx {z1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -tax -//FRAGMENT vbuyy=vbuc1_rol_vbuz1 -lda #{c1} -ldy {z1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -tay -//FRAGMENT vbuz1=vbuc1_rol_vbuaa -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -sta {z1} -//FRAGMENT vbuaa=vbuc1_rol_vbuaa -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -//FRAGMENT vbuxx=vbuc1_rol_vbuaa -tax -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -tax -//FRAGMENT vbuyy=vbuc1_rol_vbuaa -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -tay -//FRAGMENT vbuz1=vbuc1_rol_vbuxx -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -sta {z1} -//FRAGMENT vbuaa=vbuc1_rol_vbuxx -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -//FRAGMENT vbuxx=vbuc1_rol_vbuxx -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -tax -//FRAGMENT vbuyy=vbuc1_rol_vbuxx -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -tay -//FRAGMENT vbuz1=vbuc1_rol_vbuyy -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -sta {z1} -//FRAGMENT vbuaa=vbuc1_rol_vbuyy -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -//FRAGMENT vbuxx=vbuc1_rol_vbuyy -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -tax -//FRAGMENT vbuyy=vbuc1_rol_vbuyy -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -tay -//FRAGMENT pprz1=pprc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT _deref_pwsc1=vbsc2 -NO_SYNTHESIS -//FRAGMENT _deref_pwsc1=vwuc2 -NO_SYNTHESIS -//FRAGMENT _deref_pwsc1=vwsc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 -//FRAGMENT vwsz1=vbsc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT pwsz1=pwsc1_plus_vwsz2 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=_deref_pwsz2 -ldy #0 -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT vdsz1=vdsz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -//FRAGMENT vwsz1=_sword_vdsz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwsz1_le_vwsz2_then_la1 -lda {z2} -cmp {z1} -lda {z2}+1 -sbc {z1}+1 -bvc !+ -eor #$80 -!: -bpl {la1} -//FRAGMENT vwsz1=_inc_vwsz1 -inc {z1} -bne !+ -inc {z1}+1 -!: -//FRAGMENT vwsz1_neq_0_then_la1 -lda {z1}+1 -ora {z1} -bne {la1} -//FRAGMENT _deref_pwsz1=vwsz2 -ldy #0 -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT vwsz1_lt_vwsc1_then_la1 -lda {z1} -cmp #<{c1} -lda {z1}+1 -sbc #>{c1} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vwsz1_ge_0_then_la1 -lda {z1}+1 -bpl {la1} -//FRAGMENT vwuz1=_hi_vduz2 -lda {z2}+2 -sta {z1} -lda {z2}+3 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_minus_vwuz3 -lda {z2} -sec -sbc {z3} -sta {z1} -lda {z2}+1 -sbc {z3}+1 -sta {z1}+1 -//FRAGMENT vduz1=vduz1_sethi_vwuz2 -lda {z2} -sta {z1}+2 -lda {z2}+1 -sta {z1}+3 -//FRAGMENT vwsz1=_neg_vwsz2 -sec -lda #0 -sbc {z2} -sta {z1} -lda #0 -sbc {z2}+1 -sta {z1}+1 -//FRAGMENT vbuz1=vbuz1_bxor_vbuc1 -lda #{c1} -eor {z1} -sta {z1} -//FRAGMENT vwuz1_lt_vwuz2_then_la1 -lda {z1}+1 -cmp {z2}+1 -bcc {la1} -bne !+ -lda {z1} -cmp {z2} -bcc {la1} -!: -//FRAGMENT pwsz1=pwsc1_plus_vwsz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=_deref_pwsz1 -ldy #0 -lda ({z1}),y -pha -iny -lda ({z1}),y -sta {z1}+1 -pla -sta {z1} -//FRAGMENT pprz1=pprz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT pprz1=qprc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT pprz1=qprc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT pprz1=qprc1_derefidx_vbuxx -lda {c1},x -sta {z1} -lda {c1}+1,x -sta {z1}+1 -//FRAGMENT pprz1=qprc1_derefidx_vbuyy -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT pbuz1_lt_vwuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bcc {la1} -bne !+ -lda {z1} -cmp #<{c1} -bcc {la1} -!: -//FRAGMENT _deref_pbuz1=_inc__deref_pbuz1 -ldy #0 -lda ({z1}),y -clc -adc #1 -ldy #0 -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2 -ldy {z2} -lda {c2},y -ldy {z1} -sta {c1},y -//FRAGMENT 0_neq_pbuc1_derefidx_vbuz1_then_la1 -ldy {z1} -lda {c1},y -cmp #0 -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuaa -tay -lda {c2},y -ldy {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuxx -lda {c2},x -ldy {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuyy -lda {c2},y -ldy {z1} -sta {c1},y -//FRAGMENT 0_neq_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -cmp #0 -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuz3 -ldx {z1} -ldy {z3} -lda ({z2}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuaa -ldx {z1} -tay -lda ({z2}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuxx -txa -ldx {z1} -tay -lda ({z2}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuyy -lda ({z2}),y -ldx {z1} -sta {c1},x -//FRAGMENT pbuz1_derefidx_(pbsc1_derefidx_vbuz2)=vbuc2 -lda #{c2} -ldx {z2} -ldy {c1},x -sta ({z1}),y -//FRAGMENT pbsc1_derefidx_vbuz1=pbsc1_derefidx_vbuz1_plus_pbsc2_derefidx_vbuz1 -ldy {z1} -clc -lda {c1},y -adc {c2},y -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuz1_lt_0_then_la1 -ldy {z1} -lda {c1},y -cmp #0 -bmi {la1} -//FRAGMENT pbsc1_derefidx_vbuz1_lt_vbsc2_then_la1 -ldy {z1} -lda {c1},y -sec -sbc #{c2} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vbsz1=_neg_pbsc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -eor #$ff -clc -adc #$01 -sta {z1} -//FRAGMENT pbsc1_derefidx_vbuz1=vbsz2 -lda {z2} -ldy {z1} -sta {c1},y -//FRAGMENT pbuz1_derefidx_(pbsc1_derefidx_vbuz2)=pbuc2_derefidx_vbuz2 -ldx {z2} -lda {c2},x -ldy {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_(pbsc1_derefidx_vbuaa)=vbuc2 -tax -lda #{c2} -ldy {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_(pbsc1_derefidx_vbuxx)=vbuc2 -lda #{c2} -ldy {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_(pbsc1_derefidx_vbuyy)=vbuc2 -tya -tax -lda #{c2} -ldy {c1},x -sta ({z1}),y -//FRAGMENT pbsc1_derefidx_vbuxx=pbsc1_derefidx_vbuxx_plus_pbsc2_derefidx_vbuxx -clc -lda {c1},x -adc {c2},x -sta {c1},x -//FRAGMENT pbsc1_derefidx_vbuxx_lt_0_then_la1 -lda {c1},x -cmp #0 -bmi {la1} -//FRAGMENT pbsc1_derefidx_vbuxx_lt_vbsc2_then_la1 -lda {c1},x -sec -sbc #{c2} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vbsz1=_neg_pbsc1_derefidx_vbuxx -lda {c1},x -eor #$ff -clc -adc #$01 -sta {z1} -//FRAGMENT vbsaa=_neg_pbsc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -eor #$ff -clc -adc #$01 -//FRAGMENT vbsaa=_neg_pbsc1_derefidx_vbuxx -lda {c1},x -eor #$ff -clc -adc #$01 -//FRAGMENT vbsxx=_neg_pbsc1_derefidx_vbuz1 -ldx {z1} -lda {c1},x -eor #$ff -clc -adc #$01 -tax -//FRAGMENT vbsxx=_neg_pbsc1_derefidx_vbuxx -lda {c1},x -eor #$ff -clc -adc #$01 -tax -//FRAGMENT vbsyy=_neg_pbsc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -eor #$ff -clc -adc #$01 -tay -//FRAGMENT vbsyy=_neg_pbsc1_derefidx_vbuxx -lda {c1},x -eor #$ff -clc -adc #$01 -tay -//FRAGMENT pbsc1_derefidx_vbuxx=vbsz1 -lda {z1} -sta {c1},x -//FRAGMENT pbsc1_derefidx_vbuz1=vbsaa -ldy {z1} -sta {c1},y -//FRAGMENT pbuz1_derefidx_(pbsc1_derefidx_vbuxx)=pbuc2_derefidx_vbuxx -lda {c2},x -ldy {c1},x -sta ({z1}),y -//FRAGMENT pbsc1_derefidx_vbuz1=vbsxx -ldy {z1} -txa -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuz1=vbsyy -tya -ldy {z1} -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuaa=vbsz1 -tay -lda {z1} -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuaa=vbsxx -tay -txa -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuaa=vbsyy -tax -tya -sta {c1},x -//FRAGMENT pbsc1_derefidx_vbuxx=vbsxx -txa -sta {c1},x -//FRAGMENT pbsc1_derefidx_vbuxx=vbsyy -tya -sta {c1},x -//FRAGMENT pbsc1_derefidx_vbuyy=vbsz1 -lda {z1} -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuyy=vbsxx -txa -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuyy=vbsyy -tya -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuxx=vbsaa -sta {c1},x -//FRAGMENT vbsyy=vbsc1 -ldy #{c1} -//FRAGMENT vbuz1=vbuz2_plus_vbuz2 -lda {z2} -asl -sta {z1} -//FRAGMENT vbuz1=vbuz2_plus_1 -ldy {z2} -iny -sty {z1} -//FRAGMENT vwuz1=vwuz2_plus_vbuz3 -lda {z3} -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT _deref_pbuz1=pbuz2_derefidx_vbuz3 -ldy {z3} -lda ({z2}),y -ldy #0 -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2_eq_vbuc1_then_la1 -lda #{c1} -ldy {z2} -cmp ({z1}),y -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuz2_neq_0_then_la1 -ldy {z2} -lda ({z1}),y - -cmp #0 -bne {la1} -//FRAGMENT vwuz1=vbuz2_rol_3 -lda {z2} -sta {z1} -lda #0 -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vbuz1=vbuaa_plus_vbuaa -asl -sta {z1} -//FRAGMENT vbuaa=vbuz1_plus_vbuz1 -lda {z1} -asl -//FRAGMENT vbuaa=vbuaa_plus_vbuaa -asl -//FRAGMENT vbuxx=vbuz1_plus_vbuz1 -lda {z1} -asl -tax -//FRAGMENT vbuxx=vbuaa_plus_vbuaa -asl -tax -//FRAGMENT vbuyy=vbuz1_plus_vbuz1 -lda {z1} -asl -tay -//FRAGMENT vbuyy=vbuaa_plus_vbuaa -asl -tay -//FRAGMENT vbuaa=vbuz1_plus_1 -lda {z1} -clc -adc #1 -//FRAGMENT vbuz1=vbuaa_plus_1 -clc -adc #1 -sta {z1} -//FRAGMENT vbuxx_eq_vbuz1_then_la1 -cpx {z1} -beq {la1} -//FRAGMENT vwuz1=vwuz2_plus_vbuxx -txa -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_plus_vbuyy -tya -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT _deref_pbuz1=pbuz2_derefidx_vbuxx -txa -tay -lda ({z2}),y -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=pbuz2_derefidx_vbuyy -lda ({z2}),y -ldy #0 -sta ({z1}),y -//FRAGMENT vbuz1=vbuxx_plus_1 -inx -stx {z1} -//FRAGMENT pbuz1_derefidx_vbuaa_eq_vbuc1_then_la1 -tay -lda #{c1} -cmp ({z1}),y -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuxx_eq_vbuc1_then_la1 -txa -tay -lda #{c1} -cmp ({z1}),y -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 -lda #{c1} -cmp ({z1}),y -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuxx_neq_0_then_la1 -txa -tay -lda ({z1}),y - -cmp #0 -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuyy_neq_0_then_la1 -lda ({z1}),y - -cmp #0 -bne {la1} -//FRAGMENT vbuxx=vbuz1_plus_1 -ldx {z1} -inx -//FRAGMENT vwuz1=vbuaa_rol_3 -sta {z1} -lda #0 -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwuz1=vbuxx_rol_3 -txa -sta {z1} -lda #0 -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwuz1=vbuyy_rol_3 -tya -sta {z1} -lda #0 -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vbuaa_lt_vbuz1_then_la1 -cmp {z1} -bcc {la1} -//FRAGMENT vbuz1_lt_vbuxx_then_la1 -cpx {z1} -beq !+ -bcs {la1} -!: -//FRAGMENT vwuz1=vwuz2_plus_vbuaa -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vbuyy=vbuz1_plus_1 -ldy {z1} -iny -//FRAGMENT vbuyy_lt_vbuz1_then_la1 -cpy {z1} -bcc {la1} -//FRAGMENT vbuz1=vbuyy_plus_1 -iny -sty {z1} -//FRAGMENT vbuxx_lt_vbuaa_then_la1 -sta $ff -cpx $ff -bcc {la1} -//FRAGMENT vbuz1=vbuz1_plus_1 -inc {z1} -//FRAGMENT vbuz1=_lo__deref_pwuc1 -lda {c1} -sta {z1} -//FRAGMENT vbuz1=_hi__deref_pwuc1 -lda {c1}+1 -sta {z1} -//FRAGMENT vbuaa=_lo__deref_pwuc1 -lda {c1} -//FRAGMENT vbuxx=_lo__deref_pwuc1 -ldx {c1} -//FRAGMENT vbuaa=_hi__deref_pwuc1 -lda {c1}+1 -//FRAGMENT vbuxx=_hi__deref_pwuc1 -ldx {c1}+1 -//FRAGMENT vbuyy=_lo__deref_pwuc1 -ldy {c1} -//FRAGMENT vbuyy=_hi__deref_pwuc1 -ldy {c1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vwsz3 -lda {z2} -clc -adc {z3} -sta {z1} -lda {z2}+1 -adc {z3}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vbsc1_minus_vwsz2 -NO_SYNTHESIS -//FRAGMENT vwsz1=vwuc1_minus_vwsz2 -sec -lda #<{c1} -sbc {z2} -sta {z1} -lda #>{c1} -sbc {z2}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_minus_1 -sec -lda {z1} -sbc #1 -sta {z1} -bcs !+ -dec {z1}+1 -!: -//FRAGMENT vwsz1=vwsz2_minus_vwsz3 -lda {z2} -sec -sbc {z3} -sta {z1} -lda {z2}+1 -sbc {z3}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz2_rol_2 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwsz1=vwsz2_plus_vwsz3 -lda {z2} -clc -adc {z3} -sta {z1} -lda {z2}+1 -adc {z3}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz2_plus_vbsc1 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vwsc1_plus_vwsz2 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vwsc1_minus_vwsz2 -lda #<{c1} -sec -sbc {z2} -sta {z1} -lda #>{c1} -sbc {z2}+1 -sta {z1}+1 -//FRAGMENT vwsz1_gt_vwsc1_then_la1 -lda #<{c1} -cmp {z1} -lda #>{c1} -sbc {z1}+1 -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vwsz1_ge_vwsc1_then_la1 -lda {z1} -cmp #<{c1} -lda {z1}+1 -sbc #>{c1} -bvc !+ -eor #$80 -!: -bpl {la1} -//FRAGMENT vwsz1=vwsz2_band_vdsc1 -lda {z2} -and #<{c1} -sta {z1} -lda {z2}+1 -and #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_plus_vwsz2 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vbuz1=_lo_vwsz2 -lda {z2} -sta {z1} -//FRAGMENT vwsz1=vwsz2_ror_3 -lda {z2}+1 -cmp #$80 -ror -sta {z1}+1 -lda {z2} -ror -sta {z1} -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -//FRAGMENT vwsz1=vwsz2_rol_6 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vbsz1=vwsz2_band_vbsc1 -lda #{c1} -and {z2} -sta {z1} -//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbsz3 -ldy #0 -lda ({z2}),y -ldy {z3} -ora {c1},y -sta {z1} -//FRAGMENT vbuaa=_lo_vwsz1 -lda {z1} -//FRAGMENT vbuxx=_lo_vwsz1 -ldx {z1} -//FRAGMENT pbuz1=pbuz2_plus_vbuaa -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vbsaa=vwsz1_band_vbsc1 -lda #{c1} -and {z1} -//FRAGMENT vbsxx=vwsz1_band_vbsc1 -lda #{c1} -and {z1} -tax -//FRAGMENT vbsyy=vwsz1_band_vbsc1 -lda #{c1} -and {z1} -tay -//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbsaa -tay -lda {c1},y -ldy #0 -ora ({z2}),y -sta {z1} -//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbsxx -lda {c1},x -ldy #0 -ora ({z2}),y -sta {z1} -//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbsyy -lda {c1},y -ldy #0 -ora ({z2}),y -sta {z1} -//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbsz2 -ldy #0 -lda ({z1}),y -ldy {z2} -ora {c1},y -//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbsaa -tay -lda {c1},y -ldy #0 -ora ({z1}),y -//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbsxx -lda {c1},x -ldy #0 -ora ({z1}),y -//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbsyy -lda {c1},y -ldy #0 -ora ({z1}),y -//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbsz2 -ldx {z2} -lda {c1},x -ldy #0 -ora ({z1}),y -tax -//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbsaa -tax -lda {c1},x -ldy #0 -ora ({z1}),y -tax -//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbsxx -lda {c1},x -ldy #0 -ora ({z1}),y -tax -//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbsyy -lda {c1},y -ldy #0 -ora ({z1}),y -tax -//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbsz2 -ldy #0 -lda ({z1}),y -ldy {z2} -ora {c1},y -tay -//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbsaa -tay -lda {c1},y -ldy #0 -ora ({z1}),y -tay -//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbsxx -lda {c1},x -ldy #0 -ora ({z1}),y -tay -//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbsyy -lda {c1},y -ldy #0 -ora ({z1}),y -tay -//FRAGMENT vbuyy=_lo_vwsz1 -ldy {z1} -//FRAGMENT vwsz1=vwsz1_plus_vwsz2 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vwsz1 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vbsc1_minus_vwsz1 -NO_SYNTHESIS -//FRAGMENT vwsz1=vwuc1_minus_vwsz1 -sec -lda #<{c1} -sbc {z1} -sta {z1} -lda #>{c1} -sbc {z1}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_ror_3 -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -//FRAGMENT vwsz1=vwsz1_rol_2 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT pbuz1=pbuc1_plus_vwsz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1=pbuz1_plus_vwsz2 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_rol_6 -lda {z1}+1 -sta $ff -lda {z1} -sta {z1}+1 -lda #0 -sta {z1} -lsr $ff -ror {z1}+1 -ror {z1} -lsr $ff -ror {z1}+1 -ror {z1} -//FRAGMENT _deref_pwuc1=vwuc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 -//FRAGMENT 0_eq_vwuz1_then_la1 -lda {z1} -ora {z1}+1 -beq {la1} -//FRAGMENT vwuz1=_dec_vwuz1 -lda {z1} -bne !+ -dec {z1}+1 -!: -dec {z1} -//FRAGMENT 0_neq_pbuc1_derefidx_vbuaa_then_la1 -tay -lda {c1},y -cmp #0 -bne {la1} -//FRAGMENT 0_neq_pbuc1_derefidx_vbuyy_then_la1 -lda {c1},y -cmp #0 -bne {la1} -//FRAGMENT _deref_pwuc1=_deref_pwuc2 -lda {c2} -sta {c1} -lda {c2}+1 -sta {c1}+1 -//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuz1 -ldx {z1} -tay -lda {c2},x -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuxx -tay -lda {c2},x -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuyy -tax -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuaa -tay -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz1 -ldx {z1} -lda {c2},x -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuaa -tax -lda {c2},x -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuxx -lda {c2},x -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuz2 -ldy {z2} -lda ({z1}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuxx -txa -tay -lda ({z1}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuyy -lda ({z1}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuz2 -tya -ldy {z2} -tax -lda ({z1}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuxx -sty $ff -txa -tay -lda ({z1}),y -ldy $ff -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuyy -lda ({z1}),y -sta {c1},y -//FRAGMENT _deref_pbuc1=_deref_qbuc2_memcpy_vbuc3 -ldy #{c3} -!: -lda {c2}-1,y -sta {c1}-1,y -dey -bne !- -//FRAGMENT _deref_pssc1=_memset_vbuc2 -ldy #{c2} -lda #0 -!: -dey -sta {c1},y -bne !- -//FRAGMENT _deref_pssc1=_deref_pssc2_memcpy_vbuc3 -ldy #{c3} -!: -lda {c2}-1,y -sta {c1}-1,y -dey -bne !- -//FRAGMENT vbuz1=vbuz2_rol_3 -lda {z2} -asl -asl -asl -sta {z1} -//FRAGMENT vwsz1=pwsc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT vbuz1=vbuaa_rol_3 -asl -asl -asl -sta {z1} -//FRAGMENT vbuz1=vbuxx_rol_3 -txa -asl -asl -asl -sta {z1} -//FRAGMENT vbuz1=vbuyy_rol_3 -tya -asl -asl -asl -sta {z1} -//FRAGMENT vbuaa=vbuz1_rol_3 -lda {z1} -asl -asl -asl -//FRAGMENT vbuaa=vbuaa_rol_3 -asl -asl -asl -//FRAGMENT vbuaa=vbuxx_rol_3 -txa -asl -asl -asl -//FRAGMENT vbuaa=vbuyy_rol_3 -tya -asl -asl -asl -//FRAGMENT vbuxx=vbuz1_rol_3 -lda {z1} -asl -asl -asl -tax -//FRAGMENT vbuxx=vbuaa_rol_3 -asl -asl -asl -tax -//FRAGMENT vbuxx=vbuxx_rol_3 -txa -asl -asl -asl -tax -//FRAGMENT vbuxx=vbuyy_rol_3 -tya -asl -asl -asl -tax -//FRAGMENT vbuyy=vbuz1_rol_3 -lda {z1} -asl -asl -asl -tay -//FRAGMENT vbuyy=vbuaa_rol_3 -asl -asl -asl -tay -//FRAGMENT vbuyy=vbuxx_rol_3 -txa -asl -asl -asl -tay -//FRAGMENT vbuyy=vbuyy_rol_3 -tya -asl -asl -asl -tay -//FRAGMENT vwsz1=pwsc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT vwsz1=pwsc1_derefidx_vbuxx -lda {c1},x -sta {z1} -lda {c1}+1,x -sta {z1}+1 -//FRAGMENT vwsz1=pwsc1_derefidx_vbuyy -lda {c1},y -sta {z1} -lda {c1}+1,y -sta {z1}+1 -//FRAGMENT _deref_pssc1=pssc2_derefidx_vbuz1_memcpy_vbuc3 -ldx {z1} -ldy #0 -!: -lda {c2},x -sta {c1},y -inx -iny -cpy #{c3} -bne !- -//FRAGMENT pwsc1_derefidx_vbuz1=_deref_pwsc2 -ldy {z1} -lda {c2} -sta {c1},y -lda {c2}+1 -sta {c1}+1,y -//FRAGMENT _deref_pssc1=pssc2_derefidx_vbuaa_memcpy_vbuc3 -tax -ldy #0 -!: -lda {c2},x -sta {c1},y -inx -iny -cpy #{c3} -bne !- -//FRAGMENT _deref_pssc1=pssc2_derefidx_vbuxx_memcpy_vbuc3 -ldy #0 -!: -lda {c2},x -sta {c1},y -inx -iny -cpy #{c3} -bne !- -//FRAGMENT _deref_pssc1=pssc2_derefidx_vbuyy_memcpy_vbuc3 -ldx #0 -!: -lda {c2},y -sta {c1},x -iny -inx -cpx #{c3} -bne !- -//FRAGMENT pwsc1_derefidx_vbuaa=_deref_pwsc2 -tay -lda {c2} -sta {c1},y -lda {c2}+1 -sta {c1}+1,y -//FRAGMENT pwsc1_derefidx_vbuxx=_deref_pwsc2 -lda {c2} -sta {c1},x -lda {c2}+1 -sta {c1}+1,x -//FRAGMENT pwsc1_derefidx_vbuyy=_deref_pwsc2 -lda {c2} -sta {c1},y -lda {c2}+1 -sta {c1}+1,y -//FRAGMENT pssc1_derefidx_vbuz1=_deref_pssc2_memcpy_vbuc3 -ldx {z1} -ldy #0 -!: -lda {c2},y -sta {c1},x -inx -iny -cpy #{c3} -bne !- -//FRAGMENT pssc1_derefidx_vbuaa=_deref_pssc2_memcpy_vbuc3 -tax -ldy #0 -!: -lda {c2},y -sta {c1},x -inx -iny -cpy #{c3} -bne !- -//FRAGMENT pssc1_derefidx_vbuxx=_deref_pssc2_memcpy_vbuc3 -ldy #0 -!: -lda {c2},y -sta {c1},x -inx -iny -cpy #{c3} -bne !- -//FRAGMENT pssc1_derefidx_vbuyy=_deref_pssc2_memcpy_vbuc3 -ldx #0 -!: -lda {c2},x -sta {c1},y -iny -inx -cpx #{c3} -bne !- -//FRAGMENT _deref_pbuc1=_byte_pprz1 -lda {z1} -sta {c1} -//FRAGMENT vwuz1=_deref_pwuc1_minus_vwuc2 -sec -lda {c1} -sbc #<{c2} -sta {z1} -lda {c1}+1 -sbc #>{c2} -sta {z1}+1 -//FRAGMENT _deref_pwuc1=vwuz1 -lda {z1} -sta {c1} -lda {z1}+1 -sta {c1}+1 -//FRAGMENT pbuz1=_deref_qbuc1_plus_vwuc2 -clc -lda {c1} -adc #<{c2} -sta {z1} -lda {c1}+1 -adc #>{c2} -sta {z1}+1 -//FRAGMENT 0_neq__deref_pbuc1_then_la1 -lda {c1} -cmp #0 -bne {la1} -//FRAGMENT vwuz1=vbuz2_word_vbuc1 -lda {z2} -ldy #{c1} -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=vwuz2_plus_vbuc1 -lda #{c1} -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vbuz1=vbuz2_minus__deref_pbuz3 -lda {z2} -sec -ldy #0 -sbc ({z3}),y -sta {z1} -//FRAGMENT vbsz1=_inc_vbsz1 -inc {z1} -//FRAGMENT vbsz1_neq_vbsc1_then_la1 -lda #{c1} -cmp {z1} -bne {la1} -//FRAGMENT vbuz1=pbuz2_derefidx_vbuz3_rol_4 -ldy {z3} -lda ({z2}),y -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuz1=pbuz2_derefidx_vbuz3_rol_1 -ldy {z3} -lda ({z2}),y -asl -sta {z1} -//FRAGMENT vwuz1=vwuz2_ror_1 -lda {z2}+1 -lsr -sta {z1}+1 -lda {z2} -ror -sta {z1} -//FRAGMENT vwuz1=_neg_vwuz1 -sec -lda #0 -sbc {z1} -sta {z1} -lda #0 -sbc {z1}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_ror_1 -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -//FRAGMENT vwsz1=vwsz1_minus_vwsz2 -lda {z1} -sec -sbc {z2} -sta {z1} -lda {z1}+1 -sbc {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 -ldy {z2} -sec -lda {z1} -sbc {c1},y -sta {z1} -lda {z1}+1 -sbc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 -ldy {z2} -clc -lda {z1} -adc {c1},y -sta {z1} -lda {z1}+1 -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_ror_2 -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -//FRAGMENT vbuz1=vbuz1_minus_2 -dec {z1} -dec {z1} -//FRAGMENT vwuz1=vbuaa_word_vbuc1 -ldy #{c1} -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=vbuxx_word_vbuc1 -ldy #{c1} -txa -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=vbuyy_word_vbuc1 -tya -ldy #{c1} -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=vwuz1_plus_vbuaa -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT vbuz1=vbuxx_minus__deref_pbuz2 -txa -sec -ldy #0 -sbc ({z2}),y -sta {z1} -//FRAGMENT vbuaa=vbuz1_minus__deref_pbuz2 -lda {z1} -sec -ldy #0 -sbc ({z2}),y -//FRAGMENT vbuaa=vbuxx_minus__deref_pbuz1 -txa -sec -ldy #0 -sbc ({z1}),y -//FRAGMENT vbuxx=vbuz1_minus__deref_pbuz2 -lda {z1} -sec -ldy #0 -sbc ({z2}),y -tax -//FRAGMENT vbuxx=vbuxx_minus__deref_pbuz1 -txa -sec -ldy #0 -sbc ({z1}),y -tax -//FRAGMENT vbuyy=vbuz1_minus__deref_pbuz2 -lda {z1} -sec -ldy #0 -sbc ({z2}),y -tay -//FRAGMENT vbuyy=vbuxx_minus__deref_pbuz1 -txa -sec -ldy #0 -sbc ({z1}),y -tay -//FRAGMENT vbsxx_neq_vbsc1_then_la1 -cpx #{c1} -bne {la1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuz2_rol_4 -ldy {z2} -lda ({z1}),y -asl -asl -asl -asl -//FRAGMENT vbuxx=pbuz1_derefidx_vbuz2_rol_4 -ldy {z2} -lda ({z1}),y -asl -asl -asl -asl -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuz2_rol_4 -ldy {z2} -lda ({z1}),y -asl -asl -asl -asl -tay -//FRAGMENT vbuz1=pbuz2_derefidx_vbuaa_rol_4 -tay -lda ({z2}),y -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuaa_rol_4 -tay -lda ({z1}),y -asl -asl -asl -asl -//FRAGMENT vbuxx=pbuz1_derefidx_vbuaa_rol_4 -tay -lda ({z1}),y -asl -asl -asl -asl -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuaa_rol_4 -tay -lda ({z1}),y -asl -asl -asl -asl -tay -//FRAGMENT vbuz1=pbuz2_derefidx_vbuxx_rol_4 -txa -tay -lda ({z2}),y -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuxx_rol_4 -txa -tay -lda ({z1}),y -asl -asl -asl -asl -//FRAGMENT vbuxx=pbuz1_derefidx_vbuxx_rol_4 -txa -tay -lda ({z1}),y -asl -asl -asl -asl -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuxx_rol_4 -txa -tay -lda ({z1}),y -asl -asl -asl -asl -tay -//FRAGMENT vbuz1=pbuz2_derefidx_vbuyy_rol_4 -lda ({z2}),y -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuyy_rol_4 -lda ({z1}),y -asl -asl -asl -asl -//FRAGMENT vbuxx=pbuz1_derefidx_vbuyy_rol_4 -lda ({z1}),y -asl -asl -asl -asl -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuyy_rol_4 -lda ({z1}),y -asl -asl -asl -asl -tay -//FRAGMENT vbuaa=pbuz1_derefidx_vbuz2_rol_1 -ldy {z2} -lda ({z1}),y -asl -//FRAGMENT vbuxx=pbuz1_derefidx_vbuz2_rol_1 -ldy {z2} -lda ({z1}),y -asl -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuz2_rol_1 -ldy {z2} -lda ({z1}),y -asl -tay -//FRAGMENT vbuz1=pbuz2_derefidx_vbuxx_rol_1 -txa -tay -lda ({z2}),y -asl -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuxx_rol_1 -txa -tay -lda ({z1}),y -asl -//FRAGMENT vbuxx=pbuz1_derefidx_vbuxx_rol_1 -txa -tay -lda ({z1}),y -asl -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuxx_rol_1 -txa -tay -lda ({z1}),y -asl -tay -//FRAGMENT vbuz1=pbuz2_derefidx_vbuyy_rol_1 -lda ({z2}),y -asl -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuyy_rol_1 -lda ({z1}),y -asl -//FRAGMENT vbuxx=pbuz1_derefidx_vbuyy_rol_1 -lda ({z1}),y -asl -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuyy_rol_1 -lda ({z1}),y -asl -tay -//FRAGMENT pbuz1_derefidx_vbuxx=vbuz2 -txa -tay -lda {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=vbuz2 -lda {z2} -sta ({z1}),y -//FRAGMENT vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa -tay -sec -lda {z1} -sbc {c1},y -sta {z1} -lda {z1}+1 -sbc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_minus_pwuc1_derefidx_vbuxx -sec -lda {z1} -sbc {c1},x -sta {z1} -lda {z1}+1 -sbc {c1}+1,x -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_minus_pwuc1_derefidx_vbuyy -sec -lda {z1} -sbc {c1},y -sta {z1} -lda {z1}+1 -sbc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa -tay -clc -lda {z1} -adc {c1},y -sta {z1} -lda {z1}+1 -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_plus_pwuc1_derefidx_vbuxx -clc -lda {z1} -adc {c1},x -sta {z1} -lda {z1}+1 -adc {c1}+1,x -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_plus_pwuc1_derefidx_vbuyy -clc -lda {z1} -adc {c1},y -sta {z1} -lda {z1}+1 -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vbuz1_lt_vbuaa_then_la1 -cmp {z1} -beq !+ -bcs {la1} -!: -//FRAGMENT vbuxx=vbuxx_minus_2 -dex -dex -//FRAGMENT vbuyy=vbuyy_minus_2 -dey -dey -//FRAGMENT vbuz1=vbuz2_bor_vbuyy -tya -ora {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_bor_vbuyy -tya -ora {z1} -//FRAGMENT vbuxx=vbuz1_bor_vbuyy -tya -ora {z1} -tax -//FRAGMENT vbuyy=vbuz1_bor_vbuyy -tya -ora {z1} -tay -//FRAGMENT pbuz1_derefidx_vbuxx=vbuyy -stx $ff -tya -ldy $ff -sta ({z1}),y -//FRAGMENT vbuz1_lt_vbuyy_then_la1 -cpy {z1} -beq !+ -bcs {la1} -!: -//FRAGMENT vbuxx_lt_vbuyy_then_la1 -sty $ff -cpx $ff -bcc {la1} -//FRAGMENT pbuz1_derefidx_vbuyy=vbuaa -sta ({z1}),y -//FRAGMENT vwuz1=vwuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT vbuz1_eq_vbuxx_then_la1 -cpx {z1} -beq {la1} -//FRAGMENT vbuxx_eq_vbuaa_then_la1 -tay -sty $ff -cpx $ff -beq {la1} -//FRAGMENT vbuxx_eq_vbuyy_then_la1 -sty $ff -cpx $ff -beq {la1} -//FRAGMENT vbuyy_eq_vbuxx_then_la1 -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuz3 -ldy {z3} -lda {c1},y -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuz2 -txa -ldx {z2} -tay -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuz2 -ldx {z2} -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuxx -lda {c1},x -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuxx -txa -tay -lda {c1},y -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuyy -lda {c1},y -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_vbuyy -lda {c1},y -stx $ff -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuyy -lda {c1},y -sta ({z1}),y -//FRAGMENT vwsz1=_sword_vbuz2 -lda {z2} -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuc2 -lda #{c2} -and {c1} -sta {c1} -//FRAGMENT vboz1=vbuz2_lt_vbuc1 -lda {z2} +//FRAGMENT vbuaa_lt_vbuc1_then_la1 cmp #{c1} -lda #0 -rol -eor #1 -sta {z1} -//FRAGMENT vboaa=vbuz1_lt_vbuc1 -lda {z1} -cmp #{c1} -lda #0 -rol -eor #1 -//FRAGMENT vboxx=vbuz1_lt_vbuc1 -lda {z1} -cmp #{c1} -lda #0 -rol -eor #1 -tax -//FRAGMENT vboyy=vbuz1_lt_vbuc1 -lda {z1} -cmp #{c1} -lda #0 -rol -eor #1 -tay -//FRAGMENT vboz1=vbuaa_lt_vbuc1 -cmp #{c1} -lda #0 -rol -eor #1 -sta {z1} -//FRAGMENT vboaa=vbuaa_lt_vbuc1 -cmp #{c1} -lda #0 -rol -eor #1 -//FRAGMENT vboxx=vbuaa_lt_vbuc1 -cmp #{c1} -lda #0 -rol -eor #1 -tax -//FRAGMENT vboyy=vbuaa_lt_vbuc1 -cmp #{c1} -lda #0 -rol -eor #1 -tay -//FRAGMENT vboz1=vbuxx_lt_vbuc1 -cpx #{c1} -lda #0 -rol -eor #1 -sta {z1} -//FRAGMENT vboaa=vbuxx_lt_vbuc1 -cpx #{c1} -lda #0 -rol -eor #1 -//FRAGMENT vboxx=vbuxx_lt_vbuc1 -cpx #{c1} -lda #0 -rol -eor #1 -tax -//FRAGMENT vboyy=vbuxx_lt_vbuc1 -cpx #{c1} -lda #0 -rol -eor #1 -tay -//FRAGMENT vboz1=vbuyy_lt_vbuc1 -cpy #{c1} -lda #0 -rol -eor #1 -sta {z1} -//FRAGMENT vboaa=vbuyy_lt_vbuc1 -cpy #{c1} -lda #0 -rol -eor #1 -//FRAGMENT vboxx=vbuyy_lt_vbuc1 -cpy #{c1} -lda #0 -rol -eor #1 -tax -//FRAGMENT vboyy=vbuyy_lt_vbuc1 -cpy #{c1} -lda #0 -rol -eor #1 -tay -//FRAGMENT vbuaa=vbuc1_plus_vbuxx -txa -clc -adc #{c1} -//FRAGMENT vbuaa=vbuc1_plus_vbuyy -tya -clc -adc #{c1} -//FRAGMENT vbuxx=vbuc1_plus_vbuxx -txa -axs #-[{c1}] -//FRAGMENT vbuxx=vbuc1_plus_vbuyy -tya -tax -axs #-[{c1}] -//FRAGMENT vbuyy=vbuc1_plus_vbuaa -clc -adc #{c1} -tay -//FRAGMENT vbuyy=vbuc1_plus_vbuxx -txa -clc -adc #{c1} -tay -//FRAGMENT vbuyy=vbuc1_plus_vbuyy -tya -clc -adc #{c1} -tay -//FRAGMENT vbuz1=vbuz2_rol_4 -lda {z2} -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuz1=vbuaa_rol_4 -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuz1=vbuxx_rol_4 -txa -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuz1=vbuyy_rol_4 -tya -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuaa=vbuz1_rol_4 -lda {z1} -asl -asl -asl -asl -//FRAGMENT vbuaa=vbuaa_rol_4 -asl -asl -asl -asl -//FRAGMENT vbuaa=vbuxx_rol_4 -txa -asl -asl -asl -asl -//FRAGMENT vbuaa=vbuyy_rol_4 -tya -asl -asl -asl -asl -//FRAGMENT vbuxx=vbuz1_rol_4 -lda {z1} -asl -asl -asl -asl -tax -//FRAGMENT vbuxx=vbuaa_rol_4 -asl -asl -asl -asl -tax -//FRAGMENT vbuxx=vbuxx_rol_4 -txa -asl -asl -asl -asl -tax -//FRAGMENT vbuxx=vbuyy_rol_4 -tya -asl -asl -asl -asl -tax -//FRAGMENT vbuyy=vbuz1_rol_4 -lda {z1} -asl -asl -asl -asl -tay -//FRAGMENT vbuyy=vbuaa_rol_4 -asl -asl -asl -asl -tay -//FRAGMENT vbuyy=vbuxx_rol_4 -txa -asl -asl -asl -asl -tay -//FRAGMENT vbuyy=vbuyy_rol_4 -tya -asl -asl -asl -asl -tay -//FRAGMENT vbuz1=vbuaa_bor_vbuz2 -ora {z2} -sta {z1} -//FRAGMENT vbuz1=vbuaa_bor_vbuxx -stx $ff -ora $ff -sta {z1} -//FRAGMENT vbuz1=vbuaa_bor_vbuyy -sty $ff -ora $ff -sta {z1} -//FRAGMENT vbuaa=vbuaa_bor_vbuz1 -ora {z1} -//FRAGMENT vbuaa=vbuaa_bor_vbuxx -stx $ff -ora $ff -//FRAGMENT vbuaa=vbuaa_bor_vbuyy -sty $ff -ora $ff -//FRAGMENT vbuxx=vbuaa_bor_vbuz1 -ora {z1} -tax -//FRAGMENT vbuxx=vbuaa_bor_vbuxx -stx $ff -ora $ff -tax -//FRAGMENT vbuxx=vbuaa_bor_vbuyy -sty $ff -ora $ff -tax -//FRAGMENT vbuyy=vbuaa_bor_vbuz1 -ora {z1} -tay -//FRAGMENT vbuyy=vbuaa_bor_vbuxx -stx $ff -ora $ff -tay -//FRAGMENT vbuyy=vbuaa_bor_vbuyy -sty $ff -ora $ff -tay -//FRAGMENT vbuz1=vbuxx_bor_vbuyy -txa -sty $ff -ora $ff -sta {z1} -//FRAGMENT vbuaa=vbuxx_bor_vbuyy -txa -sty $ff -ora $ff -//FRAGMENT vbuaa=vbuyy_bor_vbuxx -txa -sty $ff -ora $ff -//FRAGMENT pbuz1_derefidx_vbuyy=vbuxx -txa -sta ({z1}),y -//FRAGMENT vbuxx=vbuxx_bor_vbuyy -txa -sty $ff -ora $ff -tax -//FRAGMENT vbuyy=vbuyy_bor_vbuxx -txa -sty $ff -ora $ff -tay -//FRAGMENT vboz1=vboyy -tya -sta {z1} -//FRAGMENT vbuz1=_byte_pwuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_1 -ldx {z1} -inc {c1},x -bne !+ -inc {c1}+1,x -!: -//FRAGMENT pwuc1_derefidx_vbuz1_lt_vbuc2_then_la1 -ldy {z1} -lda {c1}+1,y -bne !+ -lda {c1},y -cmp #{c2} bcc {la1} -!: -//FRAGMENT pwuc1_derefidx_vbuz1=vbuc2 -lda #{c2} -ldy {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pbuz1=pbuz2_plus_pwuc1_derefidx_vbuz3 -ldy {z3} -clc -lda {z2} -adc {c1},y -sta {z1} -lda {z2}+1 -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vbuaa=_byte_pwuc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -//FRAGMENT vbuxx=_byte_pwuc1_derefidx_vbuz1 -ldx {z1} -lda {c1},x -tax -//FRAGMENT vbuyy=_byte_pwuc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -tay -//FRAGMENT vbuz1=_byte_pwuc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=_byte_pwuc1_derefidx_vbuaa -tay -lda {c1},y -//FRAGMENT vbuxx=_byte_pwuc1_derefidx_vbuaa -tax -lda {c1},x -tax -//FRAGMENT vbuyy=_byte_pwuc1_derefidx_vbuaa -tay -lda {c1},y -tay -//FRAGMENT vbuz1=_byte_pwuc1_derefidx_vbuxx -lda {c1},x -sta {z1} -//FRAGMENT vbuaa=_byte_pwuc1_derefidx_vbuxx -lda {c1},x -//FRAGMENT vbuxx=_byte_pwuc1_derefidx_vbuxx -lda {c1},x -tax -//FRAGMENT vbuyy=_byte_pwuc1_derefidx_vbuxx -lda {c1},x -tay -//FRAGMENT vbuz1=_byte_pwuc1_derefidx_vbuyy -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=_byte_pwuc1_derefidx_vbuyy -lda {c1},y -//FRAGMENT vbuxx=_byte_pwuc1_derefidx_vbuyy -lda {c1},y -tax -//FRAGMENT vbuyy=_byte_pwuc1_derefidx_vbuyy -lda {c1},y -tay -//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_1 -inc {c1},x -bne !+ -inc {c1}+1,x -!: -//FRAGMENT pwuc1_derefidx_vbuxx_lt_vbuc2_then_la1 -lda {c1}+1,x -bne !+ -lda {c1},x -cmp #{c2} -bcc {la1} -!: -//FRAGMENT pwuc1_derefidx_vbuyy_lt_vbuc2_then_la1 -lda {c1}+1,y -bne !+ -lda {c1},y -cmp #{c2} -bcc {la1} -!: -//FRAGMENT pwuc1_derefidx_vbuxx=vbuc2 -lda #{c2} -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=vbuc2 -lda #{c2} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pbuz1=pbuz2_plus_pwuc1_derefidx_vbuxx -clc -lda {z2} -adc {c1},x -sta {z1} -lda {z2}+1 -adc {c1}+1,x -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_pwuc1_derefidx_vbuyy -clc -lda {z2} -adc {c1},y -sta {z1} -lda {z2}+1 -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_1 -tya -tax -inc {c1},x -bne !+ -inc {c1}+1,x -!: -//FRAGMENT vbuz1=vbuc1_bor_vbuz2 -lda #{c1} -ora {z2} -sta {z1} -//FRAGMENT pbuz1_neq_vwuc1_then_la1 -lda {z1}+1 -cmp #>{c1} +//FRAGMENT vbuxx_neq_vbuc1_then_la1 +cpx #{c1} bne {la1} -lda {z1} -cmp #<{c1} -bne {la1} -//FRAGMENT vbuz1=vbuc1_bor_vbuaa -ora #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuc1_bor_vbuxx -txa -ora #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuc1_bor_vbuyy -tya -ora #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuc1_bor_vbuz1 -lda #{c1} -ora {z1} -//FRAGMENT vbuaa=vbuc1_bor_vbuaa -ora #{c1} -//FRAGMENT vbuaa=vbuc1_bor_vbuxx -txa -ora #{c1} -//FRAGMENT vbuaa=vbuc1_bor_vbuyy -tya -ora #{c1} -//FRAGMENT vbuxx=vbuc1_bor_vbuz1 -lda #{c1} -ora {z1} -tax -//FRAGMENT vbuxx=vbuc1_bor_vbuaa -ora #{c1} -tax -//FRAGMENT vbuxx=vbuc1_bor_vbuxx -txa -ora #{c1} -tax -//FRAGMENT vbuxx=vbuc1_bor_vbuyy -tya -ora #{c1} -tax -//FRAGMENT vbuyy=vbuc1_bor_vbuz1 -lda #{c1} -ora {z1} -tay -//FRAGMENT vbuyy=vbuc1_bor_vbuaa -ora #{c1} -tay -//FRAGMENT vbuyy=vbuc1_bor_vbuxx -txa -ora #{c1} -tay -//FRAGMENT vbuyy=vbuc1_bor_vbuyy -tya -ora #{c1} -tay -//FRAGMENT vwuz1_gt_vbuc1_then_la1 -lda {z1}+1 -bne {la1} -lda #{c1} -cmp {z1} -bcc {la1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuz1 -lda {c1} -and {z1} -sta {c1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuz1 -lda {c1} -ora {z1} -sta {c1} -//FRAGMENT vbuz1=vbuaa_bxor_vbuc1 -eor #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuaa_bxor_vbuc1 -eor #{c1} -//FRAGMENT vbuxx=vbuaa_bxor_vbuc1 -eor #{c1} -tax -//FRAGMENT vbuyy=vbuaa_bxor_vbuc1 -eor #{c1} -tay -//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuaa -and {c1} -sta {c1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuxx -txa -and {c1} -sta {c1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuyy -tya -and {c1} -sta {c1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuaa -ora {c1} -sta {c1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuxx -txa -ora {c1} -sta {c1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuyy -tya -ora {c1} -sta {c1} -//FRAGMENT vbsz1=_dec_vbsz1 -dec {z1} -//FRAGMENT pbuz1=pbuc1_plus_vbsz2 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda {z2} -ora #$7f -bmi !+ -lda #0 -!: -adc #>{c1} -sta {z1}+1 -//FRAGMENT vbuz1=_deref_pbuz2_band_vbuc1 -lda #{c1} -ldy #0 -and ({z2}),y -sta {z1} -//FRAGMENT vbsaa_ge_0_then_la1 -cmp #0 -bpl {la1} -//FRAGMENT pbuz1=pbuc1_plus_vbsaa -pha -clc -adc #<{c1} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_plus_vbsxx -txa -pha -clc -adc #<{c1} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_plus_vbsyy -tya -pha -clc -adc #<{c1} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc #>{c1} -sta {z1}+1 -//FRAGMENT vbuaa=_deref_pbuz1_band_vbuc1 -lda #{c1} -ldy #0 -and ({z1}),y -//FRAGMENT vbuxx=_deref_pbuz1_band_vbuc1 -lda #{c1} -ldy #0 -and ({z1}),y -tax -//FRAGMENT vbuyy=_deref_pbuz1_band_vbuc1 -lda #{c1} -ldy #0 -and ({z1}),y -tay -//FRAGMENT vbuyy=vbuxx_bor_vbuyy -txa -sty $ff -ora $ff -tay -//FRAGMENT vbuxx=vbuyy_bor_vbuxx -txa -sty $ff -ora $ff -tax -//FRAGMENT vbsxx=vbsc1 -ldx #{c1} -//FRAGMENT vbsxx=_dec_vbsxx -dex -//FRAGMENT vduz1=vduz2_minus_vduc1 -lda {z2} -sec -sbc #<{c1} -sta {z1} -lda {z2}+1 -sbc #>{c1} -sta {z1}+1 -lda {z2}+2 -sbc #<{c1}>>$10 -sta {z1}+2 -lda {z2}+3 -sbc #>{c1}>>$10 -sta {z1}+3 -//FRAGMENT _deref_pduc1=vduc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 -lda #<{c2}>>$10 -sta {c1}+2 -lda #>{c2}>>$10 -sta {c1}+3 -//FRAGMENT vbuz1=vbuc1_minus_vbuz2 -lda #{c1} -sec -sbc {z2} -sta {z1} -//FRAGMENT vduz1=vduc1_minus__deref_pduc2 -lda #<{c1} -sec -sbc {c2} -sta {z1} -lda #>{c1} -sbc {c2}+1 -sta {z1}+1 -lda #<{c1}>>$10 -sbc {c2}+2 -sta {z1}+2 -lda #>{c1}>>$10 -sbc {c2}+3 -sta {z1}+3 -//FRAGMENT pwuz1=pwuc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT _deref_pwuz1=vwuz2 -ldy #0 -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT pwuz1=pwuz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT pwuz1=pwuz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=pwuz2_minus_pwuc1 -lda {z2} -sec -sbc #<{c1} -sta {z1} -lda {z2}+1 -sbc #>{c1} -sta {z1}+1 -//FRAGMENT _deref_pwuz1_le_vwuz2_then_la1 -ldy #1 -lda ({z1}),y -cmp {z2}+1 -bne !+ -dey -lda ({z1}),y -cmp {z2} -beq {la1} -!: -bcc {la1} -//FRAGMENT pwuz1=pwuz1_minus_vbuc1 -sec -lda {z1} -sbc #{c1} -sta {z1} -lda {z1}+1 -sbc #0 -sta {z1}+1 -//FRAGMENT vbuz1=vbuz2_ror_1 -lda {z2} -lsr -sta {z1} -//FRAGMENT pwuz1=pwuz2_plus_vbuz3 -lda {z3} -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz2_minus__deref_pwsz3 -sec -lda {z2} -ldy #0 -sbc ({z3}),y -sta {z1} -lda {z2}+1 -iny -sbc ({z3}),y -sta {z1}+1 -//FRAGMENT vwsz1_le_0_then_la1 -lda {z1}+1 -bmi {la1} -bne !+ -lda {z1} -beq {la1} -!: -//FRAGMENT pwuz1=pwuz2_plus_vbuc1 -lda #{c1} -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_1 -clc -lda {z2} -adc #1 -sta {z1} -lda {z2}+1 -adc #0 -sta {z1}+1 //FRAGMENT vbuaa=vbuc1_minus_vbuz1 lda #{c1} sec @@ -7184,832 +1264,48 @@ eor #$ff sec adc #{c1} tay +//FRAGMENT vwuz1=vbuaa_word_vbuc1 +ldy #{c1} +sta {z1}+1 +sty {z1} +//FRAGMENT vwuz1=vbuxx_word_vbuc1 +ldy #{c1} +txa +sta {z1}+1 +sty {z1} +//FRAGMENT vwuz1=vbuyy_word_vbuc1 +tya +ldy #{c1} +sta {z1}+1 +sty {z1} +//FRAGMENT pbuz1_derefidx_vbuz2=vbuaa +ldy {z2} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=vbuxx +ldy {z2} +txa +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuz2=vbuyy +tya +ldy {z2} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=vbuz2 +txa +tay +lda {z2} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuxx=vbuaa +stx $ff +ldy $ff +sta ({z1}),y //FRAGMENT pbuz1_derefidx_vbuxx=vbuxx txa tay sta ({z1}),y -//FRAGMENT vbuaa=vbuz1_ror_1 -lda {z1} -lsr -//FRAGMENT vbuxx=vbuz1_ror_1 -lda {z1} -lsr -tax -//FRAGMENT vbuyy=vbuz1_ror_1 -lda {z1} -lsr -tay -//FRAGMENT vbuz1=vbuaa_ror_1 -lsr -sta {z1} -//FRAGMENT vbuaa=vbuaa_ror_1 -lsr -//FRAGMENT vbuxx=vbuaa_ror_1 -lsr -tax -//FRAGMENT vbuyy=vbuaa_ror_1 -lsr -tay -//FRAGMENT vbuz1=vbuxx_ror_1 -txa -lsr -sta {z1} -//FRAGMENT vbuaa=vbuxx_ror_1 -txa -lsr -//FRAGMENT vbuyy=vbuxx_ror_1 -txa -lsr -tay -//FRAGMENT vbuz1=vbuyy_ror_1 -tya -lsr -sta {z1} -//FRAGMENT vbuaa=vbuyy_ror_1 -tya -lsr -//FRAGMENT vbuxx=vbuyy_ror_1 -tya -lsr -tax -//FRAGMENT pwuz1=pwuz2_plus_vbuaa -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pwuz1=pwuz2_plus_vbuxx -txa -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pwuz1=pwuz2_plus_vbuyy -tya -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vbuaa=vbuaa_plus_1 -clc -adc #1 -//FRAGMENT vbuaa=vbuxx_plus_1 -inx -txa -//FRAGMENT vbuaa=vbuyy_plus_1 -iny -tya -//FRAGMENT vbuxx=vbuaa_plus_1 -tax -inx -//FRAGMENT vbuxx=vbuxx_plus_1 -inx -//FRAGMENT vbuxx=vbuyy_plus_1 -tya -tax -inx -//FRAGMENT vbuyy=vbuaa_plus_1 -tay -iny -//FRAGMENT vbuyy=vbuxx_plus_1 -txa -tay -iny -//FRAGMENT vbuyy=vbuyy_plus_1 -iny -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx -lda {c1},x -tax -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy -ldx {c1},y -//FRAGMENT vwuz1=pwuz1_minus_pwuc1 -lda {z1} -sec -sbc #<{c1} -sta {z1} -lda {z1}+1 -sbc #>{c1} -sta {z1}+1 -//FRAGMENT vduz1=vduz1_minus_vduc1 -lda {z1} -sec -sbc #<{c1} -sta {z1} -lda {z1}+1 -sbc #>{c1} -sta {z1}+1 -lda {z1}+2 -sbc #<{c1}>>$10 -sta {z1}+2 -lda {z1}+3 -sbc #>{c1}>>$10 -sta {z1}+3 -//FRAGMENT pbuz1=_dec_pbuz1 -lda {z1} -bne !+ -dec {z1}+1 -!: -dec {z1} -//FRAGMENT vbuz1=_stackidxbyte_vbuc1 -tsx -lda STACK_BASE+{c1},x -sta {z1} -//FRAGMENT _stackidxbyte_vbuc1=vbuz1 -lda {z1} -tsx -sta STACK_BASE+{c1},x -//FRAGMENT _stackpushbyte_=vbuz1 -lda {z1} -pha -//FRAGMENT _stackpushbyte_1 -pha -//FRAGMENT vbuz1=_stackpullbyte_ -pla -sta {z1} -//FRAGMENT _stackpullbyte_2 -pla -pla -//FRAGMENT vbuaa=_stackidxbyte_vbuc1 -tsx -lda STACK_BASE+{c1},x -//FRAGMENT vbuxx=_stackidxbyte_vbuc1 -tsx -lda STACK_BASE+{c1},x -tax -//FRAGMENT vbuyy=_stackidxbyte_vbuc1 -tsx -lda STACK_BASE+{c1},x -tay -//FRAGMENT _stackidxbyte_vbuc1=vbuxx -txa -tsx -sta STACK_BASE+{c1},x -//FRAGMENT _stackidxbyte_vbuc1=vbuyy -tya -tsx -sta STACK_BASE+{c1},x -//FRAGMENT vbuaa=_stackpullbyte_ -pla -//FRAGMENT vbuxx=_stackpullbyte_ -pla -tax -//FRAGMENT vbuyy=_stackpullbyte_ -pla -tay -//FRAGMENT _stackpushbyte_=vbuxx -txa -pha -//FRAGMENT _stackpushbyte_=vbuyy -tya -pha -//FRAGMENT _stackpushbyte_3 -pha -pha -pha -//FRAGMENT _stackpullbyte_4 -tsx -txa -axs #-4 -txs -//FRAGMENT pbuz1=_stackidxptr_vbuc1 -tsx -lda STACK_BASE+{c1},x -sta {z1} -lda STACK_BASE+{c1}+1,x -sta {z1}+1 -//FRAGMENT pbuc1_derefidx_vbuz1=_deref_pbuz2 -ldy #0 -lda ({z2}),y -ldy {z1} -sta {c1},y -//FRAGMENT _stackpushptr_=pbuc1 -lda #>{c1} -pha -lda #<{c1} -pha -//FRAGMENT _stackpushbyte_=vbuc1 -lda #{c1} -pha -//FRAGMENT _stackpullbyte_3 -tsx -txa -axs #-3 -txs -//FRAGMENT _stackpushbyte_=vbuaa -pha -//FRAGMENT _stackidxbyte_vbuc1=vbuaa -tsx -sta STACK_BASE+{c1},x -//FRAGMENT vbuz1=vbuaa_minus_1 -sec -sbc #1 -sta {z1} -//FRAGMENT vbuaa=vbuaa_minus_1 -sec -sbc #1 -//FRAGMENT vbuxx=vbuaa_minus_1 -tax -dex -//FRAGMENT vbuz1=_lo_pbuz2 -lda {z2} -sta {z1} -//FRAGMENT vbuz1=_hi_pbuz2 -lda {z2}+1 -sta {z1} -//FRAGMENT vbuc1_lt_vbuz1_then_la1 -lda #{c1} -cmp {z1} -bcc {la1} -//FRAGMENT vbuc1_ge_vbuz1_then_la1 -lda #{c1} -cmp {z1} -bcs {la1} -//FRAGMENT vbuz1_ge_vbuz2_then_la1 -lda {z1} -cmp {z2} -bcs {la1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuz2_word_pbuc2_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1}+1 -lda {c2},y -sta {z1} -//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbuz3 -ldy #0 -lda ({z2}),y -ldy {z3} -ora {c1},y -sta {z1} -//FRAGMENT vbuaa=_lo_pbuz1 -lda {z1} -//FRAGMENT vbuxx=_lo_pbuz1 -ldx {z1} -//FRAGMENT vbuz1=vbuaa_bor_vbuaa -sta {z1} -//FRAGMENT vbuaa=_hi_pbuz1 -lda {z1}+1 -//FRAGMENT vbuxx=_hi_pbuz1 -ldx {z1}+1 -//FRAGMENT vbuc1_lt_vbuaa_then_la1 -cmp #{c1} -beq !+ -bcs {la1} -!: -//FRAGMENT vbuc1_ge_vbuaa_then_la1 -cmp #{c1} -bcc {la1} -beq {la1} -//FRAGMENT vbuxx_ge_vbuz1_then_la1 -cpx {z1} -bcs {la1} -//FRAGMENT vbuz1_ge_vbuaa_then_la1 -ldy {z1} -sta $ff -cpy $ff -bcs {la1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuaa_word_pbuc2_derefidx_vbuaa -tay -lda {c1},y -sta {z1}+1 -lda {c2},y -sta {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx -lda {c1},x -sta {z1}+1 -lda {c2},x -sta {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuyy_word_pbuc2_derefidx_vbuyy -lda {c1},y -sta {z1}+1 -lda {c2},y -sta {z1} -//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbuxx -lda {c1},x -ldy #0 -ora ({z2}),y -sta {z1} -//FRAGMENT vbuz1=_deref_pbuz2_bor_pbuc1_derefidx_vbuyy -lda {c1},y -ldy #0 -ora ({z2}),y -sta {z1} -//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbuz2 -ldy #0 -lda ({z1}),y -ldy {z2} -ora {c1},y -//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbuxx -lda {c1},x -ldy #0 -ora ({z1}),y -//FRAGMENT vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbuyy -lda {c1},y -ldy #0 -ora ({z1}),y -//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbuz2 -ldx {z2} -lda {c1},x -ldy #0 -ora ({z1}),y -tax -//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbuxx -lda {c1},x -ldy #0 -ora ({z1}),y -tax -//FRAGMENT vbuxx=_deref_pbuz1_bor_pbuc1_derefidx_vbuyy -lda {c1},y -ldy #0 -ora ({z1}),y -tax -//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbuz2 -ldy #0 -lda ({z1}),y -ldy {z2} -ora {c1},y -tay -//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbuxx -lda {c1},x -ldy #0 -ora ({z1}),y -tay -//FRAGMENT vbuyy=_deref_pbuz1_bor_pbuc1_derefidx_vbuyy -lda {c1},y -ldy #0 -ora ({z1}),y -tay -//FRAGMENT vbuc1_ge_vbuxx_then_la1 -cpx #{c1} -bcc {la1} -beq {la1} -//FRAGMENT vbuz1_ge_vbuxx_then_la1 -lda {z1} +//FRAGMENT pbuz1_derefidx_vbuxx=vbuyy stx $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuc1_lt_vbuxx_then_la1 -cpx #{c1} -beq !+ -bcs {la1} -!: -//FRAGMENT vbuc1_lt_vbuyy_then_la1 -cpy #{c1} -beq !+ -bcs {la1} -!: -//FRAGMENT vbuyy=_lo_pbuz1 -ldy {z1} -//FRAGMENT vbuz1=vbuz2_bor__lo_pbuz3 -lda {z2} -ora {z3} -sta {z1} -//FRAGMENT vbuyy=_hi_pbuz1 -ldy {z1}+1 -//FRAGMENT vwuz1_eq_0_then_la1 -lda {z1} -ora {z1}+1 -beq {la1} -//FRAGMENT vwuz1_gt_vwuz2_then_la1 -lda {z2}+1 -cmp {z1}+1 -bcc {la1} -bne !+ -lda {z2} -cmp {z1} -bcc {la1} -!: -//FRAGMENT vwuz1_neq_vwuz2_then_la1 -lda {z1}+1 -cmp {z2}+1 -bne {la1} -lda {z1} -cmp {z2} -bne {la1} -//FRAGMENT vwuz1=vwuz2_band_vwuc1 -lda {z2} -and #<{c1} -sta {z1} -lda {z2}+1 -and #>{c1} -sta {z1}+1 -//FRAGMENT _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuz2 -ldy #0 -lda ({z1}),y -ldy {z2} -ora {c1},y -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuaa -tay -lda {c1},y -ldy #0 -ora ({z1}),y -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuxx -lda {c1},x -ldy #0 -ora ({z1}),y -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuyy -lda {c1},y -ldy #0 -ora ({z1}),y -ldy #0 -sta ({z1}),y -//FRAGMENT pbuz1=pbuz1_plus_vwuz2 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuc1_derefidx_vbuz1_neq_0_then_la1 -ldy {z1} -lda {c1},y -cmp #0 -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuaa_neq_0_then_la1 -tay -lda {c1},y -cmp #0 -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuxx_neq_0_then_la1 -lda {c1},x -cmp #0 -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuyy_neq_0_then_la1 -lda {c1},y -cmp #0 -bne {la1} -//FRAGMENT pbuz1=pbuz2_minus_vwuc1 -lda {z2} -sec -sbc #<{c1} -sta {z1} -lda {z2}+1 -sbc #>{c1} -sta {z1}+1 -//FRAGMENT pssz1=pssc1_plus_vbuz2 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2 -ldy #{c2} -lda ({z2}),y -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -sta {z1} -//FRAGMENT pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1 -lda #{c2} -ldy #{c1} -cmp ({z1}),y -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuc1_neq_vbuc2_then_la1 -ldy #{c1} -lda ({z1}),y - -cmp #{c2} -bne {la1} -//FRAGMENT _deref_(qbuz1_derefidx_vbuc1)=vbuc2 -ldx #{c2} -ldy #{c1} -lda ({z1}),y -sta !+ +1 -iny -lda ({z1}),y -sta !+ +2 -!: stx $ffff -//FRAGMENT pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3 -ldy #{c3} -lda ({z1}),y -ldy #{c2} -pha -lda ({z1}),y -tay -pla -sta {c1},y -//FRAGMENT vwuz1=_deref_pwuz2_ror_4 -ldy #0 -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -//FRAGMENT vbuz1=vbuc1_bxor_vbuz2 -lda #{c1} -eor {z2} -sta {z1} -//FRAGMENT pbuc1_derefidx_vbuz1=_byte_vwuz2 -ldy {z1} -lda {z2} -sta {c1},y -//FRAGMENT vwuz1=pwuz2_derefidx_vbuc1_ror_4 -ldy #{c1} -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -//FRAGMENT _deref_pwuz1_lt_vwuc1_then_la1 -ldy #1 -lda ({z1}),y -cmp #>{c1} -bcc {la1} -bne !+ -dey -lda ({z1}),y -cmp #<{c1} -bcc {la1} -!: -//FRAGMENT _deref_pwuz1_gt_vwuc1_then_la1 -ldy #1 -lda #>{c1} -cmp ({z1}),y -bcc {la1} -bne !+ -dey -lda #<{c1} -cmp ({z1}),y -bcc {la1} -!: -//FRAGMENT pwuz1_derefidx_vbuc1_lt_vwuc2_then_la1 -ldy #{c1} -iny -lda ({z1}),y -cmp #>{c2} -bcc {la1} -bne !+ -dey -lda ({z1}),y -cmp #<{c2} -bcc {la1} -!: -//FRAGMENT pwuz1_derefidx_vbuc1_gt_vwuc2_then_la1 -ldy #{c1} -iny -lda #>{c2} -cmp ({z1}),y -bcc {la1} -bne !+ -dey -lda #<{c2} -cmp ({z1}),y -bcc {la1} -!: -//FRAGMENT vwuz1=vwuz2_ror_3 -lda {z2}+1 -lsr -sta {z1}+1 -lda {z2} -ror -sta {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuz2 -ldx {z2} -ldy #{c1} -clc -lda ({z1}),y -adc {c2},x -sta ({z1}),y -iny -lda ({z1}),y -adc {c2}+1,x -sta ({z1}),y -//FRAGMENT _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1 -ldy #{c1} -sty $ff -clc -lda ({z1}),y -ldy #0 -adc ({z1}),y -sta ({z1}),y +tya ldy $ff -iny -lda ({z1}),y -ldy #1 -adc ({z1}),y -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2 -ldy #{c2} -clc -lda ({z1}),y -ldy #{c1} -adc ({z1}),y -sta ({z1}),y -ldy #{c2}+1 -lda ({z1}),y -ldy #{c1}+1 -adc ({z1}),y -sta ({z1}),y -//FRAGMENT vbuz1=_neg_vbuz2 -lda {z2} -eor #$ff -clc -adc #$01 -sta {z1} -//FRAGMENT vbuz1=pbuz2_derefidx_vbuz3 -ldy {z3} -lda ({z2}),y -sta {z1} -//FRAGMENT pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 -lda #{c2} -ldy {z1} -cmp {c1},y -bne {la1} -//FRAGMENT vwuz1=vwuz2_rol_6 -lda {z2}+1 -lsr -sta $ff -lda {z2} -ror -sta {z1}+1 -lda #0 -ror -sta {z1} -lsr $ff -ror {z1}+1 -ror {z1} -//FRAGMENT vwuz1=vbuc1_plus_vwuz2 -lda #{c1} -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_rol_4 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT pwuc1_derefidx_vbuz1=_word_vbuz2 -lda {z2} -ldy {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuz1=vwuc2 -ldy {z1} -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT qbuc1_derefidx_vbuz1=pbuz2 -ldy {z1} -lda {z2} -sta {c1},y -lda {z2}+1 -sta {c1}+1,y -//FRAGMENT pssz1=pssc1_plus_vbuaa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pssz1=pssc1_plus_vbuxx -txa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pssz1=pssc1_plus_vbuyy -tya -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT vbuaa=vbuc1_rol_pbuz1_derefidx_vbuc2 -ldy #{c2} -lda ({z1}),y -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -//FRAGMENT vbuxx=vbuc1_rol_pbuz1_derefidx_vbuc2 -ldy #{c2} -lda ({z1}),y -tax -lda #{c1} -cpx #0 -beq !e+ -!: -asl -dex -bne !- -!e: -tax -//FRAGMENT vbuyy=vbuc1_rol_pbuz1_derefidx_vbuc2 -ldy #{c2} -lda ({z1}),y -tay -lda #{c1} -cpy #0 -beq !e+ -!: -asl -dey -bne !- -!e: -tay -//FRAGMENT vbuaa=vbuc1_bxor_vbuz1 -lda #{c1} -eor {z1} -//FRAGMENT vbuxx=vbuc1_bxor_vbuz1 -lda #{c1} -eor {z1} -tax -//FRAGMENT vbuyy=vbuc1_bxor_vbuz1 -lda #{c1} -eor {z1} -tay -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa -ldy #{c1} -tax -clc -lda ({z1}),y -adc {c2},x -sta ({z1}),y -iny -lda ({z1}),y -adc {c2}+1,x -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuxx -ldy #{c1} -clc -lda ({z1}),y -adc {c2},x -sta ({z1}),y -iny -lda ({z1}),y -adc {c2}+1,x -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuyy -tya -ldy #{c1} -tax -clc -lda ({z1}),y -adc {c2},x -sta ({z1}),y -iny -lda ({z1}),y -adc {c2}+1,x sta ({z1}),y //FRAGMENT vbuz1=_neg_vbuaa eor #$ff @@ -8062,6 +1358,62 @@ txa eor #$ff tay iny +//FRAGMENT vbuz1=vbuc1_plus_vbuxx +txa +axs #-[{c1}] +stx {z1} +//FRAGMENT vbuaa=vbuc1_plus_vbuz1 +lda #{c1} +clc +adc {z1} +//FRAGMENT vbuaa=vbuc1_plus_vbuxx +txa +clc +adc #{c1} +//FRAGMENT vbuxx=vbuc1_plus_vbuz1 +lax {z1} +axs #-[{c1}] +//FRAGMENT vbuxx=vbuc1_plus_vbuxx +txa +axs #-[{c1}] +//FRAGMENT vbuyy=vbuc1_plus_vbuz1 +lda #{c1} +clc +adc {z1} +tay +//FRAGMENT vbuyy=vbuc1_plus_vbuxx +txa +clc +adc #{c1} +tay +//FRAGMENT pbuc1_derefidx_vbuaa=vbuc2 +tay +lda #{c2} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=vbuc2 +lda #{c2} +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=vbuc2 +lda #{c2} +sta {c1},y +//FRAGMENT pbuz1_derefidx_vbuaa_eq_vbuc1_then_la1 +tay +lda #{c1} +cmp ({z1}),y +beq {la1} +//FRAGMENT pbuz1_derefidx_vbuxx_eq_vbuc1_then_la1 +txa +tay +lda #{c1} +cmp ({z1}),y +beq {la1} +//FRAGMENT pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 +lda #{c1} +cmp ({z1}),y +beq {la1} +//FRAGMENT vbuaa=pbuz1_derefidx_vbuz2 +ldy {z2} +lda ({z1}),y //FRAGMENT vbuxx=pbuz1_derefidx_vbuz2 ldy {z2} lda ({z1}),y @@ -8075,6 +1427,10 @@ txa tay lda ({z2}),y sta {z1} +//FRAGMENT vbuaa=pbuz1_derefidx_vbuxx +txa +tay +lda ({z1}),y //FRAGMENT vbuxx=pbuz1_derefidx_vbuxx txa tay @@ -8088,6 +1444,8 @@ tay //FRAGMENT vbuz1=pbuz2_derefidx_vbuyy lda ({z2}),y sta {z1} +//FRAGMENT vbuaa=pbuz1_derefidx_vbuyy +lda ({z1}),y //FRAGMENT vbuxx=pbuz1_derefidx_vbuyy lda ({z1}),y tax @@ -8097,6 +1455,29 @@ tay //FRAGMENT vbuaa_ge_vbuz1_then_la1 cmp {z1} bcs {la1} +//FRAGMENT vbuxx_eq_vbuc1_then_la1 +cpx #{c1} +beq {la1} +//FRAGMENT vwuz1=_word_vbuxx +txa +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=_word_vbuyy +tya +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT pbuz1_derefidx_vbuxx=vbuc1 +txa +tay +lda #{c1} +sta ({z1}),y +//FRAGMENT pbuz1_derefidx_vbuyy=vbuc1 +lda #{c1} +sta ({z1}),y +//FRAGMENT vbuz1=vbuxx +stx {z1} //FRAGMENT pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1 tay lda #{c2} @@ -8110,6 +1491,93 @@ bne {la1} lda #{c2} cmp {c1},y bne {la1} +//FRAGMENT vwuz1=vwuz2_plus_vbuxx +txa +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_plus_vbuyy +tya +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vbuaa=_deref_pbuz1 +ldy #0 +lda ({z1}),y +//FRAGMENT vbuxx=_deref_pbuz1 +ldy #0 +lda ({z1}),y +tax +//FRAGMENT vbuyy=_deref_pbuz1 +ldy #0 +lda ({z1}),y +tay +//FRAGMENT vwuz1=_word_vbuaa +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vbuaa=vbuz1_rol_3 +lda {z1} +asl +asl +asl +//FRAGMENT vbuxx=vbuz1_rol_3 +lda {z1} +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuz1_rol_3 +lda {z1} +asl +asl +asl +tay +//FRAGMENT vbuz1=vbuxx_rol_3 +txa +asl +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuxx_rol_3 +txa +asl +asl +asl +//FRAGMENT vbuxx=vbuxx_rol_3 +txa +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuxx_rol_3 +txa +asl +asl +asl +tay +//FRAGMENT pwuc1_derefidx_vbuaa=vwuz1 +tay +lda {z1} +sta {c1},y +lda {z1}+1 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuxx=vwuz1 +lda {z1} +sta {c1},x +lda {z1}+1 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=vwuz1 +lda {z1} +sta {c1},y +lda {z1}+1 +sta {c1}+1,y //FRAGMENT pwuc1_derefidx_vbuz1=_word_vbuxx ldy {z1} txa @@ -8162,6 +1630,24 @@ lda #<{c2} sta {c1},y lda #>{c2} sta {c1}+1,y +//FRAGMENT pbuc1_derefidx_vbuxx=vbuz1 +lda {z1} +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuxx=vbuxx +txa +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=vbuz1 +lda {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuyy=vbuxx +txa +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=vbuyy +tya +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=vbuyy +tya +sta {c1},y //FRAGMENT qbuc1_derefidx_vbuxx=pbuz1 lda {z1} sta {c1},x @@ -8172,9 +1658,109 @@ lda {z1} sta {c1},y lda {z1}+1 sta {c1}+1,y +//FRAGMENT vbuxx_ge_vbuc1_then_la1 +cpx #{c1} +bcs {la1} +//FRAGMENT 0_eq_vbuxx_then_la1 +cpx #0 +beq {la1} +//FRAGMENT vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa +tay +sec +lda {z1} +sbc {c1},y +sta {z1} +lda {z1}+1 +sbc {c1}+1,y +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_minus_pwuc1_derefidx_vbuxx +sec +lda {z1} +sbc {c1},x +sta {z1} +lda {z1}+1 +sbc {c1}+1,x +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_minus_pwuc1_derefidx_vbuyy +sec +lda {z1} +sbc {c1},y +sta {z1} +lda {z1}+1 +sbc {c1}+1,y +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa +tay +clc +lda {z1} +adc {c1},y +sta {z1} +lda {z1}+1 +adc {c1}+1,y +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_plus_pwuc1_derefidx_vbuxx +clc +lda {z1} +adc {c1},x +sta {z1} +lda {z1}+1 +adc {c1}+1,x +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_plus_pwuc1_derefidx_vbuyy +clc +lda {z1} +adc {c1},y +sta {z1} +lda {z1}+1 +adc {c1}+1,y +sta {z1}+1 +//FRAGMENT vbuxx_lt_vbuc1_then_la1 +cpx #{c1} +bcc {la1} +//FRAGMENT vbuxx_ge_vbuz1_then_la1 +cpx {z1} +bcs {la1} +//FRAGMENT vbuxx=vbuxx_minus_2 +dex +dex +//FRAGMENT vbuyy=vbuz1 +ldy {z1} +//FRAGMENT vbuyy_ge_vbuc1_then_la1 +cpy #{c1} +bcs {la1} +//FRAGMENT 0_eq_vbuyy_then_la1 +cpy #0 +beq {la1} +//FRAGMENT vbuyy=vbuyy_minus_2 +dey +dey +//FRAGMENT vbuxx=vbuc1 +ldx #{c1} +//FRAGMENT vbuxx=_inc_vbuxx +inx +//FRAGMENT vbuyy=vbuxx +txa +tay +//FRAGMENT vbuyy=vbuc1 +ldy #{c1} +//FRAGMENT vbuz1=vbuyy +sty {z1} +//FRAGMENT vbuyy=_inc_vbuyy +iny +//FRAGMENT vbuyy_eq_vbuc1_then_la1 +cpy #{c1} +beq {la1} +//FRAGMENT vbuxx=vbuyy +tya +tax //FRAGMENT vbuyy_ge_vbuz1_then_la1 cpy {z1} bcs {la1} +//FRAGMENT vbuz1_ge_vbuxx_then_la1 +lda {z1} +stx $ff +cmp $ff +bcs {la1} //FRAGMENT vbuyy_ge_vbuxx_then_la1 stx $ff cpy $ff @@ -8188,6 +1774,42 @@ bcs {la1} sty $ff cpx $ff bcs {la1} +//FRAGMENT vbuyy_neq_vbuc1_then_la1 +cpy #{c1} +bne {la1} +//FRAGMENT 0_neq_vbuxx_then_la1 +cpx #0 +bne {la1} +//FRAGMENT vbuyy=_hi_vwuz1 +ldy {z1}+1 +//FRAGMENT 0_neq_vbuyy_then_la1 +cpy #0 +bne {la1} +//FRAGMENT vbuyy=vbuaa_minus_vbuc1 +sec +sbc #{c1} +tay +//FRAGMENT vbuaa=vbuxx +txa +//FRAGMENT pbuz1=pbuz1_plus_vwuc1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT pbuz1=pbuc1_plus_vwuz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_ror_1 +lsr {z1}+1 +ror {z1} //FRAGMENT vwuz1=vwuz1_ror_3 lsr {z1}+1 ror {z1} @@ -8195,6 +1817,37 @@ lsr {z1}+1 ror {z1} lsr {z1}+1 ror {z1} +//FRAGMENT vwuz1=vwuz2_plus_vwuz1 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2_plus_vwuz1 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_plus_vbuz2 +lda {z2} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT vwuz1=vwuz1_rol_3 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 //FRAGMENT vwuz1=vwuz1_rol_4 asl {z1} rol {z1}+1 @@ -8225,4211 +1878,7 @@ sta {z1} bcc !+ inc {z1}+1 !: -//FRAGMENT pbuz1=pbuz2_minus_vwuz3 -lda {z2} -sec -sbc {z3} -sta {z1} -lda {z2}+1 -sbc {z3}+1 -sta {z1}+1 -//FRAGMENT pwuz1=qwuz2_derefidx_vbuz3 -ldy {z3} -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT vbuz1_le_0_then_la1 -lda {z1} -cmp #0 -beq {la1} -//FRAGMENT vwuz1_eq_vwuc1_then_la1 -lda {z1} -cmp #<{c1} -bne !+ -lda {z1}+1 -cmp #>{c1} -beq {la1} -!: -//FRAGMENT _deref_pbuc1=_dec__deref_pbuc1 -dec {c1} -//FRAGMENT vwuz1=pwuz2_derefidx_vbuz3 -ldy {z3} -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT _deref_pbuz1_gt_vbuz2_then_la1 -ldy #0 -lda ({z1}),y -cmp {z2} -beq !+ -bcs {la1} -!: -//FRAGMENT pbuz1_derefidx_(_deref_pbuz2)=_inc_pbuz1_derefidx_(_deref_pbuz2) -ldy #0 -lda ({z2}),y -tay -lda ({z1}),y -clc -adc #1 -sta ({z1}),y -//FRAGMENT vwuz1=_deref_pbuz2_rol_1 -ldy #0 -lda ({z2}),y -asl -sta {z1} -lda #0 -rol -sta {z1}+1 -//FRAGMENT qwuz1=qwuz2_plus_vwuz3 -lda {z2} -clc -adc {z3} -sta {z1} -lda {z2}+1 -adc {z3}+1 -sta {z1}+1 -//FRAGMENT _deref_qwuz1=pwuz2 -ldy #0 -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT vwuz1_neq_vbuc1_then_la1 -NO_SYNTHESIS -//FRAGMENT vwuz1_neq_vbsc1_then_la1 -NO_SYNTHESIS -//FRAGMENT pwuz1=_deref_qwuz2 -ldy #0 -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT vwuz1=pbuz2_minus_pbuz3 -lda {z2} -sec -sbc {z3} -sta {z1} -lda {z2}+1 -sbc {z3}+1 -sta {z1}+1 -//FRAGMENT pwuz1_derefidx_vbuz2=vwuz3 -ldy {z2} -lda {z3} -sta ({z1}),y -iny -lda {z3}+1 -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 -ldy {z2} -lda ({z1}),y -clc -adc #1 -sta ({z1}),y -//FRAGMENT vwuz1=pwuz2_minus_pwuz3 -lda {z2} -sec -sbc {z3} -sta {z1} -lda {z2}+1 -sbc {z3}+1 -sta {z1}+1 -//FRAGMENT pwuz1=qwuz2_derefidx_vbuaa -tay -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT pwuz1=qwuz2_derefidx_vbuxx -txa -tay -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT pwuz1=qwuz2_derefidx_vbuyy -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT vbuaa_le_0_then_la1 -cmp #0 -beq {la1} -//FRAGMENT vwuz1=pwuz2_derefidx_vbuaa -tay -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT vwuz1=pwuz2_derefidx_vbuxx -txa -tay -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT vwuz1=pwuz2_derefidx_vbuyy -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT _deref_pbuz1_gt_vbuxx_then_la1 -ldy #0 -lda ({z1}),y -sta $ff -cpx $ff -bcc {la1} -//FRAGMENT pwuz1_derefidx_vbuaa=vwuz2 -tay -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuxx=vwuz2 -txa -tay -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuyy=vwuz2 -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=_inc_pbuz1_derefidx_vbuxx -txa -tay -lda ({z1}),y -clc -adc #1 -sta ({z1}),y -//FRAGMENT vbuxx_le_0_then_la1 -cpx #0 -beq {la1} -//FRAGMENT pbuz1=pbuz2_minus_vwuz1 -lda {z2} -sec -sbc {z1} -sta {z1} -lda {z2}+1 -sbc {z1}+1 -sta {z1}+1 -//FRAGMENT vwuz1=_deref_pbuz1_rol_1 -ldy #0 -lda ({z1}),y -asl -sta {z1} -lda #0 -rol -sta {z1}+1 -//FRAGMENT qwuz1=qwuz2_plus_vwuz1 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pwuz1=_deref_qwuz1 -ldy #0 -lda ({z1}),y -pha -iny -lda ({z1}),y -sta {z1}+1 -pla -sta {z1} -//FRAGMENT vwuz1=pwuz1_minus_pwuz2 -lda {z1} -sec -sbc {z2} -sta {z1} -lda {z1}+1 -sbc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuaa -tay -lda {c1},y -ldy {z2} -sta ({z1}),y -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx -ldy {c1},x -//FRAGMENT pbuz1_le_pbuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bne !+ -lda {z1} -cmp #<{c1} -!: -bcc {la1} -beq {la1} -//FRAGMENT pbuz1_gt_pbuc1_then_la1 -lda #>{c1} -cmp {z1}+1 -bcc {la1} -bne !+ -lda #<{c1} -cmp {z1} -bcc {la1} -!: -//FRAGMENT vbuz1=vbuz1_rol_1 -asl {z1} -//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuc2_then_la1 -ldy {z1} -lda {c1},y -cmp #{c2} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 -ldx {z1} -inc {c1},x -//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuc2_then_la1 -tay -lda {c1},y -cmp #{c2} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuc2_then_la1 -lda {c1},x -cmp #{c2} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuc2_then_la1 -lda {c1},y -cmp #{c2} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx -inc {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=_inc_pbuc1_derefidx_vbuyy -tya -tax -inc {c1},x -//FRAGMENT vduz1=vduc1_plus_vbuz2 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -lda #<{c1}>>$10 -adc #0 -sta {z1}+2 -lda #>{c1}>>$10 -adc #0 -sta {z1}+3 -//FRAGMENT vduz1=vduc1_plus_vbuaa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -lda #<{c1}>>$10 -adc #0 -sta {z1}+2 -lda #>{c1}>>$10 -adc #0 -sta {z1}+3 -//FRAGMENT vduz1=vduc1_plus_vbuxx -txa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -lda #<{c1}>>$10 -adc #0 -sta {z1}+2 -lda #>{c1}>>$10 -adc #0 -sta {z1}+3 -//FRAGMENT vduz1=vduc1_plus_vbuyy -tya -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -lda #<{c1}>>$10 -adc #0 -sta {z1}+2 -lda #>{c1}>>$10 -adc #0 -sta {z1}+3 -//FRAGMENT pbuz1_derefidx_vbuaa=vbuz2 -tay -lda {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=vbuaa -tay -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=vbuxx -tay -txa -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=vbuyy -sta $ff -tya -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=vbuyy -tya -sta ({z1}),y -//FRAGMENT vwuz1_lt_vbuc1_then_la1 -lda {z1}+1 -bne !+ -lda {z1} -cmp #{c1} -bcc {la1} -!: -//FRAGMENT vwuz1=_word_vduz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vduz1=vwuz2_dword_vwuz3 -lda {z2} -sta {z1}+2 -lda {z2}+1 -sta {z1}+3 -lda {z3} -sta {z1} -lda {z3}+1 -sta {z1}+1 -//FRAGMENT _deref_pbuz1_eq_vbuz2_then_la1 -lda {z2} -ldy #0 -cmp ({z1}),y -beq {la1} -//FRAGMENT _deref_pbuz1_neq_0_then_la1 -ldy #0 -lda ({z1}),y -cmp #0 -bne {la1} -//FRAGMENT _deref_pbuz1_eq_vbuxx_then_la1 -txa -ldy #0 -cmp ({z1}),y -beq {la1} -//FRAGMENT _deref_pbuz1_eq_vbuyy_then_la1 -tya -ldy #0 -cmp ({z1}),y -beq {la1} -//FRAGMENT vwuz1=vbuz2 -lda {z2} -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vbuz1=pwuc1_derefidx_vbuz2_band_vbuc2 -lda #{c2} -ldy {z2} -and {c1},y -sta {z1} -//FRAGMENT vwuz1=vbuaa -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=vbuxx -txa -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=vbuyy -tya -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vbuaa=pwuc1_derefidx_vbuz1_band_vbuc2 -lda #{c2} -ldy {z1} -and {c1},y -//FRAGMENT vbuxx=pwuc1_derefidx_vbuz1_band_vbuc2 -lda #{c2} -ldx {z1} -and {c1},x -tax -//FRAGMENT vbuyy=pwuc1_derefidx_vbuz1_band_vbuc2 -lda #{c2} -ldy {z1} -and {c1},y -tay -//FRAGMENT vbuz1=pwuc1_derefidx_vbuaa_band_vbuc2 -tay -lda #{c2} -and {c1},y -sta {z1} -//FRAGMENT vbuaa=pwuc1_derefidx_vbuaa_band_vbuc2 -tay -lda #{c2} -and {c1},y -//FRAGMENT vbuxx=pwuc1_derefidx_vbuaa_band_vbuc2 -tax -lda #{c2} -and {c1},x -tax -//FRAGMENT vbuyy=pwuc1_derefidx_vbuaa_band_vbuc2 -tay -lda #{c2} -and {c1},y -tay -//FRAGMENT vbuz1=pwuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -sta {z1} -//FRAGMENT vbuaa=pwuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -//FRAGMENT vbuxx=pwuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -tax -//FRAGMENT vbuyy=pwuc1_derefidx_vbuxx_band_vbuc2 -lda #{c2} -and {c1},x -tay -//FRAGMENT vbuz1=pwuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -sta {z1} -//FRAGMENT vbuaa=pwuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -//FRAGMENT vbuxx=pwuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -tax -//FRAGMENT vbuyy=pwuc1_derefidx_vbuyy_band_vbuc2 -lda #{c2} -and {c1},y -tay -//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuz2 -ldx {z2} -tay -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuxx -tay -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_vbuyy -ldx {c1},y -tay -txa -sta ({z1}),y -//FRAGMENT vwsz1=vwsz2_plus_pbuz3_derefidx_vbuz4 -ldy {z4} -clc -lda {z2} -adc ({z3}),y -sta {z1} -bcc !+ -inc {z2}+1 -!: -//FRAGMENT vwsz1=vwsz2_minus_vbuc1 -sec -lda {z2} -sbc #{c1} -sta {z1} -lda {z2}+1 -sbc #0 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz2_plus_pbuz3_derefidx_vbuxx -txa -tay -clc -lda {z2} -adc ({z3}),y -sta {z1} -bcc !+ -inc {z2}+1 -!: -//FRAGMENT vwsz1=vwsz2_plus_pbuz3_derefidx_vbuyy -clc -lda {z2} -adc ({z3}),y -sta {z1} -bcc !+ -inc {z2}+1 -!: -//FRAGMENT vwsz1=vwsz2_plus_vwsz1 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_minus_vbuc1 -sec -lda {z1} -sbc #{c1} -sta {z1} -bcs !+ -dec {z1}+1 -!: -//FRAGMENT vwsz1=vwsz1_plus_pbuz2_derefidx_vbuyy -clc -lda {z1} -adc ({z2}),y -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT vbuz1=vbuz1_plus_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuz1=pbuz2_derefidx_vbuc1_plus_pbuz2_derefidx_vbuc1 -ldy #{c1} -lda ({z2}),y -clc -adc ({z2}),y -sta {z1} -//FRAGMENT vbuz1=vbuz2_plus_pbuz3_derefidx_vbuc1 -lda {z2} -ldy #{c1} -clc -adc ({z3}),y -sta {z1} -//FRAGMENT vbuyy=vbuyy_plus_pbuc1_derefidx_vbuz1 -tya -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=vbuz1_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},y -clc -adc {z1} -sta {z1} -//FRAGMENT vbuyy=vbuyy_plus_pbuc1_derefidx_vbuaa -tax -tya -clc -adc {c1},x -tay -//FRAGMENT vbuz1=vbuz1_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {z1} -sta {z1} -//FRAGMENT vbuyy=vbuyy_plus_pbuc1_derefidx_vbuxx -tya -clc -adc {c1},x -tay -//FRAGMENT vbuz1=vbuz1_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {z1} -sta {z1} -//FRAGMENT vbuyy=vbuyy_plus_pbuc1_derefidx_vbuyy -tya -clc -adc {c1},y -tay -//FRAGMENT vbuaa=pbuz1_derefidx_vbuc1_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -clc -adc ({z1}),y -//FRAGMENT vbuxx=pbuz1_derefidx_vbuc1_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -clc -adc ({z1}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuc1_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -clc -adc ({z1}),y -tay -//FRAGMENT vbuaa=vbuz1_plus_pbuz2_derefidx_vbuc1 -lda {z1} -ldy #{c1} -clc -adc ({z2}),y -//FRAGMENT vbuxx=vbuz1_plus_pbuz2_derefidx_vbuc1 -lda {z1} -ldy #{c1} -clc -adc ({z2}),y -tax -//FRAGMENT vbuyy=vbuz1_plus_pbuz2_derefidx_vbuc1 -lda {z1} -ldy #{c1} -clc -adc ({z2}),y -tay -//FRAGMENT vbuz1=vbuaa_plus_pbuz2_derefidx_vbuc1 -ldy #{c1} -clc -adc ({z2}),y -sta {z1} -//FRAGMENT vbuaa=vbuaa_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -clc -adc ({z1}),y -//FRAGMENT vbuxx=vbuaa_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -clc -adc ({z1}),y -tax -//FRAGMENT vbuyy=vbuaa_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -clc -adc ({z1}),y -tay -//FRAGMENT vbuz1=vbuxx_plus_pbuz2_derefidx_vbuc1 -ldy #{c1} -txa -clc -adc ({z2}),y -sta {z1} -//FRAGMENT vbuaa=vbuxx_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -txa -clc -adc ({z1}),y -//FRAGMENT vbuxx=vbuxx_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -txa -clc -adc ({z1}),y -tax -//FRAGMENT vbuyy=vbuxx_plus_pbuz1_derefidx_vbuc1 -ldy #{c1} -txa -clc -adc ({z1}),y -tay -//FRAGMENT vbuz1=vbuyy_plus_pbuz2_derefidx_vbuc1 -tya -ldy #{c1} -clc -adc ({z2}),y -sta {z1} -//FRAGMENT vbuaa=vbuyy_plus_pbuz1_derefidx_vbuc1 -tya -ldy #{c1} -clc -adc ({z1}),y -//FRAGMENT vbuxx=vbuyy_plus_pbuz1_derefidx_vbuc1 -tya -ldy #{c1} -clc -adc ({z1}),y -tax -//FRAGMENT vbuyy=vbuyy_plus_pbuz1_derefidx_vbuc1 -tya -ldy #{c1} -clc -adc ({z1}),y -tay -//FRAGMENT vwuz1=vbuz2_word_vbuz3 -lda {z2} -sta {z1}+1 -lda {z3} -sta {z1} -//FRAGMENT vwuz1=vbuaa_word_vbuz2 -sta {z1}+1 -lda {z2} -sta {z1} -//FRAGMENT vwuz1=vbuxx_word_vbuz2 -txa -sta {z1}+1 -lda {z2} -sta {z1} -//FRAGMENT vwuz1=vbuyy_word_vbuz2 -tya -sta {z1}+1 -lda {z2} -sta {z1} -//FRAGMENT vwuz1=vbuz2_word_vbuaa -tay -lda {z2} -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=vbuaa_word_vbuaa -tay -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=vbuxx_word_vbuaa -tay -txa -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=vbuyy_word_vbuaa -tax -tya -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=vbuz2_word_vbuxx -lda {z2} -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=vbuaa_word_vbuxx -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=vbuyy_word_vbuxx -tya -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=vbuz2_word_vbuyy -lda {z2} -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=vbuaa_word_vbuyy -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=vbuxx_word_vbuyy -txa -sta {z1}+1 -sty {z1} -//FRAGMENT _deref_qbuc1=pbuc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 -//FRAGMENT _deref_pbsc1=vbsc2 -lda #{c2} -sta {c1} -//FRAGMENT vbuz1=_dec_vbuz2 -ldy {z2} -dey -sty {z1} -//FRAGMENT vbuz1=_dec_vbuaa -sec -sbc #1 -sta {z1} -//FRAGMENT vbuz1=_dec_vbuxx -dex -stx {z1} -//FRAGMENT vbuz1=_dec_vbuyy -dey -sty {z1} -//FRAGMENT vbuaa=_dec_vbuz1 -lda {z1} -sec -sbc #1 -//FRAGMENT vbuaa=_dec_vbuxx -txa -sec -sbc #1 -//FRAGMENT vbuaa=_dec_vbuyy -tya -sec -sbc #1 -//FRAGMENT vbuxx=_dec_vbuz1 -ldx {z1} -dex -//FRAGMENT vbuxx=_dec_vbuaa -tax -dex -//FRAGMENT vbuxx=_dec_vbuyy -tya -tax -dex -//FRAGMENT vbuyy=_dec_vbuz1 -ldy {z1} -dey -//FRAGMENT vbuyy=_dec_vbuaa -tay -dey -//FRAGMENT vbuyy=_dec_vbuxx -txa -tay -dey -//FRAGMENT vwuz1=vwuz2_bor_vbuz3 -lda {z3} -ora {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vbuz1=pbuz2_derefidx_vbuaa -tay -lda ({z2}),y -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_vbuaa -tay -lda ({z1}),y -//FRAGMENT vbuxx=pbuz1_derefidx_vbuaa -tay -lda ({z1}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuaa -tay -lda ({z1}),y -tay -//FRAGMENT vwuz1=vwuz2_bor_vbuxx -txa -ora {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_bor_vbuyy -tya -ora {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuaa -tay -lda {c2},y -ldy #{c1} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuyy -lda {c2},y -ldy #{c1} -sta ({z1}),y -//FRAGMENT vbuyy_lt_vbuxx_then_la1 -stx $ff -cpy $ff -bcc {la1} -//FRAGMENT vwuz1=vwuz1_bor_vbuxx -txa -ora {z1} -sta {z1} -//FRAGMENT vbuz1_ge_pbuc1_derefidx_vbuz2_then_la1 -lda {z1} -ldy {z2} -cmp {c1},y -bcs {la1} -//FRAGMENT vbuz1_ge_vbuz1_then_la1 -lda {z1} -cmp {z1} -bcs {la1} -//FRAGMENT vbuz1_le_pbuc1_derefidx_vbuz2_then_la1 -ldy {z2} -lda {c1},y -cmp {z1} -bcs {la1} -//FRAGMENT vbuz1_le_vbuz1_then_la1 -lda {z1} -cmp {z1} -bcs {la1} -//FRAGMENT vbuz1_gt_pbuc1_derefidx_vbuz2_then_la1 -ldy {z2} -lda {c1},y -cmp {z1} -bcc {la1} -//FRAGMENT vbuz1_gt_vbuz1_then_la1 -lda {z1} -cmp {z1} -bcc {la1} -//FRAGMENT vbuz1_lt_pbuc1_derefidx_vbuz2_then_la1 -lda {z1} -ldy {z2} -cmp {c1},y -bcc {la1} -//FRAGMENT vbuz1_lt_vbuz1_then_la1 -lda {z1} -cmp {z1} -bcc {la1} -//FRAGMENT vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1 -lda {z1} -ldy {z2} -cmp {c1},y -bne {la1} -//FRAGMENT vbuz1_neq_vbuz1_then_la1 -lda {z1} -cmp {z1} -bne {la1} -//FRAGMENT vbuz1_ge_pbuc1_derefidx_vbuxx_then_la1 -txa -tay -lda {z1} -cmp {c1},y -bcs {la1} -//FRAGMENT vbuz1_ge_pbuc1_derefidx_vbuyy_then_la1 -lda {z1} -cmp {c1},y -bcs {la1} -//FRAGMENT vbuxx_ge_pbuc1_derefidx_vbuz1_then_la1 -ldy {z1} -txa -cmp {c1},y -bcs {la1} -//FRAGMENT vbuxx_ge_pbuc1_derefidx_vbuxx_then_la1 -txa -tay -cmp {c1},y -bcs {la1} -//FRAGMENT vbuxx_ge_pbuc1_derefidx_vbuyy_then_la1 -txa -cmp {c1},y -bcs {la1} -//FRAGMENT vbuyy_ge_pbuc1_derefidx_vbuz1_then_la1 -tya -ldy {z1} -cmp {c1},y -bcs {la1} -//FRAGMENT vbuyy_ge_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -sta $ff -cpy $ff -bcs {la1} -//FRAGMENT vbuyy_ge_pbuc1_derefidx_vbuyy_then_la1 -tya -cmp {c1},y -bcs {la1} -//FRAGMENT vbuxx_ge_vbuxx_then_la1 -txa -stx $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuyy_ge_vbuyy_then_la1 -tya -sta $ff -cpy $ff -bcs {la1} -//FRAGMENT vbuz1_le_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -cmp {z1} -bcs {la1} -//FRAGMENT vbuz1_le_pbuc1_derefidx_vbuyy_then_la1 -lda {c1},y -cmp {z1} -bcs {la1} -//FRAGMENT vbuxx_le_pbuc1_derefidx_vbuz1_then_la1 -ldy {z1} -txa -cmp {c1},y -bcc {la1} -beq {la1} -//FRAGMENT vbuxx_le_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -stx $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuxx_le_pbuc1_derefidx_vbuyy_then_la1 -txa -cmp {c1},y -bcc {la1} -beq {la1} -//FRAGMENT vbuyy_le_pbuc1_derefidx_vbuz1_then_la1 -tya -ldy {z1} -cmp {c1},y -bcc {la1} -beq {la1} -//FRAGMENT vbuyy_le_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -sty $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuyy_le_pbuc1_derefidx_vbuyy_then_la1 -tya -cmp {c1},y -bcc {la1} -beq {la1} -//FRAGMENT vbuxx_le_vbuxx_then_la1 -txa -stx $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuyy_le_vbuyy_then_la1 -tya -sta $ff -cpy $ff -bcs {la1} -//FRAGMENT vbuz1_gt_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -cmp {z1} -bcc {la1} -//FRAGMENT vbuz1_gt_pbuc1_derefidx_vbuyy_then_la1 -lda {c1},y -cmp {z1} -bcc {la1} -//FRAGMENT vbuxx_gt_pbuc1_derefidx_vbuz1_then_la1 -ldy {z1} -txa -cmp {c1},y -beq !+ -bcs {la1} -!: -//FRAGMENT vbuxx_gt_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -stx $ff -cmp $ff -bcc {la1} -//FRAGMENT vbuxx_gt_pbuc1_derefidx_vbuyy_then_la1 -txa -cmp {c1},y -beq !+ -bcs {la1} -!: -//FRAGMENT vbuyy_gt_pbuc1_derefidx_vbuz1_then_la1 -tya -ldy {z1} -cmp {c1},y -beq !+ -bcs {la1} -!: -//FRAGMENT vbuyy_gt_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -tax -sty $ff -cpx $ff -bcc {la1} -//FRAGMENT vbuyy_gt_pbuc1_derefidx_vbuyy_then_la1 -tya -cmp {c1},y -beq !+ -bcs {la1} -!: -//FRAGMENT vbuxx_gt_vbuxx_then_la1 -txa -sta $ff -cpx $ff -bcc {la1} -//FRAGMENT vbuyy_gt_vbuyy_then_la1 -tya -sta $ff -cpy $ff -bcc {la1} -//FRAGMENT vbuz1_lt_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -cmp {z1} -beq !+ -bcs {la1} -!: -//FRAGMENT vbuz1_lt_pbuc1_derefidx_vbuyy_then_la1 -lda {z1} -cmp {c1},y -bcc {la1} -//FRAGMENT vbuxx_lt_pbuc1_derefidx_vbuz1_then_la1 -ldy {z1} -txa -cmp {c1},y -bcc {la1} -//FRAGMENT vbuxx_lt_pbuc1_derefidx_vbuxx_then_la1 -txa -tay -cmp {c1},y -bcc {la1} -//FRAGMENT vbuxx_lt_pbuc1_derefidx_vbuyy_then_la1 -txa -cmp {c1},y -bcc {la1} -//FRAGMENT vbuyy_lt_pbuc1_derefidx_vbuz1_then_la1 -tya -ldy {z1} -cmp {c1},y -bcc {la1} -//FRAGMENT vbuyy_lt_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -sta $ff -cpy $ff -bcc {la1} -//FRAGMENT vbuyy_lt_pbuc1_derefidx_vbuyy_then_la1 -tya -cmp {c1},y -bcc {la1} -//FRAGMENT vbuxx_lt_vbuxx_then_la1 -txa -sta $ff -cpx $ff -bcc {la1} -//FRAGMENT vbuyy_lt_vbuyy_then_la1 -tya -sta $ff -cpy $ff -bcc {la1} -//FRAGMENT vbuz1_neq_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -cmp {z1} -bne {la1} -//FRAGMENT vbuz1_neq_pbuc1_derefidx_vbuyy_then_la1 -lda {c1},y -cmp {z1} -bne {la1} -//FRAGMENT vbuxx_neq_pbuc1_derefidx_vbuz1_then_la1 -ldy {z1} -txa -cmp {c1},y -bne {la1} -//FRAGMENT vbuxx_neq_pbuc1_derefidx_vbuxx_then_la1 -txa -tay -cmp {c1},y -bne {la1} -//FRAGMENT vbuxx_neq_pbuc1_derefidx_vbuyy_then_la1 -txa -cmp {c1},y -bne {la1} -//FRAGMENT vbuyy_neq_pbuc1_derefidx_vbuz1_then_la1 -tya -ldy {z1} -cmp {c1},y -bne {la1} -//FRAGMENT vbuyy_neq_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -tax -stx $ff -cpy $ff -bne {la1} -//FRAGMENT vbuyy_neq_pbuc1_derefidx_vbuyy_then_la1 -tya -cmp {c1},y -bne {la1} -//FRAGMENT vbuxx_neq_vbuxx_then_la1 -txa -tay -stx $ff -cpy $ff -bne {la1} -//FRAGMENT vbuyy_neq_vbuyy_then_la1 -tya -tax -stx $ff -cpy $ff -bne {la1} -//FRAGMENT pwuz1_derefidx_vbuc1=vwuz2 -ldy #{c1} -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT vbuz1=vbuz2_plus_2 -lda {z2} -clc -adc #2 -sta {z1} -//FRAGMENT vbuz1=vbuaa_plus_2 -clc -adc #2 -sta {z1} -//FRAGMENT vbuz1=vbuxx_plus_2 -inx -inx -stx {z1} -//FRAGMENT vbuxx=vbuz1_plus_2 -ldx {z1} -inx -inx -//FRAGMENT vbuyy=vbuz1_plus_2 -ldy {z1} -iny -iny -//FRAGMENT vbuxx=vbuaa_plus_2 -tax -inx -inx -//FRAGMENT vbuxx=vbuyy_plus_2 -tya -clc -adc #2 -tax -//FRAGMENT vbsz1_lt_vbsc1_then_la1 -lda {z1} -sec -sbc #{c1} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vbsaa_lt_vbsc1_then_la1 -sec -sbc #{c1} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vbsxx_lt_vbsc1_then_la1 -txa -sec -sbc #{c1} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vbsyy_lt_vbsc1_then_la1 -tya -sec -sbc #{c1} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vbsxx=_inc_vbsxx -inx -//FRAGMENT vbsyy=_inc_vbsyy -iny -//FRAGMENT vwsz1=vwsz2_ror_7 -lda {z2}+1 -sta {z1} -and #$80 -beq !+ -lda #$ff -!: -sta {z1}+1 -lda {z2} -rol -rol {z1} -rol {z1}+1 -//FRAGMENT vwsz1=vwsz2_ror_5 -lda {z2} -sta $ff -lda {z2}+1 -sta {z1} -lda #0 -bit {z2}+1 -bpl !+ -lda #$ff -!: -sta {z1}+1 -rol $ff -rol {z1} -rol {z1}+1 -rol $ff -rol {z1} -rol {z1}+1 -rol $ff -rol {z1} -rol {z1}+1 -//FRAGMENT _deref_pbuc1=_byte_vwsz1 -lda {z1} -sta {c1} -//FRAGMENT vwsz1=vwsc1_minus_vwsz1 -lda #<{c1} -sec -sbc {z1} -sta {z1} -lda #>{c1} -sbc {z1}+1 -sta {z1}+1 -//FRAGMENT _deref_pbsc1=vbsz1 -lda {z1} -sta {c1} -//FRAGMENT pwuc1_derefidx_vbuaa=_word_vbuz1 -tay -lda {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuaa=_word_vbuxx -tay -txa -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuaa=_word_vbuyy -tax -tya -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT vbuxx_neq_vbuaa_then_la1 -tay -stx $ff -cpy $ff -bne {la1} -//FRAGMENT _deref_pbuc1=_deref_pbuz1 -ldy #0 -lda ({z1}),y -sta {c1} -//FRAGMENT vwuz1=pbuc1_minus_pbuz2 -sec -lda #<{c1} -sbc {z2} -sta {z1} -lda #>{c1} -sbc {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=pbuc1_minus_pbuz1 -sec -lda #<{c1} -sbc {z1} -sta {z1} -lda #>{c1} -sbc {z1}+1 -sta {z1}+1 -//FRAGMENT pbuc1_derefidx_vbuaa=_deref_pbuz1 -tax -ldy #0 -lda ({z1}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=_deref_pbuz1 -ldy #0 -lda ({z1}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=_deref_pbuz1 -tya -tax -ldy #0 -lda ({z1}),y -sta {c1},x -//FRAGMENT pbsc1_derefidx_vbuz1=_deref_pbsc2 -lda {c2} -ldy {z1} -sta {c1},y -//FRAGMENT vbuz1=vbuc1_plus__deref_pbuc2 -lda #{c1} -clc -adc {c2} -sta {z1} -//FRAGMENT vbsz1=vbsz1_plus_2 -inc {z1} -inc {z1} -//FRAGMENT vbsz1=vbsz1_minus_vbsc1 -lax {z1} -axs #{c1} -stx {z1} -//FRAGMENT vbsz1=vbsz2_plus_vbsz3 -lda {z2} -clc -adc {z3} -sta {z1} -//FRAGMENT vbsz1=vbsz2_minus_vbsz3 -lda {z2} -sec -sbc {z3} -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_plus_pbsc1_derefidx_vbsz3 -ldy {z2} -lda {c1},y -ldy {z3} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_minus_pbsc1_derefidx_vbsz3 -ldy {z2} -lda {c1},y -ldy {z3} -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_plus_pbsc1_derefidx_vbsz2 -ldy {z2} -clc -lda {c1},y -adc {c1},y -sta {z1} -//FRAGMENT vbsz1=vbsz2_plus_pbsc1_derefidx_vbsz3 -lda {z2} -ldy {z3} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsz1=vbsz2_minus_pbsc1_derefidx_vbsz3 -lda {z2} -ldy {z3} -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=_deref_pbsc1 -lda {c1} -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbuaa -tay -lda {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbuaa -tay -ldx {c1},y -//FRAGMENT vbsyy=pbsc1_derefidx_vbuaa -tax -ldy {c1},x -//FRAGMENT pbsc1_derefidx_vbuaa=_deref_pbsc2 -tay -lda {c2} -sta {c1},y -//FRAGMENT pbsc1_derefidx_vbuxx=_deref_pbsc2 -lda {c2} -sta {c1},x -//FRAGMENT pbsc1_derefidx_vbuyy=_deref_pbsc2 -lda {c2} -sta {c1},y -//FRAGMENT vbuaa=vbuc1_plus__deref_pbuc2 -lda #{c1} -clc -adc {c2} -//FRAGMENT vbuxx=vbuc1_plus__deref_pbuc2 -lda {c2} -tax -axs #-[{c1}] -//FRAGMENT vbuyy=vbuc1_plus__deref_pbuc2 -lda #{c1} -clc -adc {c2} -tay -//FRAGMENT vbsxx=vbsxx_minus_vbsc1 -txa -axs #{c1} -//FRAGMENT vbsyy=vbsyy_minus_vbsc1 -tya -sec -sbc #{c1} -tay -//FRAGMENT vbsz1=vbsz2_plus_vbsaa -clc -adc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsz2_plus_vbsxx -txa -clc -adc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsz2_plus_vbsyy -tya -clc -adc {z2} -sta {z1} -//FRAGMENT vbsaa=vbsz1_plus_vbsz2 -lda {z1} -clc -adc {z2} -//FRAGMENT vbsaa=vbsz1_plus_vbsaa -clc -adc {z1} -//FRAGMENT vbsaa=vbsz1_plus_vbsxx -txa -clc -adc {z1} -//FRAGMENT vbsaa=vbsz1_plus_vbsyy -tya -clc -adc {z1} -//FRAGMENT vbsxx=vbsz1_plus_vbsz2 -lda {z1} -clc -adc {z2} -tax -//FRAGMENT vbsxx=vbsz1_plus_vbsaa -clc -adc {z1} -tax -//FRAGMENT vbsxx=vbsz1_plus_vbsxx -txa -clc -adc {z1} -tax -//FRAGMENT vbsxx=vbsz1_plus_vbsyy -tya -clc -adc {z1} -tax -//FRAGMENT vbsyy=vbsz1_plus_vbsz2 -lda {z1} -clc -adc {z2} -tay -//FRAGMENT vbsyy=vbsz1_plus_vbsaa -clc -adc {z1} -tay -//FRAGMENT vbsyy=vbsz1_plus_vbsxx -txa -clc -adc {z1} -tay -//FRAGMENT vbsyy=vbsz1_plus_vbsyy -tya -clc -adc {z1} -tay -//FRAGMENT vbsz1=vbsaa_plus_vbsz2 -clc -adc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsaa_plus_vbsaa -asl -sta {z1} -//FRAGMENT vbsz1=vbsaa_plus_vbsxx -stx $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbsz1=vbsaa_plus_vbsyy -sty $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbsaa=vbsaa_plus_vbsz1 -clc -adc {z1} -//FRAGMENT vbsaa=vbsaa_plus_vbsaa -asl -//FRAGMENT vbsaa=vbsaa_plus_vbsxx -stx $ff -clc -adc $ff -//FRAGMENT vbsaa=vbsaa_plus_vbsyy -sty $ff -clc -adc $ff -//FRAGMENT vbsxx=vbsaa_plus_vbsz1 -clc -adc {z1} -tax -//FRAGMENT vbsxx=vbsaa_plus_vbsaa -asl -tax -//FRAGMENT vbsxx=vbsaa_plus_vbsxx -stx $ff -clc -adc $ff -tax -//FRAGMENT vbsxx=vbsaa_plus_vbsyy -sty $ff -clc -adc $ff -tax -//FRAGMENT vbsyy=vbsaa_plus_vbsz1 -clc -adc {z1} -tay -//FRAGMENT vbsyy=vbsaa_plus_vbsaa -asl -tay -//FRAGMENT vbsyy=vbsaa_plus_vbsxx -stx $ff -clc -adc $ff -tay -//FRAGMENT vbsyy=vbsaa_plus_vbsyy -sty $ff -clc -adc $ff -tay -//FRAGMENT vbsz1=vbsxx_plus_vbsz2 -txa -clc -adc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsxx_plus_vbsaa -stx $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbsz1=vbsxx_plus_vbsxx -txa -asl -sta {z1} -//FRAGMENT vbsz1=vbsxx_plus_vbsyy -txa -sty $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbsaa=vbsxx_plus_vbsz1 -txa -clc -adc {z1} -//FRAGMENT vbsaa=vbsxx_plus_vbsaa -stx $ff -clc -adc $ff -//FRAGMENT vbsaa=vbsxx_plus_vbsxx -txa -asl -//FRAGMENT vbsaa=vbsxx_plus_vbsyy -txa -sty $ff -clc -adc $ff -//FRAGMENT vbsxx=vbsxx_plus_vbsz1 -txa -clc -adc {z1} -tax -//FRAGMENT vbsxx=vbsxx_plus_vbsaa -stx $ff -clc -adc $ff -tax -//FRAGMENT vbsxx=vbsxx_plus_vbsxx -txa -asl -tax -//FRAGMENT vbsxx=vbsxx_plus_vbsyy -txa -sty $ff -clc -adc $ff -tax -//FRAGMENT vbsyy=vbsxx_plus_vbsz1 -txa -clc -adc {z1} -tay -//FRAGMENT vbsyy=vbsxx_plus_vbsaa -stx $ff -clc -adc $ff -tay -//FRAGMENT vbsyy=vbsxx_plus_vbsxx -txa -asl -tay -//FRAGMENT vbsyy=vbsxx_plus_vbsyy -txa -sty $ff -clc -adc $ff -tay -//FRAGMENT vbsz1=vbsyy_plus_vbsz2 -tya -clc -adc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsyy_plus_vbsaa -sty $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbsz1=vbsyy_plus_vbsxx -txa -sty $ff -clc -adc $ff -sta {z1} -//FRAGMENT vbsz1=vbsyy_plus_vbsyy -tya -asl -sta {z1} -//FRAGMENT vbsaa=vbsyy_plus_vbsz1 -tya -clc -adc {z1} -//FRAGMENT vbsaa=vbsyy_plus_vbsaa -sty $ff -clc -adc $ff -//FRAGMENT vbsaa=vbsyy_plus_vbsxx -txa -sty $ff -clc -adc $ff -//FRAGMENT vbsaa=vbsyy_plus_vbsyy -tya -asl -//FRAGMENT vbsxx=vbsyy_plus_vbsz1 -tya -clc -adc {z1} -tax -//FRAGMENT vbsxx=vbsyy_plus_vbsaa -sty $ff -clc -adc $ff -tax -//FRAGMENT vbsxx=vbsyy_plus_vbsxx -txa -sty $ff -clc -adc $ff -tax -//FRAGMENT vbsxx=vbsyy_plus_vbsyy -tya -asl -tax -//FRAGMENT vbsyy=vbsyy_plus_vbsz1 -tya -clc -adc {z1} -tay -//FRAGMENT vbsyy=vbsyy_plus_vbsaa -sty $ff -clc -adc $ff -tay -//FRAGMENT vbsyy=vbsyy_plus_vbsxx -txa -sty $ff -clc -adc $ff -tay -//FRAGMENT vbsyy=vbsyy_plus_vbsyy -tya -asl -tay -//FRAGMENT vbsz1=vbsz2_minus_vbsxx -txa -eor #$ff -sec -adc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsz2_minus_vbsyy -tya -eor #$ff -sec -adc {z2} -sta {z1} -//FRAGMENT vbsaa=vbsz1_minus_vbsz2 -lda {z1} -sec -sbc {z2} -//FRAGMENT vbsaa=vbsz1_minus_vbsxx -txa -eor #$ff -sec -adc {z1} -//FRAGMENT vbsaa=vbsz1_minus_vbsyy -tya -eor #$ff -sec -adc {z1} -//FRAGMENT vbsxx=vbsz1_minus_vbsz2 -lda {z1} -sec -sbc {z2} -tax -//FRAGMENT vbsxx=vbsz1_minus_vbsxx -txa -eor #$ff -sec -adc {z1} -tax -//FRAGMENT vbsxx=vbsz1_minus_vbsyy -tya -eor #$ff -sec -adc {z1} -tax -//FRAGMENT vbsyy=vbsz1_minus_vbsz2 -lda {z1} -sec -sbc {z2} -tay -//FRAGMENT vbsyy=vbsz1_minus_vbsxx -txa -eor #$ff -sec -adc {z1} -tay -//FRAGMENT vbsyy=vbsz1_minus_vbsyy -tya -eor #$ff -sec -adc {z1} -tay -//FRAGMENT vbsz1=vbsxx_minus_vbsz2 -txa -sec -sbc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsxx_minus_vbsxx -lda #0 -sta {z1} -//FRAGMENT vbsz1=vbsxx_minus_vbsyy -txa -sty $ff -sec -sbc $ff -sta {z1} -//FRAGMENT vbsaa=vbsxx_minus_vbsz1 -txa -sec -sbc {z1} -//FRAGMENT vbsaa=vbsxx_minus_vbsxx -lda #0 -//FRAGMENT vbsaa=vbsxx_minus_vbsyy -txa -sty $ff -sec -sbc $ff -//FRAGMENT vbsxx=vbsxx_minus_vbsz1 -txa -sec -sbc {z1} -tax -//FRAGMENT vbsxx=vbsxx_minus_vbsxx -lda #0 -tax -//FRAGMENT vbsxx=vbsxx_minus_vbsyy -txa -sty $ff -sec -sbc $ff -tax -//FRAGMENT vbsyy=vbsxx_minus_vbsz1 -txa -sec -sbc {z1} -tay -//FRAGMENT vbsyy=vbsxx_minus_vbsxx -lda #0 -tay -//FRAGMENT vbsyy=vbsxx_minus_vbsyy -txa -sty $ff -sec -sbc $ff -tay -//FRAGMENT vbsz1=vbsyy_minus_vbsz2 -tya -sec -sbc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsyy_minus_vbsxx -tya -stx $ff -sec -sbc $ff -sta {z1} -//FRAGMENT vbsz1=vbsyy_minus_vbsyy -lda #0 -sta {z1} -//FRAGMENT vbsaa=vbsyy_minus_vbsz1 -tya -sec -sbc {z1} -//FRAGMENT vbsaa=vbsyy_minus_vbsxx -tya -stx $ff -sec -sbc $ff -//FRAGMENT vbsaa=vbsyy_minus_vbsyy -lda #0 -//FRAGMENT vbsxx=vbsyy_minus_vbsz1 -tya -sec -sbc {z1} -tax -//FRAGMENT vbsxx=vbsyy_minus_vbsxx -tya -stx $ff -sec -sbc $ff -tax -//FRAGMENT vbsxx=vbsyy_minus_vbsyy -lda #0 -tax -//FRAGMENT vbsyy=vbsyy_minus_vbsz1 -tya -sec -sbc {z1} -tay -//FRAGMENT vbsyy=vbsyy_minus_vbsxx -tya -stx $ff -sec -sbc $ff -tay -//FRAGMENT vbsyy=vbsyy_minus_vbsyy -lda #0 -tay -//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz2 -ldy {z1} -lda {c1},y -ldy {z2} -clc -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz2 -ldx {z1} -lda {c1},x -ldx {z2} -clc -adc {c1},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz2 -ldy {z1} -lda {c1},y -ldy {z2} -clc -adc {c1},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsz2 -lda {c1},x -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsz1 -lda {c1},x -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsz1 -lda {c1},x -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsz1 -lda {c1},x -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsz2 -lda {c1},y -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsz1 -lda {c1},y -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsz1 -lda {c1},y -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsz1 -lda {c1},y -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_plus_pbsc1_derefidx_vbsxx -lda {c1},x -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsxx -lda {c1},x -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsxx -lda {c1},x -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsxx -lda {c1},x -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsxx -clc -lda {c1},x -adc {c1},x -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsxx -clc -lda {c1},x -adc {c1},x -//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsxx -clc -lda {c1},x -adc {c1},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsxx -clc -lda {c1},x -adc {c1},x -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsxx -clc -lda {c1},x -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsxx -clc -lda {c1},x -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsxx -clc -lda {c1},x -adc {c1},y -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsxx -clc -lda {c1},x -adc {c1},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_plus_pbsc1_derefidx_vbsyy -lda {c1},y -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsyy -lda {c1},y -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsyy -lda {c1},y -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsyy -lda {c1},y -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsyy -clc -lda {c1},x -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsyy -clc -lda {c1},x -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsyy -clc -lda {c1},x -adc {c1},y -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_plus_pbsc1_derefidx_vbsyy -clc -lda {c1},x -adc {c1},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsyy -clc -lda {c1},y -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsyy -clc -lda {c1},y -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsyy -clc -lda {c1},y -adc {c1},y -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_plus_pbsc1_derefidx_vbsyy -clc -lda {c1},y -adc {c1},y -tay -//FRAGMENT _deref_pbsc1=vbsaa -sta {c1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsz2 -lda {c1},x -ldy {z2} -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsz2 -lda {c1},y -ldy {z2} -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_minus_pbsc1_derefidx_vbsxx -ldy {z2} -lda {c1},y -sec -sbc {c1},x -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsxx -lda {c1},x -sec -sbc {c1},x -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsxx -lda {c1},y -sec -sbc {c1},x -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsz2_minus_pbsc1_derefidx_vbsyy -ldx {z2} -lda {c1},x -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsyy -lda {c1},x -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsyy -lda {c1},y -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsz2 -ldy {z1} -lda {c1},y -ldy {z2} -sec -sbc {c1},y -//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsz1 -lda {c1},x -ldy {z1} -sec -sbc {c1},y -//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsz1 -lda {c1},y -ldy {z1} -sec -sbc {c1},y -//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsxx -ldy {z1} -lda {c1},y -sec -sbc {c1},x -//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsxx -lda {c1},x -sec -sbc {c1},x -//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsxx -lda {c1},y -sec -sbc {c1},x -//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsyy -ldx {z1} -lda {c1},x -sec -sbc {c1},y -//FRAGMENT vbsaa=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsyy -lda {c1},x -sec -sbc {c1},y -//FRAGMENT vbsaa=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsyy -lda {c1},y -sec -sbc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsz2 -ldx {z1} -lda {c1},x -ldx {z2} -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsz1 -lda {c1},x -ldx {z1} -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsz1 -lda {c1},y -ldx {z1} -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsxx -ldy {z1} -lda {c1},y -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsxx -lda {c1},x -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsxx -lda {c1},y -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsyy -ldx {z1} -lda {c1},x -sec -sbc {c1},y -tax -//FRAGMENT vbsxx=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsyy -lda {c1},x -sec -sbc {c1},y -tax -//FRAGMENT vbsxx=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsyy -lda {c1},y -sec -sbc {c1},y -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsz2 -ldy {z1} -lda {c1},y -ldy {z2} -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsz1 -lda {c1},x -ldy {z1} -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsz1 -lda {c1},y -ldy {z1} -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsxx -ldy {z1} -lda {c1},y -sec -sbc {c1},x -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsxx -lda {c1},x -sec -sbc {c1},x -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsxx -lda {c1},y -sec -sbc {c1},x -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_minus_pbsc1_derefidx_vbsyy -ldx {z1} -lda {c1},x -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbsxx_minus_pbsc1_derefidx_vbsyy -lda {c1},x -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=pbsc1_derefidx_vbsyy_minus_pbsc1_derefidx_vbsyy -lda {c1},y -sec -sbc {c1},y -tay -//FRAGMENT vbsaa=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz1 -ldy {z1} -clc -lda {c1},y -adc {c1},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz1 -ldx {z1} -clc -lda {c1},x -adc {c1},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbsz1_plus_pbsc1_derefidx_vbsz1 -ldy {z1} -clc -lda {c1},y -adc {c1},y -tay -//FRAGMENT vbsaa=vbsz1_plus_pbsc1_derefidx_vbsz2 -lda {z1} -ldy {z2} -clc -adc {c1},y -//FRAGMENT vbsxx=vbsz1_plus_pbsc1_derefidx_vbsz2 -lda {z1} -ldx {z2} -clc -adc {c1},x -tax -//FRAGMENT vbsyy=vbsz1_plus_pbsc1_derefidx_vbsz2 -lda {z1} -ldy {z2} -clc -adc {c1},y -tay -//FRAGMENT vbsz1=vbsaa_plus_pbsc1_derefidx_vbsz2 -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=vbsaa_plus_pbsc1_derefidx_vbsz1 -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbsxx=vbsaa_plus_pbsc1_derefidx_vbsz1 -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbsyy=vbsaa_plus_pbsc1_derefidx_vbsz1 -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbsz1=vbsxx_plus_pbsc1_derefidx_vbsz2 -ldy {z2} -txa -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=vbsxx_plus_pbsc1_derefidx_vbsz1 -ldy {z1} -txa -clc -adc {c1},y -//FRAGMENT vbsxx=vbsxx_plus_pbsc1_derefidx_vbsz1 -txa -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbsyy=vbsxx_plus_pbsc1_derefidx_vbsz1 -ldy {z1} -txa -clc -adc {c1},y -tay -//FRAGMENT vbsz1=vbsyy_plus_pbsc1_derefidx_vbsz2 -tya -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=vbsyy_plus_pbsc1_derefidx_vbsz1 -tya -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbsxx=vbsyy_plus_pbsc1_derefidx_vbsz1 -ldx {z1} -tya -clc -adc {c1},x -tax -//FRAGMENT vbsyy=vbsyy_plus_pbsc1_derefidx_vbsz1 -tya -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbsz1=vbsz2_plus_pbsc1_derefidx_vbsxx -lda {c1},x -clc -adc {z2} -sta {z1} -//FRAGMENT vbsaa=vbsz1_plus_pbsc1_derefidx_vbsxx -lda {c1},x -clc -adc {z1} -//FRAGMENT vbsxx=vbsz1_plus_pbsc1_derefidx_vbsxx -lda {c1},x -clc -adc {z1} -tax -//FRAGMENT vbsyy=vbsz1_plus_pbsc1_derefidx_vbsxx -lda {c1},x -clc -adc {z1} -tay -//FRAGMENT vbsz1=vbsaa_plus_pbsc1_derefidx_vbsxx -clc -adc {c1},x -sta {z1} -//FRAGMENT vbsaa=vbsaa_plus_pbsc1_derefidx_vbsxx -clc -adc {c1},x -//FRAGMENT vbsxx=vbsaa_plus_pbsc1_derefidx_vbsxx -clc -adc {c1},x -tax -//FRAGMENT vbsyy=vbsaa_plus_pbsc1_derefidx_vbsxx -clc -adc {c1},x -tay -//FRAGMENT vbsz1=vbsxx_plus_pbsc1_derefidx_vbsxx -txa -clc -adc {c1},x -sta {z1} -//FRAGMENT vbsaa=vbsxx_plus_pbsc1_derefidx_vbsxx -txa -clc -adc {c1},x -//FRAGMENT vbsxx=vbsxx_plus_pbsc1_derefidx_vbsxx -txa -clc -adc {c1},x -tax -//FRAGMENT vbsyy=vbsxx_plus_pbsc1_derefidx_vbsxx -txa -clc -adc {c1},x -tay -//FRAGMENT vbsz1=vbsyy_plus_pbsc1_derefidx_vbsxx -tya -clc -adc {c1},x -sta {z1} -//FRAGMENT vbsaa=vbsyy_plus_pbsc1_derefidx_vbsxx -tya -clc -adc {c1},x -//FRAGMENT vbsxx=vbsyy_plus_pbsc1_derefidx_vbsxx -tya -clc -adc {c1},x -tax -//FRAGMENT vbsyy=vbsyy_plus_pbsc1_derefidx_vbsxx -tya -clc -adc {c1},x -tay -//FRAGMENT vbsz1=vbsz2_plus_pbsc1_derefidx_vbsyy -lda {c1},y -clc -adc {z2} -sta {z1} -//FRAGMENT vbsaa=vbsz1_plus_pbsc1_derefidx_vbsyy -lda {c1},y -clc -adc {z1} -//FRAGMENT vbsxx=vbsz1_plus_pbsc1_derefidx_vbsyy -lda {c1},y -clc -adc {z1} -tax -//FRAGMENT vbsyy=vbsz1_plus_pbsc1_derefidx_vbsyy -lda {c1},y -clc -adc {z1} -tay -//FRAGMENT vbsz1=vbsaa_plus_pbsc1_derefidx_vbsyy -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=vbsaa_plus_pbsc1_derefidx_vbsyy -clc -adc {c1},y -//FRAGMENT vbsxx=vbsaa_plus_pbsc1_derefidx_vbsyy -clc -adc {c1},y -tax -//FRAGMENT vbsyy=vbsaa_plus_pbsc1_derefidx_vbsyy -clc -adc {c1},y -tay -//FRAGMENT vbsz1=vbsxx_plus_pbsc1_derefidx_vbsyy -txa -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=vbsxx_plus_pbsc1_derefidx_vbsyy -txa -clc -adc {c1},y -//FRAGMENT vbsxx=vbsxx_plus_pbsc1_derefidx_vbsyy -txa -clc -adc {c1},y -tax -//FRAGMENT vbsyy=vbsxx_plus_pbsc1_derefidx_vbsyy -txa -clc -adc {c1},y -tay -//FRAGMENT vbsz1=vbsyy_plus_pbsc1_derefidx_vbsyy -tya -clc -adc {c1},y -sta {z1} -//FRAGMENT vbsaa=vbsyy_plus_pbsc1_derefidx_vbsyy -tya -clc -adc {c1},y -//FRAGMENT vbsxx=vbsyy_plus_pbsc1_derefidx_vbsyy -tya -clc -adc {c1},y -tax -//FRAGMENT vbsyy=vbsyy_plus_pbsc1_derefidx_vbsyy -tya -clc -adc {c1},y -tay -//FRAGMENT vbsz1=vbsaa_minus_pbsc1_derefidx_vbsz2 -ldy {z2} -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=vbsxx_minus_pbsc1_derefidx_vbsz2 -ldy {z2} -txa -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=vbsyy_minus_pbsc1_derefidx_vbsz2 -tya -ldy {z2} -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsaa=vbsz1_minus_pbsc1_derefidx_vbsz2 -lda {z1} -ldy {z2} -sec -sbc {c1},y -//FRAGMENT vbsaa=vbsaa_minus_pbsc1_derefidx_vbsz1 -ldy {z1} -sec -sbc {c1},y -//FRAGMENT vbsaa=vbsxx_minus_pbsc1_derefidx_vbsz1 -ldy {z1} -txa -sec -sbc {c1},y -//FRAGMENT vbsaa=vbsyy_minus_pbsc1_derefidx_vbsz1 -tya -ldy {z1} -sec -sbc {c1},y -//FRAGMENT vbsxx=vbsz1_minus_pbsc1_derefidx_vbsz2 -lda {z1} -ldx {z2} -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=vbsaa_minus_pbsc1_derefidx_vbsz1 -ldx {z1} -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=vbsxx_minus_pbsc1_derefidx_vbsz1 -txa -ldx {z1} -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=vbsyy_minus_pbsc1_derefidx_vbsz1 -ldx {z1} -tya -sec -sbc {c1},x -tax -//FRAGMENT vbsyy=vbsz1_minus_pbsc1_derefidx_vbsz2 -lda {z1} -ldy {z2} -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=vbsaa_minus_pbsc1_derefidx_vbsz1 -ldy {z1} -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=vbsxx_minus_pbsc1_derefidx_vbsz1 -ldy {z1} -txa -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=vbsyy_minus_pbsc1_derefidx_vbsz1 -tya -ldy {z1} -sec -sbc {c1},y -tay -//FRAGMENT vbsz1=vbsz2_minus_pbsc1_derefidx_vbsxx -lda {z2} -sec -sbc {c1},x -sta {z1} -//FRAGMENT vbsz1=vbsaa_minus_pbsc1_derefidx_vbsxx -sec -sbc {c1},x -sta {z1} -//FRAGMENT vbsz1=vbsxx_minus_pbsc1_derefidx_vbsxx -txa -tay -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=vbsyy_minus_pbsc1_derefidx_vbsxx -tya -sec -sbc {c1},x -sta {z1} -//FRAGMENT vbsaa=vbsz1_minus_pbsc1_derefidx_vbsxx -lda {z1} -sec -sbc {c1},x -//FRAGMENT vbsaa=vbsaa_minus_pbsc1_derefidx_vbsxx -sec -sbc {c1},x -//FRAGMENT vbsaa=vbsxx_minus_pbsc1_derefidx_vbsxx -txa -tay -sec -sbc {c1},y -//FRAGMENT vbsaa=vbsyy_minus_pbsc1_derefidx_vbsxx -tya -sec -sbc {c1},x -//FRAGMENT vbsxx=vbsz1_minus_pbsc1_derefidx_vbsxx -lda {z1} -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=vbsaa_minus_pbsc1_derefidx_vbsxx -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=vbsxx_minus_pbsc1_derefidx_vbsxx -txa -tax -sec -sbc {c1},x -tax -//FRAGMENT vbsxx=vbsyy_minus_pbsc1_derefidx_vbsxx -tya -sec -sbc {c1},x -tax -//FRAGMENT vbsyy=vbsz1_minus_pbsc1_derefidx_vbsxx -lda {z1} -sec -sbc {c1},x -tay -//FRAGMENT vbsyy=vbsaa_minus_pbsc1_derefidx_vbsxx -sec -sbc {c1},x -tay -//FRAGMENT vbsyy=vbsxx_minus_pbsc1_derefidx_vbsxx -txa -tay -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=vbsyy_minus_pbsc1_derefidx_vbsxx -tya -sec -sbc {c1},x -tay -//FRAGMENT vbsz1=vbsz2_minus_pbsc1_derefidx_vbsyy -lda {z2} -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=vbsaa_minus_pbsc1_derefidx_vbsyy -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=vbsxx_minus_pbsc1_derefidx_vbsyy -txa -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsz1=vbsyy_minus_pbsc1_derefidx_vbsyy -tya -tay -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsaa=vbsz1_minus_pbsc1_derefidx_vbsyy -lda {z1} -sec -sbc {c1},y -//FRAGMENT vbsaa=vbsaa_minus_pbsc1_derefidx_vbsyy -sec -sbc {c1},y -//FRAGMENT vbsaa=vbsxx_minus_pbsc1_derefidx_vbsyy -txa -sec -sbc {c1},y -//FRAGMENT vbsaa=vbsyy_minus_pbsc1_derefidx_vbsyy -tya -tay -sec -sbc {c1},y -//FRAGMENT vbsxx=vbsz1_minus_pbsc1_derefidx_vbsyy -lda {z1} -sec -sbc {c1},y -tax -//FRAGMENT vbsxx=vbsaa_minus_pbsc1_derefidx_vbsyy -sec -sbc {c1},y -tax -//FRAGMENT vbsxx=vbsxx_minus_pbsc1_derefidx_vbsyy -txa -sec -sbc {c1},y -tax -//FRAGMENT vbsxx=vbsyy_minus_pbsc1_derefidx_vbsyy -tya -tax -sec -sbc {c1},x -tax -//FRAGMENT vbsyy=vbsz1_minus_pbsc1_derefidx_vbsyy -lda {z1} -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=vbsaa_minus_pbsc1_derefidx_vbsyy -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=vbsxx_minus_pbsc1_derefidx_vbsyy -txa -sec -sbc {c1},y -tay -//FRAGMENT vbsyy=vbsyy_minus_pbsc1_derefidx_vbsyy -tya -tay -sec -sbc {c1},y -tay -//FRAGMENT vbsaa=_deref_pbsc1 -lda {c1} -//FRAGMENT vbsxx=_deref_pbsc1 -ldx {c1} -//FRAGMENT vbsyy=_deref_pbsc1 -ldy {c1} -//FRAGMENT _deref_pbsc1=vbsxx -stx {c1} -//FRAGMENT _deref_pbsc1=vbsyy -sty {c1} -//FRAGMENT pbuz1=pbuz1_plus_1 -inc {z1} -bne !+ -inc {z1}+1 -!: -//FRAGMENT pbuz1_derefidx_vbuc1=vbuz2 -lda {z2} -ldy #{c1} -sta ({z1}),y -//FRAGMENT vbuz1=pbuz2_derefidx_vbuc1 -ldy #{c1} -lda ({z2}),y -sta {z1} -//FRAGMENT pbuz1_derefidx_vbuc1=vbuaa -ldy #{c1} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuc1=vbuxx -ldy #{c1} -txa -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuc1=vbuyy -tya -ldy #{c1} -sta ({z1}),y -//FRAGMENT vbuaa=pbuz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -//FRAGMENT vbuxx=pbuz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -tay -//FRAGMENT vwuz1=vwuc1_plus_vbuz2 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT qbuz1_derefidx_vbuc1=pbuz2 -ldy #{c1} -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT qwuz1_derefidx_vbuc1=pwuz2 -ldy #{c1} -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT vwuz1=pwuz2_derefidx_vbuc1 -ldy #{c1} -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_plus_vbuaa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_plus_vbuxx -txa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_plus_vbuyy -tya -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT vwsz1_neq_vbsc1_then_la1 -NO_SYNTHESIS -//FRAGMENT vwsz1_neq_vwuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bne {la1} -lda {z1} -cmp #<{c1} -bne {la1} -//FRAGMENT vwuz1=vwuz2_rol_8 -lda {z2} -sta {z1}+1 -lda #0 -sta {z1} -//FRAGMENT vwuz1=vwuz2_ror_4 -lda {z2}+1 -lsr -sta {z1}+1 -lda {z2} -ror -sta {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -//FRAGMENT vwuz1=vwuz2_ror_8 -lda {z2}+1 -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1_ge_vwuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bcc !+ -bne {la1} -lda {z1} -cmp #<{c1} -bcs {la1} -!: -//FRAGMENT vwuz1_ge_vbuc1_then_la1 -lda {z1}+1 -bne {la1} -lda {z1} -cmp #{c1} -bcs {la1} -!: -//FRAGMENT pbuc1_derefidx_vbuxx=_byte_vwuz1 -lda {z1} -sta {c1},x -//FRAGMENT vbuz1_le_vbuyy_then_la1 -cpy {z1} -bcs {la1} -//FRAGMENT vwuz1=vwuz1_plus_1 -inc {z1} -bne !+ -inc {z1}+1 -!: -//FRAGMENT vwuz1=vwuz1_rol_8 -lda {z1} -sta {z1}+1 -lda #0 -sta {z1} -//FRAGMENT vwuz1=vwuz1_ror_4 -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -lsr {z1}+1 -ror {z1} -//FRAGMENT pwsc1_derefidx_vbuz1=vwsc2 -ldy {z1} -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT _deref_pwsc1=_deref_pwsc2 -lda {c2} -sta {c1} -lda {c2}+1 -sta {c1}+1 -//FRAGMENT pwsc1_derefidx_vbuaa=vwsc2 -tay -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT pwsc1_derefidx_vbuxx=vwsc2 -lda #<{c2} -sta {c1},x -lda #>{c2} -sta {c1}+1,x -//FRAGMENT pwsc1_derefidx_vbuyy=vwsc2 -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT vwuz1=vwuz2_rol_7 -lda {z2}+1 -lsr -lda {z2} -ror -sta {z1}+1 -lda #0 -ror -sta {z1} -//FRAGMENT vwuz1=vwuz2_bxor_vwuz3 -lda {z2} -eor {z3} -sta {z1} -lda {z2}+1 -eor {z3}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_ror_9 -lda {z2}+1 -lsr -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_bxor_vwuz2 -lda {z1} -eor {z2} -sta {z1} -lda {z1}+1 -eor {z2}+1 -sta {z1}+1 -//FRAGMENT _deref_pbuc1=_byte_vwuz1 -lda {z1} -sta {c1} -//FRAGMENT vbuz1_eq__deref_pbuc1_then_la1 -lda {c1} -cmp {z1} -beq {la1} -//FRAGMENT _deref_pbuc1_eq_0_then_la1 -lda {c1} -cmp #0 -beq {la1} -//FRAGMENT vbuz1=vbuz1_bor_vbuc1 -lda #{c1} -ora {z1} -sta {z1} -//FRAGMENT vbuz1=_deref_pbuc1_rol_4 -lda {c1} -asl -asl -asl -asl -sta {z1} -//FRAGMENT vbuz1=vbuz2_bor__deref_pbuc1 -lda {c1} -ora {z2} -sta {z1} -//FRAGMENT vduz1=vduz2_plus_vbuz3 -lda {z3} -clc -adc {z2} -sta {z1} -lda {z2}+1 -adc #0 -sta {z1}+1 -lda {z2}+2 -adc #0 -sta {z1}+2 -lda {z2}+3 -adc #0 -sta {z1}+3 -//FRAGMENT vwuz1=vwuz2_ror_6 -lda {z2} -asl -sta $ff -lda {z2}+1 -rol -sta {z1} -lda #0 -rol -sta {z1}+1 -asl $ff -rol {z1} -rol {z1}+1 -//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuz3) -ldx {z3} -ldy {c2},x -lda {c1},y -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbuz1=_dec_pbuc1_derefidx_vbuz1 -ldx {z1} -dec {c1},x -//FRAGMENT _deref_pbuz1=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) -ldx {z2} -ldy {c2},x -lda {c1},y -ldy #0 -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbuz1_le_pbuc2_derefidx_vbuz1_then_la1 -ldy {z1} -lda {c2},y -cmp {c1},y -bcs {la1} -//FRAGMENT vbuz1=_deref_pbuz2_bor_vbuc1 -lda #{c1} -ldy #0 -ora ({z2}),y -sta {z1} -//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuz1 -ldy {z1} -lda ({z2}),y -sta {c1},y -//FRAGMENT vbuz1=vbuz2_bxor_pbuc1_derefidx_vbuz3 -lda {z2} -ldy {z3} -eor {c1},y -sta {z1} -//FRAGMENT vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 -lda {z2} -ldy {z3} -and {c1},y -sta {z1} -//FRAGMENT vbuz1=vbuz2_bor_vbuc1 -lda #{c1} -ora {z2} -sta {z1} -//FRAGMENT vduz1=vduz2_rol_2 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -lda {z2}+2 -rol -sta {z1}+2 -lda {z2}+3 -rol -sta {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -//FRAGMENT vwuz1=vwuc1_plus_vwuz2 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c2},y -sta {c1} -//FRAGMENT vbuxx_eq__deref_pbuc1_then_la1 -cpx {c1} -beq {la1} -//FRAGMENT vbuxx=vbuxx_bor_vbuc1 -txa -ora #{c1} -tax -//FRAGMENT vbuyy=vbuyy_bor_vbuc1 -tya -ora #{c1} -tay -//FRAGMENT vbuaa=_deref_pbuc1_rol_4 -lda {c1} -asl -asl -asl -asl -//FRAGMENT vbuxx=_deref_pbuc1_rol_4 -lda {c1} -asl -asl -asl -asl -tax -//FRAGMENT vbuyy=_deref_pbuc1_rol_4 -lda {c1} -asl -asl -asl -asl -tay -//FRAGMENT vbuaa=vbuz1_bor__deref_pbuc1 -lda {c1} -ora {z1} -//FRAGMENT vbuxx=vbuz1_bor__deref_pbuc1 -lda {c1} -ora {z1} -tax -//FRAGMENT vbuyy=vbuz1_bor__deref_pbuc1 -lda {c1} -ora {z1} -tay -//FRAGMENT vbuz1=vbuaa_bor__deref_pbuc1 -ora {c1} -sta {z1} -//FRAGMENT vbuaa=vbuaa_bor__deref_pbuc1 -ora {c1} -//FRAGMENT vbuxx=vbuaa_bor__deref_pbuc1 -ora {c1} -tax -//FRAGMENT vbuyy=vbuaa_bor__deref_pbuc1 -ora {c1} -tay -//FRAGMENT vbuz1=vbuxx_bor__deref_pbuc1 -txa -ora {c1} -sta {z1} -//FRAGMENT vbuaa=vbuxx_bor__deref_pbuc1 -txa -ora {c1} -//FRAGMENT vbuxx=vbuxx_bor__deref_pbuc1 -txa -ora {c1} -tax -//FRAGMENT vbuyy=vbuxx_bor__deref_pbuc1 -txa -ora {c1} -tay -//FRAGMENT vbuz1=vbuyy_bor__deref_pbuc1 -tya -ora {c1} -sta {z1} -//FRAGMENT vbuaa=vbuyy_bor__deref_pbuc1 -tya -ora {c1} -//FRAGMENT vbuxx=vbuyy_bor__deref_pbuc1 -tya -ora {c1} -tax -//FRAGMENT vbuyy=vbuyy_bor__deref_pbuc1 -tya -ora {c1} -tay -//FRAGMENT vduz1=vduz2_plus_vbuxx -txa -clc -adc {z2} -sta {z1} -lda {z2}+1 -adc #0 -sta {z1}+1 -lda {z2}+2 -adc #0 -sta {z1}+2 -lda {z2}+3 -adc #0 -sta {z1}+3 -//FRAGMENT vduz1=vduz2_plus_vbuyy -tya -clc -adc {z2} -sta {z1} -lda {z2}+1 -adc #0 -sta {z1}+1 -lda {z2}+2 -adc #0 -sta {z1}+2 -lda {z2}+3 -adc #0 -sta {z1}+3 -//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuaa) -tax -ldy {c2},x -lda {c1},y -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuxx) -ldy {c2},x -lda {c1},y -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuyy) -ldx {c2},y -lda {c1},x -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) -ldy {z2} -ldx {c2},y -tay -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuaa) -tay -ldx {c2},y -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuxx) -ldy {c2},x -ldx {c1},y -tay -txa -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuyy) -ldx {c2},y -tay -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) -ldy {z2} -txa -ldx {c2},y -tay -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_(pbuc2_derefidx_vbuaa) -tay -txa -ldx {c2},y -tay -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_(pbuc2_derefidx_vbuxx) -txa -tay -ldx {c2},y -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuc1_derefidx_(pbuc2_derefidx_vbuyy) -txa -ldx {c2},y -tay -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) -ldx {z2} -lda {c2},x -tax -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_(pbuc2_derefidx_vbuaa) -tax -lda {c2},x -tax -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_(pbuc2_derefidx_vbuxx) -lda {c2},x -tax -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_(pbuc2_derefidx_vbuyy) -ldx {c2},y -lda {c1},x -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbuxx=_dec_pbuc1_derefidx_vbuxx -dec {c1},x -//FRAGMENT _deref_pbuz1=pbuc1_derefidx_(pbuc2_derefidx_vbuxx) -ldy {c2},x -lda {c1},y -ldy #0 -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbuxx_le_pbuc2_derefidx_vbuxx_then_la1 -txa -tay -lda {c2},x -cmp {c1},y -bcs {la1} -//FRAGMENT vbuaa=_deref_pbuz1_bor_vbuc1 -lda #{c1} -ldy #0 -ora ({z1}),y -//FRAGMENT vbuxx=_deref_pbuz1_bor_vbuc1 -lda #{c1} -ldy #0 -ora ({z1}),y -tax -//FRAGMENT vbuyy=_deref_pbuz1_bor_vbuc1 -lda #{c1} -ldy #0 -ora ({z1}),y -tay -//FRAGMENT pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuaa -tay -lda ({z1}),y -sta {c1},y -//FRAGMENT vbuz1_neq_pbuc1_derefidx_vbuaa_then_la1 -tay -lda {c1},y -cmp {z1} -bne {la1} -//FRAGMENT vbuaa_neq_pbuc1_derefidx_vbuz1_then_la1 -ldy {z1} -cmp {c1},y -bne {la1} -//FRAGMENT vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -eor {c1},y -//FRAGMENT vbuxx=vbuz1_bxor_pbuc1_derefidx_vbuz2 -lda {z1} -ldx {z2} -eor {c1},x -tax -//FRAGMENT vbuyy=vbuz1_bxor_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -eor {c1},y -tay -//FRAGMENT vbuz1=vbuz2_bxor_pbuc1_derefidx_vbuxx -lda {c1},x -eor {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuxx -lda {c1},x -eor {z1} -//FRAGMENT vbuxx=vbuz1_bxor_pbuc1_derefidx_vbuxx -lda {c1},x -eor {z1} -tax -//FRAGMENT vbuyy=vbuz1_bxor_pbuc1_derefidx_vbuxx -lda {c1},x -eor {z1} -tay -//FRAGMENT vbuz1=vbuz2_bxor_pbuc1_derefidx_vbuyy -lda {c1},y -eor {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuyy -lda {c1},y -eor {z1} -//FRAGMENT vbuxx=vbuz1_bxor_pbuc1_derefidx_vbuyy -lda {c1},y -eor {z1} -tax -//FRAGMENT vbuyy=vbuz1_bxor_pbuc1_derefidx_vbuyy -lda {c1},y -eor {z1} -tay -//FRAGMENT vbuz1=vbuaa_bxor_pbuc1_derefidx_vbuz2 -ldy {z2} -eor {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuaa_bxor_pbuc1_derefidx_vbuz1 -ldy {z1} -eor {c1},y -//FRAGMENT vbuxx=vbuaa_bxor_pbuc1_derefidx_vbuz1 -ldx {z1} -eor {c1},x -tax -//FRAGMENT vbuyy=vbuaa_bxor_pbuc1_derefidx_vbuz1 -ldy {z1} -eor {c1},y -tay -//FRAGMENT vbuz1=vbuaa_bxor_pbuc1_derefidx_vbuxx -eor {c1},x -sta {z1} -//FRAGMENT vbuaa=vbuaa_bxor_pbuc1_derefidx_vbuxx -eor {c1},x -//FRAGMENT vbuxx=vbuaa_bxor_pbuc1_derefidx_vbuxx -eor {c1},x -tax -//FRAGMENT vbuyy=vbuaa_bxor_pbuc1_derefidx_vbuxx -eor {c1},x -tay -//FRAGMENT vbuz1=vbuaa_bxor_pbuc1_derefidx_vbuyy -eor {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuaa_bxor_pbuc1_derefidx_vbuyy -eor {c1},y -//FRAGMENT vbuxx=vbuaa_bxor_pbuc1_derefidx_vbuyy -eor {c1},y -tax -//FRAGMENT vbuyy=vbuaa_bxor_pbuc1_derefidx_vbuyy -eor {c1},y -tay -//FRAGMENT vbuz1=vbuxx_bxor_pbuc1_derefidx_vbuz2 -ldy {z2} -txa -eor {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuxx_bxor_pbuc1_derefidx_vbuz1 -ldy {z1} -txa -eor {c1},y -//FRAGMENT vbuxx=vbuxx_bxor_pbuc1_derefidx_vbuz1 -txa -ldx {z1} -eor {c1},x -tax -//FRAGMENT vbuyy=vbuxx_bxor_pbuc1_derefidx_vbuz1 -ldy {z1} -txa -eor {c1},y -tay -//FRAGMENT vbuz1=vbuxx_bxor_pbuc1_derefidx_vbuxx -txa -eor {c1},x -sta {z1} -//FRAGMENT vbuaa=vbuxx_bxor_pbuc1_derefidx_vbuxx -txa -eor {c1},x -//FRAGMENT vbuxx=vbuxx_bxor_pbuc1_derefidx_vbuxx -txa -eor {c1},x -tax -//FRAGMENT vbuyy=vbuxx_bxor_pbuc1_derefidx_vbuxx -txa -eor {c1},x -tay -//FRAGMENT vbuz1=vbuxx_bxor_pbuc1_derefidx_vbuyy -txa -eor {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuxx_bxor_pbuc1_derefidx_vbuyy -txa -eor {c1},y -//FRAGMENT vbuxx=vbuxx_bxor_pbuc1_derefidx_vbuyy -txa -eor {c1},y -tax -//FRAGMENT vbuyy=vbuxx_bxor_pbuc1_derefidx_vbuyy -txa -eor {c1},y -tay -//FRAGMENT vbuz1=vbuyy_bxor_pbuc1_derefidx_vbuz2 -tya -ldy {z2} -eor {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuyy_bxor_pbuc1_derefidx_vbuz1 -tya -ldy {z1} -eor {c1},y -//FRAGMENT vbuxx=vbuyy_bxor_pbuc1_derefidx_vbuz1 -ldx {z1} -tya -eor {c1},x -tax -//FRAGMENT vbuyy=vbuyy_bxor_pbuc1_derefidx_vbuz1 -tya -ldy {z1} -eor {c1},y -tay -//FRAGMENT vbuz1=vbuyy_bxor_pbuc1_derefidx_vbuxx -tya -eor {c1},x -sta {z1} -//FRAGMENT vbuaa=vbuyy_bxor_pbuc1_derefidx_vbuxx -tya -eor {c1},x -//FRAGMENT vbuxx=vbuyy_bxor_pbuc1_derefidx_vbuxx -tya -eor {c1},x -tax -//FRAGMENT vbuyy=vbuyy_bxor_pbuc1_derefidx_vbuxx -tya -eor {c1},x -tay -//FRAGMENT vbuz1=vbuyy_bxor_pbuc1_derefidx_vbuyy -tya -eor {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuyy_bxor_pbuc1_derefidx_vbuyy -tya -eor {c1},y -//FRAGMENT vbuxx=vbuyy_bxor_pbuc1_derefidx_vbuyy -tya -eor {c1},y -tax -//FRAGMENT vbuyy=vbuyy_bxor_pbuc1_derefidx_vbuyy -tya -eor {c1},y -tay -//FRAGMENT vbuaa=vbuz1_band_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -and {c1},y -//FRAGMENT vbuxx=vbuz1_band_pbuc1_derefidx_vbuz2 -lda {z1} -ldx {z2} -and {c1},x -tax -//FRAGMENT vbuyy=vbuz1_band_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -and {c1},y -tay -//FRAGMENT vbuz1=vbuaa_band_pbuc1_derefidx_vbuz2 -ldy {z2} -and {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuaa_band_pbuc1_derefidx_vbuz1 -ldy {z1} -and {c1},y -//FRAGMENT vbuxx=vbuaa_band_pbuc1_derefidx_vbuz1 -ldx {z1} -and {c1},x -tax -//FRAGMENT vbuyy=vbuaa_band_pbuc1_derefidx_vbuz1 -ldy {z1} -and {c1},y -tay -//FRAGMENT vbuz1=vbuxx_band_pbuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sax {z1} -//FRAGMENT vbuaa=vbuxx_band_pbuc1_derefidx_vbuz1 -ldy {z1} -txa -and {c1},y -//FRAGMENT vbuxx=vbuxx_band_pbuc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -axs #0 -//FRAGMENT vbuyy=vbuxx_band_pbuc1_derefidx_vbuz1 -ldy {z1} -txa -and {c1},y -tay -//FRAGMENT vbuz1=vbuyy_band_pbuc1_derefidx_vbuz2 -tya -ldy {z2} -and {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuyy_band_pbuc1_derefidx_vbuz1 -tya -ldy {z1} -and {c1},y -//FRAGMENT vbuxx=vbuyy_band_pbuc1_derefidx_vbuz1 -ldx {z1} -tya -and {c1},x -tax -//FRAGMENT vbuyy=vbuyy_band_pbuc1_derefidx_vbuz1 -tya -ldy {z1} -and {c1},y -tay -//FRAGMENT vbuz1=vbuz2_band_pbuc1_derefidx_vbuxx -lda {c1},x -and {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_band_pbuc1_derefidx_vbuxx -lda {c1},x -and {z1} -//FRAGMENT vbuxx=vbuz1_band_pbuc1_derefidx_vbuxx -lda {c1},x -and {z1} -tax -//FRAGMENT vbuyy=vbuz1_band_pbuc1_derefidx_vbuxx -lda {c1},x -and {z1} -tay -//FRAGMENT vbuz1=vbuaa_band_pbuc1_derefidx_vbuxx -and {c1},x -sta {z1} -//FRAGMENT vbuaa=vbuaa_band_pbuc1_derefidx_vbuxx -and {c1},x -//FRAGMENT vbuxx=vbuaa_band_pbuc1_derefidx_vbuxx -and {c1},x -tax -//FRAGMENT vbuyy=vbuaa_band_pbuc1_derefidx_vbuxx -and {c1},x -tay -//FRAGMENT vbuz1=vbuxx_band_pbuc1_derefidx_vbuxx -lda {c1},x -sax {z1} -//FRAGMENT vbuaa=vbuxx_band_pbuc1_derefidx_vbuxx -txa -and {c1},x -//FRAGMENT vbuxx=vbuxx_band_pbuc1_derefidx_vbuxx -lda {c1},x -axs #0 -//FRAGMENT vbuyy=vbuxx_band_pbuc1_derefidx_vbuxx -txa -and {c1},x -tay -//FRAGMENT vbuz1=vbuyy_band_pbuc1_derefidx_vbuxx -tya -and {c1},x -sta {z1} -//FRAGMENT vbuaa=vbuyy_band_pbuc1_derefidx_vbuxx -tya -and {c1},x -//FRAGMENT vbuxx=vbuyy_band_pbuc1_derefidx_vbuxx -tya -and {c1},x -tax -//FRAGMENT vbuyy=vbuyy_band_pbuc1_derefidx_vbuxx -tya -and {c1},x -tay -//FRAGMENT vbuz1=vbuz2_band_pbuc1_derefidx_vbuyy -lda {c1},y -and {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_band_pbuc1_derefidx_vbuyy -lda {c1},y -and {z1} -//FRAGMENT vbuxx=vbuz1_band_pbuc1_derefidx_vbuyy -lda {c1},y -and {z1} -tax -//FRAGMENT vbuyy=vbuz1_band_pbuc1_derefidx_vbuyy -lda {c1},y -and {z1} -tay -//FRAGMENT vbuz1=vbuaa_band_pbuc1_derefidx_vbuyy -and {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuaa_band_pbuc1_derefidx_vbuyy -and {c1},y -//FRAGMENT vbuxx=vbuaa_band_pbuc1_derefidx_vbuyy -ldx {c1},y -axs #0 -//FRAGMENT vbuz1=vbuxx_band_pbuc1_derefidx_vbuyy -lda {c1},y -sax {z1} -//FRAGMENT vbuz1=vbuyy_band_pbuc1_derefidx_vbuyy -tya -and {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuxx_band_pbuc1_derefidx_vbuyy -txa -and {c1},y -//FRAGMENT vbuaa=vbuyy_band_pbuc1_derefidx_vbuyy -tya -and {c1},y -//FRAGMENT vbuxx=vbuxx_band_pbuc1_derefidx_vbuyy -lda {c1},y -axs #0 -//FRAGMENT vbuxx=vbuyy_band_pbuc1_derefidx_vbuyy -ldx {c1},y -tya -axs #0 -//FRAGMENT vbuyy=vbuxx_band_pbuc1_derefidx_vbuyy -txa -and {c1},y -tay -//FRAGMENT vbuyy=vbuyy_band_pbuc1_derefidx_vbuyy -tya -and {c1},y -tay -//FRAGMENT vbuaa=vbuz1_bor_vbuc1 -lda #{c1} -ora {z1} -//FRAGMENT vbuxx=vbuz1_bor_vbuc1 -lda #{c1} -ora {z1} -tax -//FRAGMENT vbuyy=vbuz1_bor_vbuc1 -lda #{c1} -ora {z1} -tay -//FRAGMENT vbuz1=vbuxx_bor_vbuc1 -txa -ora #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuxx_bor_vbuc1 -txa -ora #{c1} -//FRAGMENT vbuyy=vbuxx_bor_vbuc1 -txa -ora #{c1} -tay -//FRAGMENT vbuz1=vbuyy_bor_vbuc1 -tya -ora #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuyy_bor_vbuc1 -tya -ora #{c1} -//FRAGMENT vbuxx=vbuyy_bor_vbuc1 -tya -ora #{c1} -tax -//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuaa -tay -lda {c2},y -sta {c1} -//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuxx -lda {c2},x -sta {c1} -//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuyy -lda {c2},y -sta {c1} -//FRAGMENT vbuz1=vbuaa_ror_3 -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=vbuaa_ror_3 -lsr -lsr -lsr -//FRAGMENT vbuxx=vbuaa_ror_3 -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=vbuaa_ror_3 -lsr -lsr -lsr -tay -//FRAGMENT vbuz1=vbuz2_band_pbuc1_derefidx_vbuaa -tay -lda {c1},y -and {z2} -sta {z1} -//FRAGMENT vbuz1=vbuxx_band_pbuc1_derefidx_vbuaa -tay -lda {c1},y -sax {z1} -//FRAGMENT vbuz1=vbuyy_band_pbuc1_derefidx_vbuaa -tax -tya -and {c1},x -sta {z1} -//FRAGMENT vbuaa=vbuz1_band_pbuc1_derefidx_vbuaa -tay -lda {c1},y -and {z1} -//FRAGMENT vbuaa=vbuxx_band_pbuc1_derefidx_vbuaa -tay -txa -and {c1},y -//FRAGMENT vbuaa=vbuyy_band_pbuc1_derefidx_vbuaa -tax -tya -and {c1},x -//FRAGMENT vbuxx=vbuz1_band_pbuc1_derefidx_vbuaa -tax -lda {c1},x -and {z1} -tax -//FRAGMENT vbuxx=vbuxx_band_pbuc1_derefidx_vbuaa -tay -lda {c1},y -axs #0 -//FRAGMENT vbuxx=vbuyy_band_pbuc1_derefidx_vbuaa -tax -tya -and {c1},x -tax -//FRAGMENT vbuyy=vbuz1_band_pbuc1_derefidx_vbuaa -tay -lda {c1},y -and {z1} -tay -//FRAGMENT vbuyy=vbuxx_band_pbuc1_derefidx_vbuaa -tay -txa -and {c1},y -tay -//FRAGMENT vbuyy=vbuyy_band_pbuc1_derefidx_vbuaa -tax -tya -and {c1},x -tay -//FRAGMENT vduz1=vduz1_plus_vbuxx -txa -clc -adc {z1} -sta {z1} -lda {z1}+1 -adc #0 -sta {z1}+1 -lda {z1}+2 -adc #0 -sta {z1}+2 -lda {z1}+3 -adc #0 -sta {z1}+3 -//FRAGMENT vwuz1=vwuz1_band_vwuc1 -lda {z1} -and #<{c1} -sta {z1} -lda {z1}+1 -and #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_plus_vwuz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_ror_6 -lda {z1} -asl -sta $ff -lda {z1}+1 -rol -sta {z1} -lda #0 -rol -sta {z1}+1 -asl $ff -rol {z1} -rol {z1}+1 -//FRAGMENT vwuz1=pbuz2_bxor_vwuc1 -lda #<{c1} -eor {z2} -sta {z1} -lda #>{c1} -eor {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuz3 -ldx {z3} -ldy {z2} -lda ({z1}),y -ora {c1},x -sta ({z1}),y -//FRAGMENT vbuz1=vbuz1_bxor_pbuz2_derefidx_vbuz3 -lda {z1} -ldy {z3} -eor ({z2}),y -sta {z1} -//FRAGMENT vbuz1=_neg_vbuz1 -lda {z1} -eor #$ff -clc -adc #$01 -sta {z1} -//FRAGMENT vbuyy_le_vbuz1_then_la1 -lda {z1} -sty $ff -cmp $ff -bcs {la1} -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuaa -ldy {z2} -tax -lda ({z1}),y -ora {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuxx -ldy {z2} -lda ({z1}),y -ora {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz1_derefidx_vbuz2_bor_pbuc1_derefidx_vbuyy -tya -ldy {z2} -tax -lda ({z1}),y -ora {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuxx_bor_pbuc1_derefidx_vbuz2 -txa -ldx {z2} -tay -lda ({z1}),y -ora {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuxx_bor_pbuc1_derefidx_vbuaa -tay -txa -ldx {c1},y -tay -lda ({z1}),y -stx $ff -ora $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuxx_bor_pbuc1_derefidx_vbuxx -txa -tay -lda ({z1}),y -stx $ff -ora {c1},x -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuz1_derefidx_vbuxx_bor_pbuc1_derefidx_vbuyy -txa -ldx {c1},y -tay -lda ({z1}),y -stx $ff -ora $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_bor_pbuc1_derefidx_vbuz2 -lda ({z1}),y -ldx {z2} -ora {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_bor_pbuc1_derefidx_vbuaa -tax -lda ({z1}),y -ora {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_bor_pbuc1_derefidx_vbuxx -lda ({z1}),y -ora {c1},x -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_bor_pbuc1_derefidx_vbuyy -lda ({z1}),y -ora {c1},y -sta ({z1}),y -//FRAGMENT vbuz1=vbuz1_bxor_pbuz2_derefidx_vbuaa -tay -lda {z1} -eor ({z2}),y -sta {z1} -//FRAGMENT vbuz1=vbuz1_bxor_pbuz2_derefidx_vbuxx -txa -tay -lda {z1} -eor ({z2}),y -sta {z1} -//FRAGMENT vbuz1=vbuz1_bxor_pbuz2_derefidx_vbuyy -lda {z1} -eor ({z2}),y -sta {z1} -//FRAGMENT vbuaa=vbuaa_bxor_pbuz1_derefidx_vbuz2 -ldy {z2} -eor ({z1}),y -//FRAGMENT vbuaa=vbuaa_bxor_pbuz1_derefidx_vbuaa -tay -eor ({z1}),y -//FRAGMENT vbuaa=vbuaa_bxor_pbuz1_derefidx_vbuxx -stx $ff -ldy $ff -eor ({z1}),y -//FRAGMENT vbuaa=vbuaa_bxor_pbuz1_derefidx_vbuyy -eor ({z1}),y -//FRAGMENT vbuxx=vbuxx_bxor_pbuz1_derefidx_vbuz2 -ldy {z2} -txa -eor ({z1}),y -tax -//FRAGMENT vbuxx=vbuxx_bxor_pbuz1_derefidx_vbuaa -tay -txa -eor ({z1}),y -tax -//FRAGMENT vbuxx=vbuxx_bxor_pbuz1_derefidx_vbuxx -txa -tay -eor ({z1}),y -tax -//FRAGMENT vbuxx=vbuxx_bxor_pbuz1_derefidx_vbuyy -txa -eor ({z1}),y -tax -//FRAGMENT vbuyy=_neg_vbuyy -dey -tya -eor #$ff -tay -//FRAGMENT vwuz1=pbuz1_bxor_vwuc1 -lda #<{c1} -eor {z1} -sta {z1} -lda #>{c1} -eor {z1}+1 -sta {z1}+1 -//FRAGMENT vbsz1=vbsz2_plus_vbsc1 -lax {z2} -axs #-[{c1}] -stx {z1} -//FRAGMENT vbsz1=vbsc1_plus_vbsz2 -lax {z2} -axs #-[{c1}] -stx {z1} -//FRAGMENT vbsz1=vbsz2_plus_vbsz2 -lda {z2} -asl -sta {z1} -//FRAGMENT vbsaa=vbsz1_plus_vbsc1 -lda #{c1} -clc -adc {z1} -//FRAGMENT vbsxx=vbsz1_plus_vbsc1 -lax {z1} -axs #-[{c1}] -//FRAGMENT vbsyy=vbsz1_plus_vbsc1 -lda #{c1} -clc -adc {z1} -tay -//FRAGMENT vbsaa=vbsc1_plus_vbsz1 -lda #{c1} -clc -adc {z1} -//FRAGMENT vbsxx=vbsc1_plus_vbsz1 -lax {z1} -axs #-[{c1}] -//FRAGMENT vbsyy=vbsc1_plus_vbsz1 -lda #{c1} -clc -adc {z1} -tay -//FRAGMENT vbsaa=vbsz1_plus_vbsz1 -lda {z1} -asl -//FRAGMENT vbsxx=vbsz1_plus_vbsz1 -lda {z1} -asl -tax -//FRAGMENT vbsyy=vbsz1_plus_vbsz1 -lda {z1} -asl -tay -//FRAGMENT vbsz1=vbsz2_rol_1 -lda {z2} -asl -sta {z1} -//FRAGMENT vbsz1=vbsz2_minus_vbsc1 -lax {z2} -axs #{c1} -stx {z1} -//FRAGMENT vbsaa=vbsz1_rol_1 -lda {z1} -asl -//FRAGMENT vbsxx=vbsz1_rol_1 -lda {z1} -asl -tax -//FRAGMENT vbsyy=vbsz1_rol_1 -lda {z1} -asl -tay -//FRAGMENT vbsz1=vbsxx_rol_1 -txa -asl -sta {z1} -//FRAGMENT vbsaa=vbsxx_rol_1 -txa -asl -//FRAGMENT vbsxx=vbsxx_rol_1 -txa -asl -tax -//FRAGMENT vbsyy=vbsxx_rol_1 -txa -asl -tay -//FRAGMENT vbsz1=vbsyy_rol_1 -tya -asl -sta {z1} -//FRAGMENT vbsaa=vbsyy_rol_1 -tya -asl -//FRAGMENT vbsxx=vbsyy_rol_1 -tya -asl -tax -//FRAGMENT vbsyy=vbsyy_rol_1 -tya -asl -tay -//FRAGMENT vbsz1=vbsaa_minus_vbsc1 -sec -sbc #{c1} -sta {z1} -//FRAGMENT vbsz1=vbsxx_minus_vbsc1 -txa -axs #{c1} -stx {z1} -//FRAGMENT vbsz1=vbsyy_minus_vbsc1 -tya -sec -sbc #{c1} -sta {z1} -//FRAGMENT vbsaa=vbsz1_minus_vbsc1 -lda {z1} -sec -sbc #{c1} -//FRAGMENT vbsaa=vbsaa_minus_vbsc1 -sec -sbc #{c1} -//FRAGMENT vbsaa=vbsxx_minus_vbsc1 -txa -sec -sbc #{c1} -//FRAGMENT vbsaa=vbsyy_minus_vbsc1 -tya -sec -sbc #{c1} -//FRAGMENT vbsxx=vbsz1_minus_vbsc1 -lax {z1} -axs #{c1} -//FRAGMENT vbsxx=vbsaa_minus_vbsc1 -tax -axs #{c1} -//FRAGMENT vbsxx=vbsyy_minus_vbsc1 -tya -tax -axs #{c1} -//FRAGMENT vbsyy=vbsz1_minus_vbsc1 -lda {z1} -sec -sbc #{c1} -tay -//FRAGMENT vbsyy=vbsaa_minus_vbsc1 -sec -sbc #{c1} -tay -//FRAGMENT vbsyy=vbsxx_minus_vbsc1 -txa -sec -sbc #{c1} -tay -//FRAGMENT vbuc1_gt_vbuz1_then_la1 -lda {z1} -cmp #{c1} -bcc {la1} -//FRAGMENT vbuc1_gt_vbuxx_then_la1 -cpx #{c1} -bcc {la1} -//FRAGMENT vwuz1=vbuz2_rol_1 -lda {z2} -asl -sta {z1} -lda #0 -rol -sta {z1}+1 -//FRAGMENT vwuz1=vbuxx_rol_1 -txa -asl -sta {z1} -lda #0 -rol -sta {z1}+1 -//FRAGMENT vwuz1=vbuyy_rol_1 -tya -asl -sta {z1} -lda #0 -rol -sta {z1}+1 -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy -lda {c1},y -tay -//FRAGMENT pwsz1=pwsc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=_hi_vdsz2 -lda {z2}+2 -sta {z1} -lda {z2}+3 -sta {z1}+1 -//FRAGMENT pwsz1=pwsz1_plus_vbuc1 +//FRAGMENT vwuz1=vwuz1_plus_vbuc1 lda #{c1} clc adc {z1} @@ -12437,7855 +1886,12 @@ sta {z1} bcc !+ inc {z1}+1 !: -//FRAGMENT pwsz1=pwsc1_plus_vwuz2 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vduz1_lt_vduc1_then_la1 -lda {z1}+3 -cmp #>{c1}>>$10 -bcc {la1} -bne !+ -lda {z1}+2 -cmp #<{c1}>>$10 -bcc {la1} -bne !+ -lda {z1}+1 -cmp #>{c1} -bcc {la1} -bne !+ -lda {z1} -cmp #<{c1} -bcc {la1} -!: -//FRAGMENT vduz1=vduc1_minus_vduz1 -lda #<{c1} -sec -sbc {z1} -sta {z1} -lda #>{c1} -sbc {z1}+1 -sta {z1}+1 -lda #<{c1}>>$10 -sbc {z1}+2 -sta {z1}+2 -lda #>{c1}>>$10 -sbc {z1}+3 -sta {z1}+3 -//FRAGMENT vduz1=vduz2_rol_3 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -lda {z2}+2 -rol -sta {z1}+2 -lda {z2}+3 -rol -sta {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -//FRAGMENT vwuz1=vwuz2_minus_vwuc1 -lda {z2} -sec -sbc #<{c1} -sta {z1} -lda {z2}+1 -sbc #>{c1} -sta {z1}+1 -//FRAGMENT vbuz1=_byte_vwsz2 -lda {z2} -sta {z1} -//FRAGMENT vbsz1=_sbyte_vwsz2 -lda {z2} -sta {z1} -//FRAGMENT vduz1=vduz2_rol_vbuz3 -ldy {z3} -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpy #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -dey -bne !- -!e: -//FRAGMENT vbuaa=_byte_vwsz1 -lda {z1} -//FRAGMENT vbuxx=_byte_vwsz1 -lda {z1} -tax -//FRAGMENT vbuyy=_byte_vwsz1 -lda {z1} -tay -//FRAGMENT vbsaa=_sbyte_vwsz1 -lda {z1} -//FRAGMENT vbsxx=_sbyte_vwsz1 -lda {z1} -tax -//FRAGMENT vbsyy=_sbyte_vwsz1 -lda {z1} -tay -//FRAGMENT vduz1=vduz2_rol_vbuxx -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpx #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -dex -bne !- -!e: -//FRAGMENT vduz1=vduz2_rol_vbuyy -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpy #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -dey -bne !- -!e: -//FRAGMENT vduz1=vduz1_rol_3 -ldy #3 -!: -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -dey -bne !- -//FRAGMENT pwsz1=pwsc1_plus_vwuz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vduz1=vduz1_rol_vbuxx -cpx #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -dex -bne !- -!e: -//FRAGMENT pssz1=pssc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_minus_1 -lda {z1} -sec -sbc #1 -sta {z1} -lda {z1}+1 -sbc #0 -sta {z1}+1 -//FRAGMENT vbuz1=vbuz1_minus_1 -dec {z1} -//FRAGMENT pbsz1_derefidx_vbuc1=pbsz1_derefidx_vbuc1_plus_pbsz1_derefidx_vbuc2 -ldy #{c2} -lda ({z1}),y -ldy #{c1} -tax -lda ({z1}),y -stx $ff -clc -adc $ff -sta ({z1}),y -//FRAGMENT pbsz1_derefidx_vbuc1_lt_vbsc2_then_la1 -ldy #{c1} -lda ({z1}),y - -sec -sbc #{c2} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT pbsz1_derefidx_vbuc1=vbsc2 +//FRAGMENT isr_hardware_cloba_entry +pha +//FRAGMENT isr_hardware_cloba_exit +pla +rti +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2 lda #{c2} -ldy #{c1} -sta ({z1}),y -//FRAGMENT pwsz1_derefidx_vbuc1_gt_vwsc2_then_la1 -ldy #{c1} -lda #<{c2} -cmp ({z1}),y -iny -lda #>{c2} -sbc ({z1}),y -bvc !+ -eor #$80 -!: -bmi {la1} -!e: -//FRAGMENT pwsz1_derefidx_vbuc1_ge_vwsc2_then_la1 -ldy #{c1} -lda ({z1}),y -cmp #<{c2} -iny -lda ({z1}),y -sbc #>{c2} -bvc !+ -eor #$80 -!: -bpl {la1} -//FRAGMENT pwsz1_derefidx_vbuc1=pwsz1_derefidx_vbuc1_plus_pbsz1_derefidx_vbuc2 -ldy #{c2} -lda ({z1}),y -sta $fe -ora #$7f -bmi !+ -lda #0 -!: -sta $ff -ldy #{c1} -clc -lda ({z1}),y -adc $fe -sta ({z1}),y -iny -lda ({z1}),y -adc $fe -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbuz1_ge_vbuc2_then_la1 -ldy {z1} -lda {c1},y -cmp #{c2} -bcs {la1} -//FRAGMENT vwsz1=pwsz2_derefidx_vbuc1_ror_vbuc2 -ldx #{c2} -ldy #{c1} -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -cpx #0 -beq !e+ -!: -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -dex -bne !- -!e: -//FRAGMENT pbuc1_derefidx_vbuz1=_byte_vwsz2 -ldy {z1} -lda {z2} -sta {c1},y -//FRAGMENT pssz1=pssz1_plus_vbuc1 -lda #{c1} -clc -adc {z1} -sta {z1} -bcc !+ -inc {z1}+1 -!: -//FRAGMENT pwsz1_derefidx_vbuc1=vwsc2 -ldy #{c1} -lda #<{c2} -sta ({z1}),y -iny -lda #>{c2} -sta ({z1}),y -//FRAGMENT pbsz1_derefidx_vbuc1=vbsz2 -lda {z2} -ldy #{c1} -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbuz1_lt_vbuc2_then_la1 -ldy {z1} -lda {c1},y -cmp #{c2} -bcc {la1} -//FRAGMENT vbuc1_eq_pbuc2_derefidx_vbuz1_then_la1 -ldy {z1} -lda {c2},y -cmp #{c1} -beq {la1} -//FRAGMENT pbsz1_derefidx_vbuc1=vbsxx -ldy #{c1} -txa -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbuaa_lt_vbuc2_then_la1 -tay -lda {c1},y -cmp #{c2} -bcc {la1} -//FRAGMENT pbuc1_derefidx_vbuxx_lt_vbuc2_then_la1 -lda {c1},x -cmp #{c2} -bcc {la1} -//FRAGMENT pbuc1_derefidx_vbuyy_lt_vbuc2_then_la1 -lda {c1},y -cmp #{c2} -bcc {la1} -//FRAGMENT vbuc1_eq_pbuc2_derefidx_vbuaa_then_la1 -tay -lda {c2},y -cmp #{c1} -beq {la1} -//FRAGMENT vbuc1_eq_pbuc2_derefidx_vbuxx_then_la1 -lda {c2},x -cmp #{c1} -beq {la1} -//FRAGMENT vbuc1_eq_pbuc2_derefidx_vbuyy_then_la1 -lda {c2},y -cmp #{c1} -beq {la1} -//FRAGMENT vbuxx=vbuxx_minus_1 -dex -//FRAGMENT vbuyy=vbuyy_minus_1 -tya -tay -dey -//FRAGMENT vwsz1_neq_vwsc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bne {la1} -lda {z1} -cmp #<{c1} -bne {la1} -//FRAGMENT _deref_pwsc1=vwsz1 -lda {z1} +ora {c1} sta {c1} -lda {z1}+1 -sta {c1}+1 -//FRAGMENT pwuc1_derefidx_vbuz1=vbuz2 -lda {z2} -ldy {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT vbuz1=_deref_pbuc1_band_vbuc2 -lda #{c2} -and {c1} -sta {z1} -//FRAGMENT _deref_pbuc1_lt_vbuz1_then_la1 -lda {c1} -cmp {z1} -bcc {la1} -//FRAGMENT vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz2)_then_la1 -lda {z1} -ldx {z2} -ldy {c2},x -cmp {c1},y -bcs {la1} -//FRAGMENT vbuz1_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuz2)_then_la1 -lda {z1} -ldx {z2} -ldy {c2},x -cmp {c1},y -bcc {la1} -//FRAGMENT vbuz1=pbuc1_derefidx_(pbuc2_derefidx_vbuz2) -ldx {z2} -ldy {c2},x -ldx {c1},y -stx {z1} -//FRAGMENT vbuz1=_lo_pwuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -//FRAGMENT vbuz1=_hi_pwuc1_derefidx_vbuz2 -ldy {z2} -lda {c1}+1,y -sta {z1} -//FRAGMENT pwuc1_derefidx_vbuz1=vbuxx -ldy {z1} -txa -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuz1=vbuyy -tya -ldy {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuaa=vbuz1 -tay -lda {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuaa=vbuxx -tay -txa -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuaa=vbuyy -tax -tya -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuxx=vbuz1 -lda {z1} -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuxx=vbuxx -txa -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuxx=vbuyy -tya -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=vbuz1 -lda {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuyy=vbuxx -txa -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuyy=vbuyy -tya -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT vbuaa=_deref_pbuc1_band_vbuc2 -lda #{c2} -and {c1} -//FRAGMENT vbuxx=_deref_pbuc1_band_vbuc2 -lda #{c2} -and {c1} -tax -//FRAGMENT vbuyy=_deref_pbuc1_band_vbuc2 -lda #{c2} -and {c1} -tay -//FRAGMENT _deref_pbuc1_lt_vbuaa_then_la1 -ldy {c1} -sta $ff -cpy $ff -bcc {la1} -//FRAGMENT vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuaa)_then_la1 -tax -lda {z1} -ldy {c2},x -cmp {c1},y -bcs {la1} -//FRAGMENT vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 -lda {z1} -ldy {c2},x -cmp {c1},y -bcs {la1} -//FRAGMENT vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 -lda {z1} -ldx {c2},y -cmp {c1},x -bcs {la1} -//FRAGMENT vbuaa_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz1)_then_la1 -ldx {z1} -ldy {c2},x -cmp {c1},y -bcs {la1} -//FRAGMENT vbuz1_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 -lda {z1} -ldy {c2},x -cmp {c1},y -bcc {la1} -//FRAGMENT vbuz1_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 -lda {z1} -ldx {c2},y -cmp {c1},x -bcc {la1} -//FRAGMENT vbuxx_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuz1)_then_la1 -ldy {z1} -txa -ldx {c2},y -cmp {c1},x -bcc {la1} -//FRAGMENT vbuxx_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 -txa -ldy {c2},x -cmp {c1},y -bcc {la1} -//FRAGMENT vbuxx_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 -txa -ldx {c2},y -cmp {c1},x -bcc {la1} -//FRAGMENT vbuyy_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuz1)_then_la1 -ldx {z1} -tya -ldy {c2},x -cmp {c1},y -bcc {la1} -//FRAGMENT vbuyy_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 -tya -ldy {c2},x -cmp {c1},y -bcc {la1} -//FRAGMENT vbuyy_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 -tya -ldx {c2},y -cmp {c1},x -bcc {la1} -//FRAGMENT vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) -ldx {z1} -ldy {c2},x -lda {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) -ldx {z1} -ldy {c2},x -ldx {c1},y -//FRAGMENT vbuyy=pbuc1_derefidx_(pbuc2_derefidx_vbuz1) -ldy {z1} -ldx {c2},y -ldy {c1},x -//FRAGMENT vbuaa=_lo_pwuc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -//FRAGMENT vbuxx=_lo_pwuc1_derefidx_vbuz1 -ldx {z1} -lda {c1},x -tax -//FRAGMENT vbuyy=_lo_pwuc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -tay -//FRAGMENT vbuz1=_lo_pwuc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=_lo_pwuc1_derefidx_vbuaa -tay -lda {c1},y -//FRAGMENT vbuxx=_lo_pwuc1_derefidx_vbuaa -tax -lda {c1},x -tax -//FRAGMENT vbuyy=_lo_pwuc1_derefidx_vbuaa -tay -lda {c1},y -tay -//FRAGMENT vbuz1=_lo_pwuc1_derefidx_vbuxx -lda {c1},x -sta {z1} -//FRAGMENT vbuaa=_lo_pwuc1_derefidx_vbuxx -lda {c1},x -//FRAGMENT vbuxx=_lo_pwuc1_derefidx_vbuxx -lda {c1},x -tax -//FRAGMENT vbuyy=_lo_pwuc1_derefidx_vbuxx -lda {c1},x -tay -//FRAGMENT vbuz1=_lo_pwuc1_derefidx_vbuyy -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=_lo_pwuc1_derefidx_vbuyy -lda {c1},y -//FRAGMENT vbuxx=_lo_pwuc1_derefidx_vbuyy -lda {c1},y -tax -//FRAGMENT vbuyy=_lo_pwuc1_derefidx_vbuyy -lda {c1},y -tay -//FRAGMENT vbuz1=_hi_pwuc1_derefidx_vbuxx -lda {c1}+1,x -sta {z1} -//FRAGMENT vbuaa=_hi_pwuc1_derefidx_vbuz1 -ldy {z1} -lda {c1}+1,y -//FRAGMENT vbuaa=_hi_pwuc1_derefidx_vbuxx -lda {c1}+1,x -//FRAGMENT vbuxx=_hi_pwuc1_derefidx_vbuz1 -ldx {z1} -lda {c1}+1,x -tax -//FRAGMENT vbuxx=_hi_pwuc1_derefidx_vbuxx -lda {c1}+1,x -tax -//FRAGMENT vbuyy=_hi_pwuc1_derefidx_vbuz1 -ldy {z1} -lda {c1}+1,y -tay -//FRAGMENT vbuyy=_hi_pwuc1_derefidx_vbuxx -lda {c1}+1,x -tay -//FRAGMENT vbuxx_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz1)_then_la1 -ldy {z1} -txa -ldx {c2},y -cmp {c1},x -bcs {la1} -//FRAGMENT vbuxx_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 -txa -ldy {c2},x -cmp {c1},y -bcs {la1} -//FRAGMENT vbuxx_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 -txa -ldx {c2},y -cmp {c1},x -bcs {la1} -//FRAGMENT vbuyy_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz1)_then_la1 -ldx {z1} -tya -ldy {c2},x -cmp {c1},y -bcs {la1} -//FRAGMENT vbuyy_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1 -tya -ldy {c2},x -cmp {c1},y -bcs {la1} -//FRAGMENT vbuyy_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuyy)_then_la1 -tya -ldx {c2},y -cmp {c1},x -bcs {la1} -//FRAGMENT _deref_pbuc1_lt_vbuxx_then_la1 -lda {c1} -stx $ff -cmp $ff -bcc {la1} -//FRAGMENT _deref_pbuc1_lt_vbuyy_then_la1 -ldx {c1} -sty $ff -cpx $ff -bcc {la1} -//FRAGMENT vbsxx=pbsc1_derefidx_vbuyy -ldx {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=pbuz2_derefidx_vbuc2 -ldx {z1} -ldy #{c2} -lda ({z2}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=pbuz1_derefidx_vbuc2 -ldy #{c2} -lda ({z1}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuz1_derefidx_vbuc2 -tya -ldy #{c2} -tax -lda ({z1}),y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuaa=pbuz1_derefidx_vbuc2 -ldy #{c2} -tax -lda ({z1}),y -sta {c1},x -//FRAGMENT _deref_qssc1=pssc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 -//FRAGMENT pssc1_neq_pssz1_then_la1 -lda {z1}+1 -cmp #>{c1} -bne {la1} -lda {z1} -cmp #<{c1} -bne {la1} -//FRAGMENT vbuz1=vbuc1_plus__deref_pbuz2 -lda #{c1} -clc -ldy #0 -adc ({z2}),y -sta {z1} -//FRAGMENT vbuz1=_lo_qssz2_derefidx_vbuc1 -ldy #{c1} -lda ({z2}),y -sta {z1} -//FRAGMENT vbuz1=_hi_qssz2_derefidx_vbuc1 -ldy #{c1}+1 -lda ({z2}),y -sta {z1} -//FRAGMENT pssz1=qssz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -pha -iny -lda ({z1}),y -sta {z1}+1 -pla -sta {z1} -//FRAGMENT vbuaa=vbuc1_plus__deref_pbuz1 -lda #{c1} -clc -ldy #0 -adc ({z1}),y -//FRAGMENT vbuxx=vbuc1_plus__deref_pbuz1 -ldy #0 -lda ({z1}),y -tax -axs #-[{c1}] -//FRAGMENT vbuyy=vbuc1_plus__deref_pbuz1 -lda #{c1} -clc -ldy #0 -adc ({z1}),y -tay -//FRAGMENT vbuaa=_lo_qssz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -//FRAGMENT vbuxx=_lo_qssz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -tax -//FRAGMENT vbuyy=_lo_qssz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -tay -//FRAGMENT vbuaa=_hi_qssz1_derefidx_vbuc1 -ldy #{c1}+1 -lda ({z1}),y -//FRAGMENT vbuxx=_hi_qssz1_derefidx_vbuc1 -ldy #{c1}+1 -lda ({z1}),y -tax -//FRAGMENT vbuyy=_hi_qssz1_derefidx_vbuc1 -ldy #{c1}+1 -lda ({z1}),y -tay -//FRAGMENT pssc1_derefidx_vbuz1=pssc2_derefidx_vbuz1_memcpy_vbuc3 -ldx #{c3} -ldy {z1} -!: -lda {c2},y -sta {c1},y -iny -dex -bne !- -//FRAGMENT pssc1_derefidx_vbuaa=pssc2_derefidx_vbuaa_memcpy_vbuc3 -ldx #{c3} -tay -!: -lda {c2},y -sta {c1},y -iny -dex -bne !- -//FRAGMENT pssc1_derefidx_vbuxx=pssc2_derefidx_vbuxx_memcpy_vbuc3 -ldy #{c3} -!: -lda {c2},x -sta {c1},x -inx -dey -bne !- -//FRAGMENT pssc1_derefidx_vbuyy=pssc2_derefidx_vbuyy_memcpy_vbuc3 -ldx #{c3} -!: -lda {c2},y -sta {c1},y -iny -dex -bne !- -//FRAGMENT vbum1_lt_vbuc1_then_la1 -lda {m1} -cmp #{c1} -bcc {la1} -//FRAGMENT pbuc1_derefidx_vbum1=vbum1 -ldy {m1} -tya -sta {c1},y -//FRAGMENT pwuc1_derefidx_vbuaa=vwuc2 -tay -lda #<{c2} -sta {c1},y -lda #>{c2} -sta {c1}+1,y -//FRAGMENT _deref_pbuc1_ge_vbuc2_then_la1 -lda {c1} -cmp #{c2} -bcs {la1} -//FRAGMENT vboz1=vboxx -txa -sta {z1} -//FRAGMENT vboaa=vboxx -txa -//FRAGMENT vboxx=vboaa -tax -//FRAGMENT vboxx=vboyy -tya -tax -//FRAGMENT vboyy=vboxx -txa -tay -//FRAGMENT vwsz1=vwsz1_minus_vwsc1 -lda {z1} -sec -sbc #<{c1} -sta {z1} -lda {z1}+1 -sbc #>{c1} -sta {z1}+1 -//FRAGMENT vbuaa_lt_vbuxx_then_la1 -stx $ff -cmp $ff -bcc {la1} -//FRAGMENT vbsz1=pbsc1_derefidx_vbuz2_minus_pbsc2_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sec -sbc {c2},y -sta {z1} -//FRAGMENT pbsz1=pbsc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT _deref_pbsz1=vbsz2 -lda {z2} -ldy #0 -sta ({z1}),y -//FRAGMENT pbsz1=_inc_pbsz1 -inc {z1} -bne !+ -inc {z1}+1 -!: -//FRAGMENT vbsaa=pbsc1_derefidx_vbuz1_minus_pbsc2_derefidx_vbuz1 -ldy {z1} -lda {c1},y -sec -sbc {c2},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbuz1_minus_pbsc2_derefidx_vbuz1 -ldx {z1} -lda {c1},x -sec -sbc {c2},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbuz1_minus_pbsc2_derefidx_vbuz1 -ldy {z1} -lda {c1},y -sec -sbc {c2},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbuaa_minus_pbsc2_derefidx_vbuaa -tay -lda {c1},y -sec -sbc {c2},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbuaa_minus_pbsc2_derefidx_vbuaa -tay -lda {c1},y -sec -sbc {c2},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbuaa_minus_pbsc2_derefidx_vbuaa -tax -lda {c1},x -sec -sbc {c2},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbuaa_minus_pbsc2_derefidx_vbuaa -tay -lda {c1},y -sec -sbc {c2},y -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbuxx_minus_pbsc2_derefidx_vbuxx -lda {c1},x -sec -sbc {c2},x -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbuxx_minus_pbsc2_derefidx_vbuxx -lda {c1},x -sec -sbc {c2},x -//FRAGMENT vbsxx=pbsc1_derefidx_vbuxx_minus_pbsc2_derefidx_vbuxx -lda {c1},x -sec -sbc {c2},x -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbuxx_minus_pbsc2_derefidx_vbuxx -lda {c1},x -sec -sbc {c2},x -tay -//FRAGMENT vbsz1=pbsc1_derefidx_vbuyy_minus_pbsc2_derefidx_vbuyy -lda {c1},y -sec -sbc {c2},y -sta {z1} -//FRAGMENT vbsaa=pbsc1_derefidx_vbuyy_minus_pbsc2_derefidx_vbuyy -lda {c1},y -sec -sbc {c2},y -//FRAGMENT vbsxx=pbsc1_derefidx_vbuyy_minus_pbsc2_derefidx_vbuyy -lda {c1},y -sec -sbc {c2},y -tax -//FRAGMENT vbsyy=pbsc1_derefidx_vbuyy_minus_pbsc2_derefidx_vbuyy -lda {c1},y -sec -sbc {c2},y -tay -//FRAGMENT _deref_pbsz1=vbsaa -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbsz1=vbsxx -txa -ldy #0 -sta ({z1}),y -//FRAGMENT _deref_pbsz1=vbsyy -tya -ldy #0 -sta ({z1}),y -//FRAGMENT vwuz1=_deref_pwuc1 -lda {c1} -sta {z1} -lda {c1}+1 -sta {z1}+1 -//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuz2_then_la1 -ldy {z1} -lda {c1},y -cmp {z2} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuz1_then_la1 -lda {c1},x -cmp {z1} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuz1_then_la1 -lda {c1},y -cmp {z1} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuxx_then_la1 -ldy {z1} -lda {c1},y -tay -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuxx_then_la1 -lda {c1},x -tay -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuxx_then_la1 -lda {c1},y -tay -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuyy_then_la1 -ldx {z1} -lda {c1},x -tax -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuyy_then_la1 -lda {c1},x -tax -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuyy_then_la1 -lda {c1},y -tax -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_minus_1 -ldx {z1} -lda {c1},x -bne !+ -dec {c1}+1,x -!: -dec {c1},x -//FRAGMENT pwuc1_derefidx_vbuaa=pwuc1_derefidx_vbuaa_minus_1 -tax -lda {c1},x -bne !+ -dec {c1}+1,x -!: -dec {c1},x -//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_minus_1 -lda {c1},x -bne !+ -dec {c1}+1,x -!: -dec {c1},x -//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_minus_1 -sec -lda {c1},y -sbc #$01 -sta {c1},y -lda {c1}+1,y -sbc #$00 -sta {c1}+1,y -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_1 -ldx {z2} -ldy {c1},x -iny -sty {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_1 -ldy {z1} -lda {c1},y -clc -adc #1 -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_1 -ldy {z1} -ldx {c1},y -inx -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_1 -ldx {z1} -ldy {c1},x -iny -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_1 -tax -ldy {c1},x -iny -sty {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_1 -tay -lda {c1},y -clc -adc #1 -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_1 -tay -ldx {c1},y -inx -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_1 -tax -ldy {c1},x -iny -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_1 -ldy {c1},x -iny -sty {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_1 -lda {c1},x -clc -adc #1 -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_1 -ldy {c1},x -iny -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_1 -ldx {c1},y -inx -stx {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_1 -lda {c1},y -clc -adc #1 -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_1 -ldx {c1},y -inx -//FRAGMENT vwuz1_eq_vwuz2_then_la1 -lda {z1} -cmp {z2} -bne !+ -lda {z1}+1 -cmp {z2}+1 -beq {la1} -!: -//FRAGMENT vwuz1_le_vwuz2_then_la1 -lda {z1}+1 -cmp {z2}+1 -bne !+ -lda {z1} -cmp {z2} -beq {la1} -!: -bcc {la1} -//FRAGMENT vduz1=vwuz2_dword_vwuc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -lda {z2} -sta {z1}+2 -lda {z2}+1 -sta {z1}+3 -//FRAGMENT vwuz1=vwuz1_minus_vbuc1 -sec -lda {z1} -sbc #{c1} -sta {z1} -lda {z1}+1 -sbc #0 -sta {z1}+1 -//FRAGMENT vbuz1=vbuz2_plus_pbuc1_derefidx_vbuz3 -lda {z2} -ldy {z3} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuz1_plus_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -clc -adc {c1},y -//FRAGMENT vbuxx=vbuz1_plus_pbuc1_derefidx_vbuz2 -lda {z1} -ldx {z2} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=vbuz1_plus_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=vbuxx_plus_pbuc1_derefidx_vbuz2 -ldy {z2} -txa -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuxx_plus_pbuc1_derefidx_vbuz1 -ldy {z1} -txa -clc -adc {c1},y -//FRAGMENT vbuxx=vbuxx_plus_pbuc1_derefidx_vbuz1 -txa -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=vbuxx_plus_pbuc1_derefidx_vbuz1 -ldy {z1} -txa -clc -adc {c1},y -tay -//FRAGMENT vbuz1=vbuyy_plus_pbuc1_derefidx_vbuz2 -tya -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuyy_plus_pbuc1_derefidx_vbuz1 -tya -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=vbuyy_plus_pbuc1_derefidx_vbuz1 -ldx {z1} -tya -clc -adc {c1},x -tax -//FRAGMENT vbuz1=vbuz2_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {z1} -//FRAGMENT vbuxx=vbuz1_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {z1} -tax -//FRAGMENT vbuyy=vbuz1_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {z1} -tay -//FRAGMENT vbuz1=vbuxx_plus_pbuc1_derefidx_vbuxx -txa -clc -adc {c1},x -sta {z1} -//FRAGMENT vbuaa=vbuxx_plus_pbuc1_derefidx_vbuxx -txa -clc -adc {c1},x -//FRAGMENT vbuxx=vbuxx_plus_pbuc1_derefidx_vbuxx -txa -clc -adc {c1},x -tax -//FRAGMENT vbuyy=vbuxx_plus_pbuc1_derefidx_vbuxx -txa -clc -adc {c1},x -tay -//FRAGMENT vbuz1=vbuyy_plus_pbuc1_derefidx_vbuxx -tya -clc -adc {c1},x -sta {z1} -//FRAGMENT vbuaa=vbuyy_plus_pbuc1_derefidx_vbuxx -tya -clc -adc {c1},x -//FRAGMENT vbuxx=vbuyy_plus_pbuc1_derefidx_vbuxx -tya -clc -adc {c1},x -tax -//FRAGMENT vbuz1=vbuz2_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {z1} -//FRAGMENT vbuxx=vbuz1_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {z1} -tax -//FRAGMENT vbuyy=vbuz1_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {z1} -tay -//FRAGMENT vbuz1=vbuxx_plus_pbuc1_derefidx_vbuyy -txa -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuxx_plus_pbuc1_derefidx_vbuyy -txa -clc -adc {c1},y -//FRAGMENT vbuxx=vbuxx_plus_pbuc1_derefidx_vbuyy -txa -clc -adc {c1},y -tax -//FRAGMENT vbuyy=vbuxx_plus_pbuc1_derefidx_vbuyy -txa -clc -adc {c1},y -tay -//FRAGMENT vbuz1=vbuyy_plus_pbuc1_derefidx_vbuyy -tya -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=vbuyy_plus_pbuc1_derefidx_vbuyy -tya -clc -adc {c1},y -//FRAGMENT vbuxx=vbuyy_plus_pbuc1_derefidx_vbuyy -tya -clc -adc {c1},y -tax -//FRAGMENT vduz1_lt_vwuc1_then_la1 -NO_SYNTHESIS -//FRAGMENT vduz1_lt_vwsc1_then_la1 -NO_SYNTHESIS -//FRAGMENT vduz1=vduz2_rol_4 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -lda {z2}+2 -rol -sta {z1}+2 -lda {z2}+3 -rol -sta {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -//FRAGMENT vduz1=vduz2_plus_vduz3 -lda {z2} -clc -adc {z3} -sta {z1} -lda {z2}+1 -adc {z3}+1 -sta {z1}+1 -lda {z2}+2 -adc {z3}+2 -sta {z1}+2 -lda {z2}+3 -adc {z3}+3 -sta {z1}+3 -//FRAGMENT vduz1=vduz2_rol_1 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -lda {z2}+2 -rol -sta {z1}+2 -lda {z2}+3 -rol -sta {z1}+3 -//FRAGMENT vduz1=vduz1_plus_vwuc1 -lda {z1} -clc -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -lda {z1}+2 -adc #0 -sta {z1}+2 -lda {z1}+3 -adc #0 -sta {z1}+3 -//FRAGMENT vduz1=vduz1_rol_2 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -//FRAGMENT _deref_pduc1=vduz1 -lda {z1} -sta {c1} -lda {z1}+1 -sta {c1}+1 -lda {z1}+2 -sta {c1}+2 -lda {z1}+3 -sta {c1}+3 -//FRAGMENT vduz1=_dec_vduz2 -lda {z2} -sec -sbc #1 -sta {z1} -lda {z2}+1 -sbc #0 -sta {z1}+1 -lda {z2}+2 -sbc #0 -sta {z1}+2 -lda {z2}+3 -sbc #0 -sta {z1}+3 -//FRAGMENT vduz1=_inc_vduz1 -inc {z1} -bne !+ -inc {z1}+1 -bne !+ -inc {z1}+2 -bne !+ -inc {z1}+3 -!: -//FRAGMENT vduz1=vduz1_plus_vbuc1 -lda {z1} -clc -adc #{c1} -sta {z1} -bcc !+ -inc {z1}+1 -bne !+ -inc {z1}+2 -bne !+ -inc {z1}+3 -!: -//FRAGMENT vduz1=_dec_vduz1 -lda {z1} -sec -sbc #1 -sta {z1} -lda {z1}+1 -sbc #0 -sta {z1}+1 -lda {z1}+2 -sbc #0 -sta {z1}+2 -lda {z1}+3 -sbc #0 -sta {z1}+3 -//FRAGMENT _stackpullbyte_1 -pla -//FRAGMENT vwuz1=_stackidxword_vbuc1 -tsx -lda STACK_BASE+{c1},x -sta {z1} -lda STACK_BASE+{c1}+1,x -sta {z1}+1 -//FRAGMENT _stackidxword_vbuc1=vwuz1 -tsx -lda {z1} -sta STACK_BASE+{c1},x -lda {z1}+1 -sta STACK_BASE+{c1}+1,x -//FRAGMENT _stackpushword_=vwuc1 -lda #>{c1} -pha -lda #<{c1} -pha -//FRAGMENT vwuz1=_stackpullword_ -pla -sta {z1} -pla -sta {z1}+1 -//FRAGMENT _stackpushword_=vbuc1 -lda #0 -pha -lda #<{c1} -pha -//FRAGMENT _stackidxsword_vbuc1=vwsz1 -tsx -lda {z1} -sta STACK_BASE+{c1},x -lda {z1}+1 -sta STACK_BASE+{c1}+1,x -//FRAGMENT _stackpushbyte_2 -pha -pha -//FRAGMENT vwsz1=_stackpullsword_ -pla -sta {z1} -pla -sta {z1}+1 -//FRAGMENT pbuc1_derefidx_vbuaa=_inc_pbuc1_derefidx_vbuaa -tax -inc {c1},x -//FRAGMENT vbuaa=vbuaa_bor_vbuc1 -ora #{c1} -//FRAGMENT vbuz1=_deref_pbuz2_rol_1 -ldy #0 -lda ({z2}),y -asl -sta {z1} -//FRAGMENT pwuc1_derefidx_vbuz1=_inc_pwuc1_derefidx_vbuz1 -ldx {z1} -inc {c1},x -bne !+ -inc {c1}+1,x -!: -//FRAGMENT vbuaa=_deref_pbuz1_rol_1 -ldy #0 -lda ({z1}),y -asl -//FRAGMENT vbuxx=_deref_pbuz1_rol_1 -ldy #0 -lda ({z1}),y -asl -tax -//FRAGMENT vbuyy=_deref_pbuz1_rol_1 -ldy #0 -lda ({z1}),y -asl -tay -//FRAGMENT pwuc1_derefidx_vbuaa=_inc_pwuc1_derefidx_vbuaa -tax -inc {c1},x -bne !+ -inc {c1}+1,x -!: -//FRAGMENT pwuc1_derefidx_vbuxx=_inc_pwuc1_derefidx_vbuxx -inc {c1},x -bne !+ -inc {c1}+1,x -!: -//FRAGMENT pwuc1_derefidx_vbuyy=_inc_pwuc1_derefidx_vbuyy -tya -tax -inc {c1},x -bne !+ -inc {c1}+1,x -!: -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_(pbuc3_derefidx_vbuz1) -ldx {z1} -ldy {c3},x -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_(pbuc3_derefidx_vbuxx) -ldy {c3},x -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_(pbuc3_derefidx_vbuyy) -ldx {c3},y -lda {c2},x -sta {c1},y -//FRAGMENT pwsz1_lt_pwsc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bcc {la1} -bne !+ -lda {z1} -cmp #<{c1} -bcc {la1} -!: -//FRAGMENT vbsz1=vbsz2_minus_vbsaa -eor #$ff -sec -adc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsxx_minus_vbsaa -sta $ff -txa -sec -sbc $ff -sta {z1} -//FRAGMENT vbsaa=vbsz1_minus_vbsaa -eor #$ff -sec -adc {z1} -//FRAGMENT vbsaa=vbsxx_minus_vbsaa -sta $ff -txa -sec -sbc $ff -//FRAGMENT vbsxx=vbsz1_minus_vbsaa -eor #$ff -sec -adc {z1} -tax -//FRAGMENT vbsxx=vbsxx_minus_vbsaa -sta $ff -txa -sec -sbc $ff -tax -//FRAGMENT vbsyy=vbsz1_minus_vbsaa -eor #$ff -sec -adc {z1} -tay -//FRAGMENT vbsyy=vbsxx_minus_vbsaa -sta $ff -txa -sec -sbc $ff -tay -//FRAGMENT vbuz1=_deref_pbuc1_bxor_vbuc2 -lda #{c2} -eor {c1} -sta {z1} -//FRAGMENT vbuz1=vbuc1_bxor_vbuaa -eor #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuc1_bxor_vbuxx -txa -eor #{c1} -sta {z1} -//FRAGMENT vbuz1=vbuc1_bxor_vbuyy -tya -eor #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuc1_bxor_vbuaa -eor #{c1} -//FRAGMENT vbuaa=vbuc1_bxor_vbuxx -txa -eor #{c1} -//FRAGMENT vbuaa=vbuc1_bxor_vbuyy -tya -eor #{c1} -//FRAGMENT vbuxx=vbuc1_bxor_vbuaa -eor #{c1} -tax -//FRAGMENT vbuxx=vbuc1_bxor_vbuxx -txa -eor #{c1} -tax -//FRAGMENT vbuxx=vbuc1_bxor_vbuyy -tya -eor #{c1} -tax -//FRAGMENT vbuyy=vbuc1_bxor_vbuaa -eor #{c1} -tay -//FRAGMENT vbuyy=vbuc1_bxor_vbuxx -txa -eor #{c1} -tay -//FRAGMENT vbuyy=vbuc1_bxor_vbuyy -tya -eor #{c1} -tay -//FRAGMENT vbuaa=_deref_pbuc1_bxor_vbuc2 -lda #{c2} -eor {c1} -//FRAGMENT vbuxx=_deref_pbuc1_bxor_vbuc2 -lda #{c2} -eor {c1} -tax -//FRAGMENT vbuyy=_deref_pbuc1_bxor_vbuc2 -lda #{c2} -eor {c1} -tay -//FRAGMENT vduz1_neq_vduc1_then_la1 -lda {z1}+3 -cmp #>{c1}>>$10 -bne {la1} -lda {z1}+2 -cmp #<{c1}>>$10 -bne {la1} -lda {z1}+1 -cmp #>{c1} -bne {la1} -lda {z1} -cmp #<{c1} -bne {la1} -//FRAGMENT vwuz1=vwuz2_plus_vwuc1 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vduz1=vduz2_sethi_vwuz3 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z3} -sta {z1}+2 -lda {z3}+1 -sta {z1}+3 -//FRAGMENT vduz1=vduz2_setlo_vwuz3 -lda {z3} -sta {z1} -lda {z3}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -//FRAGMENT vduz1=vduz1_setlo_vwuz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vbuaa=vbuaa_plus_2 -clc -adc #2 -//FRAGMENT vbuz1_ge__deref_pbuc1_then_la1 -lda {c1} -ldy {z1} -sta $ff -cpy $ff -bcs {la1} -//FRAGMENT vbuxx_ge__deref_pbuc1_then_la1 -ldy {c1} -sty $ff -cpx $ff -bcs {la1} -//FRAGMENT vbuyy_ge__deref_pbuc1_then_la1 -lda {c1} -sta $ff -cpy $ff -bcs {la1} -//FRAGMENT vduz1=_deref_pduc1 -lda {c1} -sta {z1} -lda {c1}+1 -sta {z1}+1 -lda {c1}+2 -sta {z1}+2 -lda {c1}+3 -sta {z1}+3 -//FRAGMENT vwuz1=pbuc1_derefidx_vbuz2_word_vbuz3 -ldy {z2} -lda {c1},y -sta {z1}+1 -lda {z3} -sta {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuaa_word_vbuz2 -tay -lda {c1},y -sta {z1}+1 -lda {z2} -sta {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuxx_word_vbuz2 -lda {c1},x -sta {z1}+1 -lda {z2} -sta {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuyy_word_vbuz2 -lda {c1},y -sta {z1}+1 -lda {z2} -sta {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuz2_word_vbuaa -ldx {z2} -tay -lda {c1},x -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuaa_word_vbuaa -tay -lda {c1},y -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuxx_word_vbuaa -tay -lda {c1},x -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuyy_word_vbuaa -tax -lda {c1},y -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuz2_word_vbuxx -ldy {z2} -lda {c1},y -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuaa_word_vbuxx -tay -lda {c1},y -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuxx_word_vbuxx -lda {c1},x -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuyy_word_vbuxx -lda {c1},y -sta {z1}+1 -stx {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuz2_word_vbuyy -ldx {z2} -lda {c1},x -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuaa_word_vbuyy -tax -lda {c1},x -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuxx_word_vbuyy -lda {c1},x -sta {z1}+1 -sty {z1} -//FRAGMENT vwuz1=pbuc1_derefidx_vbuyy_word_vbuyy -lda {c1},y -sta {z1}+1 -sty {z1} -//FRAGMENT _deref_(_deref_qwuc1)=_deref_(_deref_qwuc2) -ldy {c2} -sty $fe -ldy {c2}+1 -sty $ff -ldy #0 -lda ($fe),y -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT vbuyy=vbuaa_band_pbuc1_derefidx_vbuyy -and {c1},y -tay -//FRAGMENT _deref_pbuc1_eq__deref_pbuc2_then_la1 -lda {c1} -cmp {c2} -beq {la1} -//FRAGMENT _deref_pbsc1=_deref_pbsc2 -lda {c2} -sta {c1} -//FRAGMENT vwsz1_eq_vwsz2_then_la1 -lda {z1} -cmp {z2} -bne !+ -lda {z1}+1 -cmp {z2}+1 -beq {la1} -!: -//FRAGMENT vwsz1_neq_vwsz2_then_la1 -lda {z1}+1 -cmp {z2}+1 -bne {la1} -lda {z1} -cmp {z2} -bne {la1} -//FRAGMENT vwsz1_lt_vwsz2_then_la1 -lda {z1} -cmp {z2} -lda {z1}+1 -sbc {z2}+1 -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vwsz1_gt_vwsz2_then_la1 -lda {z2} -cmp {z1} -lda {z2}+1 -sbc {z1}+1 -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vwsz1_ge_vwsz2_then_la1 -lda {z1} -cmp {z2} -lda {z1}+1 -sbc {z2}+1 -bvc !+ -eor #$80 -!: -bpl {la1} -//FRAGMENT vbuz1=_deref_pbuc1_plus_1 -ldy {c1} -iny -sty {z1} -//FRAGMENT vbuz1=_deref_pbuc1_minus_1 -ldx {c1} -dex -stx {z1} -//FRAGMENT vbuz1=_deref_pbuc1_plus_vbuc2 -lda #{c2} -clc -adc {c1} -sta {z1} -//FRAGMENT vbuz1=_deref_pbuc1_minus_vbuc2 -lda {c1} -sec -sbc #{c2} -sta {z1} -//FRAGMENT vbuaa=_deref_pbuc1_plus_1 -lda {c1} -clc -adc #1 -//FRAGMENT vbuaa=_deref_pbuc1_minus_1 -lda {c1} -sec -sbc #1 -//FRAGMENT vbuaa=_deref_pbuc1_plus_vbuc2 -lda #{c2} -clc -adc {c1} -//FRAGMENT vbuxx=_deref_pbuc1_plus_vbuc2 -lda {c1} -tax -axs #-[{c2}] -//FRAGMENT vbuyy=_deref_pbuc1_plus_vbuc2 -lda #{c2} -clc -adc {c1} -tay -//FRAGMENT vbuaa=_deref_pbuc1_minus_vbuc2 -lda {c1} -sec -sbc #{c2} -//FRAGMENT vbuxx=_deref_pbuc1_minus_vbuc2 -lda {c1} -tax -axs #{c2} -//FRAGMENT vbuyy=_deref_pbuc1_minus_vbuc2 -lda {c1} -sec -sbc #{c2} -tay -//FRAGMENT vbuaa_ge_vbuxx_then_la1 -stx $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuaa_ge_vbuyy_then_la1 -sty $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuxx=_deref_pbuc1_plus_1 -ldx {c1} -inx -//FRAGMENT vbuyy=_deref_pbuc1_plus_1 -ldy {c1} -iny -//FRAGMENT vbuxx=_deref_pbuc1_minus_1 -ldx {c1} -dex -//FRAGMENT vbuyy=_deref_pbuc1_minus_1 -lda {c1} -tay -dey -//FRAGMENT vbsz1_neq_vbsz2_then_la1 -lda {z1} -cmp {z2} -bne {la1} -//FRAGMENT vbsz1_neq_vbsxx_then_la1 -cpx {z1} -bne {la1} -//FRAGMENT vbsxx_neq_vbsz1_then_la1 -cpx {z1} -bne {la1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_vbuc2 -lda #{c2} -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT _deref_pwuz1=vbuc1 -lda #{c1} -ldy #0 -sta ({z1}),y -tya -iny -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuc1=vbuc2 -lda #{c2} -ldy #{c1} -sta ({z1}),y -lda #0 -iny -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_vbuc2 -lda #{c2} -ldy #{c1} -clc -adc ({z1}),y -sta ({z1}),y -iny -lda #0 -adc ({z1}),y -sta ({z1}),y -//FRAGMENT vwuz1=_deref_pwuz2_ror_8 -ldy #1 -lda ({z2}),y -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_bxor_vwuc2 -ldy #{c1} -lda #<{c2} -eor ({z1}),y -sta ({z1}),y -iny -lda #>{c2} -eor ({z1}),y -sta ({z1}),y -//FRAGMENT vwuz1=pwuz2_derefidx_vbuc1_ror_8 -ldy #{c1} -lda #0 -sta {z1}+1 -iny -lda ({z2}),y -sta {z1} -//FRAGMENT vwuz1_lt_vbuz2_then_la1 -lda {z1}+1 -bne !+ -lda {z1} -cmp {z2} -bcc {la1} -!: -//FRAGMENT vwuz1_ge_vbuz2_then_la1 -lda {z1}+1 -bne {la1} -lda {z1} -cmp {z2} -bcs {la1} -!: -//FRAGMENT vbuz1=vbuz2_minus_2 -lda {z2} -sec -sbc #2 -sta {z1} -//FRAGMENT pwuz1_derefidx_vbuc1=vbuz2 -lda {z2} -ldy #{c1} -sta ({z1}),y -lda #0 -iny -sta ({z1}),y -//FRAGMENT vbuz1=_hi_pvoz2 -lda {z2}+1 -sta {z1} -//FRAGMENT vbuz1=_lo_pvoz2 -lda {z2} -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_vbuc2 -lda #{c2} -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_vbuc2 -ldx {z1} -lda {c1},x -tax -axs #-[{c2}] -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_vbuc2 -lda #{c2} -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_vbuc2 -tay -lda #{c2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_vbuc2 -tay -lda #{c2} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_vbuc2 -tax -lda {c1},x -tax -axs #-[{c2}] -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_vbuc2 -tay -lda #{c2} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_vbuc2 -lda #{c2} -clc -adc {c1},x -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_vbuc2 -lda #{c2} -clc -adc {c1},x -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_vbuc2 -lda {c1},x -tax -axs #-[{c2}] -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_vbuc2 -lda #{c2} -clc -adc {c1},x -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_vbuc2 -lda #{c2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_vbuc2 -lda #{c2} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_vbuc2 -lda {c1},y -tax -axs #-[{c2}] -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_vbuc2 -lda #{c2} -clc -adc {c1},y -tay -//FRAGMENT vwuz1_lt_vbuxx_then_la1 -lda {z1}+1 -bne !+ -stx $ff -lda {z1} -cmp $ff -bcc {la1} -!: -//FRAGMENT vwuz1_ge_vbuxx_then_la1 -lda {z1}+1 -bne {la1} -stx $ff -lda {z1} -cmp $ff -bcs {la1} -!: -//FRAGMENT vwuz1_ge_vbuyy_then_la1 -lda {z1}+1 -bne {la1} -sty $ff -lda {z1} -cmp $ff -bcs {la1} -!: -//FRAGMENT vbuz1=vbuxx_minus_2 -dex -dex -stx {z1} -//FRAGMENT pbuc1_derefidx_vbuaa=_byte_vwuz1 -tay -lda {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuyy=_byte_vwuz1 -lda {z1} -sta {c1},y -//FRAGMENT pwuz1_derefidx_vbuc1=vbuxx -txa -ldy #{c1} -sta ({z1}),y -lda #0 -iny -sta ({z1}),y -//FRAGMENT pwuz1_derefidx_vbuc1=vbuyy -tya -ldy #{c1} -sta ({z1}),y -lda #0 -iny -sta ({z1}),y -//FRAGMENT vbuaa=_hi_pvoz1 -lda {z1}+1 -//FRAGMENT vbuxx=_hi_pvoz1 -ldx {z1}+1 -//FRAGMENT vbuaa=_lo_pvoz1 -lda {z1} -//FRAGMENT vbuxx=_lo_pvoz1 -ldx {z1} -//FRAGMENT vbuaa=vbuz1_minus_2 -lda {z1} -sec -sbc #2 -//FRAGMENT vbuxx=vbuz1_minus_2 -ldx {z1} -dex -dex -//FRAGMENT vbuyy=vbuz1_minus_2 -ldy {z1} -dey -dey -//FRAGMENT vbuyy=_hi_pvoz1 -ldy {z1}+1 -//FRAGMENT vbuyy=_lo_pvoz1 -ldy {z1} -//FRAGMENT vwuz1=_deref_pwuz1_ror_8 -ldy #1 -lda ({z1}),y -sta {z1} -dey -sty {z1}+1 -//FRAGMENT vwuz1=pwuz1_derefidx_vbuc1_ror_8 -ldy #{c1} -iny -lda ({z1}),y -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT _deref_pbuz1=vbum2 -lda {m2} -ldy #0 -sta ({z1}),y -//FRAGMENT pbuc1_derefidx_vbum1=vbuc2 -lda #{c2} -ldy {m1} -sta {c1},y -//FRAGMENT vbuz1=vbum2 -lda {m2} -sta {z1} -//FRAGMENT vbuaa=vbum1 -lda {m1} -//FRAGMENT vbuxx=vbum1 -ldx {m1} -//FRAGMENT vbuyy=vbum1 -ldy {m1} -//FRAGMENT vwuz1=vwuc1_plus_pbuc2_derefidx_vbuz2 -ldy {z2} -lda {c2},y -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pbuz1_derefidx_vbuz2=_byte_vwuz3 -lda {z3} -ldy {z2} -sta ({z1}),y -//FRAGMENT vwuz1=vwuc1_plus_pbuc2_derefidx_vbuaa -tay -lda {c2},y -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_plus_pbuc2_derefidx_vbuxx -lda {c2},x -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_plus_pbuc2_derefidx_vbuyy -lda {c2},y -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pbuz1_derefidx_vbuxx=_byte_vwuz2 -txa -tay -lda {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=_byte_vwuz2 -lda {z2} -sta ({z1}),y -//FRAGMENT vbuz1=vbuz2_bor__hi_vwuz3 -lda {z2} -ora {z3}+1 -sta {z1} -//FRAGMENT vbuz1=vbuz1_bor_vbuaa -ora {z1} -sta {z1} -//FRAGMENT pbuz1_ge_pbuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bcc !+ -bne {la1} -lda {z1} -cmp #<{c1} -bcs {la1} -!: -//FRAGMENT vbuz1=_deref_pbuc1_ror_1 -lda {c1} -lsr -sta {z1} -//FRAGMENT vwuz1_ge_pwuc1_derefidx_vbuz2_then_la1 -ldy {z2} -lda {c1}+1,y -cmp {z1}+1 -bne !+ -lda {c1},y -cmp {z1} -beq {la1} -!: -bcc {la1} -//FRAGMENT _deref_(_deref_qbuc1)=pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c2},y -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT _deref_qbuc1=_inc__deref_qbuc1 -inc {c1} -bne !+ -inc {c1}+1 -!: -//FRAGMENT vbuaa=_deref_pbuc1_ror_1 -lda {c1} -lsr -//FRAGMENT vbuxx=_deref_pbuc1_ror_1 -lda {c1} -lsr -tax -//FRAGMENT vbuyy=_deref_pbuc1_ror_1 -lda {c1} -lsr -tay -//FRAGMENT vwuz1_ge_pwuc1_derefidx_vbuaa_then_la1 -tay -lda {c1}+1,y -cmp {z1}+1 -bne !+ -lda {c1},y -cmp {z1} -beq {la1} -!: -bcc {la1} -//FRAGMENT vwuz1_ge_pwuc1_derefidx_vbuxx_then_la1 -lda {c1}+1,x -cmp {z1}+1 -bne !+ -lda {c1},x -cmp {z1} -beq {la1} -!: -bcc {la1} -//FRAGMENT vwuz1_ge_pwuc1_derefidx_vbuyy_then_la1 -lda {c1}+1,y -cmp {z1}+1 -bne !+ -lda {c1},y -cmp {z1} -beq {la1} -!: -bcc {la1} -//FRAGMENT _deref_(_deref_qbuc1)=pbuc2_derefidx_vbuaa -tay -lda {c2},y -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT _deref_(_deref_qbuc1)=pbuc2_derefidx_vbuxx -lda {c2},x -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT _deref_(_deref_qbuc1)=pbuc2_derefidx_vbuyy -lda {c2},y -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT _deref_pwuz1=vbuz2 -lda {z2} -ldy #0 -sta ({z1}),y -tya -iny -sta ({z1}),y -//FRAGMENT _deref_pwuz1=vbuaa -ldy #0 -sta ({z1}),y -tya -iny -sta ({z1}),y -//FRAGMENT _deref_pwuz1=vbuxx -txa -ldy #0 -sta ({z1}),y -tya -iny -sta ({z1}),y -//FRAGMENT _deref_pwuz1=vbuyy -tya -ldy #0 -sta ({z1}),y -tya -iny -sta ({z1}),y -//FRAGMENT vboz1=vboc1 -lda #{c1} -sta {z1} -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4 -ldy {z4} -lda ({z3}),y -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuz3 -ldy {z3} -sta $ff -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuz3 -ldy {z3} -stx $ff -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuz3 -sty $ff -ldy {z3} -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuaa -tay -lda ({z3}),y -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuaa -stx $ff -tay -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuaa -sty $ff -tay -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuxx -txa -tay -lda ({z3}),y -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuxx -sta $ff -txa -tay -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuyy=pbuz2_derefidx_vbuxx -sty $ff -txa -tay -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuyy -lda ({z3}),y -ldy {z2} -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuaa=pbuz2_derefidx_vbuyy -sta $ff -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuxx=pbuz2_derefidx_vbuyy -stx $ff -lda ({z2}),y -ldy $ff -sta ({z1}),y -//FRAGMENT vbsz1=vbsaa_rol_1 -asl -sta {z1} -//FRAGMENT vbsaa=vbsaa_rol_1 -asl -//FRAGMENT vbsxx=vbsaa_rol_1 -asl -tax -//FRAGMENT vbsyy=vbsaa_rol_1 -asl -tay -//FRAGMENT pwsz1=pwsc1_plus_vbuz2 -lda {z2} -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pwsc1_derefidx_vbuz1=_deref_pwsz2 -ldx {z1} -ldy #0 -lda ({z2}),y -sta {c1},x -iny -lda ({z2}),y -sta {c1}+1,x -//FRAGMENT pwsz1=pwsc1_plus_vbuaa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pwsz1=pwsc1_plus_vbuxx -txa -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pwsz1=pwsc1_plus_vbuyy -tya -clc -adc #<{c1} -sta {z1} -lda #>{c1} -adc #0 -sta {z1}+1 -//FRAGMENT pwsc1_derefidx_vbuaa=_deref_pwsz1 -tax -ldy #0 -lda ({z1}),y -sta {c1},x -iny -lda ({z1}),y -sta {c1}+1,x -//FRAGMENT pwsc1_derefidx_vbuxx=_deref_pwsz1 -ldy #0 -lda ({z1}),y -sta {c1},x -iny -lda ({z1}),y -sta {c1}+1,x -//FRAGMENT pwsc1_derefidx_vbuyy=_deref_pwsz1 -tya -tax -ldy #0 -lda ({z1}),y -sta {c1},x -iny -lda ({z1}),y -sta {c1}+1,x -//FRAGMENT vbuz1=_hi_pwuc1_derefidx_vbuyy -lda {c1}+1,y -sta {z1} -//FRAGMENT vbuaa=_hi_pwuc1_derefidx_vbuyy -lda {c1}+1,y -//FRAGMENT vbuxx=_hi_pwuc1_derefidx_vbuyy -lda {c1}+1,y -tax -//FRAGMENT vbuyy=_hi_pwuc1_derefidx_vbuyy -lda {c1}+1,y -tay -//FRAGMENT vbuz1=_lo_pwsc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -//FRAGMENT vbuz1=_hi_pwsc1_derefidx_vbuz2 -ldy {z2} -lda {c1}+1,y -sta {z1} -//FRAGMENT vbuaa=_lo_pwsc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -//FRAGMENT vbuxx=_lo_pwsc1_derefidx_vbuz1 -ldx {z1} -lda {c1},x -tax -//FRAGMENT vbuyy=_lo_pwsc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -tay -//FRAGMENT vbuz1=_lo_pwsc1_derefidx_vbuxx -lda {c1},x -sta {z1} -//FRAGMENT vbuaa=_lo_pwsc1_derefidx_vbuxx -lda {c1},x -//FRAGMENT vbuxx=_lo_pwsc1_derefidx_vbuxx -lda {c1},x -tax -//FRAGMENT vbuyy=_lo_pwsc1_derefidx_vbuxx -lda {c1},x -tay -//FRAGMENT vbuz1=_lo_pwsc1_derefidx_vbuyy -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=_lo_pwsc1_derefidx_vbuyy -lda {c1},y -//FRAGMENT vbuxx=_lo_pwsc1_derefidx_vbuyy -lda {c1},y -tax -//FRAGMENT vbuyy=_lo_pwsc1_derefidx_vbuyy -lda {c1},y -tay -//FRAGMENT vbuaa=_hi_pwsc1_derefidx_vbuz1 -ldy {z1} -lda {c1}+1,y -//FRAGMENT vbuxx=_hi_pwsc1_derefidx_vbuz1 -ldx {z1} -lda {c1}+1,x -tax -//FRAGMENT vbuyy=_hi_pwsc1_derefidx_vbuz1 -ldy {z1} -lda {c1}+1,y -tay -//FRAGMENT vbuz1=_hi_pwsc1_derefidx_vbuxx -lda {c1}+1,x -sta {z1} -//FRAGMENT vbuaa=_hi_pwsc1_derefidx_vbuxx -lda {c1}+1,x -//FRAGMENT vbuxx=_hi_pwsc1_derefidx_vbuxx -lda {c1}+1,x -tax -//FRAGMENT vbuyy=_hi_pwsc1_derefidx_vbuxx -lda {c1}+1,x -tay -//FRAGMENT vbuz1=_hi_pwsc1_derefidx_vbuyy -lda {c1}+1,y -sta {z1} -//FRAGMENT vbuaa=_hi_pwsc1_derefidx_vbuyy -lda {c1}+1,y -//FRAGMENT vbuxx=_hi_pwsc1_derefidx_vbuyy -lda {c1}+1,y -tax -//FRAGMENT vbuyy=_hi_pwsc1_derefidx_vbuyy -lda {c1}+1,y -tay -//FRAGMENT vwuz1=vbuz2_band_vbuc1 -lda {z2} -and #{c1} -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=vbuaa_band_vbuc1 -and #{c1} -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=vbuxx_band_vbuc1 -txa -and #{c1} -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=vbuyy_band_vbuc1 -tya -and #{c1} -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuc1_le_vwuc2_then_la1 -lda #>{c1} -cmp #>{c2} -bne !+ -lda #<{c1} -cmp #<{c2} -beq {la1} -!: -bcc {la1} -//FRAGMENT _deref_pboc1=vboc2 -lda #{c2} -sta {c1} -//FRAGMENT _deref_pboc1_then_la1 -lda {c1} -cmp #0 -bne {la1} -//FRAGMENT pbuz1_derefidx_vbuc1=_byte_vwuz2 -ldy #{c1} -lda {z2} -sta ({z1}),y -//FRAGMENT pssz1=pssc1_plus_vwuz2 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT _deref_pssz1=_deref_pssz2_memcpy_vbuc1 -ldy #00 -!: -lda ({z2}),y -sta ({z1}),y -iny -cpy #{c1} -bne !- -//FRAGMENT pssz1=pssc1_plus_vwuz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT _deref_pbuc1=_deref_pbuc1_plus_vbuc2 -lda #{c2} -clc -adc {c1} -sta {c1} -//FRAGMENT pssz1=pssz2_plus_vbuc1 -lda #{c1} -clc -adc {z2} -sta {z1} -lda #0 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pssz1_lt_pssc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bcc {la1} -bne !+ -lda {z1} -cmp #<{c1} -bcc {la1} -!: -//FRAGMENT vbuz1_lt__deref_pbuc1_then_la1 -lda {z1} -cmp {c1} -bcc {la1} -//FRAGMENT pwuc1_derefidx_vbuz1=(_deref_qwuc2)_derefidx_vbuz1 -ldy {z1} -lda {c2} -sta $fe -lda {c2}+1 -sta $ff -lda ($fe),y -sta {c1},y -iny -lda ($fe),y -sta {c1},y -//FRAGMENT vbuaa_lt__deref_pbuc1_then_la1 -cmp {c1} -bcc {la1} -//FRAGMENT pwuc1_derefidx_vbuaa=(_deref_qwuc2)_derefidx_vbuaa -tay -lda {c2} -sta $fe -lda {c2}+1 -sta $ff -lda ($fe),y -sta {c1},y -iny -lda ($fe),y -sta {c1},y -//FRAGMENT pwuc1_derefidx_vbuxx=(_deref_qwuc2)_derefidx_vbuxx -txa -tay -lda {c2} -sta $fe -lda {c2}+1 -sta $ff -lda ($fe),y -sta {c1},y -iny -lda ($fe),y -sta {c1},y -//FRAGMENT pwuc1_derefidx_vbuyy=(_deref_qwuc2)_derefidx_vbuyy -lda {c2} -sta $fe -lda {c2}+1 -sta $ff -lda ($fe),y -sta {c1},y -iny -lda ($fe),y -sta {c1},y -//FRAGMENT vbuxx_lt__deref_pbuc1_then_la1 -cpx {c1} -bcc {la1} -//FRAGMENT (_deref_qbuc1)_derefidx_vbuc2=vbuc3 -lda #{c3} -ldy #{c2} -ldx {c1} -stx $fe -ldx {c1}+1 -stx $ff -sta ($fe),y -//FRAGMENT pssz1_neq_pssc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bne {la1} -lda {z1} -cmp #<{c1} -bne {la1} -//FRAGMENT pssz1=pssz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=(_deref_qwuc1)_derefidx_vbuc2 -ldy #{c2} -lda {c1} -sta $fe -lda {c1}+1 -sta $ff -lda ($fe),y -sta {z1} -iny -lda ($fe),y -sta {z1}+1 -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_(_deref_pbuz2) -ldy #0 -lda ({z2}),y -tay -lda {c2},y -ldy {z1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_(_deref_pbuz1) -ldy #0 -lda ({z1}),y -tay -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_(_deref_pbuz1) -tax -ldy #0 -lda ({z1}),y -tay -lda {c2},y -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_(_deref_pbuz1) -tya -tax -ldy #0 -lda ({z1}),y -tay -lda {c2},y -sta {c1},x -//FRAGMENT vboaa=vboc1 -lda #{c1} -//FRAGMENT vboxx=vboc1 -lda #{c1} -tax -//FRAGMENT vboyy=vboc1 -lda #{c1} -tay -//FRAGMENT vwuz1=_deref_pbuz2_word__deref_pbuz3 -ldy #0 -lda ({z3}),y -sta {z1} -lda ({z2}),y -sta {z1}+1 -//FRAGMENT vbuz1=_deref_pbuc1_plus_2 -lda {c1} -clc -adc #2 -sta {z1} -//FRAGMENT vbuaa=_deref_pbuc1_plus_2 -lda {c1} -clc -adc #2 -//FRAGMENT vbuxx=_deref_pbuc1_plus_2 -ldx {c1} -inx -inx -//FRAGMENT vbuyy=_deref_pbuc1_plus_2 -ldy {c1} -iny -iny -//FRAGMENT 0_neq_vwuz1_then_la1 -lda {z1} -ora {z1}+1 -bne {la1} -//FRAGMENT _deref_pbuz1=_byte_vwsz2 -lda {z2} -ldy #0 -sta ({z1}),y -//FRAGMENT vbuz1=vbuxx_band_pbuz2_derefidx_vbuc1 -ldy #{c1} -txa -and ({z2}),y -sta {z1} -//FRAGMENT vbuaa=vbuxx_band_pbuz1_derefidx_vbuc1 -ldy #{c1} -txa -and ({z1}),y -//FRAGMENT vbuxx=vbuxx_band_pbuz1_derefidx_vbuc1 -ldy #{c1} -lda ({z1}),y -axs #0 -//FRAGMENT vbuyy=vbuxx_band_pbuz1_derefidx_vbuc1 -ldy #{c1} -txa -and ({z1}),y -tay -//FRAGMENT _deref_pbuc1_eq_vbuc2_then_la1 -lda #{c2} -cmp {c1} -beq {la1} -//FRAGMENT vbsz1=vbsz2_ror_1 -lda {z2} -cmp #$80 -ror -sta {z1} -//FRAGMENT vbsaa=vbsz1_ror_1 -lda {z1} -cmp #$80 -ror -//FRAGMENT vbsxx=vbsz1_ror_1 -lda {z1} -cmp #$80 -ror -tax -//FRAGMENT vbsyy=vbsz1_ror_1 -lda {z1} -cmp #$80 -ror -tay -//FRAGMENT vbsz1=vbsaa_ror_1 -cmp #$80 -ror -sta {z1} -//FRAGMENT vbsaa=vbsaa_ror_1 -cmp #$80 -ror -//FRAGMENT vbsxx=vbsaa_ror_1 -cmp #$80 -ror -tax -//FRAGMENT vbsyy=vbsaa_ror_1 -cmp #$80 -ror -tay -//FRAGMENT vbsz1=vbsxx_ror_1 -txa -cmp #$80 -ror -sta {z1} -//FRAGMENT vbsaa=vbsxx_ror_1 -txa -cmp #$80 -ror -//FRAGMENT vbsxx=vbsxx_ror_1 -txa -cmp #$80 -ror -tax -//FRAGMENT vbsyy=vbsxx_ror_1 -txa -cmp #$80 -ror -tay -//FRAGMENT vbsz1=vbsyy_ror_1 -tya -cmp #$80 -ror -sta {z1} -//FRAGMENT vbsaa=vbsyy_ror_1 -tya -cmp #$80 -ror -//FRAGMENT vbsxx=vbsyy_ror_1 -tya -cmp #$80 -ror -tax -//FRAGMENT vbsyy=vbsyy_ror_1 -tya -cmp #$80 -ror -tay -//FRAGMENT vbsyy_lt_0_then_la1 -cpy #0 -bmi {la1} -//FRAGMENT vbuz1=_neg_vbuyy -dey -tya -eor #$ff -sta {z1} -//FRAGMENT vbuaa=_neg_vbuyy -dey -tya -eor #$ff -//FRAGMENT vbuxx=_neg_vbuyy -tya -eor #$ff -tax -inx -//FRAGMENT vbuz1=vbuz2_band_vbuz3 -lda {z2} -and {z3} -sta {z1} -//FRAGMENT vbuz1=vbuaa_band_vbuz2 -and {z2} -sta {z1} -//FRAGMENT vbuz1=vbuxx_band_vbuz2 -lda {z2} -sax {z1} -//FRAGMENT vbuz1=vbuyy_band_vbuz2 -tya -and {z2} -sta {z1} -//FRAGMENT vbuz1=vbuz2_band_vbuxx -lda {z2} -sax {z1} -//FRAGMENT vbuz1=vbuaa_band_vbuxx -sax {z1} -//FRAGMENT vbuaa=vbuz1_band_vbuz2 -lda {z1} -and {z2} -//FRAGMENT vbuaa=vbuaa_band_vbuz1 -and {z1} -//FRAGMENT vbuaa=vbuxx_band_vbuz1 -txa -and {z1} -//FRAGMENT vbuaa=vbuyy_band_vbuz1 -tya -and {z1} -//FRAGMENT vbuxx=vbuz1_band_vbuz2 -lda {z1} -and {z2} -tax -//FRAGMENT vbuxx=vbuaa_band_vbuz1 -ldx {z1} -axs #0 -//FRAGMENT vbuxx=vbuxx_band_vbuz1 -lda {z1} -axs #0 -//FRAGMENT vbuxx=vbuyy_band_vbuz1 -ldx {z1} -tya -axs #0 -//FRAGMENT vbuyy=vbuz1_band_vbuz2 -lda {z1} -and {z2} -tay -//FRAGMENT vbuyy=vbuaa_band_vbuz1 -and {z1} -tay -//FRAGMENT vbuyy=vbuxx_band_vbuz1 -txa -and {z1} -tay -//FRAGMENT vbuyy=vbuyy_band_vbuz1 -tya -and {z1} -tay -//FRAGMENT vdsz1=vdsz2_rol_4 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -//FRAGMENT vwuz1=vbuc1_plus__hi_vdsz2 -NO_SYNTHESIS -//FRAGMENT vwuz1=vwuc1_plus__hi_vdsz2 -clc -lda #<{c1} -adc {z2}+2 -sta {z1} -lda #>{c1} -adc {z2}+3 -sta {z1}+1 -//FRAGMENT vwuz1=vbsc1_plus__hi_vdsz2 -NO_SYNTHESIS -//FRAGMENT vwuz1=vwuz2_minus_vwuz1 -lda {z2} -sec -sbc {z1} -sta {z1} -lda {z2}+1 -sbc {z1}+1 -sta {z1}+1 -//FRAGMENT vdsz1=vdsz1_rol_4 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -//FRAGMENT vwsz1=vwsz2_ror_2 -lda {z2}+1 -cmp #$80 -ror -sta {z1}+1 -lda {z2} -ror -sta {z1} -lda {z1}+1 -cmp #$80 -ror {z1}+1 -ror {z1} -//FRAGMENT vwsz1=vbsc1_plus_vwsz2 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_plus_vbuz2 -clc -lda {z1} -adc {z2} -sta {z1} -lda {z1}+1 -adc #0 -sta {z1}+1 -//FRAGMENT vwsz1=vwsc1_plus_vwsz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vbsc1_plus_vwsz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=_word_pbuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=_word_pbuc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=_word_pbuc1_derefidx_vbuxx -lda {c1},x -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=_word_pbuc1_derefidx_vbuyy -lda {c1},y -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT pbuz1_ge_vwuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bcc !+ -bne {la1} -lda {z1} -cmp #<{c1} -bcs {la1} -!: -//FRAGMENT pbuc1_derefidx_vbuz1=vbum2 -lda {m2} -ldy {z1} -sta {c1},y -//FRAGMENT vbum1=vbum1_plus_vbuz2 -lda {m1} -clc -adc {z2} -sta {m1} -//FRAGMENT pbuc1_derefidx_vbuaa=vbum1 -tay -lda {m1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=vbum1 -lda {m1} -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=vbum1 -lda {m1} -sta {c1},y -//FRAGMENT vbum1=vbum1_plus_vbuxx -txa -clc -adc {m1} -sta {m1} -//FRAGMENT vbum1=vbum1_plus_vbuyy -tya -clc -adc {m1} -sta {m1} -//FRAGMENT pbuc1_derefidx_vbuz1=_deref_pbuc2 -lda {c2} -ldy {z1} -sta {c1},y -//FRAGMENT _deref_pbuc1=_deref_pbuc1_plus_vbuz1 -lda {c1} -clc -adc {z1} -sta {c1} -//FRAGMENT pbuc1_derefidx_vbuaa=_deref_pbuc2 -tay -lda {c2} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=_deref_pbuc2 -lda {c2} -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=_deref_pbuc2 -lda {c2} -sta {c1},y -//FRAGMENT _deref_pbuc1=_deref_pbuc1_plus_vbuxx -txa -clc -adc {c1} -sta {c1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_plus_vbuyy -tya -clc -adc {c1} -sta {c1} -//FRAGMENT pbum1=pbum1_plus_vbuc1 -lda #{c1} -clc -adc {m1} -sta {m1} -bcc !+ -inc {m1}+1 -!: -//FRAGMENT vwsz1=vwsz1_plus_vbsz2 -lda {z2} -pha -clc -adc {z1} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z1}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_plus_vbsaa -pha -clc -adc {z1} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z1}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_plus_vbsxx -txa -pha -clc -adc {z1} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z1}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_plus_vbsyy -tya -pha -clc -adc {z1} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z1}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_sethi_vbuz2 -lda {z2} -sta {z1}+1 -lda #<{c1} -sta {z1} -//FRAGMENT pbuz1=pbuz2_setlo_vbuz3 -lda {z3} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_sethi_vbuz2 -lda {z2} -sta {z1}+1 -lda #<{c1} -sta {z1} -//FRAGMENT vwuz1=vwuz2_setlo_vbuz3 -lda {z3} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_sethi_vbuaa -sta {z1}+1 -lda #<{c1} -sta {z1} -//FRAGMENT pbuz1=pbuc1_sethi_vbuxx -stx {z1}+1 -ldx #<{c1} -stx {z1} -//FRAGMENT pbuz1=pbuz2_setlo_vbuaa -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_setlo_vbuxx -stx {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_setlo_vbuyy -sty {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuc1_sethi_vbuaa -sta {z1}+1 -lda #<{c1} -sta {z1} -//FRAGMENT vwuz1=vwuc1_sethi_vbuxx -stx {z1}+1 -ldx #<{c1} -stx {z1} -//FRAGMENT vwuz1=vwuz2_setlo_vbuaa -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_setlo_vbuxx -stx {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz2_setlo_vbuyy -sty {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_sethi_vbuyy -sty {z1}+1 -ldy #<{c1} -sty {z1} -//FRAGMENT vwuz1=vwuc1_sethi_vbuyy -sty {z1}+1 -ldy #<{c1} -sty {z1} -//FRAGMENT pbuz1=pbuz1_setlo_vbuaa -sta {z1} -//FRAGMENT vwuz1=vwuz1_setlo_vbuaa -sta {z1} -//FRAGMENT vdsz1=vdsc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -lda #<{c1}>>$10 -sta {z1}+2 -lda #>{c1}>>$10 -sta {z1}+3 -//FRAGMENT vdsz1_lt_0_then_la1 -lda {z1}+3 -bmi {la1} -//FRAGMENT vdsz1=_neg_vdsz1 -sec -lda {z1} -eor #$ff -adc #$0 -sta {z1} -lda {z1}+1 -eor #$ff -adc #$0 -sta {z1}+1 -lda {z1}+2 -eor #$ff -adc #$0 -sta {z1}+2 -lda {z1}+3 -eor #$ff -adc #$0 -sta {z1}+3 -//FRAGMENT pwsc1_derefidx_vbuz1_ge_vwsz2_then_la1 -ldy {z1} -lda {c1},y -cmp {z2} -lda {c1}+1,y -sbc {z2}+1 -bvc !+ -eor #$80 -!: -bpl {la1} -//FRAGMENT vbuz1=_lo_pwsc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=_lo_pwsc1_derefidx_vbuaa -tay -lda {c1},y -//FRAGMENT vbuxx=_lo_pwsc1_derefidx_vbuaa -tax -lda {c1},x -tax -//FRAGMENT vbuyy=_lo_pwsc1_derefidx_vbuaa -tay -lda {c1},y -tay -//FRAGMENT pwsc1_derefidx_vbuaa_ge_vwsz1_then_la1 -tay -lda {c1},y -cmp {z1} -lda {c1}+1,y -sbc {z1}+1 -bvc !+ -eor #$80 -!: -bpl {la1} -//FRAGMENT pwsc1_derefidx_vbuxx_ge_vwsz1_then_la1 -lda {c1},x -cmp {z1} -lda {c1}+1,x -sbc {z1}+1 -bvc !+ -eor #$80 -!: -bpl {la1} -//FRAGMENT pwsc1_derefidx_vbuyy_ge_vwsz1_then_la1 -lda {c1},y -cmp {z1} -lda {c1}+1,y -sbc {z1}+1 -bvc !+ -eor #$80 -!: -bpl {la1} -//FRAGMENT pbuz1_derefidx_vbuz2=vbuz2 -lda {z2} -tay -sta ({z1}),y -//FRAGMENT pbuz1=pbuz2_minus_vbuc1 -sec -lda {z2} -sbc #{c1} -sta {z1} -lda {z2}+1 -sbc #0 -sta {z1}+1 -//FRAGMENT _deref_qssz1=pssz2 -ldy #0 -lda {z2} -sta ({z1}),y -iny -lda {z2}+1 -sta ({z1}),y -//FRAGMENT vwuz1=vwuz1_plus_pwuz2_derefidx_vbuc1 -ldy #{c1} -clc -lda {z1} -adc ({z2}),y -sta {z1} -iny -lda {z1}+1 -adc ({z2}),y -sta {z1}+1 -//FRAGMENT pssz1=_deref_qssz1 -ldy #0 -lda ({z1}),y -pha -iny -lda ({z1}),y -sta {z1}+1 -pla -sta {z1} -//FRAGMENT _deref_pbuz1_eq__deref_pbuz2_then_la1 -ldy #0 -lda ({z1}),y -ldy #0 -cmp ({z2}),y -beq {la1} -//FRAGMENT vbsz1_le_0_then_la1 -lda {z1} -cmp #1 -bmi {la1} -//FRAGMENT vwsz1=vwsz1_minus_vbsz2 -lda {z2} -sta $fe -ora #$7f -bmi !+ -lda #0 -!: -sta $ff -sec -lda {z1} -sbc $fe -sta {z1} -lda {z1}+1 -sbc $ff -sta {z1}+1 -//FRAGMENT vbsaa_neq_vbsc1_then_la1 -cmp #{c1} -bne {la1} -//FRAGMENT vbsaa_le_0_then_la1 -cmp #1 -bmi {la1} -//FRAGMENT vbsaa_neq_vbsz1_then_la1 -cmp {z1} -bne {la1} -//FRAGMENT vwsz1=vwsz1_minus_vbsxx -txa -sta $fe -ora #$7f -bmi !+ -lda #0 -!: -sta $ff -sec -lda {z1} -sbc $fe -sta {z1} -lda {z1}+1 -sbc $ff -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_minus_vbsyy -tya -sta $fe -ora #$7f -bmi !+ -lda #0 -!: -sta $ff -sec -lda {z1} -sbc $fe -sta {z1} -lda {z1}+1 -sbc $ff -sta {z1}+1 -//FRAGMENT vbsyy_neq_vbsc1_then_la1 -cpy #{c1} -bne {la1} -//FRAGMENT vbsxx_le_0_then_la1 -cpx #1 -bmi {la1} -//FRAGMENT vbsyy_neq_vbsz1_then_la1 -cpy {z1} -bne {la1} -//FRAGMENT vbsyy=_dec_vbsyy -dey -//FRAGMENT vbsyy_neq_vbsxx_then_la1 -stx $ff -cpy $ff -bne {la1} -//FRAGMENT vbsyy_le_0_then_la1 -cpy #1 -bmi {la1} -//FRAGMENT vbsz1_neq_vbsyy_then_la1 -cpy {z1} -bne {la1} -//FRAGMENT vbsxx_neq_vbsyy_then_la1 -stx $ff -cpy $ff -bne {la1} -//FRAGMENT vbuz1=vbuz1_bor_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -ora {c1},y -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz3 -ldy {z2} -lda {c1},y -ldy {z3} -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuz3 -ldy {z2} -lda {c1},y -ldy {z3} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuxx=vbuxx_bor_pbuc1_derefidx_vbuz1 -txa -ldx {z1} -ora {c1},x -tax -//FRAGMENT vbuyy=vbuyy_bor_pbuc1_derefidx_vbuz1 -tya -ldy {z1} -ora {c1},y -tay -//FRAGMENT vbuz1=vbuz1_bor_pbuc1_derefidx_vbuxx -lda {c1},x -ora {z1} -sta {z1} -//FRAGMENT vbuxx=vbuxx_bor_pbuc1_derefidx_vbuxx -txa -ora {c1},x -tax -//FRAGMENT vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx -tya -ora {c1},x -tay -//FRAGMENT vbuz1=vbuz1_bor_pbuc1_derefidx_vbuyy -lda {c1},y -ora {z1} -sta {z1} -//FRAGMENT vbuxx=vbuxx_bor_pbuc1_derefidx_vbuyy -txa -ora {c1},y -tax -//FRAGMENT vbuyy=vbuyy_bor_pbuc1_derefidx_vbuyy -tya -ora {c1},y -tay -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz2 -ldy {z1} -lda {c1},y -ldy {z2} -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz2 -ldx {z1} -lda {c1},x -ldx {z2} -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz2 -ldy {z1} -lda {c1},y -ldy {z2} -clc -adc {c2},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuz2 -tay -lda {c1},y -ldy {z2} -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuz1 -tay -lda {c1},y -ldy {z1} -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuz1 -tax -lda {c1},x -ldx {z1} -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuz1 -tay -lda {c1},y -ldy {z1} -clc -adc {c2},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuz2 -lda {c1},x -ldy {z2} -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuz1 -lda {c1},x -ldy {z1} -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuz1 -lda {c1},x -ldx {z1} -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuz1 -lda {c1},x -ldy {z1} -clc -adc {c2},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuz2 -lda {c1},y -ldy {z2} -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuz1 -lda {c1},y -ldy {z1} -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuz1 -lda {c1},y -ldx {z1} -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuz1 -lda {c1},y -ldy {z1} -clc -adc {c2},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuxx -lda {c2},x -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuxx -lda {c2},x -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuxx -lda {c2},x -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuxx -lda {c2},x -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuxx -tay -lda {c1},y -clc -adc {c2},x -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuxx -tay -lda {c1},y -clc -adc {c2},x -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuxx -tay -lda {c1},y -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuxx -tay -lda {c1},y -clc -adc {c2},x -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx -lda {c1},x -clc -adc {c2},x -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx -lda {c1},x -clc -adc {c2},x -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx -lda {c1},x -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx -lda {c1},x -clc -adc {c2},x -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx -lda {c1},y -clc -adc {c2},x -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx -lda {c1},y -clc -adc {c2},x -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx -lda {c1},y -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx -lda {c1},y -clc -adc {c2},x -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuyy -lda {c2},y -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuyy -lda {c2},y -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuyy -lda {c2},y -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuyy -lda {c2},y -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuyy -tax -lda {c1},x -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuyy -tax -lda {c1},x -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuyy -tax -lda {c1},x -clc -adc {c2},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuyy -tax -lda {c1},x -clc -adc {c2},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuyy -lda {c1},x -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuyy -lda {c1},x -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuyy -lda {c1},x -clc -adc {c2},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuyy -lda {c1},x -clc -adc {c2},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy -lda {c1},y -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy -lda {c1},y -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy -lda {c1},y -clc -adc {c2},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy -lda {c1},y -clc -adc {c2},y -tay -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 -ldy {z1} -lda {c1},y -ldy {z2} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 -ldx {z1} -lda {c1},x -ldx {z2} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 -ldy {z1} -lda {c1},y -ldy {z2} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuz2 -tay -lda {c1},y -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuz1 -tay -lda {c1},y -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuz1 -tax -lda {c1},x -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuz1 -tay -lda {c1},y -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuz2 -lda {c1},x -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuz1 -lda {c1},x -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuz1 -lda {c1},x -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuz1 -lda {c1},x -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuz2 -lda {c1},y -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuz1 -lda {c1},y -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuz1 -lda {c1},y -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuz1 -lda {c1},y -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},y -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},y -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuaa -tax -lda {c1},x -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},y -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},y -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},y -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuaa -tax -lda {c1},x -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},y -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},x -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},x -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},x -clc -adc {c1},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuaa -tay -lda {c1},x -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuaa -tax -lda {c1},x -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuaa -tax -lda {c1},x -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuaa -tax -lda {c1},x -clc -adc {c1},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuaa -tax -lda {c1},x -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuxx -lda {c1},x -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuxx -lda {c1},x -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuxx -lda {c1},x -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuxx -lda {c1},x -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuxx -tay -lda {c1},x -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuxx -tay -lda {c1},x -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuxx -tay -lda {c1},x -clc -adc {c1},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuxx -tay -lda {c1},x -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {c1},x -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {c1},x -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {c1},x -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {c1},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuxx -lda {c1},x -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc1_derefidx_vbuyy -lda {c1},y -ldy {z2} -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuyy -lda {c1},y -ldy {z1} -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuyy -lda {c1},y -ldx {z1} -clc -adc {c1},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuyy -lda {c1},y -ldy {z1} -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuyy -tax -lda {c1},x -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuyy -tax -lda {c1},x -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuyy -tax -lda {c1},x -clc -adc {c1},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc1_derefidx_vbuyy -tax -lda {c1},x -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuyy -lda {c1},x -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuyy -lda {c1},x -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuyy -lda {c1},x -clc -adc {c1},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_pbuc1_derefidx_vbuyy -lda {c1},x -clc -adc {c1},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {c1},y -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc1_derefidx_vbuyy -lda {c1},y -clc -adc {c1},y -tay -//FRAGMENT vbuaa_le_vbuz1_then_la1 -ldy {z1} -sta $ff -cpy $ff -bcs {la1} -//FRAGMENT vbuaa_le_vbuxx_then_la1 -tay -sty $ff -cpx $ff -bcs {la1} -//FRAGMENT vbuyy_le_vbuxx_then_la1 -sty $ff -cpx $ff -bcs {la1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz2 -ldy {z2} -lda {c1},y -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c1},y -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz1 -ldx {z1} -lda {c1},x -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c1},y -clc -adc {c2},y -tay -//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuaa -tay -lda {c1},y -clc -adc {c2},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuaa -tay -lda {c1},y -clc -adc {c2},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuaa -tax -lda {c1},x -clc -adc {c2},x -tax -//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuaa -tay -lda {c1},y -clc -adc {c2},y -tay -//FRAGMENT vbuz1=pbuz2_derefidx_(pbuz3_derefidx_vbuz4)_plus_pbuz5_derefidx_(pbuz6_derefidx_vbuz4) -ldy {z4} -lda ({z6}),y -sta $ff -lda ({z3}),y -tay -lda ({z2}),y -ldy $ff -clc -adc ({z5}),y -sta {z1} -//FRAGMENT vbuz1=vbuz1_bor_pbuc1_derefidx_vbuaa -tay -lda {c1},y -ora {z1} -sta {z1} -//FRAGMENT vbuxx=vbuxx_bor_pbuc1_derefidx_vbuaa -tay -txa -ora {c1},y -tax -//FRAGMENT vbuyy=vbuyy_bor_pbuc1_derefidx_vbuaa -tax -tya -ora {c1},x -tay -//FRAGMENT vbuaa=pbuz1_derefidx_(pbuz2_derefidx_vbuz3)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuz3) -ldy {z3} -lda ({z5}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z4}),y -//FRAGMENT vbuxx=pbuz1_derefidx_(pbuz2_derefidx_vbuz3)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuz3) -ldy {z3} -lda ({z5}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z4}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_(pbuz2_derefidx_vbuz3)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuz3) -ldy {z3} -lda ({z5}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z4}),y -tay -//FRAGMENT vbuz1=pbuz2_derefidx_(pbuz3_derefidx_vbuaa)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuaa) -tay -lda ({z5}),y -sta $ff -lda ({z3}),y -tay -lda ({z2}),y -ldy $ff -clc -adc ({z4}),y -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_(pbuz2_derefidx_vbuaa)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuaa) -tay -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -//FRAGMENT vbuxx=pbuz1_derefidx_(pbuz2_derefidx_vbuaa)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuaa) -tay -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_(pbuz2_derefidx_vbuaa)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuaa) -tay -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -tay -//FRAGMENT vbuz1=pbuz2_derefidx_(pbuz3_derefidx_vbuxx)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuxx) -txa -tay -lda ({z5}),y -sta $ff -lda ({z3}),y -tay -lda ({z2}),y -ldy $ff -clc -adc ({z4}),y -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_(pbuz2_derefidx_vbuxx)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuxx) -txa -tay -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -//FRAGMENT vbuxx=pbuz1_derefidx_(pbuz2_derefidx_vbuxx)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuxx) -txa -tay -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_(pbuz2_derefidx_vbuxx)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuxx) -txa -tay -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -tay -//FRAGMENT vbuz1=pbuz2_derefidx_(pbuz3_derefidx_vbuyy)_plus_pbuz4_derefidx_(pbuz5_derefidx_vbuyy) -lda ({z5}),y -sta $ff -lda ({z3}),y -tay -lda ({z2}),y -ldy $ff -clc -adc ({z4}),y -sta {z1} -//FRAGMENT vbuaa=pbuz1_derefidx_(pbuz2_derefidx_vbuyy)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuyy) -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -//FRAGMENT vbuxx=pbuz1_derefidx_(pbuz2_derefidx_vbuyy)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuyy) -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -tax -//FRAGMENT vbuyy=pbuz1_derefidx_(pbuz2_derefidx_vbuyy)_plus_pbuz3_derefidx_(pbuz4_derefidx_vbuyy) -lda ({z4}),y -sta $ff -lda ({z2}),y -tay -lda ({z1}),y -ldy $ff -clc -adc ({z3}),y -tay -//FRAGMENT _deref_pbuc1=_deref_(_deref_qbuc2) -ldy {c2} -sty $fe -ldy {c2}+1 -sty $ff -ldy #0 -lda ($fe),y -sta {c1} -//FRAGMENT _deref_pwsz1=vwsc1 -ldy #0 -lda #<{c1} -sta ({z1}),y -iny -lda #>{c1} -sta ({z1}),y -//FRAGMENT vwsz1=_deref_pwsz2_band_vwsc1 -ldy #0 -lda ({z2}),y -and #<{c1} -sta {z1} -iny -lda ({z2}),y -and #>{c1} -sta {z1}+1 -//FRAGMENT vbuz1=_hi__deref_pwsz2 -ldy #1 -lda ({z2}),y -sta {z1} -//FRAGMENT vbuaa=_hi__deref_pwsz1 -ldy #1 -lda ({z1}),y -//FRAGMENT vbuxx=_hi__deref_pwsz1 -ldy #1 -lda ({z1}),y -tax -//FRAGMENT vbuyy=_hi__deref_pwsz1 -ldy #1 -lda ({z1}),y -tay -//FRAGMENT pwsc1_derefidx_vbuz1=pwsc1_derefidx_vbuz1_minus_vbuz2 -ldx {z1} -sec -lda {c1},x -sbc {z2} -sta {c1},x -bcs !+ -dec {c1}+1,x -!: -//FRAGMENT pwsc1_derefidx_vbuz1=pwsc1_derefidx_vbuz1_minus_vbuxx -ldy {z1} -stx $ff -sec -lda {c1},y -sbc $ff -sta {c1},y -lda {c1}+1,y -sbc #0 -sta {c1},y -//FRAGMENT pwsc1_derefidx_vbuz1=pwsc1_derefidx_vbuz1_minus_vbuyy -tya -ldy {z1} -clc -sbc {c1},y -eor #$ff -sta {c1},y -bcc !+ -lda {c1}+1,y -sbc #$01 -sta {c1}+1,y -!: -//FRAGMENT pwsc1_derefidx_vbuaa=pwsc1_derefidx_vbuaa_minus_vbuz1 -tax -sec -lda {c1},x -sbc {z1} -sta {c1},x -bcs !+ -dec {c1}+1,x -!: -//FRAGMENT pwsc1_derefidx_vbuaa=pwsc1_derefidx_vbuaa_minus_vbuxx -sec -stx $ff -tax -lda {c1},x -sbc $ff -sta {c1},x -bcs !+ -dec {c1}+1,x -!: -//FRAGMENT pwsc1_derefidx_vbuaa=pwsc1_derefidx_vbuaa_minus_vbuyy -sec -sty $ff -tay -lda {c1},y -sbc $ff -sta {c1},y -lda {c1}+1,y -sbc #$00 -sta {c1}+1,y -//FRAGMENT pwsc1_derefidx_vbuxx=pwsc1_derefidx_vbuxx_minus_vbuz1 -sec -lda {c1},x -sbc {z1} -sta {c1},x -bcs !+ -dec {c1}+1,x -!: -//FRAGMENT pwsc1_derefidx_vbuxx=pwsc1_derefidx_vbuxx_minus_vbuxx -txa -clc -sbc {c1},x -eor #$ff -sta {c1},x -bcc !+ -lda {c1}+1,x -sbc #$01 -sta {c1}+1,x -!: -//FRAGMENT pwsc1_derefidx_vbuxx=pwsc1_derefidx_vbuxx_minus_vbuyy -tya -clc -sbc {c1},x -eor #$ff -sta {c1},x -bcc !+ -lda {c1}+1,x -sbc #$01 -sta {c1}+1,x -!: -//FRAGMENT pwsc1_derefidx_vbuyy=pwsc1_derefidx_vbuyy_minus_vbuz1 -sec -lda {c1},y -sbc {z1} -sta {c1},y -lda {c1}+1,y -sbc #0 -sta {c1}+1,y -//FRAGMENT pwsc1_derefidx_vbuyy=pwsc1_derefidx_vbuyy_minus_vbuxx -stx $ff -sec -lda {c1},y -sbc $ff -sta {c1},y -lda {c1}+1,y -sbc #0 -sta {c1},y -//FRAGMENT pwsc1_derefidx_vbuyy=pwsc1_derefidx_vbuyy_minus_vbuyy -tya -clc -sbc {c1},y -eor #$ff -sta {c1},y -bcc !+ -lda {c1}+1,y -sbc #$01 -sta {c1}+1,y -!: -//FRAGMENT pwuc1_derefidx_vbuaa=vbuc2 -tay -lda #{c2} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2_plus_pwuc1_derefidx_vbuz3 -ldx {z2} -ldy {z3} -clc -lda {c1},x -adc {c1},y -sta {z1} -lda {c1}+1,x -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vbuaa=vbuz1_plus_2 -lda {z1} -clc -adc #2 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx_plus_pwuc1_derefidx_vbuz2 -ldy {z2} -clc -lda {c1},x -adc {c1},y -sta {z1} -lda {c1}+1,x -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy_plus_pwuc1_derefidx_vbuz2 -ldx {z2} -clc -lda {c1},x -adc {c1},y -sta {z1} -lda {c1}+1,x -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2_plus_pwuc1_derefidx_vbuaa -ldx {z2} -tay -clc -lda {c1},x -adc {c1},y -sta {z1} -lda {c1}+1,x -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx_plus_pwuc1_derefidx_vbuaa -tay -clc -lda {c1},x -adc {c1},y -sta {z1} -lda {c1}+1,x -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy_plus_pwuc1_derefidx_vbuaa -tax -clc -lda {c1},x -adc {c1},y -sta {z1} -lda {c1}+1,x -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2_plus_pwuc1_derefidx_vbuxx -ldy {z2} -clc -lda {c1},x -adc {c1},y -sta {z1} -lda {c1}+1,x -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx_plus_pwuc1_derefidx_vbuxx -txa -tay -clc -lda {c1},x -adc {c1},y -sta {z1} -lda {c1}+1,x -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy_plus_pwuc1_derefidx_vbuxx -clc -lda {c1},x -adc {c1},y -sta {z1} -lda {c1}+1,x -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2_plus_pwuc1_derefidx_vbuyy -ldx {z2} -clc -lda {c1},x -adc {c1},y -sta {z1} -lda {c1}+1,x -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx_plus_pwuc1_derefidx_vbuyy -clc -lda {c1},x -adc {c1},y -sta {z1} -lda {c1}+1,x -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy_plus_pwuc1_derefidx_vbuyy -tya -tax -clc -lda {c1},x -adc {c1},y -sta {z1} -lda {c1}+1,x -adc {c1}+1,y -sta {z1}+1 -//FRAGMENT vbuz1=vbuyy_plus_2 -iny -iny -sty {z1} -//FRAGMENT vbuz1=_deref_pbuz2_plus__deref_pbuz3 -ldy #0 -lda ({z2}),y -clc -ldy #0 -adc ({z3}),y -sta {z1} -//FRAGMENT vbuaa=_deref_pbuz1_plus__deref_pbuz2 -ldy #0 -lda ({z1}),y -clc -ldy #0 -adc ({z2}),y -//FRAGMENT vbuxx=_deref_pbuz1_plus__deref_pbuz2 -ldy #0 -lda ({z1}),y -clc -ldy #0 -adc ({z2}),y -tax -//FRAGMENT vbuyy=_deref_pbuz1_plus__deref_pbuz2 -ldy #0 -lda ({z1}),y -clc -ldy #0 -adc ({z2}),y -tay -//FRAGMENT vwuz1=_deref_pwuz2_plus__deref_pwuz1 -ldy #0 -clc -lda ({z1}),y -adc ({z2}),y -pha -iny -lda ({z1}),y -adc ({z2}),y -sta {z1}+1 -pla -sta {z1} -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc1_derefidx_vbuz1_plus_pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c1},y -clc -adc {c2},y -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc1_derefidx_vbuz1_plus_vbuc2 -lda #{c2} -ldy {z1} -clc -adc {c1},y -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuaa=pbuc1_derefidx_vbuaa_plus_pbuc2_derefidx_vbuaa -tax -tay -lda {c1},x -clc -adc {c2},x -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx -lda {c1},x -clc -adc {c2},x -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuyy -lda {c1},y -clc -adc {c2},y -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc1_derefidx_vbuxx_plus_vbuc2 -lda #{c2} -clc -adc {c1},x -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuyy_plus_vbuc2 -lda #{c2} -clc -adc {c1},y -sta {c1},y -//FRAGMENT _deref_pbuz1=_deref_pbuz1_plus_pbuz1_derefidx_vbuc1 -ldy #0 -lda ({z1}),y -ldy #{c1} -clc -adc ({z1}),y -ldy #0 -sta ({z1}),y -//FRAGMENT pbuz1_derefidx_vbuc1=pbuz1_derefidx_vbuc1_plus_vbuc2 -lda #{c2} -ldy #{c1} -clc -adc ({z1}),y -sta ({z1}),y -//FRAGMENT vbuz1=_deref_pbuz2_ror_4 -ldy #0 -lda ({z2}),y -lsr -lsr -lsr -lsr -sta {z1} -//FRAGMENT vbuaa=_deref_pbuz1_ror_4 -ldy #0 -lda ({z1}),y -lsr -lsr -lsr -lsr -//FRAGMENT vbuxx=_deref_pbuz1_ror_4 -ldy #0 -lda ({z1}),y -lsr -lsr -lsr -lsr -tax -//FRAGMENT vbuyy=_deref_pbuz1_ror_4 -ldy #0 -lda ({z1}),y -lsr -lsr -lsr -lsr -tay -//FRAGMENT _deref_pbuc1=_deref_pbuc1_bxor_vbuc2 -lda #{c2} -eor {c1} -sta {c1} -//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_vwuc2 -ldy {z1} -clc -lda {c1},y -adc #<{c2} -sta {c1},y -lda {c1}+1,y -adc #>{c2} -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuaa=pwuc1_derefidx_vbuaa_plus_vwuc2 -tay -clc -lda {c1},y -adc #<{c2} -sta {c1},y -lda {c1}+1,y -adc #>{c2} -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_vwuc2 -clc -lda {c1},x -adc #<{c2} -sta {c1},x -lda {c1}+1,x -adc #>{c2} -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_vwuc2 -clc -lda {c1},y -adc #<{c2} -sta {c1},y -lda {c1}+1,y -adc #>{c2} -sta {c1}+1,y -//FRAGMENT vwsz1=_deref_pwsz2_minus__deref_pwsz3 -ldy #0 -sec -lda ({z2}),y -sbc ({z3}),y -sta {z1} -iny -lda ({z2}),y -sbc ({z3}),y -sta {z1}+1 -//FRAGMENT vduz1=vduz2_plus_vwuz3 -lda {z2} -clc -adc {z3} -sta {z1} -lda {z2}+1 -adc {z3}+1 -sta {z1}+1 -lda {z2}+2 -adc #0 -sta {z1}+2 -lda {z2}+3 -adc #0 -sta {z1}+3 -//FRAGMENT vduz1=vduz1_plus_vwuz2 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -lda {z1}+2 -adc #0 -sta {z1}+2 -lda {z1}+3 -adc #0 -sta {z1}+3 -//FRAGMENT _deref_(_deref_qbuc1)=vbuc2 -lda #{c2} -ldy {c1} -sty $fe -ldy {c1}+1 -sty $ff -ldy #0 -sta ($fe),y -//FRAGMENT vwsz1=vwsz2_minus_vwsc1 -lda {z2} -sec -sbc #<{c1} -sta {z1} -lda {z2}+1 -sbc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=_sword_pbsc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -// sign-extend the byte -ora #$7f -bmi !+ -lda #0 -!: -sta {z1}+1 -//FRAGMENT vwsz1=_sword_vbsz2 -lda {z2} -sta {z1} -// sign-extend the byte -ora #$7f -bmi !+ -lda #0 -!: -sta {z1}+1 -//FRAGMENT vwsz1=vwsz2_rol_3 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwsz1=vwsz2_ror_6 -lda {z2} -sta $ff -lda {z2}+1 -sta {z1} -lda #0 -bit {z2}+1 -bpl !+ -lda #$ff -!: -sta {z1}+1 -rol $ff -rol {z1} -rol {z1}+1 -rol $ff -rol {z1} -rol {z1}+1 -//FRAGMENT vwsz1=_deref_pwsc1 -lda {c1} -sta {z1} -lda {c1}+1 -sta {z1}+1 -//FRAGMENT vwsz1=_sword_pbsc1_derefidx_vbuaa -tay -lda {c1},y -sta {z1} -// sign-extend the byte -ora #$7f -bmi !+ -lda #0 -!: -sta {z1}+1 -//FRAGMENT vwsz1=_sword_pbsc1_derefidx_vbuxx -lda {c1},x -sta {z1} -// sign-extend the byte -ora #$7f -bmi !+ -lda #0 -!: -sta {z1}+1 -//FRAGMENT vwsz1=_sword_pbsc1_derefidx_vbuyy -lda {c1},y -sta {z1} -// sign-extend the byte -ora #$7f -bmi !+ -lda #0 -!: -sta {z1}+1 -//FRAGMENT vwsz1=_sword_vbsaa -sta {z1} -// sign-extend the byte -ora #$7f -bmi !+ -lda #0 -!: -sta {z1}+1 -//FRAGMENT vwsz1=_sword_vbsxx -txa -sta {z1} -// sign-extend the byte -ora #$7f -bmi !+ -lda #0 -!: -sta {z1}+1 -//FRAGMENT vwsz1=_sword_vbsyy -tya -sta {z1} -// sign-extend the byte -ora #$7f -bmi !+ -lda #0 -!: -sta {z1}+1 -//FRAGMENT vwsz1=vwsz2_minus_vwsz1 -lda {z2} -sec -sbc {z1} -sta {z1} -lda {z2}+1 -sbc {z1}+1 -sta {z1}+1 -//FRAGMENT vwsz1=vwsz1_ror_6 -lda {z1} -sta $ff -lda {z1}+1 -sta {z1} -lda #0 -bit {z1}+1 -bpl !+ -lda #$ff -!: -sta {z1}+1 -rol $ff -rol {z1} -rol {z1}+1 -rol $ff -rol {z1} -rol {z1}+1 -//FRAGMENT vwsz1=vwsz1_rol_3 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vbsz1_le_vbsc1_then_la1 -lda #{c1} -sec -sbc {z1} -bvc !+ -eor #$80 -!: -bpl {la1} -//FRAGMENT vbsaa_le_vbsc1_then_la1 -sec -sbc #{c1} -beq {la1} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vbsxx_le_vbsc1_then_la1 -txa -sec -sbc #{c1} -beq {la1} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vbsyy_le_vbsc1_then_la1 -tya -sec -sbc #{c1} -beq {la1} -bvc !+ -eor #$80 -!: -bmi {la1} -//FRAGMENT vwsz1=vbsz2_plus_vwsc1 -lda {z2} -tax -clc -adc #<{c1} -sta {z1} -txa -ora #$7f -bmi !+ -lda #0 -!: -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vbsaa_plus_vwsc1 -tax -clc -adc #<{c1} -sta {z1} -txa -ora #$7f -bmi !+ -lda #0 -!: -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vbsxx_plus_vwsc1 -txa -tax -clc -adc #<{c1} -sta {z1} -txa -ora #$7f -bmi !+ -lda #0 -!: -adc #>{c1} -sta {z1}+1 -//FRAGMENT vwsz1=vbsyy_plus_vwsc1 -tya -tax -clc -adc #<{c1} -sta {z1} -txa -ora #$7f -bmi !+ -lda #0 -!: -adc #>{c1} -sta {z1}+1 -//FRAGMENT vbuaa_gt_vbuz1_then_la1 -cmp {z1} -beq !+ -bcs {la1} -!: -//FRAGMENT pduc1_derefidx_vbuz1=pduc2_derefidx_vbuz1 -ldy {z1} -lda {c2},y -sta {c1},y -lda {c2}+1,y -sta {c1}+1,y -lda {c2}+2,y -sta {c1}+2,y -lda {c2}+3,y -sta {c1}+3,y -//FRAGMENT pbuz1_derefidx_vbuz2_eq_0_then_la1 -ldy {z2} -lda ({z1}),y - -cmp #0 -beq {la1} -//FRAGMENT pduc1_derefidx_vbuz1=pduc1_derefidx_vbuz1_plus_pduc2_derefidx_vbuz1 -ldy {z1} -clc -lda {c1},y -adc {c2},y -sta {c1},y -lda {c1}+1,y -adc {c2}+1,y -sta {c1}+1,y -lda {c1}+2,y -adc {c2}+2,y -sta {c1}+2,y -lda {c1}+3,y -adc {c2}+3,y -sta {c1}+3,y -//FRAGMENT qbuc1_derefidx_vbuaa=pbuz1 -tay -lda {z1} -sta {c1},y -lda {z1}+1 -sta {c1}+1,y -//FRAGMENT pduc1_derefidx_vbuaa=pduc2_derefidx_vbuaa -tay -lda {c2},y -sta {c1},y -lda {c2}+1,y -sta {c1}+1,y -lda {c2}+2,y -sta {c1}+2,y -lda {c2}+3,y -sta {c1}+3,y -//FRAGMENT pduc1_derefidx_vbuxx=pduc2_derefidx_vbuxx -lda {c2},x -sta {c1},x -lda {c2}+1,x -sta {c1}+1,x -lda {c2}+2,x -sta {c1}+2,x -lda {c2}+3,x -sta {c1}+3,x -//FRAGMENT pduc1_derefidx_vbuyy=pduc2_derefidx_vbuyy -lda {c2},y -sta {c1},y -lda {c2}+1,y -sta {c1}+1,y -lda {c2}+2,y -sta {c1}+2,y -lda {c2}+3,y -sta {c1}+3,y -//FRAGMENT pbuz1_derefidx_vbuxx_eq_0_then_la1 -txa -tay -lda ({z1}),y - -cmp #0 -beq {la1} -//FRAGMENT pbuz1_derefidx_vbuyy_eq_0_then_la1 -lda ({z1}),y - -cmp #0 -beq {la1} -//FRAGMENT vbuz1=vbuxx_minus_1 -dex -stx {z1} -//FRAGMENT pduc1_derefidx_vbuaa=pduc1_derefidx_vbuaa_plus_pduc2_derefidx_vbuaa -tay -clc -lda {c1},y -adc {c2},y -sta {c1},y -lda {c1}+1,y -adc {c2}+1,y -sta {c1}+1,y -lda {c1}+2,y -adc {c2}+2,y -sta {c1}+2,y -lda {c1}+3,y -adc {c2}+3,y -sta {c1}+3,y -//FRAGMENT pduc1_derefidx_vbuxx=pduc1_derefidx_vbuxx_plus_pduc2_derefidx_vbuxx -clc -lda {c1},x -adc {c2},x -sta {c1},x -lda {c1}+1,x -adc {c2}+1,x -sta {c1}+1,x -lda {c1}+2,x -adc {c2}+2,x -sta {c1}+2,x -lda {c1}+3,x -adc {c2}+3,x -sta {c1}+3,x -//FRAGMENT pduc1_derefidx_vbuyy=pduc1_derefidx_vbuyy_plus_pduc2_derefidx_vbuyy -clc -lda {c1},y -adc {c2},y -sta {c1},y -lda {c1}+1,y -adc {c2}+1,y -sta {c1}+1,y -lda {c1}+2,y -adc {c2}+2,y -sta {c1}+2,y -lda {c1}+3,y -adc {c2}+3,y -sta {c1}+3,y -//FRAGMENT pbuz1=_dec_pbuz2 -lda {z2} -sec -sbc #1 -sta {z1} -lda {z2}+1 -sbc #0 -sta {z1}+1 -//FRAGMENT vduz1_eq_vduz2_then_la1 -lda {z1} -cmp {z2} -bne !+ -lda {z1}+1 -cmp {z2}+1 -bne !+ -lda {z1}+2 -cmp {z2}+2 -bne !+ -lda {z1}+3 -cmp {z2}+3 -beq {la1} -!: -//FRAGMENT vdsz1_eq_vdsz2_then_la1 -lda {z1} -cmp {z2} -bne !+ -lda {z1}+1 -cmp {z2}+1 -bne !+ -lda {z1}+2 -cmp {z2}+2 -bne !+ -lda {z1}+3 -cmp {z2}+3 -beq {la1} -!: -//FRAGMENT vdsz1=vdsz1_plus_vwsz2 -lda {z2}+1 -ora #$7f -bmi !+ -lda #0 -!: -sta $ff -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -lda {z1}+2 -adc $ff -sta {z1}+2 -lda {z1}+3 -adc $ff -sta {z1}+3 -//FRAGMENT vdsz1=vdsz1_minus_vwsz2 -lda {z2}+1 -ora #$7f -bmi !+ -lda #0 -!: -sta $ff -sec -lda {z1} -sbc {z2} -sta {z1} -lda {z1}+1 -sbc {z2}+1 -sta {z1}+1 -lda {z1}+2 -sbc $ff -sta {z1}+2 -lda {z1}+3 -sbc $ff -sta {z1}+3 -//FRAGMENT vwsz1=_dec_vwsz1 -lda {z1} -bne !+ -dec {z1}+1 -!: -dec {z1} -//FRAGMENT _deref_pwuc1=vbuz1 -lda {z1} -sta {c1} -lda #0 -sta {c1}+1 -//FRAGMENT _deref_pwuc1=vbuaa -sta {c1} -lda #0 -sta {c1}+1 -//FRAGMENT _deref_pwuc1=vbuxx -txa -sta {c1} -lda #0 -sta {c1}+1 -//FRAGMENT _deref_pwuc1=vbuyy -tya -sta {c1} -lda #0 -sta {c1}+1 -//FRAGMENT vwsz1_lt_vbsc1_then_la1 -NO_SYNTHESIS -//FRAGMENT vwsz1_lt_vwuc1_then_la1 -lda {z1}+1 -bmi {la1} -cmp #>{c1} -bcc {la1} -bne !+ -lda {z1} -cmp #<{c1} -bcc {la1} -!: -//FRAGMENT vwsz1=pwsc1_derefidx_vbuz2_minus_pwsc2_derefidx_vbuz2 -ldy {z2} -sec -lda {c1},y -sbc {c2},y -sta {z1} -lda {c1}+1,y -sbc {c2}+1,y -sta {z1}+1 -//FRAGMENT vwsz1=_sword_pbuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2_rol_4 -ldy {z2} -lda {c1},y -asl -sta {z1} -lda {c1}+1,y -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT pbsc1_derefidx_vbuz1=vbsc2 -lda #{c2} -ldy {z1} -sta {c1},y -//FRAGMENT vwsz1=pwsc1_derefidx_vbuaa_minus_pwsc2_derefidx_vbuaa -tay -sec -lda {c1},y -sbc {c2},y -sta {z1} -lda {c1}+1,y -sbc {c2}+1,y -sta {z1}+1 -//FRAGMENT vwsz1=pwsc1_derefidx_vbuxx_minus_pwsc2_derefidx_vbuxx -sec -lda {c1},x -sbc {c2},x -sta {z1} -lda {c1}+1,x -sbc {c2}+1,x -sta {z1}+1 -//FRAGMENT vwsz1=pwsc1_derefidx_vbuyy_minus_pwsc2_derefidx_vbuyy -sec -lda {c1},y -sbc {c2},y -sta {z1} -lda {c1}+1,y -sbc {c2}+1,y -sta {z1}+1 -//FRAGMENT vwsz1=_sword_pbuc1_derefidx_vbuxx -lda {c1},x -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwsz1=_sword_pbuc1_derefidx_vbuyy -lda {c1},y -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx_rol_4 -lda {c1},x -asl -sta {z1} -lda {c1}+1,x -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy_rol_4 -lda {c1},y -asl -sta {z1} -lda {c1}+1,y -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT pbsc1_derefidx_vbuxx=vbsc2 -lda #{c2} -sta {c1},x -//FRAGMENT pbsc1_derefidx_vbuyy=vbsc2 -lda #{c2} -sta {c1},y -//FRAGMENT _deref_pwuc1=_deref_pwuc1_plus_vwuc2 -lda #<{c2} -clc -adc {c1} -sta {c1} -lda #>{c2} -adc {c1}+1 -sta {c1}+1 -//FRAGMENT vbuz1=vbuz2_plus__deref_pbuc1 -lda {c1} -clc -adc {z2} -sta {z1} -//FRAGMENT vbuaa=vbuz1_plus__deref_pbuc1 -lda {c1} -clc -adc {z1} -//FRAGMENT vbuxx=vbuz1_plus__deref_pbuc1 -lda {c1} -clc -adc {z1} -tax -//FRAGMENT vbuyy=vbuz1_plus__deref_pbuc1 -lda {c1} -clc -adc {z1} -tay -//FRAGMENT vbuz1=vbuaa_plus__deref_pbuc1 -clc -adc {c1} -sta {z1} -//FRAGMENT vbuaa=vbuaa_plus__deref_pbuc1 -clc -adc {c1} -//FRAGMENT vbuxx=vbuaa_plus__deref_pbuc1 -clc -adc {c1} -tax -//FRAGMENT vbuyy=vbuaa_plus__deref_pbuc1 -clc -adc {c1} -tay -//FRAGMENT vbuz1=vbuxx_plus__deref_pbuc1 -txa -clc -adc {c1} -sta {z1} -//FRAGMENT vbuaa=vbuxx_plus__deref_pbuc1 -txa -clc -adc {c1} -//FRAGMENT vbuxx=vbuxx_plus__deref_pbuc1 -txa -clc -adc {c1} -tax -//FRAGMENT vbuyy=vbuxx_plus__deref_pbuc1 -txa -clc -adc {c1} -tay -//FRAGMENT vbuz1=vbuyy_plus__deref_pbuc1 -tya -clc -adc {c1} -sta {z1} -//FRAGMENT vbuaa=vbuyy_plus__deref_pbuc1 -tya -clc -adc {c1} -//FRAGMENT vbuxx=vbuyy_plus__deref_pbuc1 -tya -clc -adc {c1} -tax -//FRAGMENT vbuyy=vbuyy_plus__deref_pbuc1 -tya -clc -adc {c1} -tay -//FRAGMENT vwsz1=pwsc1_derefidx_vbuz2_plus__deref_pwsz3 -ldx {z2} -clc -ldy #0 -lda {c1},x -adc ({z3}),y -sta {z1} -iny -lda {c1}+1,x -adc ({z3}),y -sta {z1}+1 -//FRAGMENT vwsz1=pwsc1_derefidx_vbuaa_plus__deref_pwsz2 -tax -clc -ldy #0 -lda {c1},x -adc ({z2}),y -sta {z1} -iny -lda {c1}+1,x -adc ({z2}),y -sta {z1}+1 -//FRAGMENT vwsz1=pwsc1_derefidx_vbuxx_plus__deref_pwsz2 -clc -ldy #0 -lda {c1},x -adc ({z2}),y -sta {z1} -iny -lda {c1}+1,x -adc ({z2}),y -sta {z1}+1 -//FRAGMENT vwsz1=pwsc1_derefidx_vbuyy_plus__deref_pwsz2 -tya -tax -clc -ldy #0 -lda {c1},x -adc ({z2}),y -sta {z1} -iny -lda {c1}+1,x -adc ({z2}),y -sta {z1}+1 -//FRAGMENT vwsz1=pwsc1_derefidx_vbuaa_plus__deref_pwsz1 -tax -ldy #0 -clc -lda {c1},x -adc ({z1}),y -pha -iny -lda {c1}+1,x -adc ({z1}),y -sta {z1}+1 -pla -sta {z1} -//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2_ror_8 -ldy {z2} -lda #0 -sta {z1}+1 -lda {c1}+1,y -sta {z1} -//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_bxor_vwuc2 -ldy {z1} -lda {c1},y -eor #<{c2} -sta {c1},y -lda {c1}+1,y -eor #>{c2} -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuaa=pwuc1_derefidx_vbuaa_plus_pwuc2_derefidx_vbuaa -tax -tay -clc -lda {c1},y -adc {c2},x -sta {c1},y -lda {c1}+1,y -adc {c2}+1,x -sta {c1}+1,y -//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx_ror_8 -txa -tay -lda #0 -sta {z1}+1 -lda {c1}+1,y -sta {z1} -//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy_ror_8 -lda #0 -sta {z1}+1 -lda {c1}+1,y -sta {z1} -//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_bxor_vwuc2 -txa -tay -lda {c1},y -eor #<{c2} -sta {c1},y -lda {c1}+1,y -eor #>{c2} -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_bxor_vwuc2 -lda {c1},y -eor #<{c2} -sta {c1},y -lda {c1}+1,y -eor #>{c2} -sta {c1}+1,y -//FRAGMENT vwuz1_lt_vbuyy_then_la1 -lda {z1}+1 -bne !+ -sty $ff -lda {z1} -cmp $ff -bcc {la1} -!: -//FRAGMENT pwuc1_derefidx_vbuz1=vbuaa -ldy {z1} -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT pwuc1_derefidx_vbuxx=vbuaa -sta {c1},x -lda #0 -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=vbuaa -sta {c1},y -lda #0 -sta {c1}+1,y -//FRAGMENT vwuz1=vwuz2_rol_5 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vwuz1=vwuz1_rol_5 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT pprz1=_deref_qprc1 -lda {c1} -sta {z1} -lda {c1}+1 -sta {z1}+1 -//FRAGMENT vbuz1_le_vbuaa_then_la1 -cmp {z1} -bcs {la1} -//FRAGMENT vbuaa_le_vbuyy_then_la1 -sta $ff -cpy $ff -bcs {la1} -//FRAGMENT vbuxx_ge_vbuaa_then_la1 -tay -sty $ff -cpx $ff -bcs {la1} -//FRAGMENT vbuxx_le_vbuaa_then_la1 -stx $ff -cmp $ff -bcs {la1} -//FRAGMENT vbuxx_le_vbuyy_then_la1 -stx $ff -cpy $ff -bcs {la1} -//FRAGMENT vbuyy_ge_vbuaa_then_la1 -sta $ff -cpy $ff -bcs {la1} -//FRAGMENT vbuyy_le_vbuaa_then_la1 -sty $ff -cmp $ff -bcs {la1} -//FRAGMENT pwuc1_derefidx_vbuz1=pwuz2_derefidx_vbuc2 -ldx {z1} -ldy #{c2} -lda ({z2}),y -sta {c1},x -iny -lda ({z2}),y -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuaa=pwuz1_derefidx_vbuc2 -ldy #{c2} -tax -lda ({z1}),y -sta {c1},x -iny -lda ({z1}),y -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuxx=pwuz1_derefidx_vbuc2 -ldy #{c2} -lda ({z1}),y -sta {c1},x -iny -lda ({z1}),y -sta {c1}+1,x -//FRAGMENT pwuc1_derefidx_vbuyy=pwuz1_derefidx_vbuc2 -tya -ldy #{c2} -tax -lda ({z1}),y -sta {c1},x -iny -lda ({z1}),y -sta {c1}+1,x -//FRAGMENT vbum1=vbum2 -lda {m2} -sta {m1} -//FRAGMENT vbum1=vbum1_plus_vbuc1 -lax {m1} -axs #-[{c1}] -stx {m1} -//FRAGMENT pbuc1_derefidx_vbum1=pbuc2_derefidx_vbum2 -ldy {m2} -lda {c2},y -ldy {m1} -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuz1=pbuc1_derefidx_vbuz1_bor_vbuc2 -lda #{c2} -ldy {z1} -ora {c1},y -sta {c1},y -//FRAGMENT pbuc1_derefidx_vbuxx=pbuc1_derefidx_vbuxx_bor_vbuc2 -lda #{c2} -ora {c1},x -sta {c1},x -//FRAGMENT pbuc1_derefidx_vbuyy=pbuc1_derefidx_vbuyy_bor_vbuc2 -lda #{c2} -ora {c1},y -sta {c1},y -//FRAGMENT vbsz1=_sbyte_vwuz2 -lda {z2} -sta {z1} -//FRAGMENT 0_neq_vbsz1_then_la1 -lda {z1} -cmp #0 -bne {la1} -//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuz1_then_la1 -tay -lda {c1},y -cmp {z1} -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuaa_then_la1 -ldx {z1} -tay -lda {c1},x -tax -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuaa_then_la1 -tax -lda {c1},x -tay -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuxx_eq_vbuaa_then_la1 -tay -lda {c1},x -tax -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuyy_eq_vbuaa_then_la1 -tax -lda {c1},y -tay -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuxx_then_la1 -tay -lda {c1},y -tay -sty $ff -cpx $ff -beq {la1} -//FRAGMENT pbuc1_derefidx_vbuaa_eq_vbuyy_then_la1 -tax -lda {c1},x -tax -sty $ff -cpx $ff -beq {la1} -//FRAGMENT vbsaa=_sbyte_vwuz1 -lda {z1} -//FRAGMENT vbsxx=_sbyte_vwuz1 -ldx {z1} -//FRAGMENT vbsz1=vbsyy_minus_vbsaa -sta $ff -tya -sec -sbc $ff -sta {z1} -//FRAGMENT vbsxx=vbsyy_minus_vbsaa -sta $ff -tya -sec -sbc $ff -tax -//FRAGMENT 0_neq_vbsxx_then_la1 -cpx #0 -bne {la1} -//FRAGMENT vbuz1=vbuyy_minus_1 -tya -sec -sbc #1 -sta {z1} -//FRAGMENT vbsaa=_inc_vbsaa -clc -adc #1 -//FRAGMENT vbsyy=_sbyte_vwuz1 -ldy {z1} -//FRAGMENT vbuaa_lt_vbuyy_then_la1 -tax -sty $ff -cpx $ff -bcc {la1} -//FRAGMENT vbuyy_lt_vbuaa_then_la1 -sta $ff -cpy $ff -bcc {la1} -//FRAGMENT vbuz1=vbuz2_minus_vbuz1 -lda {z2} -sec -sbc {z1} -sta {z1} -//FRAGMENT vbsz1=vbsz1_minus_vbsz2 -lda {z1} -sec -sbc {z2} -sta {z1} -//FRAGMENT vbuz1=vbuc1_plus_vbuz1 -lax {z1} -axs #-[{c1}] -stx {z1} -//FRAGMENT vbuz1=vbuz1_band_vbuc1 -lda #{c1} -and {z1} -sta {z1} -//FRAGMENT vbsz1=vbsc1_minus_vbsz2 -lda #{c1} -sec -sbc {z2} -sta {z1} -//FRAGMENT vbsz1=vbsc1_minus_vbsaa -eor #$ff -sec -adc #{c1} -sta {z1} -//FRAGMENT vbsz1=vbsc1_minus_vbsxx -txa -eor #$ff -sec -adc #{c1} -sta {z1} -//FRAGMENT vbsz1=vbsc1_minus_vbsyy -tya -eor #$ff -sec -adc #{c1} -sta {z1} -//FRAGMENT vbsaa=vbsc1_minus_vbsz1 -lda #{c1} -sec -sbc {z1} -//FRAGMENT vbsaa=vbsc1_minus_vbsaa -eor #$ff -sec -adc #{c1} -//FRAGMENT vbsaa=vbsc1_minus_vbsxx -txa -eor #$ff -sec -adc #{c1} -//FRAGMENT vbsaa=vbsc1_minus_vbsyy -tya -eor #$ff -sec -adc #{c1} -//FRAGMENT vbsxx=vbsc1_minus_vbsz1 -lda #{c1} -sec -sbc {z1} -tax -//FRAGMENT vbsxx=vbsc1_minus_vbsaa -eor #$ff -tax -axs #-{c1}-1 -//FRAGMENT vbsxx=vbsc1_minus_vbsxx -txa -eor #$ff -tax -axs #-{c1}-1 -//FRAGMENT vbsxx=vbsc1_minus_vbsyy -tya -eor #$ff -tax -axs #-{c1}-1 -//FRAGMENT vbsyy=vbsc1_minus_vbsz1 -lda #{c1} -sec -sbc {z1} -tay -//FRAGMENT vbsyy=vbsc1_minus_vbsaa -eor #$ff -sec -adc #{c1} -tay -//FRAGMENT vbsyy=vbsc1_minus_vbsxx -txa -eor #$ff -sec -adc #{c1} -tay -//FRAGMENT vbsyy=vbsc1_minus_vbsyy -tya -eor #$ff -sec -adc #{c1} -tay -//FRAGMENT 0_neq_vbsaa_then_la1 -cmp #0 -bne {la1} -//FRAGMENT vbsyy=vbsyy_minus_vbsaa -sta $ff -tya -sec -sbc $ff -tay -//FRAGMENT vbsz1_neq_0_then_la1 -lda {z1} -cmp #0 -bne {la1} -//FRAGMENT vwsz1=vbsz2 -lda {z2} -sta {z1} -and #$80 -beq !+ -lda #$ff -!: -sta {z1}+1 -//FRAGMENT vbsaa_neq_0_then_la1 -cmp #0 -bne {la1} -//FRAGMENT vwsz1=vbsaa -sta {z1} -and #$80 -beq !+ -lda #$ff -!: -sta {z1}+1 -//FRAGMENT vwsz1=vbsxx -txa -sta {z1} -and #$80 -beq !+ -lda #$ff -!: -sta {z1}+1 -//FRAGMENT vwsz1=vbsyy -tya -sta {z1} -and #$80 -beq !+ -lda #$ff -!: -sta {z1}+1 -//FRAGMENT vbsxx_neq_0_then_la1 -cpx #0 -bne {la1} -//FRAGMENT vbsz1=vbsz1_minus_vbsxx -txa -eor #$ff -sec -adc {z1} -sta {z1} -//FRAGMENT vbsz1_gt_0_then_la1 -lda {z1} -cmp #0 -beq !+ -bpl {la1} -!: -//FRAGMENT vbuz1=vbuc1_minus_vbuz1 -lda #{c1} -sec -sbc {z1} -sta {z1} -//FRAGMENT vbsz1=vbsz2_ror_vbuz3 -lda {z2} -ldy {z3} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -sta {z1} -//FRAGMENT vbsz1=vbsz1_plus_vbsz2 -lda {z1} -clc -adc {z2} -sta {z1} -//FRAGMENT vbuz1=vbuz1_minus_pbuc1_derefidx_vbuz2 -lda {z1} -ldy {z2} -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbsaa_gt_0_then_la1 -cmp #0 -beq !+ -bpl {la1} -!: -//FRAGMENT vbsxx_gt_0_then_la1 -txa -cmp #0 -beq !+ -bpl {la1} -!: -//FRAGMENT vbsyy_gt_0_then_la1 -tya -cmp #0 -beq !+ -bpl {la1} -!: -//FRAGMENT vbsaa=vbsz1_ror_vbuz2 -lda {z1} -ldy {z2} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -//FRAGMENT vbsxx=vbsz1_ror_vbuz2 -lda {z1} -ldx {z2} -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsz1_ror_vbuz2 -lda {z1} -ldy {z2} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsaa_ror_vbuz2 -ldy {z2} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsaa_ror_vbuz1 -ldy {z1} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -//FRAGMENT vbsxx=vbsaa_ror_vbuz1 -ldx {z1} -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsaa_ror_vbuz1 -ldy {z1} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsxx_ror_vbuz2 -ldy {z2} -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsxx_ror_vbuz1 -ldy {z1} -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -//FRAGMENT vbsxx=vbsxx_ror_vbuz1 -txa -ldx {z1} -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsxx_ror_vbuz1 -ldy {z1} -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsyy_ror_vbuz2 -tya -ldy {z2} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsyy_ror_vbuz1 -tya -ldy {z1} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -//FRAGMENT vbsxx=vbsyy_ror_vbuz1 -ldx {z1} -tya -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsyy_ror_vbuz1 -tya -ldy {z1} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsz2_ror_vbuaa -tay -lda {z2} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsz1_ror_vbuaa -tay -lda {z1} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -//FRAGMENT vbsxx=vbsz1_ror_vbuaa -tax -lda {z1} -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsz1_ror_vbuaa -tay -lda {z1} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsaa_ror_vbuaa -tay -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsaa_ror_vbuaa -tay -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -//FRAGMENT vbsxx=vbsaa_ror_vbuaa -tax -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsaa_ror_vbuaa -tay -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsxx_ror_vbuaa -tay -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsxx_ror_vbuaa -tay -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -//FRAGMENT vbsxx=vbsxx_ror_vbuaa -tay -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsxx_ror_vbuaa -tay -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsyy_ror_vbuaa -tax -tya -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsyy_ror_vbuaa -tax -tya -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -//FRAGMENT vbsxx=vbsyy_ror_vbuaa -tax -tya -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsyy_ror_vbuaa -tax -tya -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsz2_ror_vbuxx -lda {z2} -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsz1_ror_vbuxx -lda {z1} -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -//FRAGMENT vbsxx=vbsz1_ror_vbuxx -lda {z1} -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsz1_ror_vbuxx -lda {z1} -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsaa_ror_vbuxx -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsaa_ror_vbuxx -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -//FRAGMENT vbsxx=vbsaa_ror_vbuxx -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsaa_ror_vbuxx -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsxx_ror_vbuxx -txa -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsxx_ror_vbuxx -txa -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -//FRAGMENT vbsxx=vbsxx_ror_vbuxx -txa -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsxx_ror_vbuxx -txa -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsyy_ror_vbuxx -tya -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsyy_ror_vbuxx -tya -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -//FRAGMENT vbsxx=vbsyy_ror_vbuxx -tya -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsyy_ror_vbuxx -tya -cpx #0 -beq !e+ -!l: -cmp #$80 -ror -dex -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsz2_ror_vbuyy -lda {z2} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsz1_ror_vbuyy -lda {z1} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -//FRAGMENT vbsxx=vbsz1_ror_vbuyy -lda {z1} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsz1_ror_vbuyy -lda {z1} -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsaa_ror_vbuyy -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsaa_ror_vbuyy -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -//FRAGMENT vbsxx=vbsaa_ror_vbuyy -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsaa_ror_vbuyy -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsxx_ror_vbuyy -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsxx_ror_vbuyy -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -//FRAGMENT vbsxx=vbsxx_ror_vbuyy -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsxx_ror_vbuyy -txa -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsyy_ror_vbuyy -tya -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -sta {z1} -//FRAGMENT vbsaa=vbsyy_ror_vbuyy -tya -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -//FRAGMENT vbsxx=vbsyy_ror_vbuyy -tya -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tax -//FRAGMENT vbsyy=vbsyy_ror_vbuyy -tya -cpy #0 -beq !e+ -!l: -cmp #$80 -ror -dey -bne !l- -!e: -tay -//FRAGMENT vbsz1=vbsz1_minus_vbsyy -tya -eor #$ff -sec -adc {z1} -sta {z1} -//FRAGMENT vbsz1=vbsz1_plus_vbsxx -txa -clc -adc {z1} -sta {z1} -//FRAGMENT vbsz1=vbsz1_plus_vbsyy -tya -clc -adc {z1} -sta {z1} -//FRAGMENT vbuxx=vbuxx_minus_pbuc1_derefidx_vbuz1 -txa -ldx {z1} -sec -sbc {c1},x -tax -//FRAGMENT vbuyy=vbuyy_minus_pbuc1_derefidx_vbuz1 -tya -ldy {z1} -sec -sbc {c1},y -tay -//FRAGMENT vbuz1=vbuz1_minus_pbuc1_derefidx_vbuxx -lda {z1} -sec -sbc {c1},x -sta {z1} -//FRAGMENT vbuxx=vbuxx_minus_pbuc1_derefidx_vbuxx -txa -tax -sec -sbc {c1},x -tax -//FRAGMENT vbuyy=vbuyy_minus_pbuc1_derefidx_vbuxx -tya -sec -sbc {c1},x -tay -//FRAGMENT vbuz1=vbuz1_minus_pbuc1_derefidx_vbuyy -lda {z1} -sec -sbc {c1},y -sta {z1} -//FRAGMENT vbuxx=vbuxx_minus_pbuc1_derefidx_vbuyy -txa -sec -sbc {c1},y -tax -//FRAGMENT vbuyy=vbuyy_minus_pbuc1_derefidx_vbuyy -tya -tay -sec -sbc {c1},y -tay -//FRAGMENT vbsyy_neq_0_then_la1 -cpy #0 -bne {la1} -//FRAGMENT vbuyy_neq_vbuaa_then_la1 -tax -stx $ff -cpy $ff -bne {la1} -//FRAGMENT vwuz1=vwuz2_minus_vbuc1 -sec -lda {z2} -sbc #{c1} -sta {z1} -lda {z2}+1 -sbc #0 -sta {z1}+1 -//FRAGMENT vduz1=vwuz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda #0 -sta {z1}+2 -sta {z1}+3 -//FRAGMENT vwsz1_lt_vwuz2_then_la1 -lda {z1}+1 -bmi {la1} -cmp {z2}+1 -bcc {la1} -bne !+ -lda {z1} -cmp {z2} -bcc {la1} -!: -//FRAGMENT vduz1=pduz2_derefidx_vbuz3 -ldy {z3} -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -iny -lda ({z2}),y -sta {z1}+2 -iny -lda ({z2}),y -sta {z1}+3 -//FRAGMENT vduz1=vduz2_plus_pduc1_derefidx_vbuz3 -ldy {z3} -lda {z2} -clc -adc {c1},y -sta {z1} -lda {z2}+1 -adc {c1}+1,y -sta {z1}+1 -lda {z2}+2 -adc {c1}+2,y -sta {z1}+2 -lda {z2}+3 -adc {c1}+3,y -sta {z1}+3 -//FRAGMENT vduz1=vduz2_plus_pduz3_derefidx_vbuz4 -ldy {z4} -lda {z2} -clc -adc ({z3}),y -sta {z1} -iny -lda {z2}+1 -adc ({z3}),y -sta {z1}+1 -iny -lda {z2}+2 -adc ({z3}),y -sta {z1}+2 -iny -lda {z2}+3 -adc ({z3}),y -sta {z1}+3 -//FRAGMENT vduz1=_bnot_vduz2 -lda {z2} -eor #$ff -sta {z1} -lda {z2}+1 -eor #$ff -sta {z1}+1 -lda {z2}+2 -eor #$ff -sta {z1}+2 -lda {z2}+3 -eor #$ff -sta {z1}+3 -//FRAGMENT vduz1=vduz2_bor_vduz3 -lda {z2} -ora {z3} -sta {z1} -lda {z2}+1 -ora {z3}+1 -sta {z1}+1 -lda {z2}+2 -ora {z3}+2 -sta {z1}+2 -lda {z2}+3 -ora {z3}+3 -sta {z1}+3 -//FRAGMENT vduz1=vduz2_bxor_vduz3 -lda {z2} -eor {z3} -sta {z1} -lda {z2}+1 -eor {z3}+1 -sta {z1}+1 -lda {z2}+2 -eor {z3}+2 -sta {z1}+2 -lda {z2}+3 -eor {z3}+3 -sta {z1}+3 -//FRAGMENT vduz1=vduz2_band_vduz3 -lda {z2} -and {z3} -sta {z1} -lda {z2}+1 -and {z3}+1 -sta {z1}+1 -lda {z2}+2 -and {z3}+2 -sta {z1}+2 -lda {z2}+3 -and {z3}+3 -sta {z1}+3 -//FRAGMENT vwuz1=vwuz2_band_vbuc1 -lda #{c1} -and {z2} -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT pbuz1=pbuc1_minus_vwuz2 -sec -lda #<{c1} -sbc {z2} -sta {z1} -lda #>{c1} -sbc {z2}+1 -sta {z1}+1 -//FRAGMENT vduz1=pduz2_derefidx_vbuxx -txa -tay -lda ({z2}),y -sta {z1} -iny -lda ({z2}),y -sta {z1}+1 -iny -lda ({z2}),y -sta {z1}+2 -iny -lda ({z2}),y -sta {z1}+3 -//FRAGMENT vduz1=vduz2_plus_pduc1_derefidx_vbuxx -lda {z2} -clc -adc {c1},x -sta {z1} -lda {z2}+1 -adc {c1}+1,x -sta {z1}+1 -lda {z2}+2 -adc {c1}+2,x -sta {z1}+2 -lda {z2}+3 -adc {c1}+3,x -sta {z1}+3 -//FRAGMENT vduz1=vduz2_plus_pduz3_derefidx_vbuxx -txa -tay -lda {z2} -clc -adc ({z3}),y -sta {z1} -iny -lda {z2}+1 -adc ({z3}),y -sta {z1}+1 -iny -lda {z2}+2 -adc ({z3}),y -sta {z1}+2 -iny -lda {z2}+3 -adc ({z3}),y -sta {z1}+3 -//FRAGMENT vduz1=vduz2_bxor_vduz1 -lda {z1} -eor {z2} -sta {z1} -lda {z1}+1 -eor {z2}+1 -sta {z1}+1 -lda {z1}+2 -eor {z2}+2 -sta {z1}+2 -lda {z1}+3 -eor {z2}+3 -sta {z1}+3 -//FRAGMENT vduz1=vduz1_bxor_vduz2 -lda {z1} -eor {z2} -sta {z1} -lda {z1}+1 -eor {z2}+1 -sta {z1}+1 -lda {z1}+2 -eor {z2}+2 -sta {z1}+2 -lda {z1}+3 -eor {z2}+3 -sta {z1}+3 -//FRAGMENT vduz1=vduz1_bor_vduz2 -lda {z2} -ora {z1} -sta {z1} -lda {z2}+1 -ora {z1}+1 -sta {z1}+1 -lda {z2}+2 -ora {z1}+2 -sta {z1}+2 -lda {z2}+3 -ora {z1}+3 -sta {z1}+3 -//FRAGMENT vbuz1=vbuz1_rol_2 -lda {z1} -asl -asl -sta {z1} -//FRAGMENT vwuz1=vwuz1_band_vbuc1 -lda #{c1} -and {z1} -sta {z1} -lda #0 -sta {z1}+1 -//FRAGMENT vduz1=vduz1_plus_pduz2_derefidx_vbuz3 -ldy {z3} -lda {z1} -clc -adc ({z2}),y -sta {z1} -iny -lda {z1}+1 -adc ({z2}),y -sta {z1}+1 -iny -lda {z1}+2 -adc ({z2}),y -sta {z1}+2 -iny -lda {z1}+3 -adc ({z2}),y -sta {z1}+3 -//FRAGMENT vduz1=vduz1_band_vduz2 -lda {z1} -and {z2} -sta {z1} -lda {z1}+1 -and {z2}+1 -sta {z1}+1 -lda {z1}+2 -and {z2}+2 -sta {z1}+2 -lda {z1}+3 -and {z2}+3 -sta {z1}+3 -//FRAGMENT pbuz1=pbuc1_minus_vwuz1 -sec -lda #<{c1} -sbc {z1} -sta {z1} -lda #>{c1} -sbc {z1}+1 -sta {z1}+1 -//FRAGMENT vduz1=vduz1_plus_pduc1_derefidx_vbuz2 -ldy {z2} -lda {z1} -clc -adc {c1},y -sta {z1} -lda {z1}+1 -adc {c1}+1,y -sta {z1}+1 -lda {z1}+2 -adc {c1}+2,y -sta {z1}+2 -lda {z1}+3 -adc {c1}+3,y -sta {z1}+3 -//FRAGMENT vduz1=vduz2_bor_vduz1 -lda {z2} -ora {z1} -sta {z1} -lda {z2}+1 -ora {z1}+1 -sta {z1}+1 -lda {z2}+2 -ora {z1}+2 -sta {z1}+2 -lda {z2}+3 -ora {z1}+3 -sta {z1}+3 -//FRAGMENT vduz1=vduz2_plus_vduz1 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -lda {z1}+2 -adc {z2}+2 -sta {z1}+2 -lda {z1}+3 -adc {z2}+3 -sta {z1}+3 -//FRAGMENT vbsz1_eq_vbsc1_then_la1 -lda #{c1} -cmp {z1} -beq {la1} -//FRAGMENT 0_eq_vbsz1_then_la1 -lda {z1} -cmp #0 -beq {la1} -//FRAGMENT pbuz1=pbuz2_plus_vbsz3 -lda {z3} -pha -clc -adc {z2} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z2}+1 -sta {z1}+1 -//FRAGMENT vbsaa_eq_vbsc1_then_la1 -cmp #{c1} -beq {la1} -//FRAGMENT vbsaa=vbsyy_minus_vbsaa -sta $ff -tya -sec -sbc $ff -//FRAGMENT 0_eq_vbsaa_then_la1 -cmp #0 -beq {la1} -//FRAGMENT pbuz1=pbuz2_plus_vbsaa -pha -clc -adc {z2} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vbsxx -txa -pha -clc -adc {z2} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vbsyy -tya -pha -clc -adc {z2} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z2}+1 -sta {z1}+1 -//FRAGMENT 0_eq_vbsxx_then_la1 -cpx #0 -beq {la1} -//FRAGMENT vbsxx_eq_vbsc1_then_la1 -cpx #{c1} -beq {la1} -//FRAGMENT 0_eq_vbsyy_then_la1 -cpy #0 -beq {la1} -//FRAGMENT pbuz1=pbuz1_plus_vbsxx -txa -pha -clc -adc {z1} -sta {z1} -pla -ora #$7f -bmi !+ -lda #0 -!: -adc {z1}+1 -sta {z1}+1 -//FRAGMENT vwuz1=vwuz1_rol_2 -asl {z1} -rol {z1}+1 -asl {z1} -rol {z1}+1 -//FRAGMENT vbsaa=vbsc1 -lda #{c1} -//FRAGMENT 0_neq_vbsyy_then_la1 -cpy #0 -bne {la1} -//FRAGMENT vduz1=vduz2_rol_0 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -//FRAGMENT vduz1=vduz2_rol_5 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -lda {z2}+2 -rol -sta {z1}+2 -lda {z2}+3 -rol -sta {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -//FRAGMENT vduz1=vduz2_rol_6 -lda {z2}+3 -lsr -sta $ff -lda {z2}+2 -ror -sta {z1}+3 -lda {z2}+1 -ror -sta {z1}+2 -lda {z2} -ror -sta {z1}+1 -lda #0 -ror -sta {z1} -lsr $ff -ror {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -//FRAGMENT vduz1=vduz2_rol_7 -lda {z2}+3 -lsr -lda {z2}+2 -ror -sta {z1}+3 -lda {z2}+1 -ror -sta {z1}+2 -lda {z2} -ror -sta {z1}+1 -lda #0 -ror -sta {z1} -//FRAGMENT vduz1=vduz2_rol_8 -lda #0 -sta {z1} -lda {z2} -sta {z1}+1 -lda {z2}+1 -sta {z1}+2 -lda {z2}+2 -sta {z1}+3 -//FRAGMENT vduz1=vduz2_rol_9 -lda #0 -sta {z1} -lda {z2} -asl -sta {z1}+1 -lda {z2}+1 -rol -sta {z1}+2 -lda {z2}+2 -rol -sta {z1}+3 -//FRAGMENT vduz1=vduz2_rol_vbuc1 -ldy #{c1} -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpy #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -dey -bne !- -!e: -//FRAGMENT vduz1=vduz2_rol_16 -lda #0 -sta {z1} -sta {z1}+1 -lda {z2} -sta {z1}+2 -lda {z2}+1 -sta {z1}+3 -//FRAGMENT vduz1=vduz2_rol_24 -lda #0 -sta {z1} -sta {z1}+1 -sta {z1}+2 -lda {z2} -sta {z1}+3 -//FRAGMENT vduz1=vduz2_rol_32 -lda #0 -sta {z1} -sta {z1}+1 -sta {z1}+2 -sta {z1}+3 -//FRAGMENT vduz1=vduz2_ror_0 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -//FRAGMENT vduz1=vduz2_ror_1 -lda {z2}+3 -lsr -sta {z1}+3 -lda {z2}+2 -ror -sta {z1}+2 -lda {z2}+1 -ror -sta {z1}+1 -lda {z2} -ror -sta {z1} -//FRAGMENT vduz1=vduz2_ror_2 -lda {z2}+3 -lsr -sta {z1}+3 -lda {z2}+2 -ror -sta {z1}+2 -lda {z2}+1 -ror -sta {z1}+1 -lda {z2} -ror -sta {z1} -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -//FRAGMENT vduz1=vduz2_ror_3 -lda {z2}+3 -lsr -sta {z1}+3 -lda {z2}+2 -ror -sta {z1}+2 -lda {z2}+1 -ror -sta {z1}+1 -lda {z2} -ror -sta {z1} -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -//FRAGMENT vduz1=vduz2_ror_4 -lda {z2}+3 -lsr -sta {z1}+3 -lda {z2}+2 -ror -sta {z1}+2 -lda {z2}+1 -ror -sta {z1}+1 -lda {z2} -ror -sta {z1} -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -//FRAGMENT vduz1=vduz2_ror_5 -lda {z2}+3 -lsr -sta {z1}+3 -lda {z2}+2 -ror -sta {z1}+2 -lda {z2}+1 -ror -sta {z1}+1 -lda {z2} -ror -sta {z1} -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -//FRAGMENT vduz1=vduz2_ror_6 -lda {z2} -asl -sta $ff -lda {z2}+1 -rol -sta {z1} -lda {z2}+2 -rol -sta {z1}+1 -lda {z2}+3 -rol -sta {z1}+2 -lda #0 -rol -sta {z1}+3 -asl $ff -rol {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -//FRAGMENT vduz1=vduz2_ror_7 -lda {z2} -asl -lda {z2}+1 -rol -sta {z1} -lda {z2}+2 -rol -sta {z1}+1 -lda {z2}+3 -rol -sta {z1}+2 -lda #0 -rol -sta {z1}+3 -//FRAGMENT vduz1=vduz2_ror_8 -lda #0 -sta {z1}+3 -lda {z2}+3 -sta {z1}+2 -lda {z2}+2 -sta {z1}+1 -lda {z2}+1 -sta {z1} -//FRAGMENT vduz1=vduz2_ror_9 -lda #0 -sta {z1}+3 -lda {z2}+3 -lsr -sta {z1}+2 -lda {z2}+2 -ror -sta {z1}+1 -lda {z2}+1 -ror -sta {z1} -//FRAGMENT vduz1=vduz2_ror_vbuc1 -ldx #{c1} -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpx #0 -beq !e+ -!: -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -dex -bne !- -!e: -//FRAGMENT vduz1=vduz2_ror_16 -lda #0 -sta {z1}+3 -sta {z1}+2 -lda {z2}+3 -sta {z1}+1 -lda {z2}+2 -sta {z1} -//FRAGMENT vduz1=vduz2_ror_24 -lda #0 -sta {z1}+3 -sta {z1}+2 -sta {z1}+1 -lda {z2}+3 -sta {z1} -//FRAGMENT vduz1=vduz2_ror_32 -lda #0 -sta {z1}+3 -sta {z1}+2 -sta {z1}+1 -sta {z1} -//FRAGMENT vduz1=vduz2_rol_pbuc1_derefidx_vbuz3 -ldx {z3} -ldy {c1},x -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpy #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -dey -bne !- -!e: -//FRAGMENT vduz1=vduz2_ror_pbuc1_derefidx_vbuz3 -ldy {z3} -ldx {c1},y -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpx #0 -beq !e+ -!: -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -dex -bne !- -!e: -//FRAGMENT vduz1=vduz2_rol_pbuc1_derefidx_vbuaa -tax -ldy {c1},x -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpy #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -dey -bne !- -!e: -//FRAGMENT vduz1=vduz2_rol_pbuc1_derefidx_vbuxx -ldy {c1},x -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpy #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -dey -bne !- -!e: -//FRAGMENT vduz1=vduz2_rol_pbuc1_derefidx_vbuyy -ldx {c1},y -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpx #0 -beq !e+ -!: -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -dex -bne !- -!e: -//FRAGMENT vduz1=vduz2_ror_pbuc1_derefidx_vbuaa -tay -ldx {c1},y -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpx #0 -beq !e+ -!: -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -dex -bne !- -!e: -//FRAGMENT vduz1=vduz2_ror_pbuc1_derefidx_vbuxx -lda {c1},x -tax -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpx #0 -beq !e+ -!: -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -dex -bne !- -!e: -//FRAGMENT vduz1=vduz2_ror_pbuc1_derefidx_vbuyy -ldx {c1},y -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -lda {z2}+2 -sta {z1}+2 -lda {z2}+3 -sta {z1}+3 -cpx #0 -beq !e+ -!: -lsr {z1}+3 -ror {z1}+2 -ror {z1}+1 -ror {z1} -dex -bne !- -!e: diff --git a/src/main/fragment/cache/fragment-cache-rom6502x.asm b/src/main/fragment/cache/fragment-cache-rom6502x.asm new file mode 100644 index 000000000..d308c9e0e --- /dev/null +++ b/src/main/fragment/cache/fragment-cache-rom6502x.asm @@ -0,0 +1,1130 @@ +//KICKC FRAGMENT CACHE 15355792e7 153557b11b +//FRAGMENT _deref_pbuc1=_inc__deref_pbuc1 +inc {c1} +//FRAGMENT isr_hardware_all_entry +pha +txa +pha +tya +pha +//FRAGMENT isr_hardware_all_exit +pla +tay +pla +tax +pla +rti +//FRAGMENT vbuz1=vbuc1 +lda #{c1} +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 +ldy {z1} +lda {c2},y +sta {c1},y +//FRAGMENT vbuz1=_inc_vbuz1 +inc {z1} +//FRAGMENT vbuz1_neq_vbuc1_then_la1 +lda #{c1} +cmp {z1} +bne {la1} +//FRAGMENT pbuc1_derefidx_vbuaa=pbuc2_derefidx_vbuaa +tay +lda {c2},y +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx +lda {c2},x +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuyy +lda {c2},y +sta {c1},y +//FRAGMENT vbuxx_neq_vbuc1_then_la1 +cpx #{c1} +bne {la1} +//FRAGMENT vbuxx=vbuc1 +ldx #{c1} +//FRAGMENT vbuxx=_inc_vbuxx +inx +//FRAGMENT vbuyy=vbuc1 +ldy #{c1} +//FRAGMENT vbuyy=_inc_vbuyy +iny +//FRAGMENT vbuyy_neq_vbuc1_then_la1 +cpy #{c1} +bne {la1} +//FRAGMENT isr_hardware_none_entry + +//FRAGMENT isr_hardware_none_exit +rti +//FRAGMENT _deref_pbuc1=vbuc2 +lda #{c2} +sta {c1} +//FRAGMENT _deref_pbuc1=vbuz1 +lda {z1} +sta {c1} +//FRAGMENT vbuz1=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +sta {z1} +//FRAGMENT 0_eq_vbuz1_then_la1 +lda {z1} +cmp #0 +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuz1=vbuc2 +lda #{c2} +ldy {z1} +sta {c1},y +//FRAGMENT 0_neq_vbuz1_then_la1 +lda {z1} +cmp #0 +bne {la1} +//FRAGMENT pvoz1=pvoc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=vwuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=vbuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1_lt_vbuc1_then_la1 +lda {z1}+1 +bne !+ +lda {z1} +cmp #{c1} +bcc {la1} +!: +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_plus_vbuc2 +lda #{c2} +ldy {z2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuz1=vbuz2_bxor_vbuc1 +lda #{c1} +eor {z2} +sta {z1} +//FRAGMENT vbuz1=vbuz2 +lda {z2} +sta {z1} +//FRAGMENT vwuz1_ge_vbuc1_then_la1 +lda {z1}+1 +bne {la1} +lda {z1} +cmp #{c1} +bcs {la1} +!: +//FRAGMENT vbuz1=_inc_vbuz2 +ldy {z2} +iny +sty {z1} +//FRAGMENT vwuz1=_inc_vwuz1 +inc {z1} +bne !+ +inc {z1}+1 +!: +//FRAGMENT vwuz1=vwuz2_rol_3 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +asl {z1} +rol {z1}+1 +asl {z1} +rol {z1}+1 +//FRAGMENT pwuz1=pwuc1_plus_vwuz2 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT _deref_pwuz1=vbuc1 +lda #{c1} +ldy #0 +sta ({z1}),y +tya +iny +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuc1=vbuc2 +lda #{c2} +ldy #{c1} +sta ({z1}),y +lda #0 +iny +sta ({z1}),y +//FRAGMENT vwuz1_lt_vwuz2_then_la1 +lda {z1}+1 +cmp {z2}+1 +bcc {la1} +bne !+ +lda {z1} +cmp {z2} +bcc {la1} +!: +//FRAGMENT _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1 +ldy #{c1} +sty $ff +clc +lda ({z1}),y +ldy #0 +adc ({z1}),y +sta ({z1}),y +ldy $ff +iny +lda ({z1}),y +ldy #1 +adc ({z1}),y +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_vbuc2 +lda #{c2} +ldy #{c1} +clc +adc ({z1}),y +sta ({z1}),y +iny +lda #0 +adc ({z1}),y +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2 +ldy #{c2} +clc +lda ({z1}),y +ldy #{c1} +adc ({z1}),y +sta ({z1}),y +ldy #{c2}+1 +lda ({z1}),y +ldy #{c1}+1 +adc ({z1}),y +sta ({z1}),y +//FRAGMENT vwuz1=_deref_pwuz2_ror_8 +ldy #1 +lda ({z2}),y +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_bxor_vwuc2 +ldy #{c1} +lda #<{c2} +eor ({z1}),y +sta ({z1}),y +iny +lda #>{c2} +eor ({z1}),y +sta ({z1}),y +//FRAGMENT vwuz1=pwuz2_derefidx_vbuc1_ror_8 +ldy #{c1} +lda #0 +sta {z1}+1 +iny +lda ({z2}),y +sta {z1} +//FRAGMENT vbuz1=vbuz2_plus_vbuc1 +lax {z2} +axs #-[{c1}] +stx {z1} +//FRAGMENT vwuz1_lt_vbuz2_then_la1 +lda {z1}+1 +bne !+ +lda {z1} +cmp {z2} +bcc {la1} +!: +//FRAGMENT vwuz1_ge_vbuz2_then_la1 +lda {z1}+1 +bne {la1} +lda {z1} +cmp {z2} +bcs {la1} +!: +//FRAGMENT vbuz1=vbuz2_minus_2 +lda {z2} +sec +sbc #2 +sta {z1} +//FRAGMENT vwuz1=_word_vbuz2 +lda {z2} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_rol_8 +lda {z2} +sta {z1}+1 +lda #0 +sta {z1} +//FRAGMENT pwuz1_derefidx_vbuc1=vwuz2 +ldy #{c1} +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT vbuz1=vbuz2_rol_2 +lda {z2} +asl +asl +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuz1=_byte_vwuz2 +ldy {z1} +lda {z2} +sta {c1},y +//FRAGMENT vwuz1=vwuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_band_vwuc1 +lda {z2} +and #<{c1} +sta {z1} +lda {z2}+1 +and #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1=vwuz2_band_vbuc1 +lda #{c1} +and {z2} +sta {z1} +//FRAGMENT pwuz1_derefidx_vbuc1=vbuz2 +lda {z2} +ldy #{c1} +sta ({z1}),y +lda #0 +iny +sta ({z1}),y +//FRAGMENT vbuz1=_hi_pvoz2 +lda {z2}+1 +sta {z1} +//FRAGMENT vbuz1=_lo_pvoz2 +lda {z2} +sta {z1} +//FRAGMENT pbuz1=pbuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vbuz1=_deref_pbuz2 +ldy #0 +lda ({z2}),y +sta {z1} +//FRAGMENT pbuz1=_inc_pbuz1 +inc {z1} +bne !+ +inc {z1}+1 +!: +//FRAGMENT vwuz1=vwuz2_rol_7 +lda {z2}+1 +lsr +lda {z2} +ror +sta {z1}+1 +lda #0 +ror +sta {z1} +//FRAGMENT vwuz1=vwuz2_bxor_vwuz3 +lda {z2} +eor {z3} +sta {z1} +lda {z2}+1 +eor {z3}+1 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_ror_9 +lda {z2}+1 +lsr +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vbuaa=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +//FRAGMENT vbuxx=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +tax +//FRAGMENT vbuyy=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +tay +//FRAGMENT 0_eq_vbuaa_then_la1 +cmp #0 +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuaa=vbuc2 +tay +lda #{c2} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=vbuc2 +lda #{c2} +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=vbuc2 +lda #{c2} +sta {c1},y +//FRAGMENT 0_neq_vbuxx_then_la1 +cpx #0 +bne {la1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1_plus_vbuc2 +lda #{c2} +ldy {z1} +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1_plus_vbuc2 +ldx {z1} +lda {c1},x +tax +axs #-[{c2}] +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1_plus_vbuc2 +lda #{c2} +ldy {z1} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuaa_plus_vbuc2 +tay +lda #{c2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuaa_plus_vbuc2 +tay +lda #{c2} +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuaa_plus_vbuc2 +tax +lda {c1},x +tax +axs #-[{c2}] +//FRAGMENT vbuyy=pbuc1_derefidx_vbuaa_plus_vbuc2 +tay +lda #{c2} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx_plus_vbuc2 +lda #{c2} +clc +adc {c1},x +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx_plus_vbuc2 +lda #{c2} +clc +adc {c1},x +//FRAGMENT vbuxx=pbuc1_derefidx_vbuxx_plus_vbuc2 +lda {c1},x +tax +axs #-[{c2}] +//FRAGMENT vbuyy=pbuc1_derefidx_vbuxx_plus_vbuc2 +lda #{c2} +clc +adc {c1},x +tay +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy_plus_vbuc2 +lda #{c2} +clc +adc {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy_plus_vbuc2 +lda #{c2} +clc +adc {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy_plus_vbuc2 +lda {c1},y +tax +axs #-[{c2}] +//FRAGMENT vbuyy=pbuc1_derefidx_vbuyy_plus_vbuc2 +lda #{c2} +clc +adc {c1},y +tay +//FRAGMENT vbuz1=vbuaa_bxor_vbuc1 +eor #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuxx_bxor_vbuc1 +txa +eor #{c1} +sta {z1} +//FRAGMENT vbuz1=vbuyy_bxor_vbuc1 +tya +eor #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuz1_bxor_vbuc1 +lda #{c1} +eor {z1} +//FRAGMENT vbuaa=vbuaa_bxor_vbuc1 +eor #{c1} +//FRAGMENT vbuaa=vbuxx_bxor_vbuc1 +txa +eor #{c1} +//FRAGMENT vbuaa=vbuyy_bxor_vbuc1 +tya +eor #{c1} +//FRAGMENT vbuxx=vbuz1_bxor_vbuc1 +lda #{c1} +eor {z1} +tax +//FRAGMENT vbuxx=vbuaa_bxor_vbuc1 +eor #{c1} +tax +//FRAGMENT vbuxx=vbuxx_bxor_vbuc1 +txa +eor #{c1} +tax +//FRAGMENT vbuxx=vbuyy_bxor_vbuc1 +tya +eor #{c1} +tax +//FRAGMENT vbuyy=vbuz1_bxor_vbuc1 +lda #{c1} +eor {z1} +tay +//FRAGMENT vbuyy=vbuaa_bxor_vbuc1 +eor #{c1} +tay +//FRAGMENT vbuyy=vbuxx_bxor_vbuc1 +txa +eor #{c1} +tay +//FRAGMENT vbuyy=vbuyy_bxor_vbuc1 +tya +eor #{c1} +tay +//FRAGMENT vbuz1=vbuaa +sta {z1} +//FRAGMENT vbuaa=_inc_vbuz1 +lda {z1} +clc +adc #1 +//FRAGMENT vbuz1=vbuxx_plus_vbuc1 +txa +axs #-[{c1}] +stx {z1} +//FRAGMENT vbuaa=vbuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +//FRAGMENT vbuaa=vbuxx_plus_vbuc1 +txa +clc +adc #{c1} +//FRAGMENT vbuxx=vbuz1_plus_vbuc1 +lax {z1} +axs #-[{c1}] +//FRAGMENT vbuxx=vbuxx_plus_vbuc1 +txa +axs #-[{c1}] +//FRAGMENT vbuyy=vbuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +tay +//FRAGMENT vbuyy=vbuxx_plus_vbuc1 +txa +clc +adc #{c1} +tay +//FRAGMENT vwuz1_lt_vbuxx_then_la1 +lda {z1}+1 +bne !+ +stx $ff +lda {z1} +cmp $ff +bcc {la1} +!: +//FRAGMENT vwuz1_ge_vbuxx_then_la1 +lda {z1}+1 +bne {la1} +stx $ff +lda {z1} +cmp $ff +bcs {la1} +!: +//FRAGMENT vwuz1_ge_vbuyy_then_la1 +lda {z1}+1 +bne {la1} +sty $ff +lda {z1} +cmp $ff +bcs {la1} +!: +//FRAGMENT vbuz1=vbuxx_minus_2 +dex +dex +stx {z1} +//FRAGMENT vwuz1=_word_vbuaa +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=_word_vbuxx +txa +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=_word_vbuyy +tya +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vbuaa=vbuz1_rol_2 +lda {z1} +asl +asl +//FRAGMENT vbuxx=vbuz1_rol_2 +lda {z1} +asl +asl +tax +//FRAGMENT vbuyy=vbuz1_rol_2 +lda {z1} +asl +asl +tay +//FRAGMENT vbuz1=vbuxx_rol_2 +txa +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuxx_rol_2 +txa +asl +asl +//FRAGMENT vbuxx=vbuxx_rol_2 +txa +asl +asl +tax +//FRAGMENT vbuyy=vbuxx_rol_2 +txa +asl +asl +tay +//FRAGMENT pbuc1_derefidx_vbuaa=_byte_vwuz1 +tay +lda {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbuxx=_byte_vwuz1 +lda {z1} +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbuyy=_byte_vwuz1 +lda {z1} +sta {c1},y +//FRAGMENT vbuxx=vbuz1 +ldx {z1} +//FRAGMENT vbuaa=vwuz1_band_vbuc1 +lda #{c1} +and {z1} +//FRAGMENT vbuxx=vwuz1_band_vbuc1 +lda #{c1} +and {z1} +tax +//FRAGMENT vbuyy=vwuz1_band_vbuc1 +lda #{c1} +and {z1} +tay +//FRAGMENT pwuz1_derefidx_vbuc1=vbuxx +txa +ldy #{c1} +sta ({z1}),y +lda #0 +iny +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuc1=vbuyy +tya +ldy #{c1} +sta ({z1}),y +lda #0 +iny +sta ({z1}),y +//FRAGMENT vbuaa=_hi_pvoz1 +lda {z1}+1 +//FRAGMENT vbuxx=_hi_pvoz1 +ldx {z1}+1 +//FRAGMENT _deref_pbuc1=vbuaa +sta {c1} +//FRAGMENT vbuaa=_lo_pvoz1 +lda {z1} +//FRAGMENT vbuxx=_lo_pvoz1 +ldx {z1} +//FRAGMENT vbuaa=_deref_pbuz1 +ldy #0 +lda ({z1}),y +//FRAGMENT vbuxx=_deref_pbuz1 +ldy #0 +lda ({z1}),y +tax +//FRAGMENT vbuyy=_deref_pbuz1 +ldy #0 +lda ({z1}),y +tay +//FRAGMENT vbuaa=vbuz1_minus_2 +lda {z1} +sec +sbc #2 +//FRAGMENT vbuxx=vbuz1_minus_2 +ldx {z1} +dex +dex +//FRAGMENT vbuyy=vbuz1_minus_2 +ldy {z1} +dey +dey +//FRAGMENT vbuz1=_inc_vbuxx +inx +stx {z1} +//FRAGMENT _deref_pbuc1=vbuxx +stx {c1} +//FRAGMENT _deref_pbuc1=vbuyy +sty {c1} +//FRAGMENT vbuyy=_hi_pvoz1 +ldy {z1}+1 +//FRAGMENT vbuyy=_lo_pvoz1 +ldy {z1} +//FRAGMENT 0_neq_vbuyy_then_la1 +cpy #0 +bne {la1} +//FRAGMENT 0_eq_vbuxx_then_la1 +cpx #0 +beq {la1} +//FRAGMENT 0_eq_vbuyy_then_la1 +cpy #0 +beq {la1} +//FRAGMENT vbuz1=vbuxx +stx {z1} +//FRAGMENT vbuz1=vbuyy +sty {z1} +//FRAGMENT vbuxx=_inc_vbuz1 +ldx {z1} +inx +//FRAGMENT vbuyy=_inc_vbuz1 +ldy {z1} +iny +//FRAGMENT vwuz1=vwuz1_bxor_vwuz2 +lda {z1} +eor {z2} +sta {z1} +lda {z1}+1 +eor {z2}+1 +sta {z1}+1 +//FRAGMENT pwuz1=pwuc1_plus_vwuz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=_deref_pwuz1_ror_8 +ldy #1 +lda ({z1}),y +sta {z1} +dey +sty {z1}+1 +//FRAGMENT vwuz1=pwuz1_derefidx_vbuc1_ror_8 +ldy #{c1} +iny +lda ({z1}),y +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz1_rol_8 +lda {z1} +sta {z1}+1 +lda #0 +sta {z1} +//FRAGMENT vwuz1=vwuz1_band_vwuc1 +lda {z1} +and #<{c1} +sta {z1} +lda {z1}+1 +and #>{c1} +sta {z1}+1 +//FRAGMENT isr_hardware_cloba_entry +pha +//FRAGMENT isr_hardware_cloba_exit +pla +rti +//FRAGMENT vbuz1_lt_vbuc1_then_la1 +lda {z1} +cmp #{c1} +bcc {la1} +//FRAGMENT vbuz1_ge_vbuc1_then_la1 +lda {z1} +cmp #{c1} +bcs {la1} +//FRAGMENT vbuz1=vbuz2_rol_3 +lda {z2} +asl +asl +asl +sta {z1} +//FRAGMENT pwuc1_derefidx_vbuz1=vbuc2 +lda #{c2} +ldy {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT vbuz1_lt_vbuz2_then_la1 +lda {z1} +cmp {z2} +bcc {la1} +//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_pwuc2_derefidx_vbuz1 +ldy {z1} +clc +lda {c1},y +adc {c2},y +sta {c1},y +lda {c1}+1,y +adc {c2}+1,y +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_vbuc2 +ldy {z1} +clc +lda {c1},y +adc #{c2} +sta {c1},y +lda {c1}+1,y +adc #0 +sta {c1}+1,y +//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2_ror_8 +ldy {z2} +lda #0 +sta {z1}+1 +lda {c1}+1,y +sta {z1} +//FRAGMENT pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_bxor_vwuc2 +ldy {z1} +lda {c1},y +eor #<{c2} +sta {c1},y +lda {c1}+1,y +eor #>{c2} +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=vwuz2 +ldy {z1} +lda {z2} +sta {c1},y +lda {z2}+1 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=vbuz2 +lda {z2} +ldy {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT vbuaa_lt_vbuc1_then_la1 +cmp #{c1} +bcc {la1} +//FRAGMENT vbuxx_ge_vbuc1_then_la1 +cpx #{c1} +bcs {la1} +//FRAGMENT vbuaa=vbuz1_rol_3 +lda {z1} +asl +asl +asl +//FRAGMENT vbuxx=vbuz1_rol_3 +lda {z1} +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuz1_rol_3 +lda {z1} +asl +asl +asl +tay +//FRAGMENT vbuz1=vbuxx_rol_3 +txa +asl +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuxx_rol_3 +txa +asl +asl +asl +//FRAGMENT vbuxx=vbuxx_rol_3 +txa +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuxx_rol_3 +txa +asl +asl +asl +tay +//FRAGMENT vbuz1=vbuyy_rol_3 +tya +asl +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuyy_rol_3 +tya +asl +asl +asl +//FRAGMENT vbuxx=vbuyy_rol_3 +tya +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuyy_rol_3 +tya +asl +asl +asl +tay +//FRAGMENT pwuc1_derefidx_vbuaa=vbuc2 +tay +lda #{c2} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuxx=vbuc2 +lda #{c2} +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=vbuc2 +lda #{c2} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT vbuaa_lt_vbuz1_then_la1 +cmp {z1} +bcc {la1} +//FRAGMENT vbuz1=vbuaa_rol_3 +asl +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuaa_rol_3 +asl +asl +asl +//FRAGMENT vbuxx=vbuaa_rol_3 +asl +asl +asl +tax +//FRAGMENT vbuyy=vbuaa_rol_3 +asl +asl +asl +tay +//FRAGMENT pwuc1_derefidx_vbuaa=pwuc1_derefidx_vbuaa_plus_pwuc2_derefidx_vbuaa +tax +tay +clc +lda {c1},y +adc {c2},x +sta {c1},y +lda {c1}+1,y +adc {c2}+1,x +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_pwuc2_derefidx_vbuxx +txa +tay +txa +sty $ff +ldx $ff +tay +clc +lda {c1},y +adc {c2},x +sta {c1},y +lda {c1}+1,y +adc {c2}+1,x +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_pwuc2_derefidx_vbuyy +clc +lda {c1},y +adc {c2},y +sta {c1},y +lda {c1}+1,y +adc {c2}+1,y +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_vbuc2 +clc +lda {c1},x +adc #{c2} +sta {c1},x +lda {c1}+1,x +adc #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_vbuc2 +clc +lda {c1},y +adc #{c2} +sta {c1},y +lda {c1}+1,y +adc #0 +sta {c1}+1,y +//FRAGMENT vwuz1=pwuc1_derefidx_vbuxx_ror_8 +txa +tay +lda #0 +sta {z1}+1 +lda {c1}+1,y +sta {z1} +//FRAGMENT vwuz1=pwuc1_derefidx_vbuyy_ror_8 +lda #0 +sta {z1}+1 +lda {c1}+1,y +sta {z1} +//FRAGMENT pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_bxor_vwuc2 +txa +tay +lda {c1},y +eor #<{c2} +sta {c1},y +lda {c1}+1,y +eor #>{c2} +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_bxor_vwuc2 +lda {c1},y +eor #<{c2} +sta {c1},y +lda {c1}+1,y +eor #>{c2} +sta {c1}+1,y +//FRAGMENT vbuz1=vbuyy_plus_vbuc1 +tya +clc +adc #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuyy_plus_vbuc1 +tya +clc +adc #{c1} +//FRAGMENT vbuxx=vbuyy_plus_vbuc1 +tya +tax +axs #-[{c1}] +//FRAGMENT vbuyy=vbuyy_plus_vbuc1 +tya +clc +adc #{c1} +tay +//FRAGMENT vwuz1_lt_vbuyy_then_la1 +lda {z1}+1 +bne !+ +sty $ff +lda {z1} +cmp $ff +bcc {la1} +!: +//FRAGMENT pwuc1_derefidx_vbuxx=vwuz1 +lda {z1} +sta {c1},x +lda {z1}+1 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=vwuz1 +lda {z1} +sta {c1},y +lda {z1}+1 +sta {c1}+1,y +//FRAGMENT vbuz1=vbuyy_rol_2 +tya +asl +asl +sta {z1} +//FRAGMENT vbuaa=vbuyy_rol_2 +tya +asl +asl +//FRAGMENT vbuxx=vbuyy_rol_2 +tya +asl +asl +tax +//FRAGMENT vbuyy=vbuyy_rol_2 +tya +asl +asl +tay +//FRAGMENT pwuc1_derefidx_vbuaa=vwuz1 +tay +lda {z1} +sta {c1},y +lda {z1}+1 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=vbuaa +ldy {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=vbuxx +ldy {z1} +txa +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuz1=vbuyy +tya +ldy {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuxx=vbuz1 +lda {z1} +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuxx=vbuaa +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuxx=vbuxx +txa +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuxx=vbuyy +tya +sta {c1},x +lda #0 +sta {c1}+1,x +//FRAGMENT pwuc1_derefidx_vbuyy=vbuz1 +lda {z1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuyy=vbuaa +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuyy=vbuxx +txa +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbuyy=vbuyy +tya +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT vbuxx_lt_vbuc1_then_la1 +cpx #{c1} +bcc {la1} +//FRAGMENT vbuxx_lt_vbuz1_then_la1 +cpx {z1} +bcc {la1} +//FRAGMENT vbuyy_lt_vbuz1_then_la1 +cpy {z1} +bcc {la1} +//FRAGMENT vbuyy_lt_vbuc1_then_la1 +cpy #{c1} +bcc {la1} diff --git a/src/main/fragment/cache/fragment-cache-wdc65c02.asm b/src/main/fragment/cache/fragment-cache-wdc65c02.asm index b6e596087..a9dacfa48 100644 --- a/src/main/fragment/cache/fragment-cache-wdc65c02.asm +++ b/src/main/fragment/cache/fragment-cache-wdc65c02.asm @@ -1,4 +1,273 @@ -//KICKC FRAGMENT CACHE 140bf2a915 140bf2c716 +//KICKC FRAGMENT CACHE 149935006b 1499351e94 +//FRAGMENT vwuz1=vwuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT isr_rom_sys_cx16_entry + +//FRAGMENT vwuz1=_inc_vwuz1 +inc {z1} +bne !+ +inc {z1}+1 +!: +//FRAGMENT vwuz1_neq_vbuc1_then_la1 +NO_SYNTHESIS +//FRAGMENT vwuz1_neq_vwuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne {la1} +lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT vwuz1=vbuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=_dec_vwuz1 +lda {z1} +bne !+ +dec {z1}+1 +!: +dec {z1} +//FRAGMENT vwuz1=vwuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1=vbuc1 +lda #{c1} +sta {z1} +//FRAGMENT vbuz1_lt_vbuc1_then_la1 +lda {z1} +cmp #{c1} +bcc {la1} +//FRAGMENT _deref_pbuc1=vbuc2 +lda #{c2} +sta {c1} +//FRAGMENT isr_rom_sys_cx16_exit +jmp $e034 +//FRAGMENT vwuz1=vwuz2_rol_1 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +//FRAGMENT pwuz1=pwuc1_plus_vwuz2 +clc +lda {z2} +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT _deref_pwuc1=_deref_pwuz1 +ldy #0 +lda ({z1}),y +sta {c1} +iny +lda ({z1}),y +sta {c1}+1 +//FRAGMENT pvoz1=pvoz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT pvoz1=pvoc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT pbuz1=pbuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT vwuz1=vwuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT vwuz1_lt_vbuc1_then_la1 +lda {z1}+1 +bne !+ +lda {z1} +cmp #{c1} +bcc {la1} +!: +//FRAGMENT vwuz1=vwuz1_minus_vbuc1 +sec +lda {z1} +sbc #{c1} +sta {z1} +lda {z1}+1 +sbc #0 +sta {z1}+1 +//FRAGMENT vbuz1=_inc_vbuz1 +inc {z1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +sta {c1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2 +lda #{c2} +ora {c1} +sta {c1} +//FRAGMENT _deref_qprc1=pprc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 +//FRAGMENT _deref_pwuc1=_deref_pwuc1_plus_vbuc2 +NO_SYNTHESIS +//FRAGMENT _deref_pwuc1=_deref_pwuc1_plus_vbsc2 +NO_SYNTHESIS +//FRAGMENT _deref_pwuc1=_deref_pwuc1_plus_vwuc2 +lda #<{c2} +clc +adc {c1} +sta {c1} +lda #>{c2} +adc {c1}+1 +sta {c1}+1 +//FRAGMENT vbuz1=_lo_pvoz2 +lda {z2} +sta {z1} +//FRAGMENT _deref_pbuc1=vbuz1 +lda {z1} +sta {c1} +//FRAGMENT vbuz1=_hi_pvoz2 +lda {z2}+1 +sta {z1} +//FRAGMENT vbuz1=vbuc1_bor_vbuz2 +lda #{c1} +ora {z2} +sta {z1} +//FRAGMENT pbuz1=pbuz2_plus_vwuz3 +lda {z2} +clc +adc {z3} +sta {z1} +lda {z2}+1 +adc {z3}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1_neq_pbuz2_then_la1 +lda {z1}+1 +cmp {z2}+1 +bne {la1} +lda {z1} +cmp {z2} +bne {la1} +//FRAGMENT _deref_pbuc1=_deref_pbuz1 +ldy #0 +lda ({z1}),y +sta {c1} +//FRAGMENT pbuz1=_inc_pbuz1 +inc {z1} +bne !+ +inc {z1}+1 +!: +//FRAGMENT vbuaa_lt_vbuc1_then_la1 +cmp #{c1} +bcc {la1} +//FRAGMENT vbuaa=_lo_pvoz1 +lda {z1} +//FRAGMENT vbuxx=_lo_pvoz1 +ldx {z1} +//FRAGMENT _deref_pbuc1=vbuaa +sta {c1} +//FRAGMENT vbuaa=_hi_pvoz1 +lda {z1}+1 +//FRAGMENT vbuxx=_hi_pvoz1 +ldx {z1}+1 +//FRAGMENT vbuaa=vbuc1_bor_vbuz1 +lda #{c1} +ora {z1} +//FRAGMENT vbuxx=vbuc1_bor_vbuz1 +lda #{c1} +ora {z1} +tax +//FRAGMENT vbuyy=vbuc1_bor_vbuz1 +lda #{c1} +ora {z1} +tay +//FRAGMENT vbuz1=vbuc1_bor_vbuxx +txa +ora #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuc1_bor_vbuxx +txa +ora #{c1} +//FRAGMENT vbuxx=vbuc1_bor_vbuxx +txa +ora #{c1} +tax +//FRAGMENT vbuyy=vbuc1_bor_vbuxx +txa +ora #{c1} +tay +//FRAGMENT vbuz1=vbuc1_bor_vbuyy +tya +ora #{c1} +sta {z1} +//FRAGMENT vbuaa=vbuc1_bor_vbuyy +tya +ora #{c1} +//FRAGMENT vbuxx=vbuc1_bor_vbuyy +tya +ora #{c1} +tax +//FRAGMENT vbuyy=vbuc1_bor_vbuyy +tya +ora #{c1} +tay +//FRAGMENT vbuxx_lt_vbuc1_then_la1 +cpx #{c1} +bcc {la1} +//FRAGMENT _deref_pbuc1=vbuxx +stx {c1} +//FRAGMENT vbuyy=_lo_pvoz1 +ldy {z1} +//FRAGMENT _deref_pbuc1=vbuyy +sty {c1} +//FRAGMENT vbuyy=_hi_pvoz1 +ldy {z1}+1 +//FRAGMENT vbuxx=vbuc1 +ldx #{c1} +//FRAGMENT pbuz1=pbuz2_plus_vwuz1 +lda {z1} +clc +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pwuz1=pwuc1_plus_vwuz1 +clc +lda {z1} +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 //FRAGMENT vbuz1=_deref_pbuc1 lda {c1} sta {z1} @@ -6,9 +275,6 @@ sta {z1} lda {z2} inc sta {z1} -//FRAGMENT _deref_pbuc1=vbuz1 -lda {z1} -sta {c1} //FRAGMENT vbuaa=_deref_pbuc1 lda {c1} //FRAGMENT vbuxx=_deref_pbuc1 @@ -19,8 +285,6 @@ sta {z1} //FRAGMENT vbuz1=vbuxx_plus_1 inx stx {z1} -//FRAGMENT _deref_pbuc1=vbuaa -sta {c1} //FRAGMENT vbuyy=_deref_pbuc1 ldy {c1} //FRAGMENT vbuz1=vbuyy_plus_1 @@ -40,8 +304,6 @@ inc //FRAGMENT vbuxx=vbuz1_plus_1 ldx {z1} inx -//FRAGMENT _deref_pbuc1=vbuxx -stx {c1} //FRAGMENT vbuxx=vbuaa_plus_1 tax inx @@ -54,8 +316,6 @@ tax //FRAGMENT vbuyy=vbuz1_plus_1 ldy {z1} iny -//FRAGMENT _deref_pbuc1=vbuyy -sty {c1} //FRAGMENT vbuyy=vbuaa_plus_1 tay iny @@ -65,24 +325,92 @@ inc tay //FRAGMENT vbuyy=vbuyy_plus_1 iny -//FRAGMENT vbuz1=vbuc1 -lda #{c1} +//FRAGMENT 0_neq_pbuc1_derefidx_vbuz1_then_la1 +ldy {z1} +lda {c1},y +cmp #0 +bne {la1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y sta {z1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2 -lda #{c2} -ora {c1} -sta {c1} -//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuc2 -lda #{c2} -and {c1} -sta {c1} +//FRAGMENT pbuz1=_inc_pbuz2 +clc +lda {z2} +adc #1 +sta {z1} +lda {z2}+1 +adc #0 +sta {z1}+1 +//FRAGMENT pbuz1_neq_pbuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne {la1} +lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT vbuz1=_lo_pbuz2 +lda {z2} +sta {z1} +//FRAGMENT vbuz1=_hi_pbuz2 +lda {z2}+1 +sta {z1} +//FRAGMENT 0_neq_pbuc1_derefidx_vbuaa_then_la1 +tay +lda {c1},y +cmp #0 +bne {la1} +//FRAGMENT 0_neq_pbuc1_derefidx_vbuxx_then_la1 +lda {c1},x +cmp #0 +bne {la1} +//FRAGMENT 0_neq_pbuc1_derefidx_vbuyy_then_la1 +lda {c1},y +cmp #0 +bne {la1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx +lda {c1},x +sta {z1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy +lda {c1},y +sta {z1} +//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1 +ldy {z1} +lda {c1},y +//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx +lda {c1},x +//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy +lda {c1},y +//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1 +ldy {z1} +ldx {c1},y +//FRAGMENT vbuaa=_lo_pbuz1 +lda {z1} +//FRAGMENT vbuxx=_lo_pbuz1 +ldx {z1} +//FRAGMENT vbuaa=_hi_pbuz1 +lda {z1}+1 +//FRAGMENT vbuxx=_hi_pbuz1 +ldx {z1}+1 +//FRAGMENT vbuyy=_lo_pbuz1 +ldy {z1} +//FRAGMENT vbuyy=_hi_pbuz1 +ldy {z1}+1 +//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1 +ldx {z1} +ldy {c1},x +//FRAGMENT vbuyy=vbuc1 +ldy #{c1} +//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy +ldx {c1},y +//FRAGMENT vbuyy=_inc_vbuyy +iny +//FRAGMENT isr_rom_min_cx16_entry + //FRAGMENT vbuz1_neq_vbuc1_then_la1 lda #{c1} cmp {z1} bne {la1} -//FRAGMENT _deref_pbuc1=vbuc2 -lda #{c2} -sta {c1} //FRAGMENT vbuz1=_dec_vbuz1 dec {z1} //FRAGMENT vbuz1_neq_0_then_la1 @@ -93,64 +421,11 @@ bne {la1} lda {z1} cmp #{c1} bcs {la1} -//FRAGMENT vbuz1=_inc_vbuz1 -inc {z1} -//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuz1 -ldy {z1} -lda {c2},y -sta {c1} -//FRAGMENT vbuz1_lt_vbuc1_then_la1 -lda {z1} -cmp #{c1} -bcc {la1} -//FRAGMENT _deref_qprc1=pprc2 -lda #<{c2} -sta {c1} -lda #>{c2} -sta {c1}+1 -//FRAGMENT vbuaa_neq_vbuc1_then_la1 -cmp #{c1} -bne {la1} -//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuaa -tay -lda {c2},y -sta {c1} -//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuxx -lda {c2},x -sta {c1} -//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuyy -lda {c2},y -sta {c1} -//FRAGMENT vbuaa_lt_vbuc1_then_la1 -cmp #{c1} -bcc {la1} -//FRAGMENT vbuxx_neq_vbuc1_then_la1 -cpx #{c1} -bne {la1} -//FRAGMENT vbuaa=vbuc1 -lda #{c1} -//FRAGMENT vbuaa=_inc_vbuaa -inc -//FRAGMENT vbuxx=vbuc1 -ldx #{c1} -//FRAGMENT vbuxx_lt_vbuc1_then_la1 -cpx #{c1} -bcc {la1} -//FRAGMENT vbuxx=_inc_vbuxx -inx -//FRAGMENT vbuyy=vbuc1 -ldy #{c1} -//FRAGMENT vbuyy_lt_vbuc1_then_la1 -cpy #{c1} -bcc {la1} -//FRAGMENT vbuyy=_inc_vbuyy -iny -//FRAGMENT vbuyy_neq_vbuc1_then_la1 -cpy #{c1} -bne {la1} //FRAGMENT vbuz1=vbuz2 lda {z2} sta {z1} +//FRAGMENT isr_rom_min_cx16_exit +jmp $e049 //FRAGMENT pbuz1=pbuc1_plus_pbuc2_derefidx_vbuz2 ldy {z2} lda {c2},y @@ -169,27 +444,17 @@ sta {z1} ldy {z2} lda {c1},y sta ({z1}),y -//FRAGMENT pbuz1=pbuc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT pbuz1_neq_pbuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bne {la1} -lda {z1} -cmp #<{c1} -bne {la1} +//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuz1 +ldy {z1} +lda {c2},y +sta {c1} //FRAGMENT _deref_pbuz1=vbuc1 lda #{c1} ldy #0 sta ({z1}),y -//FRAGMENT pbuz1=_inc_pbuz1 -inc {z1} -bne !+ -inc {z1}+1 -!: +//FRAGMENT vbuaa_neq_vbuc1_then_la1 +cmp #{c1} +bne {la1} //FRAGMENT vbuaa=vbuz1 lda {z1} //FRAGMENT vbuxx=vbuz1 @@ -241,232 +506,28 @@ sta ({z1}),y //FRAGMENT pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuyy lda {c1},y sta ({z1}),y -//FRAGMENT 0_neq_pbuc1_derefidx_vbuz1_then_la1 -ldy {z1} -lda {c1},y -cmp #0 -bne {la1} -//FRAGMENT pbuz1=pbuz2 -lda {z2} -sta {z1} -lda {z2}+1 -sta {z1}+1 -//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2 -ldy {z2} -lda {c1},y -sta {z1} -//FRAGMENT pbuz1=_inc_pbuz2 -clc -lda {z2} -adc #1 -sta {z1} -lda {z2}+1 -adc #0 -sta {z1}+1 -//FRAGMENT vbuz1=_lo_pbuz2 -lda {z2} -sta {z1} -//FRAGMENT vbuz1=_hi_pbuz2 -lda {z2}+1 -sta {z1} -//FRAGMENT 0_neq_pbuc1_derefidx_vbuaa_then_la1 +//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuaa tay -lda {c1},y -cmp #0 -bne {la1} -//FRAGMENT 0_neq_pbuc1_derefidx_vbuxx_then_la1 -lda {c1},x -cmp #0 -bne {la1} -//FRAGMENT 0_neq_pbuc1_derefidx_vbuyy_then_la1 -lda {c1},y -cmp #0 -bne {la1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuxx -lda {c1},x -sta {z1} -//FRAGMENT vbuz1=pbuc1_derefidx_vbuyy -lda {c1},y -sta {z1} -//FRAGMENT vbuaa=pbuc1_derefidx_vbuz1 -ldy {z1} -lda {c1},y -//FRAGMENT vbuaa=pbuc1_derefidx_vbuxx -lda {c1},x -//FRAGMENT vbuaa=pbuc1_derefidx_vbuyy -lda {c1},y -//FRAGMENT vbuxx=pbuc1_derefidx_vbuz1 -ldy {z1} -ldx {c1},y -//FRAGMENT vbuaa=_lo_pbuz1 -lda {z1} -//FRAGMENT vbuxx=_lo_pbuz1 -ldx {z1} -//FRAGMENT vbuaa=_hi_pbuz1 -lda {z1}+1 -//FRAGMENT vbuxx=_hi_pbuz1 -ldx {z1}+1 -//FRAGMENT vbuyy=_lo_pbuz1 -ldy {z1} -//FRAGMENT vbuyy=_hi_pbuz1 -ldy {z1}+1 -//FRAGMENT vbuyy=pbuc1_derefidx_vbuz1 -ldx {z1} -ldy {c1},x -//FRAGMENT vbuxx=pbuc1_derefidx_vbuyy -ldx {c1},y -//FRAGMENT vwuz1=vwuc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=_inc_vwuz1 -inc {z1} -bne !+ -inc {z1}+1 -!: -//FRAGMENT vwuz1_neq_vbuc1_then_la1 -NO_SYNTHESIS -//FRAGMENT vwuz1_neq_vwuc1_then_la1 -lda {z1}+1 -cmp #>{c1} -bne {la1} -lda {z1} -cmp #<{c1} -bne {la1} -//FRAGMENT vwuz1=vbuc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT vwuz1=_dec_vwuz1 -lda {z1} -bne !+ -dec {z1}+1 -!: -dec {z1} -//FRAGMENT vwuz1=vwuz2_rol_1 -lda {z2} -asl -sta {z1} -lda {z2}+1 -rol -sta {z1}+1 -//FRAGMENT pwuz1=pwuc1_plus_vwuz2 -clc -lda {z2} -adc #<{c1} -sta {z1} -lda {z2}+1 -adc #>{c1} -sta {z1}+1 -//FRAGMENT _deref_pwuc1=_deref_pwuz1 -ldy #0 -lda ({z1}),y +lda {c2},y sta {c1} -iny -lda ({z1}),y -sta {c1}+1 -//FRAGMENT pvoz1=pvoc1 -lda #<{c1} -sta {z1} -lda #>{c1} -sta {z1}+1 -//FRAGMENT vbuz1=_lo_pvoz2 -lda {z2} -sta {z1} -//FRAGMENT vbuz1=_hi_pvoz2 -lda {z2}+1 -sta {z1} -//FRAGMENT vbuz1=vbuc1_bor_vbuz2 -lda #{c1} -ora {z2} -sta {z1} -//FRAGMENT pbuz1=pbuz2_plus_vwuz3 -lda {z2} -clc -adc {z3} -sta {z1} -lda {z2}+1 -adc {z3}+1 -sta {z1}+1 -//FRAGMENT pbuz1_neq_pbuz2_then_la1 -lda {z1}+1 -cmp {z2}+1 -bne {la1} -lda {z1} -cmp {z2} -bne {la1} -//FRAGMENT _deref_pbuc1=_deref_pbuz1 -ldy #0 -lda ({z1}),y +//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuxx +lda {c2},x sta {c1} -//FRAGMENT vbuaa=_lo_pvoz1 -lda {z1} -//FRAGMENT vbuxx=_lo_pvoz1 -ldx {z1} -//FRAGMENT vbuaa=_hi_pvoz1 -lda {z1}+1 -//FRAGMENT vbuxx=_hi_pvoz1 -ldx {z1}+1 -//FRAGMENT vbuaa=vbuc1_bor_vbuz1 +//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuyy +lda {c2},y +sta {c1} +//FRAGMENT vbuxx_neq_vbuc1_then_la1 +cpx #{c1} +bne {la1} +//FRAGMENT vbuxx=_inc_vbuxx +inx +//FRAGMENT vbuyy_lt_vbuc1_then_la1 +cpy #{c1} +bcc {la1} +//FRAGMENT vbuaa=vbuc1 lda #{c1} -ora {z1} -//FRAGMENT vbuxx=vbuc1_bor_vbuz1 -lda #{c1} -ora {z1} -tax -//FRAGMENT vbuyy=vbuc1_bor_vbuz1 -lda #{c1} -ora {z1} -tay -//FRAGMENT vbuz1=vbuc1_bor_vbuxx -txa -ora #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuc1_bor_vbuxx -txa -ora #{c1} -//FRAGMENT vbuxx=vbuc1_bor_vbuxx -txa -ora #{c1} -tax -//FRAGMENT vbuyy=vbuc1_bor_vbuxx -txa -ora #{c1} -tay -//FRAGMENT vbuz1=vbuc1_bor_vbuyy -tya -ora #{c1} -sta {z1} -//FRAGMENT vbuaa=vbuc1_bor_vbuyy -tya -ora #{c1} -//FRAGMENT vbuxx=vbuc1_bor_vbuyy -tya -ora #{c1} -tax -//FRAGMENT vbuyy=vbuc1_bor_vbuyy -tya -ora #{c1} -tay -//FRAGMENT vbuyy=_lo_pvoz1 -ldy {z1} -//FRAGMENT vbuyy=_hi_pvoz1 -ldy {z1}+1 -//FRAGMENT pbuz1=pbuz2_plus_vwuz1 -lda {z1} -clc -adc {z2} -sta {z1} -lda {z1}+1 -adc {z2}+1 -sta {z1}+1 -//FRAGMENT pwuz1=pwuc1_plus_vwuz1 -clc -lda {z1} -adc #<{c1} -sta {z1} -lda {z1}+1 -adc #>{c1} -sta {z1}+1 +//FRAGMENT vbuaa=_inc_vbuaa +inc +//FRAGMENT vbuyy_neq_vbuc1_then_la1 +cpy #{c1} +bne {la1} diff --git a/src/main/fragment/csg65ce02-common/isr_hardware_all_entry.asm b/src/main/fragment/csg65ce02-common/isr_hardware_all_entry.asm new file mode 100644 index 000000000..426dd3593 --- /dev/null +++ b/src/main/fragment/csg65ce02-common/isr_hardware_all_entry.asm @@ -0,0 +1,4 @@ +pha +phx +phy +phz \ No newline at end of file diff --git a/src/main/fragment/csg65ce02-common/isr_hardware_all_exit.asm b/src/main/fragment/csg65ce02-common/isr_hardware_all_exit.asm new file mode 100644 index 000000000..62b302a96 --- /dev/null +++ b/src/main/fragment/csg65ce02-common/isr_hardware_all_exit.asm @@ -0,0 +1,5 @@ +plz +ply +plx +pla +rti \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/isr_hardware_all_entry.asm b/src/main/fragment/mos6502-common/isr_hardware_all_entry.asm new file mode 100644 index 000000000..75ece0e13 --- /dev/null +++ b/src/main/fragment/mos6502-common/isr_hardware_all_entry.asm @@ -0,0 +1,5 @@ +pha +txa +pha +tya +pha \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/isr_hardware_all_exit.asm b/src/main/fragment/mos6502-common/isr_hardware_all_exit.asm new file mode 100644 index 000000000..67fb503c5 --- /dev/null +++ b/src/main/fragment/mos6502-common/isr_hardware_all_exit.asm @@ -0,0 +1,6 @@ +pla +tay +pla +tax +pla +rti \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/isr_hardware_cloba_entry.asm b/src/main/fragment/mos6502-common/isr_hardware_cloba_entry.asm new file mode 100644 index 000000000..412cece15 --- /dev/null +++ b/src/main/fragment/mos6502-common/isr_hardware_cloba_entry.asm @@ -0,0 +1 @@ +pha \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/isr_hardware_cloba_exit.asm b/src/main/fragment/mos6502-common/isr_hardware_cloba_exit.asm new file mode 100644 index 000000000..07dc7c6db --- /dev/null +++ b/src/main/fragment/mos6502-common/isr_hardware_cloba_exit.asm @@ -0,0 +1,2 @@ +pla +rti \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/isr_hardware_clobax_entry.asm b/src/main/fragment/mos6502-common/isr_hardware_clobax_entry.asm new file mode 100644 index 000000000..a9339d4a6 --- /dev/null +++ b/src/main/fragment/mos6502-common/isr_hardware_clobax_entry.asm @@ -0,0 +1,3 @@ +pha +txa +pha \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/isr_hardware_clobax_exit.asm b/src/main/fragment/mos6502-common/isr_hardware_clobax_exit.asm new file mode 100644 index 000000000..bd079f9ab --- /dev/null +++ b/src/main/fragment/mos6502-common/isr_hardware_clobax_exit.asm @@ -0,0 +1,4 @@ +pla +tax +pla +rti \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/isr_hardware_clobay_entry.asm b/src/main/fragment/mos6502-common/isr_hardware_clobay_entry.asm new file mode 100644 index 000000000..c6a10ce4d --- /dev/null +++ b/src/main/fragment/mos6502-common/isr_hardware_clobay_entry.asm @@ -0,0 +1,3 @@ +pha +tya +pha \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/isr_hardware_clobay_exit.asm b/src/main/fragment/mos6502-common/isr_hardware_clobay_exit.asm new file mode 100644 index 000000000..cd9e31881 --- /dev/null +++ b/src/main/fragment/mos6502-common/isr_hardware_clobay_exit.asm @@ -0,0 +1,4 @@ +pla +tay +pla +rti \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/isr_hardware_none_entry.asm b/src/main/fragment/mos6502-common/isr_hardware_none_entry.asm new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/fragment/mos6502-common/isr_hardware_none_exit.asm b/src/main/fragment/mos6502-common/isr_hardware_none_exit.asm new file mode 100644 index 000000000..4f2cc73f5 --- /dev/null +++ b/src/main/fragment/mos6502-common/isr_hardware_none_exit.asm @@ -0,0 +1 @@ +rti \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/isr_rom_min_c64_entry.asm b/src/main/fragment/mos6502-common/isr_rom_min_c64_entry.asm new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/fragment/mos6502-common/isr_rom_min_c64_exit.asm b/src/main/fragment/mos6502-common/isr_rom_min_c64_exit.asm new file mode 100644 index 000000000..522036aa0 --- /dev/null +++ b/src/main/fragment/mos6502-common/isr_rom_min_c64_exit.asm @@ -0,0 +1 @@ +jmp $ea81 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/isr_rom_min_cx16_entry.asm b/src/main/fragment/mos6502-common/isr_rom_min_cx16_entry.asm new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/fragment/mos6502-common/isr_rom_min_cx16_exit.asm b/src/main/fragment/mos6502-common/isr_rom_min_cx16_exit.asm new file mode 100644 index 000000000..63a2027df --- /dev/null +++ b/src/main/fragment/mos6502-common/isr_rom_min_cx16_exit.asm @@ -0,0 +1 @@ +jmp $e049 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/isr_rom_sys_c64_entry.asm b/src/main/fragment/mos6502-common/isr_rom_sys_c64_entry.asm new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/fragment/mos6502-common/isr_rom_sys_c64_exit.asm b/src/main/fragment/mos6502-common/isr_rom_sys_c64_exit.asm new file mode 100644 index 000000000..c1190b985 --- /dev/null +++ b/src/main/fragment/mos6502-common/isr_rom_sys_c64_exit.asm @@ -0,0 +1 @@ +jmp $ea31 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/isr_rom_sys_cx16_entry.asm b/src/main/fragment/mos6502-common/isr_rom_sys_cx16_entry.asm new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/fragment/mos6502-common/isr_rom_sys_cx16_exit.asm b/src/main/fragment/mos6502-common/isr_rom_sys_cx16_exit.asm new file mode 100644 index 000000000..687d22213 --- /dev/null +++ b/src/main/fragment/mos6502-common/isr_rom_sys_cx16_exit.asm @@ -0,0 +1 @@ +jmp $e034 \ No newline at end of file diff --git a/src/main/fragment/mos6502-selfmod/isr_hardware_all_entry.asm b/src/main/fragment/mos6502-selfmod/isr_hardware_all_entry.asm new file mode 100644 index 000000000..86054c712 --- /dev/null +++ b/src/main/fragment/mos6502-selfmod/isr_hardware_all_entry.asm @@ -0,0 +1,3 @@ +sta rega+1 +stx regx+1 +sty regy+1 diff --git a/src/main/fragment/mos6502-selfmod/isr_hardware_all_exit.asm b/src/main/fragment/mos6502-selfmod/isr_hardware_all_exit.asm new file mode 100644 index 000000000..2f848a651 --- /dev/null +++ b/src/main/fragment/mos6502-selfmod/isr_hardware_all_exit.asm @@ -0,0 +1,4 @@ +rega: lda #0 +regx: ldx #0 +regy: ldy #0 +rti \ No newline at end of file diff --git a/src/main/fragment/mos6502-selfmod/isr_hardware_clobax_entry.asm b/src/main/fragment/mos6502-selfmod/isr_hardware_clobax_entry.asm new file mode 100644 index 000000000..43f15f353 --- /dev/null +++ b/src/main/fragment/mos6502-selfmod/isr_hardware_clobax_entry.asm @@ -0,0 +1,2 @@ +sta rega+1 +stx regx+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-selfmod/isr_hardware_clobax_exit.asm b/src/main/fragment/mos6502-selfmod/isr_hardware_clobax_exit.asm new file mode 100644 index 000000000..1329e4d8e --- /dev/null +++ b/src/main/fragment/mos6502-selfmod/isr_hardware_clobax_exit.asm @@ -0,0 +1,3 @@ +rega: lda #0 +regx: ldx #0 +rti \ No newline at end of file diff --git a/src/main/fragment/mos6502-selfmod/isr_hardware_clobay_entry.asm b/src/main/fragment/mos6502-selfmod/isr_hardware_clobay_entry.asm new file mode 100644 index 000000000..d4d4fec9a --- /dev/null +++ b/src/main/fragment/mos6502-selfmod/isr_hardware_clobay_entry.asm @@ -0,0 +1,2 @@ +sta rega+1 +sty regy+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-selfmod/isr_hardware_clobay_exit.asm b/src/main/fragment/mos6502-selfmod/isr_hardware_clobay_exit.asm new file mode 100644 index 000000000..df2bfe287 --- /dev/null +++ b/src/main/fragment/mos6502-selfmod/isr_hardware_clobay_exit.asm @@ -0,0 +1,3 @@ +rega: lda #0 +regy: ldy #0 +rti \ No newline at end of file diff --git a/src/main/fragment/wdc65c02-common/isr_hardware_clobax_entry.asm b/src/main/fragment/wdc65c02-common/isr_hardware_clobax_entry.asm new file mode 100644 index 000000000..0c3c0bc72 --- /dev/null +++ b/src/main/fragment/wdc65c02-common/isr_hardware_clobax_entry.asm @@ -0,0 +1,2 @@ +pha +phx \ No newline at end of file diff --git a/src/main/fragment/wdc65c02-common/isr_hardware_clobax_exit.asm b/src/main/fragment/wdc65c02-common/isr_hardware_clobax_exit.asm new file mode 100644 index 000000000..fbd4e0fba --- /dev/null +++ b/src/main/fragment/wdc65c02-common/isr_hardware_clobax_exit.asm @@ -0,0 +1,3 @@ +plx +pla +rti \ No newline at end of file diff --git a/src/main/fragment/wdc65c02-common/isr_hardware_clobay_entry.asm b/src/main/fragment/wdc65c02-common/isr_hardware_clobay_entry.asm new file mode 100644 index 000000000..2e5687f51 --- /dev/null +++ b/src/main/fragment/wdc65c02-common/isr_hardware_clobay_entry.asm @@ -0,0 +1,2 @@ +pha +phy \ No newline at end of file diff --git a/src/main/fragment/wdc65c02-common/isr_hardware_clobay_exit.asm b/src/main/fragment/wdc65c02-common/isr_hardware_clobay_exit.asm new file mode 100644 index 000000000..7dd009915 --- /dev/null +++ b/src/main/fragment/wdc65c02-common/isr_hardware_clobay_exit.asm @@ -0,0 +1,3 @@ +ply +pla +rti \ No newline at end of file diff --git a/src/main/fragment/wdc65c02-common/isr_hardware_clobx_entry.asm b/src/main/fragment/wdc65c02-common/isr_hardware_clobx_entry.asm new file mode 100644 index 000000000..647a890e1 --- /dev/null +++ b/src/main/fragment/wdc65c02-common/isr_hardware_clobx_entry.asm @@ -0,0 +1 @@ +phx \ No newline at end of file diff --git a/src/main/fragment/wdc65c02-common/isr_hardware_clobx_exit.asm b/src/main/fragment/wdc65c02-common/isr_hardware_clobx_exit.asm new file mode 100644 index 000000000..9d099d06d --- /dev/null +++ b/src/main/fragment/wdc65c02-common/isr_hardware_clobx_exit.asm @@ -0,0 +1,2 @@ +plx +rti \ No newline at end of file diff --git a/src/main/fragment/wdc65c02-specific/isr_hardware_all_entry.asm b/src/main/fragment/wdc65c02-specific/isr_hardware_all_entry.asm new file mode 100644 index 000000000..ac9197943 --- /dev/null +++ b/src/main/fragment/wdc65c02-specific/isr_hardware_all_entry.asm @@ -0,0 +1,3 @@ +pha +phx +phy \ No newline at end of file diff --git a/src/main/fragment/wdc65c02-specific/isr_hardware_all_exit.asm b/src/main/fragment/wdc65c02-specific/isr_hardware_all_exit.asm new file mode 100644 index 000000000..436ec0d8b --- /dev/null +++ b/src/main/fragment/wdc65c02-specific/isr_hardware_all_exit.asm @@ -0,0 +1,4 @@ +ply +plx +pla +rti \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index e27bdf506..467455a5c 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -176,7 +176,10 @@ public class Compiler { if(encoding==null) encoding = StringEncoding.SCREENCODE_MIXED; - Pass0GenerateStatementSequence pass0GenerateStatementSequence = new Pass0GenerateStatementSequence(cParser, cFileContext, program, callingConvention, encoding); + // Find default interrupt type + String interruptType = program.getTargetPlatform().getInterruptType(); + + Pass0GenerateStatementSequence pass0GenerateStatementSequence = new Pass0GenerateStatementSequence(cParser, cFileContext, program, callingConvention, encoding, interruptType); pass0GenerateStatementSequence.generate(); pass1GenerateSSA(); diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpec.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpec.java index 24694fff5..7979fb78c 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpec.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpec.java @@ -156,7 +156,7 @@ public class AsmFragmentInstanceSpec { SymbolType nextVariationValue = variationIterator.next(); // Find the next name String variationConstName = "c" + variationCurrentName.substring(variationCurrentName.length() - 1); - String variationNextName = AsmFragmentInstanceSpecFactory.getTypePrefix(nextVariationValue) + variationConstName; + String variationNextName = AsmFragmentInstanceSpecBuilder.getTypePrefix(nextVariationValue) + variationConstName; // Update bindings Value constValue = bindings.get(variationCurrentName); bindings.remove(variationCurrentName); diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecFactory.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java similarity index 84% rename from src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecFactory.java rename to src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index 7c99706c1..c40ac6ca5 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecFactory.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -16,52 +16,107 @@ import dk.camelot64.kickc.model.types.*; import dk.camelot64.kickc.model.values.*; import java.lang.InternalError; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; /** * A fragment specification generated from a {@link Statement} used to load/synthesize an {@link AsmFragmentInstance} for creating ASM code for the statement */ -public class AsmFragmentInstanceSpecFactory { +public class AsmFragmentInstanceSpecBuilder { /** * The symbol table. */ - private Program program; + private final Program program; /** * Binding of named values in the fragment to values (constants, variables, ...) . */ - private Map bindings; + private final Map bindings; /** * The created ASM fragment instance specification */ - private AsmFragmentInstanceSpec asmFragmentInstanceSpec; + private final AsmFragmentInstanceSpec asmFragmentInstanceSpec; /** Indexing for zeropages/constants/labels */ - private int nextZpIdx = 1; private int nextMemIdx = 1; private int nextConstIdx = 1; private int nextLabelIdx = 1; - public Map getBindings() { - return bindings; + /** + * Create a fragment instance spec factory for an interrupt routine (entry or exit) + * + * @param interruptTypeComplete The interrupt routine handler name - including "isr_" and "_entry"/_exit" + * @param program The program + * @return the fragment instance spec factory + */ + public static AsmFragmentInstanceSpecBuilder interrupt(String interruptTypeComplete, Program program) { + Map bindings = new HashMap<>(); + String signature = interruptTypeComplete; + ScopeRef codeScope = program.getScope().getRef(); + final AsmFragmentInstanceSpec fragmentInstanceSpec = new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); + return new AsmFragmentInstanceSpecBuilder(program, bindings, fragmentInstanceSpec); } - public AsmFragmentInstanceSpecFactory( + /** + * Create a fragment instance spec factory for an interrupt routine entry + * + * @param interruptType The interrupt routine handle name + * @param program The program + * @return the fragment instance spec factory + */ + public static AsmFragmentInstanceSpecBuilder interruptEntry(String interruptType, Program program) { + Map bindings = new HashMap<>(); + String signature = "isr_" + interruptType + "_entry"; + ScopeRef codeScope = program.getScope().getRef(); + final AsmFragmentInstanceSpec fragmentInstanceSpec = new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); + return new AsmFragmentInstanceSpecBuilder(program, bindings, fragmentInstanceSpec); + } + + /** + * Create a fragment instance spec factory for an interrupt routine exit + * + * @param interruptType The interrupt routine handle name + * @param program The program + * @return the fragment instance spec factory + */ + public static AsmFragmentInstanceSpecBuilder interruptExit(String interruptType, Program program) { + Map bindings = new HashMap<>(); + String signature = "isr_" + interruptType + "_exit"; + ScopeRef codeScope = program.getScope().getRef(); + final AsmFragmentInstanceSpec fragmentInstanceSpec = new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); + return new AsmFragmentInstanceSpecBuilder(program, bindings, fragmentInstanceSpec); + } + + private AsmFragmentInstanceSpecBuilder(Program program, Map bindings, AsmFragmentInstanceSpec asmFragmentInstanceSpec) { + this.program = program; + this.bindings = bindings; + this.asmFragmentInstanceSpec = asmFragmentInstanceSpec; + } + + + public static AsmFragmentInstanceSpecBuilder conditionalJump(StatementConditionalJump conditionalJump, ControlFlowBlock block, Program program) { + return new AsmFragmentInstanceSpecBuilder(conditionalJump, block, program); + } + + private AsmFragmentInstanceSpecBuilder( StatementConditionalJump conditionalJump, ControlFlowBlock block, - Program program, - ControlFlowGraph graph) { + Program program) { this.program = program; this.bindings = new LinkedHashMap<>(); ScopeRef codeScope = program.getStatementInfos().getBlock(conditionalJump).getScope(); - String signature = conditionalJumpSignature(conditionalJump, block, graph); + String signature = conditionalJumpSignature(conditionalJump, block, program.getGraph()); this.asmFragmentInstanceSpec = new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } - public AsmFragmentInstanceSpecFactory(StatementExprSideEffect exprSideEffect, Program program) { + public static AsmFragmentInstanceSpecBuilder exprSideEffect(StatementExprSideEffect exprSideEffect, Program program) { + return new AsmFragmentInstanceSpecBuilder(exprSideEffect, program); + } + + private AsmFragmentInstanceSpecBuilder(StatementExprSideEffect exprSideEffect, Program program) { this.program = program; this.bindings = new LinkedHashMap<>(); ScopeRef codeScope = program.getStatementInfos().getBlock(exprSideEffect).getScope(); @@ -69,7 +124,11 @@ public class AsmFragmentInstanceSpecFactory { this.asmFragmentInstanceSpec = new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } - public AsmFragmentInstanceSpecFactory(StatementAssignment assignment, Program program) { + public static AsmFragmentInstanceSpecBuilder assignment(StatementAssignment assignment, Program program) { + return new AsmFragmentInstanceSpecBuilder(assignment, program); + } + + private AsmFragmentInstanceSpecBuilder(StatementAssignment assignment, Program program) { this.program = program; this.bindings = new LinkedHashMap<>(); ScopeRef codeScope = program.getStatementInfos().getBlock(assignment).getScope(); @@ -81,14 +140,22 @@ public class AsmFragmentInstanceSpecFactory { this.asmFragmentInstanceSpec = new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } - public AsmFragmentInstanceSpecFactory(LValue lValue, RValue rValue, Program program, ScopeRef codeScopeRef) { + public static AsmFragmentInstanceSpecBuilder assignment(LValue lValue, RValue rValue, Program program, ScopeRef codeScopeRef) { + return new AsmFragmentInstanceSpecBuilder(lValue, rValue, program, codeScopeRef); + } + + private AsmFragmentInstanceSpecBuilder(LValue lValue, RValue rValue, Program program, ScopeRef codeScopeRef) { this.program = program; this.bindings = new LinkedHashMap<>(); String signature = assignmentSignature(lValue, null, null, rValue); this.asmFragmentInstanceSpec = new AsmFragmentInstanceSpec(program, signature, bindings, codeScopeRef); } - public AsmFragmentInstanceSpecFactory(StatementAssignment assignment, StatementAssignment assignmentAlu, Program program) { + public static AsmFragmentInstanceSpecBuilder assignmentAlu(StatementAssignment assignment, StatementAssignment assignmentAlu, Program program) { + return new AsmFragmentInstanceSpecBuilder(assignment, assignmentAlu, program); + } + + private AsmFragmentInstanceSpecBuilder(StatementAssignment assignment, StatementAssignment assignmentAlu, Program program) { this.program = program; this.bindings = new LinkedHashMap<>(); ScopeRef codeScope = program.getStatementInfos().getBlock(assignment).getScope(); @@ -96,6 +163,10 @@ public class AsmFragmentInstanceSpecFactory { this.asmFragmentInstanceSpec = new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } + public Map getBindings() { + return bindings; + } + /** * Get the created ASM fragment instance specification * @@ -495,7 +566,7 @@ public class AsmFragmentInstanceSpecFactory { if(Registers.RegisterType.ZP_MEM.equals(register.getType())) { // Examine if the ZP register is already bound Registers.RegisterZpMem registerZp = (Registers.RegisterZpMem) register; - String zpNameIdx = null; + String memNameIdx = null; for(String boundName : bindings.keySet()) { Value boundValue = bindings.get(boundName); if(boundValue instanceof Variable && ((Variable) boundValue).isVariable()) { @@ -505,17 +576,17 @@ public class AsmFragmentInstanceSpecFactory { Registers.RegisterZpMem boundRegisterZp = (Registers.RegisterZpMem) boundRegister; if(registerZp.getZp() == boundRegisterZp.getZp()) { // Found other register with same ZP address! - zpNameIdx = boundName.substring(boundName.length() - 1); + memNameIdx = boundName.substring(boundName.length() - 1); break; } } } } // If not create a new one - if(zpNameIdx == null) { - zpNameIdx = Integer.toString(nextZpIdx++); + if(memNameIdx == null) { + memNameIdx = Integer.toString(nextMemIdx++); } - return "z" + zpNameIdx; + return "z" + memNameIdx; } else if(Registers.RegisterType.MAIN_MEM.equals(register.getType())) { String memNameIdx = null; for(String boundName : bindings.keySet()) { @@ -532,7 +603,7 @@ public class AsmFragmentInstanceSpecFactory { } } if(memNameIdx == null) { - memNameIdx = Integer.toString(nextZpIdx++); + memNameIdx = Integer.toString(nextMemIdx++); } return "m" + memNameIdx; } else if(Registers.RegisterType.REG_A.equals(register.getType())) { @@ -564,5 +635,4 @@ public class AsmFragmentInstanceSpecFactory { return "c" + nextConstIdx++; } - -} +} \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesizer.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesizer.java index 9913accac..031aeccd5 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesizer.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesizer.java @@ -111,8 +111,8 @@ public class AsmFragmentTemplateSynthesizer { double minScore = Double.MAX_VALUE; for(AsmFragmentTemplate candidateTemplate : candidates) { double score = candidateTemplate.getCycles(); + if(candidateTemplate.getClobber().isClobberZ()) score += 0.25; if(candidateTemplate.getClobber().isClobberA()) score += 0.5; - if(candidateTemplate.getClobber().isClobberZ()) score += 1.0; if(candidateTemplate.getClobber().isClobberY()) score += 1.0; if(candidateTemplate.getClobber().isClobberX()) score += 1.5; if(score < minScore) { @@ -531,7 +531,6 @@ public class AsmFragmentTemplateSynthesizer { } else { CharStream fragmentCharStream = CharStreams.fromStream(fragmentStream); body = fixNewlines(fragmentCharStream.toString()); - } return new AsmFragmentTemplate(signature, body, targetCpu, false); } catch(IOException e) { diff --git a/src/main/java/dk/camelot64/kickc/model/Directive.java b/src/main/java/dk/camelot64/kickc/model/Directive.java index 810026ff9..fc71270ab 100644 --- a/src/main/java/dk/camelot64/kickc/model/Directive.java +++ b/src/main/java/dk/camelot64/kickc/model/Directive.java @@ -103,10 +103,10 @@ public class Directive { /** Function declared interrupt. */ public static class Interrupt extends Directive { - public Procedure.InterruptType interruptType; + public String interruptType; - public Interrupt(Procedure.InterruptType interruptType) { - super(interruptType.name()); + public Interrupt(String interruptType) { + super(interruptType); this.interruptType = interruptType; } } diff --git a/src/main/java/dk/camelot64/kickc/model/TargetPlatform.java b/src/main/java/dk/camelot64/kickc/model/TargetPlatform.java index 572dd2dab..406e9e977 100644 --- a/src/main/java/dk/camelot64/kickc/model/TargetPlatform.java +++ b/src/main/java/dk/camelot64/kickc/model/TargetPlatform.java @@ -49,6 +49,9 @@ public class TargetPlatform { /** Configuration for the variable builder. */ private VariableBuilderConfig variableBuilderConfig; + + /** Default interrupt type. */ + private String interruptType = "hardware_all"; public TargetPlatform(String name) { this.name = name; @@ -151,4 +154,11 @@ public class TargetPlatform { this.encoding = encoding; } + public void setInterruptType(String interruptType) { + this.interruptType = interruptType; + } + + public String getInterruptType() { + return interruptType; + } } diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java index d9defffcc..b33e81577 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -23,7 +23,7 @@ public class Procedure extends Scope { /** True if the procedure is declared intrinsic. */ private boolean declaredIntrinsic; /** The type of interrupt that the procedure serves. Null for all procedures not serving an interrupt. */ - private InterruptType interruptType; + private String interruptType; /** Comments preceding the procedure in the source code. */ private List comments; /** Reserved zeropage addresses. */ @@ -176,11 +176,11 @@ public class Procedure extends Scope { this.declaredInline = declaredInline; } - public InterruptType getInterruptType() { + public String getInterruptType() { return interruptType; } - public void setInterruptType(InterruptType interruptType) { + public void setInterruptType(String interruptType) { this.interruptType = interruptType; } @@ -218,26 +218,6 @@ public class Procedure extends Scope { isConstructor = constructor; } - /** The different types of supported interrupts. */ - public enum InterruptType { - /** Interrupt served by the kernel called through $0314-5. Will exit through the kernel using $ea31. */ - KERNEL_KEYBOARD, - /** Interrupt served by the kernel called through $0314-5. Will exit through the kernel using $ea81. */ - KERNEL_MIN, - /** Interrupt served directly from hardware through $fffe-f. Will exit through RTI and will save NO registers. */ - HARDWARE_NONE, - /** Interrupt served directly from hardware through $fffe-f. Will exit through RTI and will save ALL registers. */ - HARDWARE_ALL, - /** Interrupt served directly from hardware through $fffe-f. Will exit through RTI and will save ALL registers using the stack. */ - HARDWARE_STACK, - /** Interrupt served directly from hardware through $fffe-f. Will exit through RTI and will save necessary registers based on clobber. */ - HARDWARE_CLOBBER; - - /** The default interrupt type if none is explicitly declared (KERNEL_MIN). */ - public static InterruptType DEFAULT = InterruptType.KERNEL_MIN; - - } - @Override public String toString() { return toString(null); @@ -256,7 +236,7 @@ public class Procedure extends Scope { res.append(getCallingConvention().getName()).append(" "); } if(interruptType != null) { - res.append("interrupt(").append(interruptType).append(") "); + res.append("__interrupt(").append(interruptType).append(") "); } res.append(returnType.getTypeName()).append(" ").append(getFullName()).append("("); boolean first = true; @@ -287,7 +267,7 @@ public class Procedure extends Scope { return declaredInline == procedure.declaredInline && Objects.equals(returnType, procedure.returnType) && Objects.equals(parameterNames, procedure.parameterNames) && - interruptType == procedure.interruptType && + Objects.equals(interruptType, procedure.interruptType) && Objects.equals(comments, procedure.comments) && Objects.equals(reservedZps, procedure.reservedZps) && Objects.equals(codeSegment, procedure.codeSegment) && diff --git a/src/main/java/dk/camelot64/kickc/parser/CParser.java b/src/main/java/dk/camelot64/kickc/parser/CParser.java index e8a72a7b8..da5f0f203 100644 --- a/src/main/java/dk/camelot64/kickc/parser/CParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/CParser.java @@ -43,6 +43,7 @@ public class CParser { public static final String PRAGMA_CALLING = "calling"; public static final String PRAGMA_ZP_RESERVE = "zp_reserve"; public static final String PRAGMA_CONSTRUCTOR_FOR = "constructor_for"; + public static final String PRAGMA_INTERRUPT = "interrupt"; /** The Program. */ private Program program; diff --git a/src/main/java/dk/camelot64/kickc/parser/CTargetPlatformParser.java b/src/main/java/dk/camelot64/kickc/parser/CTargetPlatformParser.java index f461e2016..ebdabe0d0 100644 --- a/src/main/java/dk/camelot64/kickc/parser/CTargetPlatformParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/CTargetPlatformParser.java @@ -33,6 +33,11 @@ public class CTargetPlatformParser { final JsonReader jsonReader = Json.createReader(new BufferedInputStream(new FileInputStream(platformFile))); final JsonObject platformJson = jsonReader.readObject(); TargetPlatform targetPlatform = new TargetPlatform(platformName); + { + final String interruptType = platformJson.getString("interrupt", null); + if(interruptType != null) + targetPlatform.setInterruptType(interruptType); + } { final String cpuName = platformJson.getString("cpu", null); if(cpuName != null) diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.g4 b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.g4 index ef7ef2bf1..75fe12a3f 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.g4 +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.g4 @@ -69,7 +69,7 @@ ALIGN: 'align' ; INLINE: 'inline' ; VOLATILE: 'volatile' ; STATIC: 'static' ; -INTERRUPT: 'interrupt' ; +INTERRUPT: '__interrupt' ; REGISTER: 'register' ; LOCAL_RESERVE: '__zp_reserve' ; ADDRESS: '__address' ; diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.interp b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.interp index e303451c3..8d124716b 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.interp +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.interp @@ -46,7 +46,7 @@ null 'inline' 'volatile' 'static' -'interrupt' +'__interrupt' 'register' '__zp_reserve' '__address' @@ -484,4 +484,4 @@ ASM_MODE IMPORT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 155, 1904, 8, 1, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 439, 10, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 603, 10, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 768, 10, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 5, 82, 807, 10, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 5, 83, 818, 10, 83, 3, 84, 3, 84, 3, 84, 3, 84, 7, 84, 824, 10, 84, 12, 84, 14, 84, 827, 11, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 5, 89, 874, 10, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 5, 98, 930, 10, 98, 3, 99, 3, 99, 3, 99, 5, 99, 935, 10, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 5, 100, 942, 10, 100, 3, 100, 7, 100, 945, 10, 100, 12, 100, 14, 100, 948, 11, 100, 3, 100, 3, 100, 6, 100, 952, 10, 100, 13, 100, 14, 100, 953, 3, 101, 7, 101, 957, 10, 101, 12, 101, 14, 101, 960, 11, 101, 3, 101, 3, 101, 6, 101, 964, 10, 101, 13, 101, 14, 101, 965, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 5, 102, 973, 10, 102, 3, 102, 7, 102, 976, 10, 102, 12, 102, 14, 102, 979, 11, 102, 3, 102, 3, 102, 6, 102, 983, 10, 102, 13, 102, 14, 102, 984, 3, 103, 3, 103, 3, 103, 5, 103, 990, 10, 103, 3, 103, 3, 103, 3, 103, 5, 103, 995, 10, 103, 3, 104, 3, 104, 3, 104, 6, 104, 1000, 10, 104, 13, 104, 14, 104, 1001, 3, 104, 3, 104, 6, 104, 1006, 10, 104, 13, 104, 14, 104, 1007, 5, 104, 1010, 10, 104, 3, 105, 6, 105, 1013, 10, 105, 13, 105, 14, 105, 1014, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 5, 106, 1022, 10, 106, 3, 106, 6, 106, 1025, 10, 106, 13, 106, 14, 106, 1026, 3, 107, 3, 107, 3, 108, 3, 108, 3, 109, 3, 109, 3, 110, 3, 110, 7, 110, 1037, 10, 110, 12, 110, 14, 110, 1040, 11, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 113, 7, 113, 1052, 10, 113, 12, 113, 14, 113, 1055, 11, 113, 3, 113, 3, 113, 5, 113, 1059, 10, 113, 3, 113, 3, 113, 5, 113, 1063, 10, 113, 5, 113, 1065, 10, 113, 3, 113, 5, 113, 1068, 10, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 5, 114, 1076, 10, 114, 3, 114, 5, 114, 1079, 10, 114, 3, 114, 3, 114, 3, 115, 6, 115, 1084, 10, 115, 13, 115, 14, 115, 1085, 3, 115, 3, 115, 3, 116, 3, 116, 3, 116, 3, 116, 7, 116, 1094, 10, 116, 12, 116, 14, 116, 1097, 11, 116, 3, 116, 3, 116, 3, 117, 3, 117, 3, 117, 3, 117, 7, 117, 1105, 10, 117, 12, 117, 14, 117, 1108, 11, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 5, 119, 1671, 10, 119, 3, 120, 3, 120, 3, 121, 3, 121, 3, 122, 3, 122, 3, 123, 3, 123, 3, 124, 3, 124, 3, 125, 3, 125, 3, 126, 3, 126, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, 3, 131, 3, 131, 3, 132, 3, 132, 3, 133, 3, 133, 3, 134, 3, 134, 3, 135, 3, 135, 3, 136, 3, 136, 3, 136, 3, 137, 3, 137, 3, 137, 3, 138, 3, 138, 5, 138, 1715, 10, 138, 3, 139, 3, 139, 3, 139, 5, 139, 1720, 10, 139, 3, 140, 3, 140, 7, 140, 1724, 10, 140, 12, 140, 14, 140, 1727, 11, 140, 3, 140, 3, 140, 6, 140, 1731, 10, 140, 13, 140, 14, 140, 1732, 3, 141, 7, 141, 1736, 10, 141, 12, 141, 14, 141, 1739, 11, 141, 3, 141, 3, 141, 6, 141, 1743, 10, 141, 13, 141, 14, 141, 1744, 3, 142, 3, 142, 7, 142, 1749, 10, 142, 12, 142, 14, 142, 1752, 11, 142, 3, 142, 3, 142, 6, 142, 1756, 10, 142, 13, 142, 14, 142, 1757, 3, 143, 3, 143, 3, 143, 5, 143, 1763, 10, 143, 3, 144, 3, 144, 6, 144, 1767, 10, 144, 13, 144, 14, 144, 1768, 3, 145, 6, 145, 1772, 10, 145, 13, 145, 14, 145, 1773, 3, 146, 3, 146, 6, 146, 1778, 10, 146, 13, 146, 14, 146, 1779, 3, 147, 3, 147, 3, 148, 3, 148, 3, 149, 3, 149, 3, 150, 3, 150, 3, 150, 3, 150, 5, 150, 1792, 10, 150, 3, 150, 3, 150, 3, 151, 3, 151, 6, 151, 1798, 10, 151, 13, 151, 14, 151, 1799, 3, 152, 3, 152, 7, 152, 1804, 10, 152, 12, 152, 14, 152, 1807, 11, 152, 3, 153, 3, 153, 7, 153, 1811, 10, 153, 12, 153, 14, 153, 1814, 11, 153, 3, 154, 3, 154, 3, 155, 3, 155, 3, 156, 6, 156, 1821, 10, 156, 13, 156, 14, 156, 1822, 3, 156, 3, 156, 3, 157, 3, 157, 3, 157, 3, 157, 7, 157, 1831, 10, 157, 12, 157, 14, 157, 1834, 11, 157, 3, 157, 3, 157, 3, 158, 3, 158, 3, 158, 3, 158, 7, 158, 1842, 10, 158, 12, 158, 14, 158, 1845, 11, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 159, 3, 159, 6, 159, 1854, 10, 159, 13, 159, 14, 159, 1855, 3, 159, 3, 159, 3, 159, 3, 160, 3, 160, 3, 160, 3, 160, 7, 160, 1865, 10, 160, 12, 160, 14, 160, 1868, 11, 160, 3, 160, 3, 160, 3, 160, 3, 161, 6, 161, 1874, 10, 161, 13, 161, 14, 161, 1875, 3, 161, 3, 161, 3, 162, 3, 162, 3, 162, 3, 162, 7, 162, 1884, 10, 162, 12, 162, 14, 162, 1887, 11, 162, 3, 162, 3, 162, 3, 163, 3, 163, 3, 163, 3, 163, 7, 163, 1895, 10, 163, 12, 163, 14, 163, 1898, 11, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 6, 825, 1106, 1843, 1896, 2, 164, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 77, 153, 78, 155, 79, 157, 80, 159, 81, 161, 82, 163, 83, 165, 84, 167, 85, 169, 86, 171, 87, 173, 88, 175, 89, 177, 90, 179, 91, 181, 92, 183, 93, 185, 94, 187, 95, 189, 96, 191, 97, 193, 98, 195, 99, 197, 100, 199, 101, 201, 102, 203, 103, 205, 104, 207, 105, 209, 106, 211, 107, 213, 108, 215, 2, 217, 2, 219, 2, 221, 109, 223, 2, 225, 2, 227, 110, 229, 111, 231, 112, 233, 113, 235, 114, 237, 115, 239, 116, 241, 117, 243, 118, 245, 119, 247, 120, 249, 121, 251, 122, 253, 123, 255, 124, 257, 125, 259, 126, 261, 127, 263, 128, 265, 129, 267, 130, 269, 131, 271, 132, 273, 133, 275, 134, 277, 135, 279, 136, 281, 137, 283, 138, 285, 139, 287, 140, 289, 141, 291, 142, 293, 143, 295, 2, 297, 2, 299, 2, 301, 144, 303, 145, 305, 146, 307, 147, 309, 2, 311, 2, 313, 148, 315, 149, 317, 150, 319, 151, 321, 152, 323, 153, 325, 154, 327, 155, 5, 2, 3, 4, 21, 4, 2, 117, 117, 119, 119, 7, 2, 100, 102, 107, 107, 110, 110, 117, 117, 121, 121, 4, 2, 68, 68, 100, 100, 3, 2, 50, 51, 3, 2, 50, 59, 5, 2, 50, 59, 67, 72, 99, 104, 5, 2, 67, 92, 97, 97, 99, 124, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 3, 2, 36, 36, 3, 2, 124, 124, 5, 2, 99, 99, 114, 114, 117, 117, 5, 2, 99, 99, 111, 111, 117, 119, 7, 2, 36, 36, 41, 41, 104, 104, 112, 112, 116, 116, 4, 2, 50, 59, 99, 104, 3, 2, 41, 41, 6, 2, 11, 12, 15, 15, 34, 34, 162, 162, 4, 2, 12, 12, 15, 15, 4, 2, 45, 45, 47, 47, 7, 2, 47, 59, 67, 92, 94, 94, 97, 97, 99, 124, 2, 2142, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 2, 179, 3, 2, 2, 2, 2, 181, 3, 2, 2, 2, 2, 183, 3, 2, 2, 2, 2, 185, 3, 2, 2, 2, 2, 187, 3, 2, 2, 2, 2, 189, 3, 2, 2, 2, 2, 191, 3, 2, 2, 2, 2, 193, 3, 2, 2, 2, 2, 195, 3, 2, 2, 2, 2, 197, 3, 2, 2, 2, 2, 199, 3, 2, 2, 2, 2, 201, 3, 2, 2, 2, 2, 203, 3, 2, 2, 2, 2, 205, 3, 2, 2, 2, 2, 207, 3, 2, 2, 2, 2, 209, 3, 2, 2, 2, 2, 211, 3, 2, 2, 2, 2, 213, 3, 2, 2, 2, 2, 221, 3, 2, 2, 2, 2, 227, 3, 2, 2, 2, 2, 229, 3, 2, 2, 2, 2, 231, 3, 2, 2, 2, 2, 233, 3, 2, 2, 2, 2, 235, 3, 2, 2, 2, 3, 237, 3, 2, 2, 2, 3, 239, 3, 2, 2, 2, 3, 241, 3, 2, 2, 2, 3, 243, 3, 2, 2, 2, 3, 245, 3, 2, 2, 2, 3, 247, 3, 2, 2, 2, 3, 249, 3, 2, 2, 2, 3, 251, 3, 2, 2, 2, 3, 253, 3, 2, 2, 2, 3, 255, 3, 2, 2, 2, 3, 257, 3, 2, 2, 2, 3, 259, 3, 2, 2, 2, 3, 261, 3, 2, 2, 2, 3, 263, 3, 2, 2, 2, 3, 265, 3, 2, 2, 2, 3, 267, 3, 2, 2, 2, 3, 269, 3, 2, 2, 2, 3, 271, 3, 2, 2, 2, 3, 273, 3, 2, 2, 2, 3, 275, 3, 2, 2, 2, 3, 277, 3, 2, 2, 2, 3, 279, 3, 2, 2, 2, 3, 281, 3, 2, 2, 2, 3, 283, 3, 2, 2, 2, 3, 285, 3, 2, 2, 2, 3, 287, 3, 2, 2, 2, 3, 289, 3, 2, 2, 2, 3, 291, 3, 2, 2, 2, 3, 293, 3, 2, 2, 2, 3, 301, 3, 2, 2, 2, 3, 303, 3, 2, 2, 2, 3, 305, 3, 2, 2, 2, 3, 307, 3, 2, 2, 2, 3, 313, 3, 2, 2, 2, 3, 315, 3, 2, 2, 2, 3, 317, 3, 2, 2, 2, 4, 319, 3, 2, 2, 2, 4, 321, 3, 2, 2, 2, 4, 323, 3, 2, 2, 2, 4, 325, 3, 2, 2, 2, 4, 327, 3, 2, 2, 2, 5, 329, 3, 2, 2, 2, 7, 332, 3, 2, 2, 2, 9, 334, 3, 2, 2, 2, 11, 336, 3, 2, 2, 2, 13, 338, 3, 2, 2, 2, 15, 340, 3, 2, 2, 2, 17, 342, 3, 2, 2, 2, 19, 344, 3, 2, 2, 2, 21, 346, 3, 2, 2, 2, 23, 348, 3, 2, 2, 2, 25, 351, 3, 2, 2, 2, 27, 355, 3, 2, 2, 2, 29, 357, 3, 2, 2, 2, 31, 359, 3, 2, 2, 2, 33, 362, 3, 2, 2, 2, 35, 364, 3, 2, 2, 2, 37, 366, 3, 2, 2, 2, 39, 368, 3, 2, 2, 2, 41, 370, 3, 2, 2, 2, 43, 372, 3, 2, 2, 2, 45, 375, 3, 2, 2, 2, 47, 378, 3, 2, 2, 2, 49, 380, 3, 2, 2, 2, 51, 382, 3, 2, 2, 2, 53, 384, 3, 2, 2, 2, 55, 386, 3, 2, 2, 2, 57, 389, 3, 2, 2, 2, 59, 392, 3, 2, 2, 2, 61, 395, 3, 2, 2, 2, 63, 398, 3, 2, 2, 2, 65, 400, 3, 2, 2, 2, 67, 403, 3, 2, 2, 2, 69, 406, 3, 2, 2, 2, 71, 408, 3, 2, 2, 2, 73, 411, 3, 2, 2, 2, 75, 414, 3, 2, 2, 2, 77, 438, 3, 2, 2, 2, 79, 440, 3, 2, 2, 2, 81, 448, 3, 2, 2, 2, 83, 454, 3, 2, 2, 2, 85, 461, 3, 2, 2, 2, 87, 468, 3, 2, 2, 2, 89, 474, 3, 2, 2, 2, 91, 481, 3, 2, 2, 2, 93, 490, 3, 2, 2, 2, 95, 497, 3, 2, 2, 2, 97, 507, 3, 2, 2, 2, 99, 516, 3, 2, 2, 2, 101, 529, 3, 2, 2, 2, 103, 539, 3, 2, 2, 2, 105, 544, 3, 2, 2, 2, 107, 550, 3, 2, 2, 2, 109, 556, 3, 2, 2, 2, 111, 561, 3, 2, 2, 2, 113, 602, 3, 2, 2, 2, 115, 604, 3, 2, 2, 2, 117, 607, 3, 2, 2, 2, 119, 612, 3, 2, 2, 2, 121, 618, 3, 2, 2, 2, 123, 621, 3, 2, 2, 2, 125, 625, 3, 2, 2, 2, 127, 632, 3, 2, 2, 2, 129, 639, 3, 2, 2, 2, 131, 645, 3, 2, 2, 2, 133, 654, 3, 2, 2, 2, 135, 660, 3, 2, 2, 2, 137, 668, 3, 2, 2, 2, 139, 673, 3, 2, 2, 2, 141, 680, 3, 2, 2, 2, 143, 685, 3, 2, 2, 2, 145, 692, 3, 2, 2, 2, 147, 699, 3, 2, 2, 2, 149, 707, 3, 2, 2, 2, 151, 715, 3, 2, 2, 2, 153, 724, 3, 2, 2, 2, 155, 729, 3, 2, 2, 2, 157, 738, 3, 2, 2, 2, 159, 744, 3, 2, 2, 2, 161, 751, 3, 2, 2, 2, 163, 767, 3, 2, 2, 2, 165, 806, 3, 2, 2, 2, 167, 817, 3, 2, 2, 2, 169, 819, 3, 2, 2, 2, 171, 831, 3, 2, 2, 2, 173, 841, 3, 2, 2, 2, 175, 852, 3, 2, 2, 2, 177, 860, 3, 2, 2, 2, 179, 873, 3, 2, 2, 2, 181, 875, 3, 2, 2, 2, 183, 882, 3, 2, 2, 2, 185, 889, 3, 2, 2, 2, 187, 897, 3, 2, 2, 2, 189, 901, 3, 2, 2, 2, 191, 907, 3, 2, 2, 2, 193, 913, 3, 2, 2, 2, 195, 920, 3, 2, 2, 2, 197, 929, 3, 2, 2, 2, 199, 934, 3, 2, 2, 2, 201, 941, 3, 2, 2, 2, 203, 958, 3, 2, 2, 2, 205, 972, 3, 2, 2, 2, 207, 989, 3, 2, 2, 2, 209, 1009, 3, 2, 2, 2, 211, 1012, 3, 2, 2, 2, 213, 1021, 3, 2, 2, 2, 215, 1028, 3, 2, 2, 2, 217, 1030, 3, 2, 2, 2, 219, 1032, 3, 2, 2, 2, 221, 1034, 3, 2, 2, 2, 223, 1043, 3, 2, 2, 2, 225, 1045, 3, 2, 2, 2, 227, 1047, 3, 2, 2, 2, 229, 1069, 3, 2, 2, 2, 231, 1083, 3, 2, 2, 2, 233, 1089, 3, 2, 2, 2, 235, 1100, 3, 2, 2, 2, 237, 1114, 3, 2, 2, 2, 239, 1670, 3, 2, 2, 2, 241, 1672, 3, 2, 2, 2, 243, 1674, 3, 2, 2, 2, 245, 1676, 3, 2, 2, 2, 247, 1678, 3, 2, 2, 2, 249, 1680, 3, 2, 2, 2, 251, 1682, 3, 2, 2, 2, 253, 1684, 3, 2, 2, 2, 255, 1686, 3, 2, 2, 2, 257, 1688, 3, 2, 2, 2, 259, 1691, 3, 2, 2, 2, 261, 1694, 3, 2, 2, 2, 263, 1696, 3, 2, 2, 2, 265, 1698, 3, 2, 2, 2, 267, 1700, 3, 2, 2, 2, 269, 1702, 3, 2, 2, 2, 271, 1704, 3, 2, 2, 2, 273, 1706, 3, 2, 2, 2, 275, 1709, 3, 2, 2, 2, 277, 1714, 3, 2, 2, 2, 279, 1719, 3, 2, 2, 2, 281, 1721, 3, 2, 2, 2, 283, 1737, 3, 2, 2, 2, 285, 1746, 3, 2, 2, 2, 287, 1762, 3, 2, 2, 2, 289, 1764, 3, 2, 2, 2, 291, 1771, 3, 2, 2, 2, 293, 1775, 3, 2, 2, 2, 295, 1781, 3, 2, 2, 2, 297, 1783, 3, 2, 2, 2, 299, 1785, 3, 2, 2, 2, 301, 1787, 3, 2, 2, 2, 303, 1795, 3, 2, 2, 2, 305, 1801, 3, 2, 2, 2, 307, 1808, 3, 2, 2, 2, 309, 1815, 3, 2, 2, 2, 311, 1817, 3, 2, 2, 2, 313, 1820, 3, 2, 2, 2, 315, 1826, 3, 2, 2, 2, 317, 1837, 3, 2, 2, 2, 319, 1851, 3, 2, 2, 2, 321, 1860, 3, 2, 2, 2, 323, 1873, 3, 2, 2, 2, 325, 1879, 3, 2, 2, 2, 327, 1890, 3, 2, 2, 2, 329, 330, 7, 125, 2, 2, 330, 331, 8, 2, 2, 2, 331, 6, 3, 2, 2, 2, 332, 333, 7, 127, 2, 2, 333, 8, 3, 2, 2, 2, 334, 335, 7, 93, 2, 2, 335, 10, 3, 2, 2, 2, 336, 337, 7, 95, 2, 2, 337, 12, 3, 2, 2, 2, 338, 339, 7, 42, 2, 2, 339, 14, 3, 2, 2, 2, 340, 341, 7, 43, 2, 2, 341, 16, 3, 2, 2, 2, 342, 343, 7, 61, 2, 2, 343, 18, 3, 2, 2, 2, 344, 345, 7, 60, 2, 2, 345, 20, 3, 2, 2, 2, 346, 347, 7, 46, 2, 2, 347, 22, 3, 2, 2, 2, 348, 349, 7, 48, 2, 2, 349, 350, 7, 48, 2, 2, 350, 24, 3, 2, 2, 2, 351, 352, 7, 48, 2, 2, 352, 353, 7, 48, 2, 2, 353, 354, 7, 48, 2, 2, 354, 26, 3, 2, 2, 2, 355, 356, 7, 65, 2, 2, 356, 28, 3, 2, 2, 2, 357, 358, 7, 48, 2, 2, 358, 30, 3, 2, 2, 2, 359, 360, 7, 47, 2, 2, 360, 361, 7, 64, 2, 2, 361, 32, 3, 2, 2, 2, 362, 363, 7, 45, 2, 2, 363, 34, 3, 2, 2, 2, 364, 365, 7, 47, 2, 2, 365, 36, 3, 2, 2, 2, 366, 367, 7, 44, 2, 2, 367, 38, 3, 2, 2, 2, 368, 369, 7, 49, 2, 2, 369, 40, 3, 2, 2, 2, 370, 371, 7, 39, 2, 2, 371, 42, 3, 2, 2, 2, 372, 373, 7, 45, 2, 2, 373, 374, 7, 45, 2, 2, 374, 44, 3, 2, 2, 2, 375, 376, 7, 47, 2, 2, 376, 377, 7, 47, 2, 2, 377, 46, 3, 2, 2, 2, 378, 379, 7, 40, 2, 2, 379, 48, 3, 2, 2, 2, 380, 381, 7, 128, 2, 2, 381, 50, 3, 2, 2, 2, 382, 383, 7, 96, 2, 2, 383, 52, 3, 2, 2, 2, 384, 385, 7, 126, 2, 2, 385, 54, 3, 2, 2, 2, 386, 387, 7, 62, 2, 2, 387, 388, 7, 62, 2, 2, 388, 56, 3, 2, 2, 2, 389, 390, 7, 64, 2, 2, 390, 391, 7, 64, 2, 2, 391, 58, 3, 2, 2, 2, 392, 393, 7, 63, 2, 2, 393, 394, 7, 63, 2, 2, 394, 60, 3, 2, 2, 2, 395, 396, 7, 35, 2, 2, 396, 397, 7, 63, 2, 2, 397, 62, 3, 2, 2, 2, 398, 399, 7, 62, 2, 2, 399, 64, 3, 2, 2, 2, 400, 401, 7, 62, 2, 2, 401, 402, 7, 63, 2, 2, 402, 66, 3, 2, 2, 2, 403, 404, 7, 64, 2, 2, 404, 405, 7, 63, 2, 2, 405, 68, 3, 2, 2, 2, 406, 407, 7, 64, 2, 2, 407, 70, 3, 2, 2, 2, 408, 409, 7, 40, 2, 2, 409, 410, 7, 40, 2, 2, 410, 72, 3, 2, 2, 2, 411, 412, 7, 126, 2, 2, 412, 413, 7, 126, 2, 2, 413, 74, 3, 2, 2, 2, 414, 415, 7, 63, 2, 2, 415, 76, 3, 2, 2, 2, 416, 417, 7, 45, 2, 2, 417, 439, 7, 63, 2, 2, 418, 419, 7, 47, 2, 2, 419, 439, 7, 63, 2, 2, 420, 421, 7, 44, 2, 2, 421, 439, 7, 63, 2, 2, 422, 423, 7, 49, 2, 2, 423, 439, 7, 63, 2, 2, 424, 425, 7, 39, 2, 2, 425, 439, 7, 63, 2, 2, 426, 427, 7, 62, 2, 2, 427, 428, 7, 62, 2, 2, 428, 439, 7, 63, 2, 2, 429, 430, 7, 64, 2, 2, 430, 431, 7, 64, 2, 2, 431, 439, 7, 63, 2, 2, 432, 433, 7, 40, 2, 2, 433, 439, 7, 63, 2, 2, 434, 435, 7, 126, 2, 2, 435, 439, 7, 63, 2, 2, 436, 437, 7, 96, 2, 2, 437, 439, 7, 63, 2, 2, 438, 416, 3, 2, 2, 2, 438, 418, 3, 2, 2, 2, 438, 420, 3, 2, 2, 2, 438, 422, 3, 2, 2, 2, 438, 424, 3, 2, 2, 2, 438, 426, 3, 2, 2, 2, 438, 429, 3, 2, 2, 2, 438, 432, 3, 2, 2, 2, 438, 434, 3, 2, 2, 2, 438, 436, 3, 2, 2, 2, 439, 78, 3, 2, 2, 2, 440, 441, 7, 118, 2, 2, 441, 442, 7, 123, 2, 2, 442, 443, 7, 114, 2, 2, 443, 444, 7, 103, 2, 2, 444, 445, 7, 102, 2, 2, 445, 446, 7, 103, 2, 2, 446, 447, 7, 104, 2, 2, 447, 80, 3, 2, 2, 2, 448, 449, 7, 101, 2, 2, 449, 450, 7, 113, 2, 2, 450, 451, 7, 112, 2, 2, 451, 452, 7, 117, 2, 2, 452, 453, 7, 118, 2, 2, 453, 82, 3, 2, 2, 2, 454, 455, 7, 103, 2, 2, 455, 456, 7, 122, 2, 2, 456, 457, 7, 118, 2, 2, 457, 458, 7, 103, 2, 2, 458, 459, 7, 116, 2, 2, 459, 460, 7, 112, 2, 2, 460, 84, 3, 2, 2, 2, 461, 462, 7, 103, 2, 2, 462, 463, 7, 122, 2, 2, 463, 464, 7, 114, 2, 2, 464, 465, 7, 113, 2, 2, 465, 466, 7, 116, 2, 2, 466, 467, 7, 118, 2, 2, 467, 86, 3, 2, 2, 2, 468, 469, 7, 99, 2, 2, 469, 470, 7, 110, 2, 2, 470, 471, 7, 107, 2, 2, 471, 472, 7, 105, 2, 2, 472, 473, 7, 112, 2, 2, 473, 88, 3, 2, 2, 2, 474, 475, 7, 107, 2, 2, 475, 476, 7, 112, 2, 2, 476, 477, 7, 110, 2, 2, 477, 478, 7, 107, 2, 2, 478, 479, 7, 112, 2, 2, 479, 480, 7, 103, 2, 2, 480, 90, 3, 2, 2, 2, 481, 482, 7, 120, 2, 2, 482, 483, 7, 113, 2, 2, 483, 484, 7, 110, 2, 2, 484, 485, 7, 99, 2, 2, 485, 486, 7, 118, 2, 2, 486, 487, 7, 107, 2, 2, 487, 488, 7, 110, 2, 2, 488, 489, 7, 103, 2, 2, 489, 92, 3, 2, 2, 2, 490, 491, 7, 117, 2, 2, 491, 492, 7, 118, 2, 2, 492, 493, 7, 99, 2, 2, 493, 494, 7, 118, 2, 2, 494, 495, 7, 107, 2, 2, 495, 496, 7, 101, 2, 2, 496, 94, 3, 2, 2, 2, 497, 498, 7, 107, 2, 2, 498, 499, 7, 112, 2, 2, 499, 500, 7, 118, 2, 2, 500, 501, 7, 103, 2, 2, 501, 502, 7, 116, 2, 2, 502, 503, 7, 116, 2, 2, 503, 504, 7, 119, 2, 2, 504, 505, 7, 114, 2, 2, 505, 506, 7, 118, 2, 2, 506, 96, 3, 2, 2, 2, 507, 508, 7, 116, 2, 2, 508, 509, 7, 103, 2, 2, 509, 510, 7, 105, 2, 2, 510, 511, 7, 107, 2, 2, 511, 512, 7, 117, 2, 2, 512, 513, 7, 118, 2, 2, 513, 514, 7, 103, 2, 2, 514, 515, 7, 116, 2, 2, 515, 98, 3, 2, 2, 2, 516, 517, 7, 97, 2, 2, 517, 518, 7, 97, 2, 2, 518, 519, 7, 124, 2, 2, 519, 520, 7, 114, 2, 2, 520, 521, 7, 97, 2, 2, 521, 522, 7, 116, 2, 2, 522, 523, 7, 103, 2, 2, 523, 524, 7, 117, 2, 2, 524, 525, 7, 103, 2, 2, 525, 526, 7, 116, 2, 2, 526, 527, 7, 120, 2, 2, 527, 528, 7, 103, 2, 2, 528, 100, 3, 2, 2, 2, 529, 530, 7, 97, 2, 2, 530, 531, 7, 97, 2, 2, 531, 532, 7, 99, 2, 2, 532, 533, 7, 102, 2, 2, 533, 534, 7, 102, 2, 2, 534, 535, 7, 116, 2, 2, 535, 536, 7, 103, 2, 2, 536, 537, 7, 117, 2, 2, 537, 538, 7, 117, 2, 2, 538, 102, 3, 2, 2, 2, 539, 540, 7, 97, 2, 2, 540, 541, 7, 97, 2, 2, 541, 542, 7, 124, 2, 2, 542, 543, 7, 114, 2, 2, 543, 104, 3, 2, 2, 2, 544, 545, 7, 97, 2, 2, 545, 546, 7, 97, 2, 2, 546, 547, 7, 111, 2, 2, 547, 548, 7, 103, 2, 2, 548, 549, 7, 111, 2, 2, 549, 106, 3, 2, 2, 2, 550, 551, 7, 97, 2, 2, 551, 552, 7, 97, 2, 2, 552, 553, 7, 117, 2, 2, 553, 554, 7, 117, 2, 2, 554, 555, 7, 99, 2, 2, 555, 108, 3, 2, 2, 2, 556, 557, 7, 97, 2, 2, 557, 558, 7, 97, 2, 2, 558, 559, 7, 111, 2, 2, 559, 560, 7, 99, 2, 2, 560, 110, 3, 2, 2, 2, 561, 562, 7, 97, 2, 2, 562, 563, 7, 97, 2, 2, 563, 564, 7, 107, 2, 2, 564, 565, 7, 112, 2, 2, 565, 566, 7, 118, 2, 2, 566, 567, 7, 116, 2, 2, 567, 568, 7, 107, 2, 2, 568, 569, 7, 112, 2, 2, 569, 570, 7, 117, 2, 2, 570, 571, 7, 107, 2, 2, 571, 572, 7, 101, 2, 2, 572, 112, 3, 2, 2, 2, 573, 574, 7, 97, 2, 2, 574, 575, 7, 97, 2, 2, 575, 576, 7, 117, 2, 2, 576, 577, 7, 118, 2, 2, 577, 578, 7, 99, 2, 2, 578, 579, 7, 101, 2, 2, 579, 580, 7, 109, 2, 2, 580, 581, 7, 101, 2, 2, 581, 582, 7, 99, 2, 2, 582, 583, 7, 110, 2, 2, 583, 603, 7, 110, 2, 2, 584, 585, 7, 97, 2, 2, 585, 586, 7, 97, 2, 2, 586, 587, 7, 114, 2, 2, 587, 588, 7, 106, 2, 2, 588, 589, 7, 107, 2, 2, 589, 590, 7, 101, 2, 2, 590, 591, 7, 99, 2, 2, 591, 592, 7, 110, 2, 2, 592, 603, 7, 110, 2, 2, 593, 594, 7, 97, 2, 2, 594, 595, 7, 97, 2, 2, 595, 596, 7, 120, 2, 2, 596, 597, 7, 99, 2, 2, 597, 598, 7, 116, 2, 2, 598, 599, 7, 101, 2, 2, 599, 600, 7, 99, 2, 2, 600, 601, 7, 110, 2, 2, 601, 603, 7, 110, 2, 2, 602, 573, 3, 2, 2, 2, 602, 584, 3, 2, 2, 2, 602, 593, 3, 2, 2, 2, 603, 114, 3, 2, 2, 2, 604, 605, 7, 107, 2, 2, 605, 606, 7, 104, 2, 2, 606, 116, 3, 2, 2, 2, 607, 608, 7, 103, 2, 2, 608, 609, 7, 110, 2, 2, 609, 610, 7, 117, 2, 2, 610, 611, 7, 103, 2, 2, 611, 118, 3, 2, 2, 2, 612, 613, 7, 121, 2, 2, 613, 614, 7, 106, 2, 2, 614, 615, 7, 107, 2, 2, 615, 616, 7, 110, 2, 2, 616, 617, 7, 103, 2, 2, 617, 120, 3, 2, 2, 2, 618, 619, 7, 102, 2, 2, 619, 620, 7, 113, 2, 2, 620, 122, 3, 2, 2, 2, 621, 622, 7, 104, 2, 2, 622, 623, 7, 113, 2, 2, 623, 624, 7, 116, 2, 2, 624, 124, 3, 2, 2, 2, 625, 626, 7, 117, 2, 2, 626, 627, 7, 121, 2, 2, 627, 628, 7, 107, 2, 2, 628, 629, 7, 118, 2, 2, 629, 630, 7, 101, 2, 2, 630, 631, 7, 106, 2, 2, 631, 126, 3, 2, 2, 2, 632, 633, 7, 116, 2, 2, 633, 634, 7, 103, 2, 2, 634, 635, 7, 118, 2, 2, 635, 636, 7, 119, 2, 2, 636, 637, 7, 116, 2, 2, 637, 638, 7, 112, 2, 2, 638, 128, 3, 2, 2, 2, 639, 640, 7, 100, 2, 2, 640, 641, 7, 116, 2, 2, 641, 642, 7, 103, 2, 2, 642, 643, 7, 99, 2, 2, 643, 644, 7, 109, 2, 2, 644, 130, 3, 2, 2, 2, 645, 646, 7, 101, 2, 2, 646, 647, 7, 113, 2, 2, 647, 648, 7, 112, 2, 2, 648, 649, 7, 118, 2, 2, 649, 650, 7, 107, 2, 2, 650, 651, 7, 112, 2, 2, 651, 652, 7, 119, 2, 2, 652, 653, 7, 103, 2, 2, 653, 132, 3, 2, 2, 2, 654, 655, 7, 99, 2, 2, 655, 656, 7, 117, 2, 2, 656, 657, 7, 111, 2, 2, 657, 658, 3, 2, 2, 2, 658, 659, 8, 66, 3, 2, 659, 134, 3, 2, 2, 2, 660, 661, 7, 102, 2, 2, 661, 662, 7, 103, 2, 2, 662, 663, 7, 104, 2, 2, 663, 664, 7, 99, 2, 2, 664, 665, 7, 119, 2, 2, 665, 666, 7, 110, 2, 2, 666, 667, 7, 118, 2, 2, 667, 136, 3, 2, 2, 2, 668, 669, 7, 101, 2, 2, 669, 670, 7, 99, 2, 2, 670, 671, 7, 117, 2, 2, 671, 672, 7, 103, 2, 2, 672, 138, 3, 2, 2, 2, 673, 674, 7, 117, 2, 2, 674, 675, 7, 118, 2, 2, 675, 676, 7, 116, 2, 2, 676, 677, 7, 119, 2, 2, 677, 678, 7, 101, 2, 2, 678, 679, 7, 118, 2, 2, 679, 140, 3, 2, 2, 2, 680, 681, 7, 103, 2, 2, 681, 682, 7, 112, 2, 2, 682, 683, 7, 119, 2, 2, 683, 684, 7, 111, 2, 2, 684, 142, 3, 2, 2, 2, 685, 686, 7, 117, 2, 2, 686, 687, 7, 107, 2, 2, 687, 688, 7, 124, 2, 2, 688, 689, 7, 103, 2, 2, 689, 690, 7, 113, 2, 2, 690, 691, 7, 104, 2, 2, 691, 144, 3, 2, 2, 2, 692, 693, 7, 118, 2, 2, 693, 694, 7, 123, 2, 2, 694, 695, 7, 114, 2, 2, 695, 696, 7, 103, 2, 2, 696, 697, 7, 107, 2, 2, 697, 698, 7, 102, 2, 2, 698, 146, 3, 2, 2, 2, 699, 700, 7, 102, 2, 2, 700, 701, 7, 103, 2, 2, 701, 702, 7, 104, 2, 2, 702, 703, 7, 107, 2, 2, 703, 704, 7, 112, 2, 2, 704, 705, 7, 103, 2, 2, 705, 706, 7, 102, 2, 2, 706, 148, 3, 2, 2, 2, 707, 708, 7, 109, 2, 2, 708, 709, 7, 107, 2, 2, 709, 710, 7, 101, 2, 2, 710, 711, 7, 109, 2, 2, 711, 712, 7, 99, 2, 2, 712, 713, 7, 117, 2, 2, 713, 714, 7, 111, 2, 2, 714, 150, 3, 2, 2, 2, 715, 716, 7, 116, 2, 2, 716, 717, 7, 103, 2, 2, 717, 718, 7, 117, 2, 2, 718, 719, 7, 113, 2, 2, 719, 720, 7, 119, 2, 2, 720, 721, 7, 116, 2, 2, 721, 722, 7, 101, 2, 2, 722, 723, 7, 103, 2, 2, 723, 152, 3, 2, 2, 2, 724, 725, 7, 119, 2, 2, 725, 726, 7, 117, 2, 2, 726, 727, 7, 103, 2, 2, 727, 728, 7, 117, 2, 2, 728, 154, 3, 2, 2, 2, 729, 730, 7, 101, 2, 2, 730, 731, 7, 110, 2, 2, 731, 732, 7, 113, 2, 2, 732, 733, 7, 100, 2, 2, 733, 734, 7, 100, 2, 2, 734, 735, 7, 103, 2, 2, 735, 736, 7, 116, 2, 2, 736, 737, 7, 117, 2, 2, 737, 156, 3, 2, 2, 2, 738, 739, 7, 100, 2, 2, 739, 740, 7, 123, 2, 2, 740, 741, 7, 118, 2, 2, 741, 742, 7, 103, 2, 2, 742, 743, 7, 117, 2, 2, 743, 158, 3, 2, 2, 2, 744, 745, 7, 101, 2, 2, 745, 746, 7, 123, 2, 2, 746, 747, 7, 101, 2, 2, 747, 748, 7, 110, 2, 2, 748, 749, 7, 103, 2, 2, 749, 750, 7, 117, 2, 2, 750, 160, 3, 2, 2, 2, 751, 752, 7, 35, 2, 2, 752, 162, 3, 2, 2, 2, 753, 754, 7, 117, 2, 2, 754, 755, 7, 107, 2, 2, 755, 756, 7, 105, 2, 2, 756, 757, 7, 112, 2, 2, 757, 758, 7, 103, 2, 2, 758, 768, 7, 102, 2, 2, 759, 760, 7, 119, 2, 2, 760, 761, 7, 112, 2, 2, 761, 762, 7, 117, 2, 2, 762, 763, 7, 107, 2, 2, 763, 764, 7, 105, 2, 2, 764, 765, 7, 112, 2, 2, 765, 766, 7, 103, 2, 2, 766, 768, 7, 102, 2, 2, 767, 753, 3, 2, 2, 2, 767, 759, 3, 2, 2, 2, 768, 164, 3, 2, 2, 2, 769, 770, 7, 100, 2, 2, 770, 771, 7, 123, 2, 2, 771, 772, 7, 118, 2, 2, 772, 807, 7, 103, 2, 2, 773, 774, 7, 121, 2, 2, 774, 775, 7, 113, 2, 2, 775, 776, 7, 116, 2, 2, 776, 807, 7, 102, 2, 2, 777, 778, 7, 102, 2, 2, 778, 779, 7, 121, 2, 2, 779, 780, 7, 113, 2, 2, 780, 781, 7, 116, 2, 2, 781, 807, 7, 102, 2, 2, 782, 783, 7, 100, 2, 2, 783, 784, 7, 113, 2, 2, 784, 785, 7, 113, 2, 2, 785, 807, 7, 110, 2, 2, 786, 787, 7, 101, 2, 2, 787, 788, 7, 106, 2, 2, 788, 789, 7, 99, 2, 2, 789, 807, 7, 116, 2, 2, 790, 791, 7, 117, 2, 2, 791, 792, 7, 106, 2, 2, 792, 793, 7, 113, 2, 2, 793, 794, 7, 116, 2, 2, 794, 807, 7, 118, 2, 2, 795, 796, 7, 107, 2, 2, 796, 797, 7, 112, 2, 2, 797, 807, 7, 118, 2, 2, 798, 799, 7, 110, 2, 2, 799, 800, 7, 113, 2, 2, 800, 801, 7, 112, 2, 2, 801, 807, 7, 105, 2, 2, 802, 803, 7, 120, 2, 2, 803, 804, 7, 113, 2, 2, 804, 805, 7, 107, 2, 2, 805, 807, 7, 102, 2, 2, 806, 769, 3, 2, 2, 2, 806, 773, 3, 2, 2, 2, 806, 777, 3, 2, 2, 2, 806, 782, 3, 2, 2, 2, 806, 786, 3, 2, 2, 2, 806, 790, 3, 2, 2, 2, 806, 795, 3, 2, 2, 2, 806, 798, 3, 2, 2, 2, 806, 802, 3, 2, 2, 2, 807, 166, 3, 2, 2, 2, 808, 809, 7, 118, 2, 2, 809, 810, 7, 116, 2, 2, 810, 811, 7, 119, 2, 2, 811, 818, 7, 103, 2, 2, 812, 813, 7, 104, 2, 2, 813, 814, 7, 99, 2, 2, 814, 815, 7, 110, 2, 2, 815, 816, 7, 117, 2, 2, 816, 818, 7, 103, 2, 2, 817, 808, 3, 2, 2, 2, 817, 812, 3, 2, 2, 2, 818, 168, 3, 2, 2, 2, 819, 820, 7, 125, 2, 2, 820, 821, 7, 125, 2, 2, 821, 825, 3, 2, 2, 2, 822, 824, 11, 2, 2, 2, 823, 822, 3, 2, 2, 2, 824, 827, 3, 2, 2, 2, 825, 826, 3, 2, 2, 2, 825, 823, 3, 2, 2, 2, 826, 828, 3, 2, 2, 2, 827, 825, 3, 2, 2, 2, 828, 829, 7, 127, 2, 2, 829, 830, 7, 127, 2, 2, 830, 170, 3, 2, 2, 2, 831, 832, 7, 37, 2, 2, 832, 833, 7, 107, 2, 2, 833, 834, 7, 111, 2, 2, 834, 835, 7, 114, 2, 2, 835, 836, 7, 113, 2, 2, 836, 837, 7, 116, 2, 2, 837, 838, 7, 118, 2, 2, 838, 839, 3, 2, 2, 2, 839, 840, 8, 85, 4, 2, 840, 172, 3, 2, 2, 2, 841, 842, 7, 37, 2, 2, 842, 843, 7, 107, 2, 2, 843, 844, 7, 112, 2, 2, 844, 845, 7, 101, 2, 2, 845, 846, 7, 110, 2, 2, 846, 847, 7, 119, 2, 2, 847, 848, 7, 102, 2, 2, 848, 849, 7, 103, 2, 2, 849, 850, 3, 2, 2, 2, 850, 851, 8, 86, 5, 2, 851, 174, 3, 2, 2, 2, 852, 853, 7, 37, 2, 2, 853, 854, 7, 114, 2, 2, 854, 855, 7, 116, 2, 2, 855, 856, 7, 99, 2, 2, 856, 857, 7, 105, 2, 2, 857, 858, 7, 111, 2, 2, 858, 859, 7, 99, 2, 2, 859, 176, 3, 2, 2, 2, 860, 861, 7, 37, 2, 2, 861, 862, 7, 102, 2, 2, 862, 863, 7, 103, 2, 2, 863, 864, 7, 104, 2, 2, 864, 865, 7, 107, 2, 2, 865, 866, 7, 112, 2, 2, 866, 867, 7, 103, 2, 2, 867, 178, 3, 2, 2, 2, 868, 869, 7, 94, 2, 2, 869, 874, 7, 12, 2, 2, 870, 871, 7, 94, 2, 2, 871, 872, 7, 15, 2, 2, 872, 874, 7, 12, 2, 2, 873, 868, 3, 2, 2, 2, 873, 870, 3, 2, 2, 2, 874, 180, 3, 2, 2, 2, 875, 876, 7, 37, 2, 2, 876, 877, 7, 119, 2, 2, 877, 878, 7, 112, 2, 2, 878, 879, 7, 102, 2, 2, 879, 880, 7, 103, 2, 2, 880, 881, 7, 104, 2, 2, 881, 182, 3, 2, 2, 2, 882, 883, 7, 37, 2, 2, 883, 884, 7, 107, 2, 2, 884, 885, 7, 104, 2, 2, 885, 886, 7, 102, 2, 2, 886, 887, 7, 103, 2, 2, 887, 888, 7, 104, 2, 2, 888, 184, 3, 2, 2, 2, 889, 890, 7, 37, 2, 2, 890, 891, 7, 107, 2, 2, 891, 892, 7, 104, 2, 2, 892, 893, 7, 112, 2, 2, 893, 894, 7, 102, 2, 2, 894, 895, 7, 103, 2, 2, 895, 896, 7, 104, 2, 2, 896, 186, 3, 2, 2, 2, 897, 898, 7, 37, 2, 2, 898, 899, 7, 107, 2, 2, 899, 900, 7, 104, 2, 2, 900, 188, 3, 2, 2, 2, 901, 902, 7, 37, 2, 2, 902, 903, 7, 103, 2, 2, 903, 904, 7, 110, 2, 2, 904, 905, 7, 107, 2, 2, 905, 906, 7, 104, 2, 2, 906, 190, 3, 2, 2, 2, 907, 908, 7, 37, 2, 2, 908, 909, 7, 103, 2, 2, 909, 910, 7, 110, 2, 2, 910, 911, 7, 117, 2, 2, 911, 912, 7, 103, 2, 2, 912, 192, 3, 2, 2, 2, 913, 914, 7, 37, 2, 2, 914, 915, 7, 103, 2, 2, 915, 916, 7, 112, 2, 2, 916, 917, 7, 102, 2, 2, 917, 918, 7, 107, 2, 2, 918, 919, 7, 104, 2, 2, 919, 194, 3, 2, 2, 2, 920, 921, 7, 37, 2, 2, 921, 922, 7, 103, 2, 2, 922, 923, 7, 116, 2, 2, 923, 924, 7, 116, 2, 2, 924, 925, 7, 113, 2, 2, 925, 926, 7, 116, 2, 2, 926, 196, 3, 2, 2, 2, 927, 930, 5, 199, 99, 2, 928, 930, 5, 207, 103, 2, 929, 927, 3, 2, 2, 2, 929, 928, 3, 2, 2, 2, 930, 198, 3, 2, 2, 2, 931, 935, 5, 201, 100, 2, 932, 935, 5, 203, 101, 2, 933, 935, 5, 205, 102, 2, 934, 931, 3, 2, 2, 2, 934, 932, 3, 2, 2, 2, 934, 933, 3, 2, 2, 2, 935, 200, 3, 2, 2, 2, 936, 942, 7, 39, 2, 2, 937, 938, 7, 50, 2, 2, 938, 942, 7, 100, 2, 2, 939, 940, 7, 50, 2, 2, 940, 942, 7, 68, 2, 2, 941, 936, 3, 2, 2, 2, 941, 937, 3, 2, 2, 2, 941, 939, 3, 2, 2, 2, 942, 946, 3, 2, 2, 2, 943, 945, 5, 215, 107, 2, 944, 943, 3, 2, 2, 2, 945, 948, 3, 2, 2, 2, 946, 944, 3, 2, 2, 2, 946, 947, 3, 2, 2, 2, 947, 949, 3, 2, 2, 2, 948, 946, 3, 2, 2, 2, 949, 951, 7, 48, 2, 2, 950, 952, 5, 215, 107, 2, 951, 950, 3, 2, 2, 2, 952, 953, 3, 2, 2, 2, 953, 951, 3, 2, 2, 2, 953, 954, 3, 2, 2, 2, 954, 202, 3, 2, 2, 2, 955, 957, 5, 217, 108, 2, 956, 955, 3, 2, 2, 2, 957, 960, 3, 2, 2, 2, 958, 956, 3, 2, 2, 2, 958, 959, 3, 2, 2, 2, 959, 961, 3, 2, 2, 2, 960, 958, 3, 2, 2, 2, 961, 963, 7, 48, 2, 2, 962, 964, 5, 217, 108, 2, 963, 962, 3, 2, 2, 2, 964, 965, 3, 2, 2, 2, 965, 963, 3, 2, 2, 2, 965, 966, 3, 2, 2, 2, 966, 204, 3, 2, 2, 2, 967, 973, 7, 38, 2, 2, 968, 969, 7, 50, 2, 2, 969, 973, 7, 122, 2, 2, 970, 971, 7, 50, 2, 2, 971, 973, 7, 90, 2, 2, 972, 967, 3, 2, 2, 2, 972, 968, 3, 2, 2, 2, 972, 970, 3, 2, 2, 2, 973, 977, 3, 2, 2, 2, 974, 976, 5, 219, 109, 2, 975, 974, 3, 2, 2, 2, 976, 979, 3, 2, 2, 2, 977, 975, 3, 2, 2, 2, 977, 978, 3, 2, 2, 2, 978, 980, 3, 2, 2, 2, 979, 977, 3, 2, 2, 2, 980, 982, 7, 48, 2, 2, 981, 983, 5, 219, 109, 2, 982, 981, 3, 2, 2, 2, 983, 984, 3, 2, 2, 2, 984, 982, 3, 2, 2, 2, 984, 985, 3, 2, 2, 2, 985, 206, 3, 2, 2, 2, 986, 990, 5, 211, 105, 2, 987, 990, 5, 213, 106, 2, 988, 990, 5, 209, 104, 2, 989, 986, 3, 2, 2, 2, 989, 987, 3, 2, 2, 2, 989, 988, 3, 2, 2, 2, 990, 994, 3, 2, 2, 2, 991, 992, 9, 2, 2, 2, 992, 995, 9, 3, 2, 2, 993, 995, 7, 110, 2, 2, 994, 991, 3, 2, 2, 2, 994, 993, 3, 2, 2, 2, 994, 995, 3, 2, 2, 2, 995, 208, 3, 2, 2, 2, 996, 997, 7, 50, 2, 2, 997, 999, 9, 4, 2, 2, 998, 1000, 5, 215, 107, 2, 999, 998, 3, 2, 2, 2, 1000, 1001, 3, 2, 2, 2, 1001, 999, 3, 2, 2, 2, 1001, 1002, 3, 2, 2, 2, 1002, 1010, 3, 2, 2, 2, 1003, 1005, 7, 39, 2, 2, 1004, 1006, 5, 215, 107, 2, 1005, 1004, 3, 2, 2, 2, 1006, 1007, 3, 2, 2, 2, 1007, 1005, 3, 2, 2, 2, 1007, 1008, 3, 2, 2, 2, 1008, 1010, 3, 2, 2, 2, 1009, 996, 3, 2, 2, 2, 1009, 1003, 3, 2, 2, 2, 1010, 210, 3, 2, 2, 2, 1011, 1013, 5, 217, 108, 2, 1012, 1011, 3, 2, 2, 2, 1013, 1014, 3, 2, 2, 2, 1014, 1012, 3, 2, 2, 2, 1014, 1015, 3, 2, 2, 2, 1015, 212, 3, 2, 2, 2, 1016, 1022, 7, 38, 2, 2, 1017, 1018, 7, 50, 2, 2, 1018, 1022, 7, 122, 2, 2, 1019, 1020, 7, 50, 2, 2, 1020, 1022, 7, 90, 2, 2, 1021, 1016, 3, 2, 2, 2, 1021, 1017, 3, 2, 2, 2, 1021, 1019, 3, 2, 2, 2, 1022, 1024, 3, 2, 2, 2, 1023, 1025, 5, 219, 109, 2, 1024, 1023, 3, 2, 2, 2, 1025, 1026, 3, 2, 2, 2, 1026, 1024, 3, 2, 2, 2, 1026, 1027, 3, 2, 2, 2, 1027, 214, 3, 2, 2, 2, 1028, 1029, 9, 5, 2, 2, 1029, 216, 3, 2, 2, 2, 1030, 1031, 9, 6, 2, 2, 1031, 218, 3, 2, 2, 2, 1032, 1033, 9, 7, 2, 2, 1033, 220, 3, 2, 2, 2, 1034, 1038, 5, 223, 111, 2, 1035, 1037, 5, 225, 112, 2, 1036, 1035, 3, 2, 2, 2, 1037, 1040, 3, 2, 2, 2, 1038, 1036, 3, 2, 2, 2, 1038, 1039, 3, 2, 2, 2, 1039, 1041, 3, 2, 2, 2, 1040, 1038, 3, 2, 2, 2, 1041, 1042, 8, 110, 6, 2, 1042, 222, 3, 2, 2, 2, 1043, 1044, 9, 8, 2, 2, 1044, 224, 3, 2, 2, 2, 1045, 1046, 9, 9, 2, 2, 1046, 226, 3, 2, 2, 2, 1047, 1053, 7, 36, 2, 2, 1048, 1049, 7, 94, 2, 2, 1049, 1052, 7, 36, 2, 2, 1050, 1052, 10, 10, 2, 2, 1051, 1048, 3, 2, 2, 2, 1051, 1050, 3, 2, 2, 2, 1052, 1055, 3, 2, 2, 2, 1053, 1051, 3, 2, 2, 2, 1053, 1054, 3, 2, 2, 2, 1054, 1056, 3, 2, 2, 2, 1055, 1053, 3, 2, 2, 2, 1056, 1058, 7, 36, 2, 2, 1057, 1059, 9, 11, 2, 2, 1058, 1057, 3, 2, 2, 2, 1058, 1059, 3, 2, 2, 2, 1059, 1064, 3, 2, 2, 2, 1060, 1062, 9, 12, 2, 2, 1061, 1063, 9, 13, 2, 2, 1062, 1061, 3, 2, 2, 2, 1062, 1063, 3, 2, 2, 2, 1063, 1065, 3, 2, 2, 2, 1064, 1060, 3, 2, 2, 2, 1064, 1065, 3, 2, 2, 2, 1065, 1067, 3, 2, 2, 2, 1066, 1068, 9, 11, 2, 2, 1067, 1066, 3, 2, 2, 2, 1067, 1068, 3, 2, 2, 2, 1068, 228, 3, 2, 2, 2, 1069, 1078, 7, 41, 2, 2, 1070, 1075, 7, 94, 2, 2, 1071, 1076, 9, 14, 2, 2, 1072, 1073, 7, 122, 2, 2, 1073, 1074, 9, 15, 2, 2, 1074, 1076, 9, 15, 2, 2, 1075, 1071, 3, 2, 2, 2, 1075, 1072, 3, 2, 2, 2, 1076, 1079, 3, 2, 2, 2, 1077, 1079, 10, 16, 2, 2, 1078, 1070, 3, 2, 2, 2, 1078, 1077, 3, 2, 2, 2, 1079, 1080, 3, 2, 2, 2, 1080, 1081, 7, 41, 2, 2, 1081, 230, 3, 2, 2, 2, 1082, 1084, 9, 17, 2, 2, 1083, 1082, 3, 2, 2, 2, 1084, 1085, 3, 2, 2, 2, 1085, 1083, 3, 2, 2, 2, 1085, 1086, 3, 2, 2, 2, 1086, 1087, 3, 2, 2, 2, 1087, 1088, 8, 115, 7, 2, 1088, 232, 3, 2, 2, 2, 1089, 1090, 7, 49, 2, 2, 1090, 1091, 7, 49, 2, 2, 1091, 1095, 3, 2, 2, 2, 1092, 1094, 10, 18, 2, 2, 1093, 1092, 3, 2, 2, 2, 1094, 1097, 3, 2, 2, 2, 1095, 1093, 3, 2, 2, 2, 1095, 1096, 3, 2, 2, 2, 1096, 1098, 3, 2, 2, 2, 1097, 1095, 3, 2, 2, 2, 1098, 1099, 8, 116, 8, 2, 1099, 234, 3, 2, 2, 2, 1100, 1101, 7, 49, 2, 2, 1101, 1102, 7, 44, 2, 2, 1102, 1106, 3, 2, 2, 2, 1103, 1105, 11, 2, 2, 2, 1104, 1103, 3, 2, 2, 2, 1105, 1108, 3, 2, 2, 2, 1106, 1107, 3, 2, 2, 2, 1106, 1104, 3, 2, 2, 2, 1107, 1109, 3, 2, 2, 2, 1108, 1106, 3, 2, 2, 2, 1109, 1110, 7, 44, 2, 2, 1110, 1111, 7, 49, 2, 2, 1111, 1112, 3, 2, 2, 2, 1112, 1113, 8, 117, 8, 2, 1113, 236, 3, 2, 2, 2, 1114, 1115, 7, 48, 2, 2, 1115, 1116, 7, 100, 2, 2, 1116, 1117, 7, 123, 2, 2, 1117, 1118, 7, 118, 2, 2, 1118, 1119, 7, 103, 2, 2, 1119, 238, 3, 2, 2, 2, 1120, 1121, 7, 100, 2, 2, 1121, 1122, 7, 116, 2, 2, 1122, 1671, 7, 109, 2, 2, 1123, 1124, 7, 113, 2, 2, 1124, 1125, 7, 116, 2, 2, 1125, 1671, 7, 99, 2, 2, 1126, 1127, 7, 109, 2, 2, 1127, 1128, 7, 107, 2, 2, 1128, 1671, 7, 110, 2, 2, 1129, 1130, 7, 117, 2, 2, 1130, 1131, 7, 110, 2, 2, 1131, 1671, 7, 113, 2, 2, 1132, 1133, 7, 112, 2, 2, 1133, 1134, 7, 113, 2, 2, 1134, 1671, 7, 114, 2, 2, 1135, 1136, 7, 99, 2, 2, 1136, 1137, 7, 117, 2, 2, 1137, 1671, 7, 110, 2, 2, 1138, 1139, 7, 114, 2, 2, 1139, 1140, 7, 106, 2, 2, 1140, 1671, 7, 114, 2, 2, 1141, 1142, 7, 99, 2, 2, 1142, 1143, 7, 112, 2, 2, 1143, 1671, 7, 101, 2, 2, 1144, 1145, 7, 100, 2, 2, 1145, 1146, 7, 114, 2, 2, 1146, 1671, 7, 110, 2, 2, 1147, 1148, 7, 101, 2, 2, 1148, 1149, 7, 110, 2, 2, 1149, 1671, 7, 101, 2, 2, 1150, 1151, 7, 108, 2, 2, 1151, 1152, 7, 117, 2, 2, 1152, 1671, 7, 116, 2, 2, 1153, 1154, 7, 99, 2, 2, 1154, 1155, 7, 112, 2, 2, 1155, 1671, 7, 102, 2, 2, 1156, 1157, 7, 116, 2, 2, 1157, 1158, 7, 110, 2, 2, 1158, 1671, 7, 99, 2, 2, 1159, 1160, 7, 100, 2, 2, 1160, 1161, 7, 107, 2, 2, 1161, 1671, 7, 118, 2, 2, 1162, 1163, 7, 116, 2, 2, 1163, 1164, 7, 113, 2, 2, 1164, 1671, 7, 110, 2, 2, 1165, 1166, 7, 114, 2, 2, 1166, 1167, 7, 110, 2, 2, 1167, 1671, 7, 99, 2, 2, 1168, 1169, 7, 114, 2, 2, 1169, 1170, 7, 110, 2, 2, 1170, 1671, 7, 114, 2, 2, 1171, 1172, 7, 100, 2, 2, 1172, 1173, 7, 111, 2, 2, 1173, 1671, 7, 107, 2, 2, 1174, 1175, 7, 117, 2, 2, 1175, 1176, 7, 103, 2, 2, 1176, 1671, 7, 101, 2, 2, 1177, 1178, 7, 116, 2, 2, 1178, 1179, 7, 118, 2, 2, 1179, 1671, 7, 107, 2, 2, 1180, 1181, 7, 103, 2, 2, 1181, 1182, 7, 113, 2, 2, 1182, 1671, 7, 116, 2, 2, 1183, 1184, 7, 117, 2, 2, 1184, 1185, 7, 116, 2, 2, 1185, 1671, 7, 103, 2, 2, 1186, 1187, 7, 110, 2, 2, 1187, 1188, 7, 117, 2, 2, 1188, 1671, 7, 116, 2, 2, 1189, 1190, 7, 114, 2, 2, 1190, 1191, 7, 106, 2, 2, 1191, 1671, 7, 99, 2, 2, 1192, 1193, 7, 99, 2, 2, 1193, 1194, 7, 110, 2, 2, 1194, 1671, 7, 116, 2, 2, 1195, 1196, 7, 108, 2, 2, 1196, 1197, 7, 111, 2, 2, 1197, 1671, 7, 114, 2, 2, 1198, 1199, 7, 100, 2, 2, 1199, 1200, 7, 120, 2, 2, 1200, 1671, 7, 101, 2, 2, 1201, 1202, 7, 101, 2, 2, 1202, 1203, 7, 110, 2, 2, 1203, 1671, 7, 107, 2, 2, 1204, 1205, 7, 116, 2, 2, 1205, 1206, 7, 118, 2, 2, 1206, 1671, 7, 117, 2, 2, 1207, 1208, 7, 99, 2, 2, 1208, 1209, 7, 102, 2, 2, 1209, 1671, 7, 101, 2, 2, 1210, 1211, 7, 116, 2, 2, 1211, 1212, 7, 116, 2, 2, 1212, 1671, 7, 99, 2, 2, 1213, 1214, 7, 100, 2, 2, 1214, 1215, 7, 120, 2, 2, 1215, 1671, 7, 117, 2, 2, 1216, 1217, 7, 117, 2, 2, 1217, 1218, 7, 103, 2, 2, 1218, 1671, 7, 107, 2, 2, 1219, 1220, 7, 117, 2, 2, 1220, 1221, 7, 99, 2, 2, 1221, 1671, 7, 122, 2, 2, 1222, 1223, 7, 117, 2, 2, 1223, 1224, 7, 118, 2, 2, 1224, 1671, 7, 123, 2, 2, 1225, 1226, 7, 117, 2, 2, 1226, 1227, 7, 118, 2, 2, 1227, 1671, 7, 99, 2, 2, 1228, 1229, 7, 117, 2, 2, 1229, 1230, 7, 118, 2, 2, 1230, 1671, 7, 122, 2, 2, 1231, 1232, 7, 102, 2, 2, 1232, 1233, 7, 103, 2, 2, 1233, 1671, 7, 123, 2, 2, 1234, 1235, 7, 118, 2, 2, 1235, 1236, 7, 122, 2, 2, 1236, 1671, 7, 99, 2, 2, 1237, 1238, 7, 122, 2, 2, 1238, 1239, 7, 99, 2, 2, 1239, 1671, 7, 99, 2, 2, 1240, 1241, 7, 100, 2, 2, 1241, 1242, 7, 101, 2, 2, 1242, 1671, 7, 101, 2, 2, 1243, 1244, 7, 99, 2, 2, 1244, 1245, 7, 106, 2, 2, 1245, 1671, 7, 122, 2, 2, 1246, 1247, 7, 118, 2, 2, 1247, 1248, 7, 123, 2, 2, 1248, 1671, 7, 99, 2, 2, 1249, 1250, 7, 118, 2, 2, 1250, 1251, 7, 122, 2, 2, 1251, 1671, 7, 117, 2, 2, 1252, 1253, 7, 118, 2, 2, 1253, 1254, 7, 99, 2, 2, 1254, 1671, 7, 117, 2, 2, 1255, 1256, 7, 117, 2, 2, 1256, 1257, 7, 106, 2, 2, 1257, 1671, 7, 123, 2, 2, 1258, 1259, 7, 117, 2, 2, 1259, 1260, 7, 106, 2, 2, 1260, 1671, 7, 122, 2, 2, 1261, 1262, 7, 110, 2, 2, 1262, 1263, 7, 102, 2, 2, 1263, 1671, 7, 123, 2, 2, 1264, 1265, 7, 110, 2, 2, 1265, 1266, 7, 102, 2, 2, 1266, 1671, 7, 99, 2, 2, 1267, 1268, 7, 110, 2, 2, 1268, 1269, 7, 102, 2, 2, 1269, 1671, 7, 122, 2, 2, 1270, 1271, 7, 110, 2, 2, 1271, 1272, 7, 99, 2, 2, 1272, 1671, 7, 122, 2, 2, 1273, 1274, 7, 118, 2, 2, 1274, 1275, 7, 99, 2, 2, 1275, 1671, 7, 123, 2, 2, 1276, 1277, 7, 118, 2, 2, 1277, 1278, 7, 99, 2, 2, 1278, 1671, 7, 122, 2, 2, 1279, 1280, 7, 100, 2, 2, 1280, 1281, 7, 101, 2, 2, 1281, 1671, 7, 117, 2, 2, 1282, 1283, 7, 101, 2, 2, 1283, 1284, 7, 110, 2, 2, 1284, 1671, 7, 120, 2, 2, 1285, 1286, 7, 118, 2, 2, 1286, 1287, 7, 117, 2, 2, 1287, 1671, 7, 122, 2, 2, 1288, 1289, 7, 110, 2, 2, 1289, 1290, 7, 99, 2, 2, 1290, 1671, 7, 117, 2, 2, 1291, 1292, 7, 101, 2, 2, 1292, 1293, 7, 114, 2, 2, 1293, 1671, 7, 123, 2, 2, 1294, 1295, 7, 101, 2, 2, 1295, 1296, 7, 111, 2, 2, 1296, 1671, 7, 114, 2, 2, 1297, 1298, 7, 101, 2, 2, 1298, 1299, 7, 114, 2, 2, 1299, 1671, 7, 122, 2, 2, 1300, 1301, 7, 102, 2, 2, 1301, 1302, 7, 101, 2, 2, 1302, 1671, 7, 114, 2, 2, 1303, 1304, 7, 102, 2, 2, 1304, 1305, 7, 103, 2, 2, 1305, 1671, 7, 101, 2, 2, 1306, 1307, 7, 107, 2, 2, 1307, 1308, 7, 112, 2, 2, 1308, 1671, 7, 101, 2, 2, 1309, 1310, 7, 99, 2, 2, 1310, 1311, 7, 122, 2, 2, 1311, 1671, 7, 117, 2, 2, 1312, 1313, 7, 100, 2, 2, 1313, 1314, 7, 112, 2, 2, 1314, 1671, 7, 103, 2, 2, 1315, 1316, 7, 101, 2, 2, 1316, 1317, 7, 110, 2, 2, 1317, 1671, 7, 102, 2, 2, 1318, 1319, 7, 117, 2, 2, 1319, 1320, 7, 100, 2, 2, 1320, 1671, 7, 101, 2, 2, 1321, 1322, 7, 107, 2, 2, 1322, 1323, 7, 117, 2, 2, 1323, 1671, 7, 101, 2, 2, 1324, 1325, 7, 107, 2, 2, 1325, 1326, 7, 112, 2, 2, 1326, 1671, 7, 122, 2, 2, 1327, 1328, 7, 100, 2, 2, 1328, 1329, 7, 103, 2, 2, 1329, 1671, 7, 115, 2, 2, 1330, 1331, 7, 117, 2, 2, 1331, 1332, 7, 103, 2, 2, 1332, 1671, 7, 102, 2, 2, 1333, 1334, 7, 102, 2, 2, 1334, 1335, 7, 103, 2, 2, 1335, 1671, 7, 122, 2, 2, 1336, 1337, 7, 107, 2, 2, 1337, 1338, 7, 112, 2, 2, 1338, 1671, 7, 123, 2, 2, 1339, 1340, 7, 116, 2, 2, 1340, 1341, 7, 113, 2, 2, 1341, 1671, 7, 116, 2, 2, 1342, 1343, 7, 100, 2, 2, 1343, 1344, 7, 100, 2, 2, 1344, 1345, 7, 116, 2, 2, 1345, 1671, 7, 50, 2, 2, 1346, 1347, 7, 100, 2, 2, 1347, 1348, 7, 100, 2, 2, 1348, 1349, 7, 116, 2, 2, 1349, 1671, 7, 51, 2, 2, 1350, 1351, 7, 100, 2, 2, 1351, 1352, 7, 100, 2, 2, 1352, 1353, 7, 116, 2, 2, 1353, 1671, 7, 52, 2, 2, 1354, 1355, 7, 100, 2, 2, 1355, 1356, 7, 100, 2, 2, 1356, 1357, 7, 116, 2, 2, 1357, 1671, 7, 53, 2, 2, 1358, 1359, 7, 100, 2, 2, 1359, 1360, 7, 100, 2, 2, 1360, 1361, 7, 116, 2, 2, 1361, 1671, 7, 54, 2, 2, 1362, 1363, 7, 100, 2, 2, 1363, 1364, 7, 100, 2, 2, 1364, 1365, 7, 116, 2, 2, 1365, 1671, 7, 55, 2, 2, 1366, 1367, 7, 100, 2, 2, 1367, 1368, 7, 100, 2, 2, 1368, 1369, 7, 116, 2, 2, 1369, 1671, 7, 56, 2, 2, 1370, 1371, 7, 100, 2, 2, 1371, 1372, 7, 100, 2, 2, 1372, 1373, 7, 116, 2, 2, 1373, 1671, 7, 57, 2, 2, 1374, 1375, 7, 100, 2, 2, 1375, 1376, 7, 100, 2, 2, 1376, 1377, 7, 117, 2, 2, 1377, 1671, 7, 50, 2, 2, 1378, 1379, 7, 100, 2, 2, 1379, 1380, 7, 100, 2, 2, 1380, 1381, 7, 117, 2, 2, 1381, 1671, 7, 51, 2, 2, 1382, 1383, 7, 100, 2, 2, 1383, 1384, 7, 100, 2, 2, 1384, 1385, 7, 117, 2, 2, 1385, 1671, 7, 52, 2, 2, 1386, 1387, 7, 100, 2, 2, 1387, 1388, 7, 100, 2, 2, 1388, 1389, 7, 117, 2, 2, 1389, 1671, 7, 53, 2, 2, 1390, 1391, 7, 100, 2, 2, 1391, 1392, 7, 100, 2, 2, 1392, 1393, 7, 117, 2, 2, 1393, 1671, 7, 54, 2, 2, 1394, 1395, 7, 100, 2, 2, 1395, 1396, 7, 100, 2, 2, 1396, 1397, 7, 117, 2, 2, 1397, 1671, 7, 55, 2, 2, 1398, 1399, 7, 100, 2, 2, 1399, 1400, 7, 100, 2, 2, 1400, 1401, 7, 117, 2, 2, 1401, 1671, 7, 56, 2, 2, 1402, 1403, 7, 100, 2, 2, 1403, 1404, 7, 100, 2, 2, 1404, 1405, 7, 117, 2, 2, 1405, 1671, 7, 57, 2, 2, 1406, 1407, 7, 100, 2, 2, 1407, 1408, 7, 116, 2, 2, 1408, 1671, 7, 99, 2, 2, 1409, 1410, 7, 114, 2, 2, 1410, 1411, 7, 106, 2, 2, 1411, 1671, 7, 122, 2, 2, 1412, 1413, 7, 114, 2, 2, 1413, 1414, 7, 106, 2, 2, 1414, 1671, 7, 123, 2, 2, 1415, 1416, 7, 114, 2, 2, 1416, 1417, 7, 110, 2, 2, 1417, 1671, 7, 122, 2, 2, 1418, 1419, 7, 114, 2, 2, 1419, 1420, 7, 110, 2, 2, 1420, 1671, 7, 123, 2, 2, 1421, 1422, 7, 116, 2, 2, 1422, 1423, 7, 111, 2, 2, 1423, 1424, 7, 100, 2, 2, 1424, 1671, 7, 50, 2, 2, 1425, 1426, 7, 116, 2, 2, 1426, 1427, 7, 111, 2, 2, 1427, 1428, 7, 100, 2, 2, 1428, 1671, 7, 51, 2, 2, 1429, 1430, 7, 116, 2, 2, 1430, 1431, 7, 111, 2, 2, 1431, 1432, 7, 100, 2, 2, 1432, 1671, 7, 52, 2, 2, 1433, 1434, 7, 116, 2, 2, 1434, 1435, 7, 111, 2, 2, 1435, 1436, 7, 100, 2, 2, 1436, 1671, 7, 53, 2, 2, 1437, 1438, 7, 116, 2, 2, 1438, 1439, 7, 111, 2, 2, 1439, 1440, 7, 100, 2, 2, 1440, 1671, 7, 54, 2, 2, 1441, 1442, 7, 116, 2, 2, 1442, 1443, 7, 111, 2, 2, 1443, 1444, 7, 100, 2, 2, 1444, 1671, 7, 55, 2, 2, 1445, 1446, 7, 116, 2, 2, 1446, 1447, 7, 111, 2, 2, 1447, 1448, 7, 100, 2, 2, 1448, 1671, 7, 56, 2, 2, 1449, 1450, 7, 116, 2, 2, 1450, 1451, 7, 111, 2, 2, 1451, 1452, 7, 100, 2, 2, 1452, 1671, 7, 57, 2, 2, 1453, 1454, 7, 117, 2, 2, 1454, 1455, 7, 111, 2, 2, 1455, 1456, 7, 100, 2, 2, 1456, 1671, 7, 50, 2, 2, 1457, 1458, 7, 117, 2, 2, 1458, 1459, 7, 111, 2, 2, 1459, 1460, 7, 100, 2, 2, 1460, 1671, 7, 51, 2, 2, 1461, 1462, 7, 117, 2, 2, 1462, 1463, 7, 111, 2, 2, 1463, 1464, 7, 100, 2, 2, 1464, 1671, 7, 52, 2, 2, 1465, 1466, 7, 117, 2, 2, 1466, 1467, 7, 111, 2, 2, 1467, 1468, 7, 100, 2, 2, 1468, 1671, 7, 53, 2, 2, 1469, 1470, 7, 117, 2, 2, 1470, 1471, 7, 111, 2, 2, 1471, 1472, 7, 100, 2, 2, 1472, 1671, 7, 54, 2, 2, 1473, 1474, 7, 117, 2, 2, 1474, 1475, 7, 111, 2, 2, 1475, 1476, 7, 100, 2, 2, 1476, 1671, 7, 55, 2, 2, 1477, 1478, 7, 117, 2, 2, 1478, 1479, 7, 111, 2, 2, 1479, 1480, 7, 100, 2, 2, 1480, 1671, 7, 56, 2, 2, 1481, 1482, 7, 117, 2, 2, 1482, 1483, 7, 111, 2, 2, 1483, 1484, 7, 100, 2, 2, 1484, 1671, 7, 57, 2, 2, 1485, 1486, 7, 117, 2, 2, 1486, 1487, 7, 118, 2, 2, 1487, 1671, 7, 114, 2, 2, 1488, 1489, 7, 117, 2, 2, 1489, 1490, 7, 118, 2, 2, 1490, 1671, 7, 124, 2, 2, 1491, 1492, 7, 118, 2, 2, 1492, 1493, 7, 116, 2, 2, 1493, 1671, 7, 100, 2, 2, 1494, 1495, 7, 118, 2, 2, 1495, 1496, 7, 117, 2, 2, 1496, 1671, 7, 100, 2, 2, 1497, 1498, 7, 121, 2, 2, 1498, 1499, 7, 99, 2, 2, 1499, 1671, 7, 107, 2, 2, 1500, 1501, 7, 101, 2, 2, 1501, 1502, 7, 110, 2, 2, 1502, 1671, 7, 103, 2, 2, 1503, 1504, 7, 117, 2, 2, 1504, 1505, 7, 103, 2, 2, 1505, 1671, 7, 103, 2, 2, 1506, 1507, 7, 118, 2, 2, 1507, 1508, 7, 117, 2, 2, 1508, 1671, 7, 123, 2, 2, 1509, 1510, 7, 110, 2, 2, 1510, 1511, 7, 100, 2, 2, 1511, 1512, 7, 114, 2, 2, 1512, 1671, 7, 110, 2, 2, 1513, 1514, 7, 107, 2, 2, 1514, 1515, 7, 112, 2, 2, 1515, 1671, 7, 124, 2, 2, 1516, 1517, 7, 118, 2, 2, 1517, 1518, 7, 123, 2, 2, 1518, 1671, 7, 117, 2, 2, 1519, 1520, 7, 110, 2, 2, 1520, 1521, 7, 100, 2, 2, 1521, 1522, 7, 111, 2, 2, 1522, 1671, 7, 107, 2, 2, 1523, 1524, 7, 102, 2, 2, 1524, 1525, 7, 103, 2, 2, 1525, 1671, 7, 124, 2, 2, 1526, 1527, 7, 112, 2, 2, 1527, 1528, 7, 103, 2, 2, 1528, 1671, 7, 105, 2, 2, 1529, 1530, 7, 99, 2, 2, 1530, 1531, 7, 117, 2, 2, 1531, 1671, 7, 116, 2, 2, 1532, 1533, 7, 118, 2, 2, 1533, 1534, 7, 99, 2, 2, 1534, 1671, 7, 124, 2, 2, 1535, 1536, 7, 110, 2, 2, 1536, 1537, 7, 100, 2, 2, 1537, 1538, 7, 120, 2, 2, 1538, 1671, 7, 101, 2, 2, 1539, 1540, 7, 118, 2, 2, 1540, 1541, 7, 99, 2, 2, 1541, 1671, 7, 100, 2, 2, 1542, 1543, 7, 111, 2, 2, 1543, 1544, 7, 99, 2, 2, 1544, 1671, 7, 114, 2, 2, 1545, 1546, 7, 116, 2, 2, 1546, 1547, 7, 118, 2, 2, 1547, 1671, 7, 112, 2, 2, 1548, 1549, 7, 110, 2, 2, 1549, 1550, 7, 100, 2, 2, 1550, 1551, 7, 117, 2, 2, 1551, 1671, 7, 116, 2, 2, 1552, 1553, 7, 118, 2, 2, 1553, 1554, 7, 124, 2, 2, 1554, 1671, 7, 99, 2, 2, 1555, 1556, 7, 110, 2, 2, 1556, 1557, 7, 100, 2, 2, 1557, 1558, 7, 120, 2, 2, 1558, 1671, 7, 117, 2, 2, 1559, 1560, 7, 118, 2, 2, 1560, 1561, 7, 100, 2, 2, 1561, 1671, 7, 99, 2, 2, 1562, 1563, 7, 110, 2, 2, 1563, 1564, 7, 100, 2, 2, 1564, 1565, 7, 116, 2, 2, 1565, 1671, 7, 99, 2, 2, 1566, 1567, 7, 110, 2, 2, 1567, 1568, 7, 100, 2, 2, 1568, 1569, 7, 101, 2, 2, 1569, 1671, 7, 101, 2, 2, 1570, 1571, 7, 110, 2, 2, 1571, 1572, 7, 102, 2, 2, 1572, 1671, 7, 124, 2, 2, 1573, 1574, 7, 110, 2, 2, 1574, 1575, 7, 100, 2, 2, 1575, 1576, 7, 101, 2, 2, 1576, 1671, 7, 117, 2, 2, 1577, 1578, 7, 101, 2, 2, 1578, 1579, 7, 114, 2, 2, 1579, 1671, 7, 124, 2, 2, 1580, 1581, 7, 102, 2, 2, 1581, 1582, 7, 103, 2, 2, 1582, 1671, 7, 121, 2, 2, 1583, 1584, 7, 99, 2, 2, 1584, 1585, 7, 117, 2, 2, 1585, 1671, 7, 121, 2, 2, 1586, 1587, 7, 110, 2, 2, 1587, 1588, 7, 100, 2, 2, 1588, 1589, 7, 112, 2, 2, 1589, 1671, 7, 103, 2, 2, 1590, 1591, 7, 114, 2, 2, 1591, 1592, 7, 106, 2, 2, 1592, 1671, 7, 124, 2, 2, 1593, 1594, 7, 107, 2, 2, 1594, 1595, 7, 112, 2, 2, 1595, 1671, 7, 121, 2, 2, 1596, 1597, 7, 116, 2, 2, 1597, 1598, 7, 113, 2, 2, 1598, 1671, 7, 121, 2, 2, 1599, 1600, 7, 110, 2, 2, 1600, 1601, 7, 100, 2, 2, 1601, 1602, 7, 103, 2, 2, 1602, 1671, 7, 115, 2, 2, 1603, 1604, 7, 114, 2, 2, 1604, 1605, 7, 106, 2, 2, 1605, 1671, 7, 121, 2, 2, 1606, 1607, 7, 114, 2, 2, 1607, 1608, 7, 110, 2, 2, 1608, 1671, 7, 124, 2, 2, 1609, 1610, 7, 103, 2, 2, 1610, 1611, 7, 113, 2, 2, 1611, 1671, 7, 111, 2, 2, 1612, 1613, 7, 99, 2, 2, 1613, 1614, 7, 102, 2, 2, 1614, 1615, 7, 101, 2, 2, 1615, 1671, 7, 115, 2, 2, 1616, 1617, 7, 99, 2, 2, 1617, 1618, 7, 112, 2, 2, 1618, 1619, 7, 102, 2, 2, 1619, 1671, 7, 115, 2, 2, 1620, 1621, 7, 99, 2, 2, 1621, 1622, 7, 117, 2, 2, 1622, 1623, 7, 110, 2, 2, 1623, 1671, 7, 115, 2, 2, 1624, 1625, 7, 99, 2, 2, 1625, 1626, 7, 117, 2, 2, 1626, 1627, 7, 116, 2, 2, 1627, 1671, 7, 115, 2, 2, 1628, 1629, 7, 100, 2, 2, 1629, 1630, 7, 107, 2, 2, 1630, 1631, 7, 118, 2, 2, 1631, 1671, 7, 115, 2, 2, 1632, 1633, 7, 101, 2, 2, 1633, 1634, 7, 114, 2, 2, 1634, 1671, 7, 115, 2, 2, 1635, 1636, 7, 102, 2, 2, 1636, 1637, 7, 103, 2, 2, 1637, 1671, 7, 115, 2, 2, 1638, 1639, 7, 103, 2, 2, 1639, 1640, 7, 113, 2, 2, 1640, 1641, 7, 116, 2, 2, 1641, 1671, 7, 115, 2, 2, 1642, 1643, 7, 107, 2, 2, 1643, 1644, 7, 112, 2, 2, 1644, 1671, 7, 115, 2, 2, 1645, 1646, 7, 110, 2, 2, 1646, 1647, 7, 102, 2, 2, 1647, 1671, 7, 115, 2, 2, 1648, 1649, 7, 110, 2, 2, 1649, 1650, 7, 117, 2, 2, 1650, 1651, 7, 116, 2, 2, 1651, 1671, 7, 115, 2, 2, 1652, 1653, 7, 113, 2, 2, 1653, 1654, 7, 116, 2, 2, 1654, 1671, 7, 115, 2, 2, 1655, 1656, 7, 116, 2, 2, 1656, 1657, 7, 113, 2, 2, 1657, 1658, 7, 110, 2, 2, 1658, 1671, 7, 115, 2, 2, 1659, 1660, 7, 116, 2, 2, 1660, 1661, 7, 113, 2, 2, 1661, 1662, 7, 116, 2, 2, 1662, 1671, 7, 115, 2, 2, 1663, 1664, 7, 117, 2, 2, 1664, 1665, 7, 100, 2, 2, 1665, 1666, 7, 101, 2, 2, 1666, 1671, 7, 115, 2, 2, 1667, 1668, 7, 117, 2, 2, 1668, 1669, 7, 118, 2, 2, 1669, 1671, 7, 115, 2, 2, 1670, 1120, 3, 2, 2, 2, 1670, 1123, 3, 2, 2, 2, 1670, 1126, 3, 2, 2, 2, 1670, 1129, 3, 2, 2, 2, 1670, 1132, 3, 2, 2, 2, 1670, 1135, 3, 2, 2, 2, 1670, 1138, 3, 2, 2, 2, 1670, 1141, 3, 2, 2, 2, 1670, 1144, 3, 2, 2, 2, 1670, 1147, 3, 2, 2, 2, 1670, 1150, 3, 2, 2, 2, 1670, 1153, 3, 2, 2, 2, 1670, 1156, 3, 2, 2, 2, 1670, 1159, 3, 2, 2, 2, 1670, 1162, 3, 2, 2, 2, 1670, 1165, 3, 2, 2, 2, 1670, 1168, 3, 2, 2, 2, 1670, 1171, 3, 2, 2, 2, 1670, 1174, 3, 2, 2, 2, 1670, 1177, 3, 2, 2, 2, 1670, 1180, 3, 2, 2, 2, 1670, 1183, 3, 2, 2, 2, 1670, 1186, 3, 2, 2, 2, 1670, 1189, 3, 2, 2, 2, 1670, 1192, 3, 2, 2, 2, 1670, 1195, 3, 2, 2, 2, 1670, 1198, 3, 2, 2, 2, 1670, 1201, 3, 2, 2, 2, 1670, 1204, 3, 2, 2, 2, 1670, 1207, 3, 2, 2, 2, 1670, 1210, 3, 2, 2, 2, 1670, 1213, 3, 2, 2, 2, 1670, 1216, 3, 2, 2, 2, 1670, 1219, 3, 2, 2, 2, 1670, 1222, 3, 2, 2, 2, 1670, 1225, 3, 2, 2, 2, 1670, 1228, 3, 2, 2, 2, 1670, 1231, 3, 2, 2, 2, 1670, 1234, 3, 2, 2, 2, 1670, 1237, 3, 2, 2, 2, 1670, 1240, 3, 2, 2, 2, 1670, 1243, 3, 2, 2, 2, 1670, 1246, 3, 2, 2, 2, 1670, 1249, 3, 2, 2, 2, 1670, 1252, 3, 2, 2, 2, 1670, 1255, 3, 2, 2, 2, 1670, 1258, 3, 2, 2, 2, 1670, 1261, 3, 2, 2, 2, 1670, 1264, 3, 2, 2, 2, 1670, 1267, 3, 2, 2, 2, 1670, 1270, 3, 2, 2, 2, 1670, 1273, 3, 2, 2, 2, 1670, 1276, 3, 2, 2, 2, 1670, 1279, 3, 2, 2, 2, 1670, 1282, 3, 2, 2, 2, 1670, 1285, 3, 2, 2, 2, 1670, 1288, 3, 2, 2, 2, 1670, 1291, 3, 2, 2, 2, 1670, 1294, 3, 2, 2, 2, 1670, 1297, 3, 2, 2, 2, 1670, 1300, 3, 2, 2, 2, 1670, 1303, 3, 2, 2, 2, 1670, 1306, 3, 2, 2, 2, 1670, 1309, 3, 2, 2, 2, 1670, 1312, 3, 2, 2, 2, 1670, 1315, 3, 2, 2, 2, 1670, 1318, 3, 2, 2, 2, 1670, 1321, 3, 2, 2, 2, 1670, 1324, 3, 2, 2, 2, 1670, 1327, 3, 2, 2, 2, 1670, 1330, 3, 2, 2, 2, 1670, 1333, 3, 2, 2, 2, 1670, 1336, 3, 2, 2, 2, 1670, 1339, 3, 2, 2, 2, 1670, 1342, 3, 2, 2, 2, 1670, 1346, 3, 2, 2, 2, 1670, 1350, 3, 2, 2, 2, 1670, 1354, 3, 2, 2, 2, 1670, 1358, 3, 2, 2, 2, 1670, 1362, 3, 2, 2, 2, 1670, 1366, 3, 2, 2, 2, 1670, 1370, 3, 2, 2, 2, 1670, 1374, 3, 2, 2, 2, 1670, 1378, 3, 2, 2, 2, 1670, 1382, 3, 2, 2, 2, 1670, 1386, 3, 2, 2, 2, 1670, 1390, 3, 2, 2, 2, 1670, 1394, 3, 2, 2, 2, 1670, 1398, 3, 2, 2, 2, 1670, 1402, 3, 2, 2, 2, 1670, 1406, 3, 2, 2, 2, 1670, 1409, 3, 2, 2, 2, 1670, 1412, 3, 2, 2, 2, 1670, 1415, 3, 2, 2, 2, 1670, 1418, 3, 2, 2, 2, 1670, 1421, 3, 2, 2, 2, 1670, 1425, 3, 2, 2, 2, 1670, 1429, 3, 2, 2, 2, 1670, 1433, 3, 2, 2, 2, 1670, 1437, 3, 2, 2, 2, 1670, 1441, 3, 2, 2, 2, 1670, 1445, 3, 2, 2, 2, 1670, 1449, 3, 2, 2, 2, 1670, 1453, 3, 2, 2, 2, 1670, 1457, 3, 2, 2, 2, 1670, 1461, 3, 2, 2, 2, 1670, 1465, 3, 2, 2, 2, 1670, 1469, 3, 2, 2, 2, 1670, 1473, 3, 2, 2, 2, 1670, 1477, 3, 2, 2, 2, 1670, 1481, 3, 2, 2, 2, 1670, 1485, 3, 2, 2, 2, 1670, 1488, 3, 2, 2, 2, 1670, 1491, 3, 2, 2, 2, 1670, 1494, 3, 2, 2, 2, 1670, 1497, 3, 2, 2, 2, 1670, 1500, 3, 2, 2, 2, 1670, 1503, 3, 2, 2, 2, 1670, 1506, 3, 2, 2, 2, 1670, 1509, 3, 2, 2, 2, 1670, 1513, 3, 2, 2, 2, 1670, 1516, 3, 2, 2, 2, 1670, 1519, 3, 2, 2, 2, 1670, 1523, 3, 2, 2, 2, 1670, 1526, 3, 2, 2, 2, 1670, 1529, 3, 2, 2, 2, 1670, 1532, 3, 2, 2, 2, 1670, 1535, 3, 2, 2, 2, 1670, 1539, 3, 2, 2, 2, 1670, 1542, 3, 2, 2, 2, 1670, 1545, 3, 2, 2, 2, 1670, 1548, 3, 2, 2, 2, 1670, 1552, 3, 2, 2, 2, 1670, 1555, 3, 2, 2, 2, 1670, 1559, 3, 2, 2, 2, 1670, 1562, 3, 2, 2, 2, 1670, 1566, 3, 2, 2, 2, 1670, 1570, 3, 2, 2, 2, 1670, 1573, 3, 2, 2, 2, 1670, 1577, 3, 2, 2, 2, 1670, 1580, 3, 2, 2, 2, 1670, 1583, 3, 2, 2, 2, 1670, 1586, 3, 2, 2, 2, 1670, 1590, 3, 2, 2, 2, 1670, 1593, 3, 2, 2, 2, 1670, 1596, 3, 2, 2, 2, 1670, 1599, 3, 2, 2, 2, 1670, 1603, 3, 2, 2, 2, 1670, 1606, 3, 2, 2, 2, 1670, 1609, 3, 2, 2, 2, 1670, 1612, 3, 2, 2, 2, 1670, 1616, 3, 2, 2, 2, 1670, 1620, 3, 2, 2, 2, 1670, 1624, 3, 2, 2, 2, 1670, 1628, 3, 2, 2, 2, 1670, 1632, 3, 2, 2, 2, 1670, 1635, 3, 2, 2, 2, 1670, 1638, 3, 2, 2, 2, 1670, 1642, 3, 2, 2, 2, 1670, 1645, 3, 2, 2, 2, 1670, 1648, 3, 2, 2, 2, 1670, 1652, 3, 2, 2, 2, 1670, 1655, 3, 2, 2, 2, 1670, 1659, 3, 2, 2, 2, 1670, 1663, 3, 2, 2, 2, 1670, 1667, 3, 2, 2, 2, 1671, 240, 3, 2, 2, 2, 1672, 1673, 7, 37, 2, 2, 1673, 242, 3, 2, 2, 2, 1674, 1675, 7, 60, 2, 2, 1675, 244, 3, 2, 2, 2, 1676, 1677, 7, 46, 2, 2, 1677, 246, 3, 2, 2, 2, 1678, 1679, 7, 42, 2, 2, 1679, 248, 3, 2, 2, 2, 1680, 1681, 7, 43, 2, 2, 1681, 250, 3, 2, 2, 2, 1682, 1683, 7, 93, 2, 2, 1683, 252, 3, 2, 2, 2, 1684, 1685, 7, 95, 2, 2, 1685, 254, 3, 2, 2, 2, 1686, 1687, 7, 48, 2, 2, 1687, 256, 3, 2, 2, 2, 1688, 1689, 7, 62, 2, 2, 1689, 1690, 7, 62, 2, 2, 1690, 258, 3, 2, 2, 2, 1691, 1692, 7, 64, 2, 2, 1692, 1693, 7, 64, 2, 2, 1693, 260, 3, 2, 2, 2, 1694, 1695, 7, 45, 2, 2, 1695, 262, 3, 2, 2, 2, 1696, 1697, 7, 47, 2, 2, 1697, 264, 3, 2, 2, 2, 1698, 1699, 7, 62, 2, 2, 1699, 266, 3, 2, 2, 2, 1700, 1701, 7, 64, 2, 2, 1701, 268, 3, 2, 2, 2, 1702, 1703, 7, 44, 2, 2, 1703, 270, 3, 2, 2, 2, 1704, 1705, 7, 49, 2, 2, 1705, 272, 3, 2, 2, 2, 1706, 1707, 7, 125, 2, 2, 1707, 1708, 8, 136, 9, 2, 1708, 274, 3, 2, 2, 2, 1709, 1710, 7, 127, 2, 2, 1710, 1711, 8, 137, 10, 2, 1711, 276, 3, 2, 2, 2, 1712, 1715, 5, 279, 139, 2, 1713, 1715, 5, 287, 143, 2, 1714, 1712, 3, 2, 2, 2, 1714, 1713, 3, 2, 2, 2, 1715, 278, 3, 2, 2, 2, 1716, 1720, 5, 281, 140, 2, 1717, 1720, 5, 283, 141, 2, 1718, 1720, 5, 285, 142, 2, 1719, 1716, 3, 2, 2, 2, 1719, 1717, 3, 2, 2, 2, 1719, 1718, 3, 2, 2, 2, 1720, 280, 3, 2, 2, 2, 1721, 1725, 7, 39, 2, 2, 1722, 1724, 5, 295, 147, 2, 1723, 1722, 3, 2, 2, 2, 1724, 1727, 3, 2, 2, 2, 1725, 1723, 3, 2, 2, 2, 1725, 1726, 3, 2, 2, 2, 1726, 1728, 3, 2, 2, 2, 1727, 1725, 3, 2, 2, 2, 1728, 1730, 7, 48, 2, 2, 1729, 1731, 5, 295, 147, 2, 1730, 1729, 3, 2, 2, 2, 1731, 1732, 3, 2, 2, 2, 1732, 1730, 3, 2, 2, 2, 1732, 1733, 3, 2, 2, 2, 1733, 282, 3, 2, 2, 2, 1734, 1736, 5, 297, 148, 2, 1735, 1734, 3, 2, 2, 2, 1736, 1739, 3, 2, 2, 2, 1737, 1735, 3, 2, 2, 2, 1737, 1738, 3, 2, 2, 2, 1738, 1740, 3, 2, 2, 2, 1739, 1737, 3, 2, 2, 2, 1740, 1742, 7, 48, 2, 2, 1741, 1743, 5, 297, 148, 2, 1742, 1741, 3, 2, 2, 2, 1743, 1744, 3, 2, 2, 2, 1744, 1742, 3, 2, 2, 2, 1744, 1745, 3, 2, 2, 2, 1745, 284, 3, 2, 2, 2, 1746, 1750, 7, 38, 2, 2, 1747, 1749, 5, 299, 149, 2, 1748, 1747, 3, 2, 2, 2, 1749, 1752, 3, 2, 2, 2, 1750, 1748, 3, 2, 2, 2, 1750, 1751, 3, 2, 2, 2, 1751, 1753, 3, 2, 2, 2, 1752, 1750, 3, 2, 2, 2, 1753, 1755, 7, 48, 2, 2, 1754, 1756, 5, 299, 149, 2, 1755, 1754, 3, 2, 2, 2, 1756, 1757, 3, 2, 2, 2, 1757, 1755, 3, 2, 2, 2, 1757, 1758, 3, 2, 2, 2, 1758, 286, 3, 2, 2, 2, 1759, 1763, 5, 291, 145, 2, 1760, 1763, 5, 293, 146, 2, 1761, 1763, 5, 289, 144, 2, 1762, 1759, 3, 2, 2, 2, 1762, 1760, 3, 2, 2, 2, 1762, 1761, 3, 2, 2, 2, 1763, 288, 3, 2, 2, 2, 1764, 1766, 7, 39, 2, 2, 1765, 1767, 5, 295, 147, 2, 1766, 1765, 3, 2, 2, 2, 1767, 1768, 3, 2, 2, 2, 1768, 1766, 3, 2, 2, 2, 1768, 1769, 3, 2, 2, 2, 1769, 290, 3, 2, 2, 2, 1770, 1772, 5, 297, 148, 2, 1771, 1770, 3, 2, 2, 2, 1772, 1773, 3, 2, 2, 2, 1773, 1771, 3, 2, 2, 2, 1773, 1774, 3, 2, 2, 2, 1774, 292, 3, 2, 2, 2, 1775, 1777, 7, 38, 2, 2, 1776, 1778, 5, 299, 149, 2, 1777, 1776, 3, 2, 2, 2, 1778, 1779, 3, 2, 2, 2, 1779, 1777, 3, 2, 2, 2, 1779, 1780, 3, 2, 2, 2, 1780, 294, 3, 2, 2, 2, 1781, 1782, 9, 5, 2, 2, 1782, 296, 3, 2, 2, 2, 1783, 1784, 9, 6, 2, 2, 1784, 298, 3, 2, 2, 2, 1785, 1786, 9, 7, 2, 2, 1786, 300, 3, 2, 2, 2, 1787, 1791, 7, 41, 2, 2, 1788, 1789, 7, 94, 2, 2, 1789, 1792, 9, 14, 2, 2, 1790, 1792, 10, 16, 2, 2, 1791, 1788, 3, 2, 2, 2, 1791, 1790, 3, 2, 2, 2, 1792, 1793, 3, 2, 2, 2, 1793, 1794, 7, 41, 2, 2, 1794, 302, 3, 2, 2, 2, 1795, 1797, 5, 305, 152, 2, 1796, 1798, 9, 19, 2, 2, 1797, 1796, 3, 2, 2, 2, 1798, 1799, 3, 2, 2, 2, 1799, 1797, 3, 2, 2, 2, 1799, 1800, 3, 2, 2, 2, 1800, 304, 3, 2, 2, 2, 1801, 1805, 7, 35, 2, 2, 1802, 1804, 5, 311, 155, 2, 1803, 1802, 3, 2, 2, 2, 1804, 1807, 3, 2, 2, 2, 1805, 1803, 3, 2, 2, 2, 1805, 1806, 3, 2, 2, 2, 1806, 306, 3, 2, 2, 2, 1807, 1805, 3, 2, 2, 2, 1808, 1812, 5, 309, 154, 2, 1809, 1811, 5, 311, 155, 2, 1810, 1809, 3, 2, 2, 2, 1811, 1814, 3, 2, 2, 2, 1812, 1810, 3, 2, 2, 2, 1812, 1813, 3, 2, 2, 2, 1813, 308, 3, 2, 2, 2, 1814, 1812, 3, 2, 2, 2, 1815, 1816, 9, 8, 2, 2, 1816, 310, 3, 2, 2, 2, 1817, 1818, 9, 9, 2, 2, 1818, 312, 3, 2, 2, 2, 1819, 1821, 9, 17, 2, 2, 1820, 1819, 3, 2, 2, 2, 1821, 1822, 3, 2, 2, 2, 1822, 1820, 3, 2, 2, 2, 1822, 1823, 3, 2, 2, 2, 1823, 1824, 3, 2, 2, 2, 1824, 1825, 8, 156, 7, 2, 1825, 314, 3, 2, 2, 2, 1826, 1827, 7, 49, 2, 2, 1827, 1828, 7, 49, 2, 2, 1828, 1832, 3, 2, 2, 2, 1829, 1831, 10, 18, 2, 2, 1830, 1829, 3, 2, 2, 2, 1831, 1834, 3, 2, 2, 2, 1832, 1830, 3, 2, 2, 2, 1832, 1833, 3, 2, 2, 2, 1833, 1835, 3, 2, 2, 2, 1834, 1832, 3, 2, 2, 2, 1835, 1836, 8, 157, 8, 2, 1836, 316, 3, 2, 2, 2, 1837, 1838, 7, 49, 2, 2, 1838, 1839, 7, 44, 2, 2, 1839, 1843, 3, 2, 2, 2, 1840, 1842, 11, 2, 2, 2, 1841, 1840, 3, 2, 2, 2, 1842, 1845, 3, 2, 2, 2, 1843, 1844, 3, 2, 2, 2, 1843, 1841, 3, 2, 2, 2, 1844, 1846, 3, 2, 2, 2, 1845, 1843, 3, 2, 2, 2, 1846, 1847, 7, 44, 2, 2, 1847, 1848, 7, 49, 2, 2, 1848, 1849, 3, 2, 2, 2, 1849, 1850, 8, 158, 8, 2, 1850, 318, 3, 2, 2, 2, 1851, 1853, 7, 62, 2, 2, 1852, 1854, 9, 20, 2, 2, 1853, 1852, 3, 2, 2, 2, 1854, 1855, 3, 2, 2, 2, 1855, 1853, 3, 2, 2, 2, 1855, 1856, 3, 2, 2, 2, 1856, 1857, 3, 2, 2, 2, 1857, 1858, 7, 64, 2, 2, 1858, 1859, 8, 159, 11, 2, 1859, 320, 3, 2, 2, 2, 1860, 1866, 7, 36, 2, 2, 1861, 1862, 7, 94, 2, 2, 1862, 1865, 7, 36, 2, 2, 1863, 1865, 10, 10, 2, 2, 1864, 1861, 3, 2, 2, 2, 1864, 1863, 3, 2, 2, 2, 1865, 1868, 3, 2, 2, 2, 1866, 1864, 3, 2, 2, 2, 1866, 1867, 3, 2, 2, 2, 1867, 1869, 3, 2, 2, 2, 1868, 1866, 3, 2, 2, 2, 1869, 1870, 7, 36, 2, 2, 1870, 1871, 8, 160, 12, 2, 1871, 322, 3, 2, 2, 2, 1872, 1874, 9, 17, 2, 2, 1873, 1872, 3, 2, 2, 2, 1874, 1875, 3, 2, 2, 2, 1875, 1873, 3, 2, 2, 2, 1875, 1876, 3, 2, 2, 2, 1876, 1877, 3, 2, 2, 2, 1877, 1878, 8, 161, 7, 2, 1878, 324, 3, 2, 2, 2, 1879, 1880, 7, 49, 2, 2, 1880, 1881, 7, 49, 2, 2, 1881, 1885, 3, 2, 2, 2, 1882, 1884, 10, 18, 2, 2, 1883, 1882, 3, 2, 2, 2, 1884, 1887, 3, 2, 2, 2, 1885, 1883, 3, 2, 2, 2, 1885, 1886, 3, 2, 2, 2, 1886, 1888, 3, 2, 2, 2, 1887, 1885, 3, 2, 2, 2, 1888, 1889, 8, 162, 8, 2, 1889, 326, 3, 2, 2, 2, 1890, 1891, 7, 49, 2, 2, 1891, 1892, 7, 44, 2, 2, 1892, 1896, 3, 2, 2, 2, 1893, 1895, 11, 2, 2, 2, 1894, 1893, 3, 2, 2, 2, 1895, 1898, 3, 2, 2, 2, 1896, 1897, 3, 2, 2, 2, 1896, 1894, 3, 2, 2, 2, 1897, 1899, 3, 2, 2, 2, 1898, 1896, 3, 2, 2, 2, 1899, 1900, 7, 44, 2, 2, 1900, 1901, 7, 49, 2, 2, 1901, 1902, 3, 2, 2, 2, 1902, 1903, 8, 163, 8, 2, 1903, 328, 3, 2, 2, 2, 68, 2, 3, 4, 438, 602, 767, 806, 817, 825, 873, 929, 934, 941, 946, 953, 958, 965, 972, 977, 984, 989, 994, 1001, 1007, 1009, 1014, 1021, 1026, 1038, 1051, 1053, 1058, 1062, 1064, 1067, 1075, 1078, 1085, 1095, 1106, 1670, 1714, 1719, 1725, 1732, 1737, 1744, 1750, 1757, 1762, 1768, 1773, 1779, 1791, 1799, 1805, 1812, 1822, 1832, 1843, 1855, 1864, 1866, 1875, 1885, 1896, 13, 3, 2, 2, 3, 66, 3, 3, 85, 4, 3, 86, 5, 3, 110, 6, 2, 3, 2, 2, 4, 2, 3, 136, 7, 3, 137, 8, 3, 159, 9, 3, 160, 10] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 155, 1906, 8, 1, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 439, 10, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 605, 10, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 770, 10, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 5, 82, 809, 10, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 5, 83, 820, 10, 83, 3, 84, 3, 84, 3, 84, 3, 84, 7, 84, 826, 10, 84, 12, 84, 14, 84, 829, 11, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 5, 89, 876, 10, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 5, 98, 932, 10, 98, 3, 99, 3, 99, 3, 99, 5, 99, 937, 10, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 5, 100, 944, 10, 100, 3, 100, 7, 100, 947, 10, 100, 12, 100, 14, 100, 950, 11, 100, 3, 100, 3, 100, 6, 100, 954, 10, 100, 13, 100, 14, 100, 955, 3, 101, 7, 101, 959, 10, 101, 12, 101, 14, 101, 962, 11, 101, 3, 101, 3, 101, 6, 101, 966, 10, 101, 13, 101, 14, 101, 967, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 5, 102, 975, 10, 102, 3, 102, 7, 102, 978, 10, 102, 12, 102, 14, 102, 981, 11, 102, 3, 102, 3, 102, 6, 102, 985, 10, 102, 13, 102, 14, 102, 986, 3, 103, 3, 103, 3, 103, 5, 103, 992, 10, 103, 3, 103, 3, 103, 3, 103, 5, 103, 997, 10, 103, 3, 104, 3, 104, 3, 104, 6, 104, 1002, 10, 104, 13, 104, 14, 104, 1003, 3, 104, 3, 104, 6, 104, 1008, 10, 104, 13, 104, 14, 104, 1009, 5, 104, 1012, 10, 104, 3, 105, 6, 105, 1015, 10, 105, 13, 105, 14, 105, 1016, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 5, 106, 1024, 10, 106, 3, 106, 6, 106, 1027, 10, 106, 13, 106, 14, 106, 1028, 3, 107, 3, 107, 3, 108, 3, 108, 3, 109, 3, 109, 3, 110, 3, 110, 7, 110, 1039, 10, 110, 12, 110, 14, 110, 1042, 11, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 113, 7, 113, 1054, 10, 113, 12, 113, 14, 113, 1057, 11, 113, 3, 113, 3, 113, 5, 113, 1061, 10, 113, 3, 113, 3, 113, 5, 113, 1065, 10, 113, 5, 113, 1067, 10, 113, 3, 113, 5, 113, 1070, 10, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 5, 114, 1078, 10, 114, 3, 114, 5, 114, 1081, 10, 114, 3, 114, 3, 114, 3, 115, 6, 115, 1086, 10, 115, 13, 115, 14, 115, 1087, 3, 115, 3, 115, 3, 116, 3, 116, 3, 116, 3, 116, 7, 116, 1096, 10, 116, 12, 116, 14, 116, 1099, 11, 116, 3, 116, 3, 116, 3, 117, 3, 117, 3, 117, 3, 117, 7, 117, 1107, 10, 117, 12, 117, 14, 117, 1110, 11, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 5, 119, 1673, 10, 119, 3, 120, 3, 120, 3, 121, 3, 121, 3, 122, 3, 122, 3, 123, 3, 123, 3, 124, 3, 124, 3, 125, 3, 125, 3, 126, 3, 126, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, 3, 131, 3, 131, 3, 132, 3, 132, 3, 133, 3, 133, 3, 134, 3, 134, 3, 135, 3, 135, 3, 136, 3, 136, 3, 136, 3, 137, 3, 137, 3, 137, 3, 138, 3, 138, 5, 138, 1717, 10, 138, 3, 139, 3, 139, 3, 139, 5, 139, 1722, 10, 139, 3, 140, 3, 140, 7, 140, 1726, 10, 140, 12, 140, 14, 140, 1729, 11, 140, 3, 140, 3, 140, 6, 140, 1733, 10, 140, 13, 140, 14, 140, 1734, 3, 141, 7, 141, 1738, 10, 141, 12, 141, 14, 141, 1741, 11, 141, 3, 141, 3, 141, 6, 141, 1745, 10, 141, 13, 141, 14, 141, 1746, 3, 142, 3, 142, 7, 142, 1751, 10, 142, 12, 142, 14, 142, 1754, 11, 142, 3, 142, 3, 142, 6, 142, 1758, 10, 142, 13, 142, 14, 142, 1759, 3, 143, 3, 143, 3, 143, 5, 143, 1765, 10, 143, 3, 144, 3, 144, 6, 144, 1769, 10, 144, 13, 144, 14, 144, 1770, 3, 145, 6, 145, 1774, 10, 145, 13, 145, 14, 145, 1775, 3, 146, 3, 146, 6, 146, 1780, 10, 146, 13, 146, 14, 146, 1781, 3, 147, 3, 147, 3, 148, 3, 148, 3, 149, 3, 149, 3, 150, 3, 150, 3, 150, 3, 150, 5, 150, 1794, 10, 150, 3, 150, 3, 150, 3, 151, 3, 151, 6, 151, 1800, 10, 151, 13, 151, 14, 151, 1801, 3, 152, 3, 152, 7, 152, 1806, 10, 152, 12, 152, 14, 152, 1809, 11, 152, 3, 153, 3, 153, 7, 153, 1813, 10, 153, 12, 153, 14, 153, 1816, 11, 153, 3, 154, 3, 154, 3, 155, 3, 155, 3, 156, 6, 156, 1823, 10, 156, 13, 156, 14, 156, 1824, 3, 156, 3, 156, 3, 157, 3, 157, 3, 157, 3, 157, 7, 157, 1833, 10, 157, 12, 157, 14, 157, 1836, 11, 157, 3, 157, 3, 157, 3, 158, 3, 158, 3, 158, 3, 158, 7, 158, 1844, 10, 158, 12, 158, 14, 158, 1847, 11, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 159, 3, 159, 6, 159, 1856, 10, 159, 13, 159, 14, 159, 1857, 3, 159, 3, 159, 3, 159, 3, 160, 3, 160, 3, 160, 3, 160, 7, 160, 1867, 10, 160, 12, 160, 14, 160, 1870, 11, 160, 3, 160, 3, 160, 3, 160, 3, 161, 6, 161, 1876, 10, 161, 13, 161, 14, 161, 1877, 3, 161, 3, 161, 3, 162, 3, 162, 3, 162, 3, 162, 7, 162, 1886, 10, 162, 12, 162, 14, 162, 1889, 11, 162, 3, 162, 3, 162, 3, 163, 3, 163, 3, 163, 3, 163, 7, 163, 1897, 10, 163, 12, 163, 14, 163, 1900, 11, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 6, 827, 1108, 1845, 1898, 2, 164, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 77, 153, 78, 155, 79, 157, 80, 159, 81, 161, 82, 163, 83, 165, 84, 167, 85, 169, 86, 171, 87, 173, 88, 175, 89, 177, 90, 179, 91, 181, 92, 183, 93, 185, 94, 187, 95, 189, 96, 191, 97, 193, 98, 195, 99, 197, 100, 199, 101, 201, 102, 203, 103, 205, 104, 207, 105, 209, 106, 211, 107, 213, 108, 215, 2, 217, 2, 219, 2, 221, 109, 223, 2, 225, 2, 227, 110, 229, 111, 231, 112, 233, 113, 235, 114, 237, 115, 239, 116, 241, 117, 243, 118, 245, 119, 247, 120, 249, 121, 251, 122, 253, 123, 255, 124, 257, 125, 259, 126, 261, 127, 263, 128, 265, 129, 267, 130, 269, 131, 271, 132, 273, 133, 275, 134, 277, 135, 279, 136, 281, 137, 283, 138, 285, 139, 287, 140, 289, 141, 291, 142, 293, 143, 295, 2, 297, 2, 299, 2, 301, 144, 303, 145, 305, 146, 307, 147, 309, 2, 311, 2, 313, 148, 315, 149, 317, 150, 319, 151, 321, 152, 323, 153, 325, 154, 327, 155, 5, 2, 3, 4, 21, 4, 2, 117, 117, 119, 119, 7, 2, 100, 102, 107, 107, 110, 110, 117, 117, 121, 121, 4, 2, 68, 68, 100, 100, 3, 2, 50, 51, 3, 2, 50, 59, 5, 2, 50, 59, 67, 72, 99, 104, 5, 2, 67, 92, 97, 97, 99, 124, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 3, 2, 36, 36, 3, 2, 124, 124, 5, 2, 99, 99, 114, 114, 117, 117, 5, 2, 99, 99, 111, 111, 117, 119, 7, 2, 36, 36, 41, 41, 104, 104, 112, 112, 116, 116, 4, 2, 50, 59, 99, 104, 3, 2, 41, 41, 6, 2, 11, 12, 15, 15, 34, 34, 162, 162, 4, 2, 12, 12, 15, 15, 4, 2, 45, 45, 47, 47, 7, 2, 47, 59, 67, 92, 94, 94, 97, 97, 99, 124, 2, 2144, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 2, 179, 3, 2, 2, 2, 2, 181, 3, 2, 2, 2, 2, 183, 3, 2, 2, 2, 2, 185, 3, 2, 2, 2, 2, 187, 3, 2, 2, 2, 2, 189, 3, 2, 2, 2, 2, 191, 3, 2, 2, 2, 2, 193, 3, 2, 2, 2, 2, 195, 3, 2, 2, 2, 2, 197, 3, 2, 2, 2, 2, 199, 3, 2, 2, 2, 2, 201, 3, 2, 2, 2, 2, 203, 3, 2, 2, 2, 2, 205, 3, 2, 2, 2, 2, 207, 3, 2, 2, 2, 2, 209, 3, 2, 2, 2, 2, 211, 3, 2, 2, 2, 2, 213, 3, 2, 2, 2, 2, 221, 3, 2, 2, 2, 2, 227, 3, 2, 2, 2, 2, 229, 3, 2, 2, 2, 2, 231, 3, 2, 2, 2, 2, 233, 3, 2, 2, 2, 2, 235, 3, 2, 2, 2, 3, 237, 3, 2, 2, 2, 3, 239, 3, 2, 2, 2, 3, 241, 3, 2, 2, 2, 3, 243, 3, 2, 2, 2, 3, 245, 3, 2, 2, 2, 3, 247, 3, 2, 2, 2, 3, 249, 3, 2, 2, 2, 3, 251, 3, 2, 2, 2, 3, 253, 3, 2, 2, 2, 3, 255, 3, 2, 2, 2, 3, 257, 3, 2, 2, 2, 3, 259, 3, 2, 2, 2, 3, 261, 3, 2, 2, 2, 3, 263, 3, 2, 2, 2, 3, 265, 3, 2, 2, 2, 3, 267, 3, 2, 2, 2, 3, 269, 3, 2, 2, 2, 3, 271, 3, 2, 2, 2, 3, 273, 3, 2, 2, 2, 3, 275, 3, 2, 2, 2, 3, 277, 3, 2, 2, 2, 3, 279, 3, 2, 2, 2, 3, 281, 3, 2, 2, 2, 3, 283, 3, 2, 2, 2, 3, 285, 3, 2, 2, 2, 3, 287, 3, 2, 2, 2, 3, 289, 3, 2, 2, 2, 3, 291, 3, 2, 2, 2, 3, 293, 3, 2, 2, 2, 3, 301, 3, 2, 2, 2, 3, 303, 3, 2, 2, 2, 3, 305, 3, 2, 2, 2, 3, 307, 3, 2, 2, 2, 3, 313, 3, 2, 2, 2, 3, 315, 3, 2, 2, 2, 3, 317, 3, 2, 2, 2, 4, 319, 3, 2, 2, 2, 4, 321, 3, 2, 2, 2, 4, 323, 3, 2, 2, 2, 4, 325, 3, 2, 2, 2, 4, 327, 3, 2, 2, 2, 5, 329, 3, 2, 2, 2, 7, 332, 3, 2, 2, 2, 9, 334, 3, 2, 2, 2, 11, 336, 3, 2, 2, 2, 13, 338, 3, 2, 2, 2, 15, 340, 3, 2, 2, 2, 17, 342, 3, 2, 2, 2, 19, 344, 3, 2, 2, 2, 21, 346, 3, 2, 2, 2, 23, 348, 3, 2, 2, 2, 25, 351, 3, 2, 2, 2, 27, 355, 3, 2, 2, 2, 29, 357, 3, 2, 2, 2, 31, 359, 3, 2, 2, 2, 33, 362, 3, 2, 2, 2, 35, 364, 3, 2, 2, 2, 37, 366, 3, 2, 2, 2, 39, 368, 3, 2, 2, 2, 41, 370, 3, 2, 2, 2, 43, 372, 3, 2, 2, 2, 45, 375, 3, 2, 2, 2, 47, 378, 3, 2, 2, 2, 49, 380, 3, 2, 2, 2, 51, 382, 3, 2, 2, 2, 53, 384, 3, 2, 2, 2, 55, 386, 3, 2, 2, 2, 57, 389, 3, 2, 2, 2, 59, 392, 3, 2, 2, 2, 61, 395, 3, 2, 2, 2, 63, 398, 3, 2, 2, 2, 65, 400, 3, 2, 2, 2, 67, 403, 3, 2, 2, 2, 69, 406, 3, 2, 2, 2, 71, 408, 3, 2, 2, 2, 73, 411, 3, 2, 2, 2, 75, 414, 3, 2, 2, 2, 77, 438, 3, 2, 2, 2, 79, 440, 3, 2, 2, 2, 81, 448, 3, 2, 2, 2, 83, 454, 3, 2, 2, 2, 85, 461, 3, 2, 2, 2, 87, 468, 3, 2, 2, 2, 89, 474, 3, 2, 2, 2, 91, 481, 3, 2, 2, 2, 93, 490, 3, 2, 2, 2, 95, 497, 3, 2, 2, 2, 97, 509, 3, 2, 2, 2, 99, 518, 3, 2, 2, 2, 101, 531, 3, 2, 2, 2, 103, 541, 3, 2, 2, 2, 105, 546, 3, 2, 2, 2, 107, 552, 3, 2, 2, 2, 109, 558, 3, 2, 2, 2, 111, 563, 3, 2, 2, 2, 113, 604, 3, 2, 2, 2, 115, 606, 3, 2, 2, 2, 117, 609, 3, 2, 2, 2, 119, 614, 3, 2, 2, 2, 121, 620, 3, 2, 2, 2, 123, 623, 3, 2, 2, 2, 125, 627, 3, 2, 2, 2, 127, 634, 3, 2, 2, 2, 129, 641, 3, 2, 2, 2, 131, 647, 3, 2, 2, 2, 133, 656, 3, 2, 2, 2, 135, 662, 3, 2, 2, 2, 137, 670, 3, 2, 2, 2, 139, 675, 3, 2, 2, 2, 141, 682, 3, 2, 2, 2, 143, 687, 3, 2, 2, 2, 145, 694, 3, 2, 2, 2, 147, 701, 3, 2, 2, 2, 149, 709, 3, 2, 2, 2, 151, 717, 3, 2, 2, 2, 153, 726, 3, 2, 2, 2, 155, 731, 3, 2, 2, 2, 157, 740, 3, 2, 2, 2, 159, 746, 3, 2, 2, 2, 161, 753, 3, 2, 2, 2, 163, 769, 3, 2, 2, 2, 165, 808, 3, 2, 2, 2, 167, 819, 3, 2, 2, 2, 169, 821, 3, 2, 2, 2, 171, 833, 3, 2, 2, 2, 173, 843, 3, 2, 2, 2, 175, 854, 3, 2, 2, 2, 177, 862, 3, 2, 2, 2, 179, 875, 3, 2, 2, 2, 181, 877, 3, 2, 2, 2, 183, 884, 3, 2, 2, 2, 185, 891, 3, 2, 2, 2, 187, 899, 3, 2, 2, 2, 189, 903, 3, 2, 2, 2, 191, 909, 3, 2, 2, 2, 193, 915, 3, 2, 2, 2, 195, 922, 3, 2, 2, 2, 197, 931, 3, 2, 2, 2, 199, 936, 3, 2, 2, 2, 201, 943, 3, 2, 2, 2, 203, 960, 3, 2, 2, 2, 205, 974, 3, 2, 2, 2, 207, 991, 3, 2, 2, 2, 209, 1011, 3, 2, 2, 2, 211, 1014, 3, 2, 2, 2, 213, 1023, 3, 2, 2, 2, 215, 1030, 3, 2, 2, 2, 217, 1032, 3, 2, 2, 2, 219, 1034, 3, 2, 2, 2, 221, 1036, 3, 2, 2, 2, 223, 1045, 3, 2, 2, 2, 225, 1047, 3, 2, 2, 2, 227, 1049, 3, 2, 2, 2, 229, 1071, 3, 2, 2, 2, 231, 1085, 3, 2, 2, 2, 233, 1091, 3, 2, 2, 2, 235, 1102, 3, 2, 2, 2, 237, 1116, 3, 2, 2, 2, 239, 1672, 3, 2, 2, 2, 241, 1674, 3, 2, 2, 2, 243, 1676, 3, 2, 2, 2, 245, 1678, 3, 2, 2, 2, 247, 1680, 3, 2, 2, 2, 249, 1682, 3, 2, 2, 2, 251, 1684, 3, 2, 2, 2, 253, 1686, 3, 2, 2, 2, 255, 1688, 3, 2, 2, 2, 257, 1690, 3, 2, 2, 2, 259, 1693, 3, 2, 2, 2, 261, 1696, 3, 2, 2, 2, 263, 1698, 3, 2, 2, 2, 265, 1700, 3, 2, 2, 2, 267, 1702, 3, 2, 2, 2, 269, 1704, 3, 2, 2, 2, 271, 1706, 3, 2, 2, 2, 273, 1708, 3, 2, 2, 2, 275, 1711, 3, 2, 2, 2, 277, 1716, 3, 2, 2, 2, 279, 1721, 3, 2, 2, 2, 281, 1723, 3, 2, 2, 2, 283, 1739, 3, 2, 2, 2, 285, 1748, 3, 2, 2, 2, 287, 1764, 3, 2, 2, 2, 289, 1766, 3, 2, 2, 2, 291, 1773, 3, 2, 2, 2, 293, 1777, 3, 2, 2, 2, 295, 1783, 3, 2, 2, 2, 297, 1785, 3, 2, 2, 2, 299, 1787, 3, 2, 2, 2, 301, 1789, 3, 2, 2, 2, 303, 1797, 3, 2, 2, 2, 305, 1803, 3, 2, 2, 2, 307, 1810, 3, 2, 2, 2, 309, 1817, 3, 2, 2, 2, 311, 1819, 3, 2, 2, 2, 313, 1822, 3, 2, 2, 2, 315, 1828, 3, 2, 2, 2, 317, 1839, 3, 2, 2, 2, 319, 1853, 3, 2, 2, 2, 321, 1862, 3, 2, 2, 2, 323, 1875, 3, 2, 2, 2, 325, 1881, 3, 2, 2, 2, 327, 1892, 3, 2, 2, 2, 329, 330, 7, 125, 2, 2, 330, 331, 8, 2, 2, 2, 331, 6, 3, 2, 2, 2, 332, 333, 7, 127, 2, 2, 333, 8, 3, 2, 2, 2, 334, 335, 7, 93, 2, 2, 335, 10, 3, 2, 2, 2, 336, 337, 7, 95, 2, 2, 337, 12, 3, 2, 2, 2, 338, 339, 7, 42, 2, 2, 339, 14, 3, 2, 2, 2, 340, 341, 7, 43, 2, 2, 341, 16, 3, 2, 2, 2, 342, 343, 7, 61, 2, 2, 343, 18, 3, 2, 2, 2, 344, 345, 7, 60, 2, 2, 345, 20, 3, 2, 2, 2, 346, 347, 7, 46, 2, 2, 347, 22, 3, 2, 2, 2, 348, 349, 7, 48, 2, 2, 349, 350, 7, 48, 2, 2, 350, 24, 3, 2, 2, 2, 351, 352, 7, 48, 2, 2, 352, 353, 7, 48, 2, 2, 353, 354, 7, 48, 2, 2, 354, 26, 3, 2, 2, 2, 355, 356, 7, 65, 2, 2, 356, 28, 3, 2, 2, 2, 357, 358, 7, 48, 2, 2, 358, 30, 3, 2, 2, 2, 359, 360, 7, 47, 2, 2, 360, 361, 7, 64, 2, 2, 361, 32, 3, 2, 2, 2, 362, 363, 7, 45, 2, 2, 363, 34, 3, 2, 2, 2, 364, 365, 7, 47, 2, 2, 365, 36, 3, 2, 2, 2, 366, 367, 7, 44, 2, 2, 367, 38, 3, 2, 2, 2, 368, 369, 7, 49, 2, 2, 369, 40, 3, 2, 2, 2, 370, 371, 7, 39, 2, 2, 371, 42, 3, 2, 2, 2, 372, 373, 7, 45, 2, 2, 373, 374, 7, 45, 2, 2, 374, 44, 3, 2, 2, 2, 375, 376, 7, 47, 2, 2, 376, 377, 7, 47, 2, 2, 377, 46, 3, 2, 2, 2, 378, 379, 7, 40, 2, 2, 379, 48, 3, 2, 2, 2, 380, 381, 7, 128, 2, 2, 381, 50, 3, 2, 2, 2, 382, 383, 7, 96, 2, 2, 383, 52, 3, 2, 2, 2, 384, 385, 7, 126, 2, 2, 385, 54, 3, 2, 2, 2, 386, 387, 7, 62, 2, 2, 387, 388, 7, 62, 2, 2, 388, 56, 3, 2, 2, 2, 389, 390, 7, 64, 2, 2, 390, 391, 7, 64, 2, 2, 391, 58, 3, 2, 2, 2, 392, 393, 7, 63, 2, 2, 393, 394, 7, 63, 2, 2, 394, 60, 3, 2, 2, 2, 395, 396, 7, 35, 2, 2, 396, 397, 7, 63, 2, 2, 397, 62, 3, 2, 2, 2, 398, 399, 7, 62, 2, 2, 399, 64, 3, 2, 2, 2, 400, 401, 7, 62, 2, 2, 401, 402, 7, 63, 2, 2, 402, 66, 3, 2, 2, 2, 403, 404, 7, 64, 2, 2, 404, 405, 7, 63, 2, 2, 405, 68, 3, 2, 2, 2, 406, 407, 7, 64, 2, 2, 407, 70, 3, 2, 2, 2, 408, 409, 7, 40, 2, 2, 409, 410, 7, 40, 2, 2, 410, 72, 3, 2, 2, 2, 411, 412, 7, 126, 2, 2, 412, 413, 7, 126, 2, 2, 413, 74, 3, 2, 2, 2, 414, 415, 7, 63, 2, 2, 415, 76, 3, 2, 2, 2, 416, 417, 7, 45, 2, 2, 417, 439, 7, 63, 2, 2, 418, 419, 7, 47, 2, 2, 419, 439, 7, 63, 2, 2, 420, 421, 7, 44, 2, 2, 421, 439, 7, 63, 2, 2, 422, 423, 7, 49, 2, 2, 423, 439, 7, 63, 2, 2, 424, 425, 7, 39, 2, 2, 425, 439, 7, 63, 2, 2, 426, 427, 7, 62, 2, 2, 427, 428, 7, 62, 2, 2, 428, 439, 7, 63, 2, 2, 429, 430, 7, 64, 2, 2, 430, 431, 7, 64, 2, 2, 431, 439, 7, 63, 2, 2, 432, 433, 7, 40, 2, 2, 433, 439, 7, 63, 2, 2, 434, 435, 7, 126, 2, 2, 435, 439, 7, 63, 2, 2, 436, 437, 7, 96, 2, 2, 437, 439, 7, 63, 2, 2, 438, 416, 3, 2, 2, 2, 438, 418, 3, 2, 2, 2, 438, 420, 3, 2, 2, 2, 438, 422, 3, 2, 2, 2, 438, 424, 3, 2, 2, 2, 438, 426, 3, 2, 2, 2, 438, 429, 3, 2, 2, 2, 438, 432, 3, 2, 2, 2, 438, 434, 3, 2, 2, 2, 438, 436, 3, 2, 2, 2, 439, 78, 3, 2, 2, 2, 440, 441, 7, 118, 2, 2, 441, 442, 7, 123, 2, 2, 442, 443, 7, 114, 2, 2, 443, 444, 7, 103, 2, 2, 444, 445, 7, 102, 2, 2, 445, 446, 7, 103, 2, 2, 446, 447, 7, 104, 2, 2, 447, 80, 3, 2, 2, 2, 448, 449, 7, 101, 2, 2, 449, 450, 7, 113, 2, 2, 450, 451, 7, 112, 2, 2, 451, 452, 7, 117, 2, 2, 452, 453, 7, 118, 2, 2, 453, 82, 3, 2, 2, 2, 454, 455, 7, 103, 2, 2, 455, 456, 7, 122, 2, 2, 456, 457, 7, 118, 2, 2, 457, 458, 7, 103, 2, 2, 458, 459, 7, 116, 2, 2, 459, 460, 7, 112, 2, 2, 460, 84, 3, 2, 2, 2, 461, 462, 7, 103, 2, 2, 462, 463, 7, 122, 2, 2, 463, 464, 7, 114, 2, 2, 464, 465, 7, 113, 2, 2, 465, 466, 7, 116, 2, 2, 466, 467, 7, 118, 2, 2, 467, 86, 3, 2, 2, 2, 468, 469, 7, 99, 2, 2, 469, 470, 7, 110, 2, 2, 470, 471, 7, 107, 2, 2, 471, 472, 7, 105, 2, 2, 472, 473, 7, 112, 2, 2, 473, 88, 3, 2, 2, 2, 474, 475, 7, 107, 2, 2, 475, 476, 7, 112, 2, 2, 476, 477, 7, 110, 2, 2, 477, 478, 7, 107, 2, 2, 478, 479, 7, 112, 2, 2, 479, 480, 7, 103, 2, 2, 480, 90, 3, 2, 2, 2, 481, 482, 7, 120, 2, 2, 482, 483, 7, 113, 2, 2, 483, 484, 7, 110, 2, 2, 484, 485, 7, 99, 2, 2, 485, 486, 7, 118, 2, 2, 486, 487, 7, 107, 2, 2, 487, 488, 7, 110, 2, 2, 488, 489, 7, 103, 2, 2, 489, 92, 3, 2, 2, 2, 490, 491, 7, 117, 2, 2, 491, 492, 7, 118, 2, 2, 492, 493, 7, 99, 2, 2, 493, 494, 7, 118, 2, 2, 494, 495, 7, 107, 2, 2, 495, 496, 7, 101, 2, 2, 496, 94, 3, 2, 2, 2, 497, 498, 7, 97, 2, 2, 498, 499, 7, 97, 2, 2, 499, 500, 7, 107, 2, 2, 500, 501, 7, 112, 2, 2, 501, 502, 7, 118, 2, 2, 502, 503, 7, 103, 2, 2, 503, 504, 7, 116, 2, 2, 504, 505, 7, 116, 2, 2, 505, 506, 7, 119, 2, 2, 506, 507, 7, 114, 2, 2, 507, 508, 7, 118, 2, 2, 508, 96, 3, 2, 2, 2, 509, 510, 7, 116, 2, 2, 510, 511, 7, 103, 2, 2, 511, 512, 7, 105, 2, 2, 512, 513, 7, 107, 2, 2, 513, 514, 7, 117, 2, 2, 514, 515, 7, 118, 2, 2, 515, 516, 7, 103, 2, 2, 516, 517, 7, 116, 2, 2, 517, 98, 3, 2, 2, 2, 518, 519, 7, 97, 2, 2, 519, 520, 7, 97, 2, 2, 520, 521, 7, 124, 2, 2, 521, 522, 7, 114, 2, 2, 522, 523, 7, 97, 2, 2, 523, 524, 7, 116, 2, 2, 524, 525, 7, 103, 2, 2, 525, 526, 7, 117, 2, 2, 526, 527, 7, 103, 2, 2, 527, 528, 7, 116, 2, 2, 528, 529, 7, 120, 2, 2, 529, 530, 7, 103, 2, 2, 530, 100, 3, 2, 2, 2, 531, 532, 7, 97, 2, 2, 532, 533, 7, 97, 2, 2, 533, 534, 7, 99, 2, 2, 534, 535, 7, 102, 2, 2, 535, 536, 7, 102, 2, 2, 536, 537, 7, 116, 2, 2, 537, 538, 7, 103, 2, 2, 538, 539, 7, 117, 2, 2, 539, 540, 7, 117, 2, 2, 540, 102, 3, 2, 2, 2, 541, 542, 7, 97, 2, 2, 542, 543, 7, 97, 2, 2, 543, 544, 7, 124, 2, 2, 544, 545, 7, 114, 2, 2, 545, 104, 3, 2, 2, 2, 546, 547, 7, 97, 2, 2, 547, 548, 7, 97, 2, 2, 548, 549, 7, 111, 2, 2, 549, 550, 7, 103, 2, 2, 550, 551, 7, 111, 2, 2, 551, 106, 3, 2, 2, 2, 552, 553, 7, 97, 2, 2, 553, 554, 7, 97, 2, 2, 554, 555, 7, 117, 2, 2, 555, 556, 7, 117, 2, 2, 556, 557, 7, 99, 2, 2, 557, 108, 3, 2, 2, 2, 558, 559, 7, 97, 2, 2, 559, 560, 7, 97, 2, 2, 560, 561, 7, 111, 2, 2, 561, 562, 7, 99, 2, 2, 562, 110, 3, 2, 2, 2, 563, 564, 7, 97, 2, 2, 564, 565, 7, 97, 2, 2, 565, 566, 7, 107, 2, 2, 566, 567, 7, 112, 2, 2, 567, 568, 7, 118, 2, 2, 568, 569, 7, 116, 2, 2, 569, 570, 7, 107, 2, 2, 570, 571, 7, 112, 2, 2, 571, 572, 7, 117, 2, 2, 572, 573, 7, 107, 2, 2, 573, 574, 7, 101, 2, 2, 574, 112, 3, 2, 2, 2, 575, 576, 7, 97, 2, 2, 576, 577, 7, 97, 2, 2, 577, 578, 7, 117, 2, 2, 578, 579, 7, 118, 2, 2, 579, 580, 7, 99, 2, 2, 580, 581, 7, 101, 2, 2, 581, 582, 7, 109, 2, 2, 582, 583, 7, 101, 2, 2, 583, 584, 7, 99, 2, 2, 584, 585, 7, 110, 2, 2, 585, 605, 7, 110, 2, 2, 586, 587, 7, 97, 2, 2, 587, 588, 7, 97, 2, 2, 588, 589, 7, 114, 2, 2, 589, 590, 7, 106, 2, 2, 590, 591, 7, 107, 2, 2, 591, 592, 7, 101, 2, 2, 592, 593, 7, 99, 2, 2, 593, 594, 7, 110, 2, 2, 594, 605, 7, 110, 2, 2, 595, 596, 7, 97, 2, 2, 596, 597, 7, 97, 2, 2, 597, 598, 7, 120, 2, 2, 598, 599, 7, 99, 2, 2, 599, 600, 7, 116, 2, 2, 600, 601, 7, 101, 2, 2, 601, 602, 7, 99, 2, 2, 602, 603, 7, 110, 2, 2, 603, 605, 7, 110, 2, 2, 604, 575, 3, 2, 2, 2, 604, 586, 3, 2, 2, 2, 604, 595, 3, 2, 2, 2, 605, 114, 3, 2, 2, 2, 606, 607, 7, 107, 2, 2, 607, 608, 7, 104, 2, 2, 608, 116, 3, 2, 2, 2, 609, 610, 7, 103, 2, 2, 610, 611, 7, 110, 2, 2, 611, 612, 7, 117, 2, 2, 612, 613, 7, 103, 2, 2, 613, 118, 3, 2, 2, 2, 614, 615, 7, 121, 2, 2, 615, 616, 7, 106, 2, 2, 616, 617, 7, 107, 2, 2, 617, 618, 7, 110, 2, 2, 618, 619, 7, 103, 2, 2, 619, 120, 3, 2, 2, 2, 620, 621, 7, 102, 2, 2, 621, 622, 7, 113, 2, 2, 622, 122, 3, 2, 2, 2, 623, 624, 7, 104, 2, 2, 624, 625, 7, 113, 2, 2, 625, 626, 7, 116, 2, 2, 626, 124, 3, 2, 2, 2, 627, 628, 7, 117, 2, 2, 628, 629, 7, 121, 2, 2, 629, 630, 7, 107, 2, 2, 630, 631, 7, 118, 2, 2, 631, 632, 7, 101, 2, 2, 632, 633, 7, 106, 2, 2, 633, 126, 3, 2, 2, 2, 634, 635, 7, 116, 2, 2, 635, 636, 7, 103, 2, 2, 636, 637, 7, 118, 2, 2, 637, 638, 7, 119, 2, 2, 638, 639, 7, 116, 2, 2, 639, 640, 7, 112, 2, 2, 640, 128, 3, 2, 2, 2, 641, 642, 7, 100, 2, 2, 642, 643, 7, 116, 2, 2, 643, 644, 7, 103, 2, 2, 644, 645, 7, 99, 2, 2, 645, 646, 7, 109, 2, 2, 646, 130, 3, 2, 2, 2, 647, 648, 7, 101, 2, 2, 648, 649, 7, 113, 2, 2, 649, 650, 7, 112, 2, 2, 650, 651, 7, 118, 2, 2, 651, 652, 7, 107, 2, 2, 652, 653, 7, 112, 2, 2, 653, 654, 7, 119, 2, 2, 654, 655, 7, 103, 2, 2, 655, 132, 3, 2, 2, 2, 656, 657, 7, 99, 2, 2, 657, 658, 7, 117, 2, 2, 658, 659, 7, 111, 2, 2, 659, 660, 3, 2, 2, 2, 660, 661, 8, 66, 3, 2, 661, 134, 3, 2, 2, 2, 662, 663, 7, 102, 2, 2, 663, 664, 7, 103, 2, 2, 664, 665, 7, 104, 2, 2, 665, 666, 7, 99, 2, 2, 666, 667, 7, 119, 2, 2, 667, 668, 7, 110, 2, 2, 668, 669, 7, 118, 2, 2, 669, 136, 3, 2, 2, 2, 670, 671, 7, 101, 2, 2, 671, 672, 7, 99, 2, 2, 672, 673, 7, 117, 2, 2, 673, 674, 7, 103, 2, 2, 674, 138, 3, 2, 2, 2, 675, 676, 7, 117, 2, 2, 676, 677, 7, 118, 2, 2, 677, 678, 7, 116, 2, 2, 678, 679, 7, 119, 2, 2, 679, 680, 7, 101, 2, 2, 680, 681, 7, 118, 2, 2, 681, 140, 3, 2, 2, 2, 682, 683, 7, 103, 2, 2, 683, 684, 7, 112, 2, 2, 684, 685, 7, 119, 2, 2, 685, 686, 7, 111, 2, 2, 686, 142, 3, 2, 2, 2, 687, 688, 7, 117, 2, 2, 688, 689, 7, 107, 2, 2, 689, 690, 7, 124, 2, 2, 690, 691, 7, 103, 2, 2, 691, 692, 7, 113, 2, 2, 692, 693, 7, 104, 2, 2, 693, 144, 3, 2, 2, 2, 694, 695, 7, 118, 2, 2, 695, 696, 7, 123, 2, 2, 696, 697, 7, 114, 2, 2, 697, 698, 7, 103, 2, 2, 698, 699, 7, 107, 2, 2, 699, 700, 7, 102, 2, 2, 700, 146, 3, 2, 2, 2, 701, 702, 7, 102, 2, 2, 702, 703, 7, 103, 2, 2, 703, 704, 7, 104, 2, 2, 704, 705, 7, 107, 2, 2, 705, 706, 7, 112, 2, 2, 706, 707, 7, 103, 2, 2, 707, 708, 7, 102, 2, 2, 708, 148, 3, 2, 2, 2, 709, 710, 7, 109, 2, 2, 710, 711, 7, 107, 2, 2, 711, 712, 7, 101, 2, 2, 712, 713, 7, 109, 2, 2, 713, 714, 7, 99, 2, 2, 714, 715, 7, 117, 2, 2, 715, 716, 7, 111, 2, 2, 716, 150, 3, 2, 2, 2, 717, 718, 7, 116, 2, 2, 718, 719, 7, 103, 2, 2, 719, 720, 7, 117, 2, 2, 720, 721, 7, 113, 2, 2, 721, 722, 7, 119, 2, 2, 722, 723, 7, 116, 2, 2, 723, 724, 7, 101, 2, 2, 724, 725, 7, 103, 2, 2, 725, 152, 3, 2, 2, 2, 726, 727, 7, 119, 2, 2, 727, 728, 7, 117, 2, 2, 728, 729, 7, 103, 2, 2, 729, 730, 7, 117, 2, 2, 730, 154, 3, 2, 2, 2, 731, 732, 7, 101, 2, 2, 732, 733, 7, 110, 2, 2, 733, 734, 7, 113, 2, 2, 734, 735, 7, 100, 2, 2, 735, 736, 7, 100, 2, 2, 736, 737, 7, 103, 2, 2, 737, 738, 7, 116, 2, 2, 738, 739, 7, 117, 2, 2, 739, 156, 3, 2, 2, 2, 740, 741, 7, 100, 2, 2, 741, 742, 7, 123, 2, 2, 742, 743, 7, 118, 2, 2, 743, 744, 7, 103, 2, 2, 744, 745, 7, 117, 2, 2, 745, 158, 3, 2, 2, 2, 746, 747, 7, 101, 2, 2, 747, 748, 7, 123, 2, 2, 748, 749, 7, 101, 2, 2, 749, 750, 7, 110, 2, 2, 750, 751, 7, 103, 2, 2, 751, 752, 7, 117, 2, 2, 752, 160, 3, 2, 2, 2, 753, 754, 7, 35, 2, 2, 754, 162, 3, 2, 2, 2, 755, 756, 7, 117, 2, 2, 756, 757, 7, 107, 2, 2, 757, 758, 7, 105, 2, 2, 758, 759, 7, 112, 2, 2, 759, 760, 7, 103, 2, 2, 760, 770, 7, 102, 2, 2, 761, 762, 7, 119, 2, 2, 762, 763, 7, 112, 2, 2, 763, 764, 7, 117, 2, 2, 764, 765, 7, 107, 2, 2, 765, 766, 7, 105, 2, 2, 766, 767, 7, 112, 2, 2, 767, 768, 7, 103, 2, 2, 768, 770, 7, 102, 2, 2, 769, 755, 3, 2, 2, 2, 769, 761, 3, 2, 2, 2, 770, 164, 3, 2, 2, 2, 771, 772, 7, 100, 2, 2, 772, 773, 7, 123, 2, 2, 773, 774, 7, 118, 2, 2, 774, 809, 7, 103, 2, 2, 775, 776, 7, 121, 2, 2, 776, 777, 7, 113, 2, 2, 777, 778, 7, 116, 2, 2, 778, 809, 7, 102, 2, 2, 779, 780, 7, 102, 2, 2, 780, 781, 7, 121, 2, 2, 781, 782, 7, 113, 2, 2, 782, 783, 7, 116, 2, 2, 783, 809, 7, 102, 2, 2, 784, 785, 7, 100, 2, 2, 785, 786, 7, 113, 2, 2, 786, 787, 7, 113, 2, 2, 787, 809, 7, 110, 2, 2, 788, 789, 7, 101, 2, 2, 789, 790, 7, 106, 2, 2, 790, 791, 7, 99, 2, 2, 791, 809, 7, 116, 2, 2, 792, 793, 7, 117, 2, 2, 793, 794, 7, 106, 2, 2, 794, 795, 7, 113, 2, 2, 795, 796, 7, 116, 2, 2, 796, 809, 7, 118, 2, 2, 797, 798, 7, 107, 2, 2, 798, 799, 7, 112, 2, 2, 799, 809, 7, 118, 2, 2, 800, 801, 7, 110, 2, 2, 801, 802, 7, 113, 2, 2, 802, 803, 7, 112, 2, 2, 803, 809, 7, 105, 2, 2, 804, 805, 7, 120, 2, 2, 805, 806, 7, 113, 2, 2, 806, 807, 7, 107, 2, 2, 807, 809, 7, 102, 2, 2, 808, 771, 3, 2, 2, 2, 808, 775, 3, 2, 2, 2, 808, 779, 3, 2, 2, 2, 808, 784, 3, 2, 2, 2, 808, 788, 3, 2, 2, 2, 808, 792, 3, 2, 2, 2, 808, 797, 3, 2, 2, 2, 808, 800, 3, 2, 2, 2, 808, 804, 3, 2, 2, 2, 809, 166, 3, 2, 2, 2, 810, 811, 7, 118, 2, 2, 811, 812, 7, 116, 2, 2, 812, 813, 7, 119, 2, 2, 813, 820, 7, 103, 2, 2, 814, 815, 7, 104, 2, 2, 815, 816, 7, 99, 2, 2, 816, 817, 7, 110, 2, 2, 817, 818, 7, 117, 2, 2, 818, 820, 7, 103, 2, 2, 819, 810, 3, 2, 2, 2, 819, 814, 3, 2, 2, 2, 820, 168, 3, 2, 2, 2, 821, 822, 7, 125, 2, 2, 822, 823, 7, 125, 2, 2, 823, 827, 3, 2, 2, 2, 824, 826, 11, 2, 2, 2, 825, 824, 3, 2, 2, 2, 826, 829, 3, 2, 2, 2, 827, 828, 3, 2, 2, 2, 827, 825, 3, 2, 2, 2, 828, 830, 3, 2, 2, 2, 829, 827, 3, 2, 2, 2, 830, 831, 7, 127, 2, 2, 831, 832, 7, 127, 2, 2, 832, 170, 3, 2, 2, 2, 833, 834, 7, 37, 2, 2, 834, 835, 7, 107, 2, 2, 835, 836, 7, 111, 2, 2, 836, 837, 7, 114, 2, 2, 837, 838, 7, 113, 2, 2, 838, 839, 7, 116, 2, 2, 839, 840, 7, 118, 2, 2, 840, 841, 3, 2, 2, 2, 841, 842, 8, 85, 4, 2, 842, 172, 3, 2, 2, 2, 843, 844, 7, 37, 2, 2, 844, 845, 7, 107, 2, 2, 845, 846, 7, 112, 2, 2, 846, 847, 7, 101, 2, 2, 847, 848, 7, 110, 2, 2, 848, 849, 7, 119, 2, 2, 849, 850, 7, 102, 2, 2, 850, 851, 7, 103, 2, 2, 851, 852, 3, 2, 2, 2, 852, 853, 8, 86, 5, 2, 853, 174, 3, 2, 2, 2, 854, 855, 7, 37, 2, 2, 855, 856, 7, 114, 2, 2, 856, 857, 7, 116, 2, 2, 857, 858, 7, 99, 2, 2, 858, 859, 7, 105, 2, 2, 859, 860, 7, 111, 2, 2, 860, 861, 7, 99, 2, 2, 861, 176, 3, 2, 2, 2, 862, 863, 7, 37, 2, 2, 863, 864, 7, 102, 2, 2, 864, 865, 7, 103, 2, 2, 865, 866, 7, 104, 2, 2, 866, 867, 7, 107, 2, 2, 867, 868, 7, 112, 2, 2, 868, 869, 7, 103, 2, 2, 869, 178, 3, 2, 2, 2, 870, 871, 7, 94, 2, 2, 871, 876, 7, 12, 2, 2, 872, 873, 7, 94, 2, 2, 873, 874, 7, 15, 2, 2, 874, 876, 7, 12, 2, 2, 875, 870, 3, 2, 2, 2, 875, 872, 3, 2, 2, 2, 876, 180, 3, 2, 2, 2, 877, 878, 7, 37, 2, 2, 878, 879, 7, 119, 2, 2, 879, 880, 7, 112, 2, 2, 880, 881, 7, 102, 2, 2, 881, 882, 7, 103, 2, 2, 882, 883, 7, 104, 2, 2, 883, 182, 3, 2, 2, 2, 884, 885, 7, 37, 2, 2, 885, 886, 7, 107, 2, 2, 886, 887, 7, 104, 2, 2, 887, 888, 7, 102, 2, 2, 888, 889, 7, 103, 2, 2, 889, 890, 7, 104, 2, 2, 890, 184, 3, 2, 2, 2, 891, 892, 7, 37, 2, 2, 892, 893, 7, 107, 2, 2, 893, 894, 7, 104, 2, 2, 894, 895, 7, 112, 2, 2, 895, 896, 7, 102, 2, 2, 896, 897, 7, 103, 2, 2, 897, 898, 7, 104, 2, 2, 898, 186, 3, 2, 2, 2, 899, 900, 7, 37, 2, 2, 900, 901, 7, 107, 2, 2, 901, 902, 7, 104, 2, 2, 902, 188, 3, 2, 2, 2, 903, 904, 7, 37, 2, 2, 904, 905, 7, 103, 2, 2, 905, 906, 7, 110, 2, 2, 906, 907, 7, 107, 2, 2, 907, 908, 7, 104, 2, 2, 908, 190, 3, 2, 2, 2, 909, 910, 7, 37, 2, 2, 910, 911, 7, 103, 2, 2, 911, 912, 7, 110, 2, 2, 912, 913, 7, 117, 2, 2, 913, 914, 7, 103, 2, 2, 914, 192, 3, 2, 2, 2, 915, 916, 7, 37, 2, 2, 916, 917, 7, 103, 2, 2, 917, 918, 7, 112, 2, 2, 918, 919, 7, 102, 2, 2, 919, 920, 7, 107, 2, 2, 920, 921, 7, 104, 2, 2, 921, 194, 3, 2, 2, 2, 922, 923, 7, 37, 2, 2, 923, 924, 7, 103, 2, 2, 924, 925, 7, 116, 2, 2, 925, 926, 7, 116, 2, 2, 926, 927, 7, 113, 2, 2, 927, 928, 7, 116, 2, 2, 928, 196, 3, 2, 2, 2, 929, 932, 5, 199, 99, 2, 930, 932, 5, 207, 103, 2, 931, 929, 3, 2, 2, 2, 931, 930, 3, 2, 2, 2, 932, 198, 3, 2, 2, 2, 933, 937, 5, 201, 100, 2, 934, 937, 5, 203, 101, 2, 935, 937, 5, 205, 102, 2, 936, 933, 3, 2, 2, 2, 936, 934, 3, 2, 2, 2, 936, 935, 3, 2, 2, 2, 937, 200, 3, 2, 2, 2, 938, 944, 7, 39, 2, 2, 939, 940, 7, 50, 2, 2, 940, 944, 7, 100, 2, 2, 941, 942, 7, 50, 2, 2, 942, 944, 7, 68, 2, 2, 943, 938, 3, 2, 2, 2, 943, 939, 3, 2, 2, 2, 943, 941, 3, 2, 2, 2, 944, 948, 3, 2, 2, 2, 945, 947, 5, 215, 107, 2, 946, 945, 3, 2, 2, 2, 947, 950, 3, 2, 2, 2, 948, 946, 3, 2, 2, 2, 948, 949, 3, 2, 2, 2, 949, 951, 3, 2, 2, 2, 950, 948, 3, 2, 2, 2, 951, 953, 7, 48, 2, 2, 952, 954, 5, 215, 107, 2, 953, 952, 3, 2, 2, 2, 954, 955, 3, 2, 2, 2, 955, 953, 3, 2, 2, 2, 955, 956, 3, 2, 2, 2, 956, 202, 3, 2, 2, 2, 957, 959, 5, 217, 108, 2, 958, 957, 3, 2, 2, 2, 959, 962, 3, 2, 2, 2, 960, 958, 3, 2, 2, 2, 960, 961, 3, 2, 2, 2, 961, 963, 3, 2, 2, 2, 962, 960, 3, 2, 2, 2, 963, 965, 7, 48, 2, 2, 964, 966, 5, 217, 108, 2, 965, 964, 3, 2, 2, 2, 966, 967, 3, 2, 2, 2, 967, 965, 3, 2, 2, 2, 967, 968, 3, 2, 2, 2, 968, 204, 3, 2, 2, 2, 969, 975, 7, 38, 2, 2, 970, 971, 7, 50, 2, 2, 971, 975, 7, 122, 2, 2, 972, 973, 7, 50, 2, 2, 973, 975, 7, 90, 2, 2, 974, 969, 3, 2, 2, 2, 974, 970, 3, 2, 2, 2, 974, 972, 3, 2, 2, 2, 975, 979, 3, 2, 2, 2, 976, 978, 5, 219, 109, 2, 977, 976, 3, 2, 2, 2, 978, 981, 3, 2, 2, 2, 979, 977, 3, 2, 2, 2, 979, 980, 3, 2, 2, 2, 980, 982, 3, 2, 2, 2, 981, 979, 3, 2, 2, 2, 982, 984, 7, 48, 2, 2, 983, 985, 5, 219, 109, 2, 984, 983, 3, 2, 2, 2, 985, 986, 3, 2, 2, 2, 986, 984, 3, 2, 2, 2, 986, 987, 3, 2, 2, 2, 987, 206, 3, 2, 2, 2, 988, 992, 5, 211, 105, 2, 989, 992, 5, 213, 106, 2, 990, 992, 5, 209, 104, 2, 991, 988, 3, 2, 2, 2, 991, 989, 3, 2, 2, 2, 991, 990, 3, 2, 2, 2, 992, 996, 3, 2, 2, 2, 993, 994, 9, 2, 2, 2, 994, 997, 9, 3, 2, 2, 995, 997, 7, 110, 2, 2, 996, 993, 3, 2, 2, 2, 996, 995, 3, 2, 2, 2, 996, 997, 3, 2, 2, 2, 997, 208, 3, 2, 2, 2, 998, 999, 7, 50, 2, 2, 999, 1001, 9, 4, 2, 2, 1000, 1002, 5, 215, 107, 2, 1001, 1000, 3, 2, 2, 2, 1002, 1003, 3, 2, 2, 2, 1003, 1001, 3, 2, 2, 2, 1003, 1004, 3, 2, 2, 2, 1004, 1012, 3, 2, 2, 2, 1005, 1007, 7, 39, 2, 2, 1006, 1008, 5, 215, 107, 2, 1007, 1006, 3, 2, 2, 2, 1008, 1009, 3, 2, 2, 2, 1009, 1007, 3, 2, 2, 2, 1009, 1010, 3, 2, 2, 2, 1010, 1012, 3, 2, 2, 2, 1011, 998, 3, 2, 2, 2, 1011, 1005, 3, 2, 2, 2, 1012, 210, 3, 2, 2, 2, 1013, 1015, 5, 217, 108, 2, 1014, 1013, 3, 2, 2, 2, 1015, 1016, 3, 2, 2, 2, 1016, 1014, 3, 2, 2, 2, 1016, 1017, 3, 2, 2, 2, 1017, 212, 3, 2, 2, 2, 1018, 1024, 7, 38, 2, 2, 1019, 1020, 7, 50, 2, 2, 1020, 1024, 7, 122, 2, 2, 1021, 1022, 7, 50, 2, 2, 1022, 1024, 7, 90, 2, 2, 1023, 1018, 3, 2, 2, 2, 1023, 1019, 3, 2, 2, 2, 1023, 1021, 3, 2, 2, 2, 1024, 1026, 3, 2, 2, 2, 1025, 1027, 5, 219, 109, 2, 1026, 1025, 3, 2, 2, 2, 1027, 1028, 3, 2, 2, 2, 1028, 1026, 3, 2, 2, 2, 1028, 1029, 3, 2, 2, 2, 1029, 214, 3, 2, 2, 2, 1030, 1031, 9, 5, 2, 2, 1031, 216, 3, 2, 2, 2, 1032, 1033, 9, 6, 2, 2, 1033, 218, 3, 2, 2, 2, 1034, 1035, 9, 7, 2, 2, 1035, 220, 3, 2, 2, 2, 1036, 1040, 5, 223, 111, 2, 1037, 1039, 5, 225, 112, 2, 1038, 1037, 3, 2, 2, 2, 1039, 1042, 3, 2, 2, 2, 1040, 1038, 3, 2, 2, 2, 1040, 1041, 3, 2, 2, 2, 1041, 1043, 3, 2, 2, 2, 1042, 1040, 3, 2, 2, 2, 1043, 1044, 8, 110, 6, 2, 1044, 222, 3, 2, 2, 2, 1045, 1046, 9, 8, 2, 2, 1046, 224, 3, 2, 2, 2, 1047, 1048, 9, 9, 2, 2, 1048, 226, 3, 2, 2, 2, 1049, 1055, 7, 36, 2, 2, 1050, 1051, 7, 94, 2, 2, 1051, 1054, 7, 36, 2, 2, 1052, 1054, 10, 10, 2, 2, 1053, 1050, 3, 2, 2, 2, 1053, 1052, 3, 2, 2, 2, 1054, 1057, 3, 2, 2, 2, 1055, 1053, 3, 2, 2, 2, 1055, 1056, 3, 2, 2, 2, 1056, 1058, 3, 2, 2, 2, 1057, 1055, 3, 2, 2, 2, 1058, 1060, 7, 36, 2, 2, 1059, 1061, 9, 11, 2, 2, 1060, 1059, 3, 2, 2, 2, 1060, 1061, 3, 2, 2, 2, 1061, 1066, 3, 2, 2, 2, 1062, 1064, 9, 12, 2, 2, 1063, 1065, 9, 13, 2, 2, 1064, 1063, 3, 2, 2, 2, 1064, 1065, 3, 2, 2, 2, 1065, 1067, 3, 2, 2, 2, 1066, 1062, 3, 2, 2, 2, 1066, 1067, 3, 2, 2, 2, 1067, 1069, 3, 2, 2, 2, 1068, 1070, 9, 11, 2, 2, 1069, 1068, 3, 2, 2, 2, 1069, 1070, 3, 2, 2, 2, 1070, 228, 3, 2, 2, 2, 1071, 1080, 7, 41, 2, 2, 1072, 1077, 7, 94, 2, 2, 1073, 1078, 9, 14, 2, 2, 1074, 1075, 7, 122, 2, 2, 1075, 1076, 9, 15, 2, 2, 1076, 1078, 9, 15, 2, 2, 1077, 1073, 3, 2, 2, 2, 1077, 1074, 3, 2, 2, 2, 1078, 1081, 3, 2, 2, 2, 1079, 1081, 10, 16, 2, 2, 1080, 1072, 3, 2, 2, 2, 1080, 1079, 3, 2, 2, 2, 1081, 1082, 3, 2, 2, 2, 1082, 1083, 7, 41, 2, 2, 1083, 230, 3, 2, 2, 2, 1084, 1086, 9, 17, 2, 2, 1085, 1084, 3, 2, 2, 2, 1086, 1087, 3, 2, 2, 2, 1087, 1085, 3, 2, 2, 2, 1087, 1088, 3, 2, 2, 2, 1088, 1089, 3, 2, 2, 2, 1089, 1090, 8, 115, 7, 2, 1090, 232, 3, 2, 2, 2, 1091, 1092, 7, 49, 2, 2, 1092, 1093, 7, 49, 2, 2, 1093, 1097, 3, 2, 2, 2, 1094, 1096, 10, 18, 2, 2, 1095, 1094, 3, 2, 2, 2, 1096, 1099, 3, 2, 2, 2, 1097, 1095, 3, 2, 2, 2, 1097, 1098, 3, 2, 2, 2, 1098, 1100, 3, 2, 2, 2, 1099, 1097, 3, 2, 2, 2, 1100, 1101, 8, 116, 8, 2, 1101, 234, 3, 2, 2, 2, 1102, 1103, 7, 49, 2, 2, 1103, 1104, 7, 44, 2, 2, 1104, 1108, 3, 2, 2, 2, 1105, 1107, 11, 2, 2, 2, 1106, 1105, 3, 2, 2, 2, 1107, 1110, 3, 2, 2, 2, 1108, 1109, 3, 2, 2, 2, 1108, 1106, 3, 2, 2, 2, 1109, 1111, 3, 2, 2, 2, 1110, 1108, 3, 2, 2, 2, 1111, 1112, 7, 44, 2, 2, 1112, 1113, 7, 49, 2, 2, 1113, 1114, 3, 2, 2, 2, 1114, 1115, 8, 117, 8, 2, 1115, 236, 3, 2, 2, 2, 1116, 1117, 7, 48, 2, 2, 1117, 1118, 7, 100, 2, 2, 1118, 1119, 7, 123, 2, 2, 1119, 1120, 7, 118, 2, 2, 1120, 1121, 7, 103, 2, 2, 1121, 238, 3, 2, 2, 2, 1122, 1123, 7, 100, 2, 2, 1123, 1124, 7, 116, 2, 2, 1124, 1673, 7, 109, 2, 2, 1125, 1126, 7, 113, 2, 2, 1126, 1127, 7, 116, 2, 2, 1127, 1673, 7, 99, 2, 2, 1128, 1129, 7, 109, 2, 2, 1129, 1130, 7, 107, 2, 2, 1130, 1673, 7, 110, 2, 2, 1131, 1132, 7, 117, 2, 2, 1132, 1133, 7, 110, 2, 2, 1133, 1673, 7, 113, 2, 2, 1134, 1135, 7, 112, 2, 2, 1135, 1136, 7, 113, 2, 2, 1136, 1673, 7, 114, 2, 2, 1137, 1138, 7, 99, 2, 2, 1138, 1139, 7, 117, 2, 2, 1139, 1673, 7, 110, 2, 2, 1140, 1141, 7, 114, 2, 2, 1141, 1142, 7, 106, 2, 2, 1142, 1673, 7, 114, 2, 2, 1143, 1144, 7, 99, 2, 2, 1144, 1145, 7, 112, 2, 2, 1145, 1673, 7, 101, 2, 2, 1146, 1147, 7, 100, 2, 2, 1147, 1148, 7, 114, 2, 2, 1148, 1673, 7, 110, 2, 2, 1149, 1150, 7, 101, 2, 2, 1150, 1151, 7, 110, 2, 2, 1151, 1673, 7, 101, 2, 2, 1152, 1153, 7, 108, 2, 2, 1153, 1154, 7, 117, 2, 2, 1154, 1673, 7, 116, 2, 2, 1155, 1156, 7, 99, 2, 2, 1156, 1157, 7, 112, 2, 2, 1157, 1673, 7, 102, 2, 2, 1158, 1159, 7, 116, 2, 2, 1159, 1160, 7, 110, 2, 2, 1160, 1673, 7, 99, 2, 2, 1161, 1162, 7, 100, 2, 2, 1162, 1163, 7, 107, 2, 2, 1163, 1673, 7, 118, 2, 2, 1164, 1165, 7, 116, 2, 2, 1165, 1166, 7, 113, 2, 2, 1166, 1673, 7, 110, 2, 2, 1167, 1168, 7, 114, 2, 2, 1168, 1169, 7, 110, 2, 2, 1169, 1673, 7, 99, 2, 2, 1170, 1171, 7, 114, 2, 2, 1171, 1172, 7, 110, 2, 2, 1172, 1673, 7, 114, 2, 2, 1173, 1174, 7, 100, 2, 2, 1174, 1175, 7, 111, 2, 2, 1175, 1673, 7, 107, 2, 2, 1176, 1177, 7, 117, 2, 2, 1177, 1178, 7, 103, 2, 2, 1178, 1673, 7, 101, 2, 2, 1179, 1180, 7, 116, 2, 2, 1180, 1181, 7, 118, 2, 2, 1181, 1673, 7, 107, 2, 2, 1182, 1183, 7, 103, 2, 2, 1183, 1184, 7, 113, 2, 2, 1184, 1673, 7, 116, 2, 2, 1185, 1186, 7, 117, 2, 2, 1186, 1187, 7, 116, 2, 2, 1187, 1673, 7, 103, 2, 2, 1188, 1189, 7, 110, 2, 2, 1189, 1190, 7, 117, 2, 2, 1190, 1673, 7, 116, 2, 2, 1191, 1192, 7, 114, 2, 2, 1192, 1193, 7, 106, 2, 2, 1193, 1673, 7, 99, 2, 2, 1194, 1195, 7, 99, 2, 2, 1195, 1196, 7, 110, 2, 2, 1196, 1673, 7, 116, 2, 2, 1197, 1198, 7, 108, 2, 2, 1198, 1199, 7, 111, 2, 2, 1199, 1673, 7, 114, 2, 2, 1200, 1201, 7, 100, 2, 2, 1201, 1202, 7, 120, 2, 2, 1202, 1673, 7, 101, 2, 2, 1203, 1204, 7, 101, 2, 2, 1204, 1205, 7, 110, 2, 2, 1205, 1673, 7, 107, 2, 2, 1206, 1207, 7, 116, 2, 2, 1207, 1208, 7, 118, 2, 2, 1208, 1673, 7, 117, 2, 2, 1209, 1210, 7, 99, 2, 2, 1210, 1211, 7, 102, 2, 2, 1211, 1673, 7, 101, 2, 2, 1212, 1213, 7, 116, 2, 2, 1213, 1214, 7, 116, 2, 2, 1214, 1673, 7, 99, 2, 2, 1215, 1216, 7, 100, 2, 2, 1216, 1217, 7, 120, 2, 2, 1217, 1673, 7, 117, 2, 2, 1218, 1219, 7, 117, 2, 2, 1219, 1220, 7, 103, 2, 2, 1220, 1673, 7, 107, 2, 2, 1221, 1222, 7, 117, 2, 2, 1222, 1223, 7, 99, 2, 2, 1223, 1673, 7, 122, 2, 2, 1224, 1225, 7, 117, 2, 2, 1225, 1226, 7, 118, 2, 2, 1226, 1673, 7, 123, 2, 2, 1227, 1228, 7, 117, 2, 2, 1228, 1229, 7, 118, 2, 2, 1229, 1673, 7, 99, 2, 2, 1230, 1231, 7, 117, 2, 2, 1231, 1232, 7, 118, 2, 2, 1232, 1673, 7, 122, 2, 2, 1233, 1234, 7, 102, 2, 2, 1234, 1235, 7, 103, 2, 2, 1235, 1673, 7, 123, 2, 2, 1236, 1237, 7, 118, 2, 2, 1237, 1238, 7, 122, 2, 2, 1238, 1673, 7, 99, 2, 2, 1239, 1240, 7, 122, 2, 2, 1240, 1241, 7, 99, 2, 2, 1241, 1673, 7, 99, 2, 2, 1242, 1243, 7, 100, 2, 2, 1243, 1244, 7, 101, 2, 2, 1244, 1673, 7, 101, 2, 2, 1245, 1246, 7, 99, 2, 2, 1246, 1247, 7, 106, 2, 2, 1247, 1673, 7, 122, 2, 2, 1248, 1249, 7, 118, 2, 2, 1249, 1250, 7, 123, 2, 2, 1250, 1673, 7, 99, 2, 2, 1251, 1252, 7, 118, 2, 2, 1252, 1253, 7, 122, 2, 2, 1253, 1673, 7, 117, 2, 2, 1254, 1255, 7, 118, 2, 2, 1255, 1256, 7, 99, 2, 2, 1256, 1673, 7, 117, 2, 2, 1257, 1258, 7, 117, 2, 2, 1258, 1259, 7, 106, 2, 2, 1259, 1673, 7, 123, 2, 2, 1260, 1261, 7, 117, 2, 2, 1261, 1262, 7, 106, 2, 2, 1262, 1673, 7, 122, 2, 2, 1263, 1264, 7, 110, 2, 2, 1264, 1265, 7, 102, 2, 2, 1265, 1673, 7, 123, 2, 2, 1266, 1267, 7, 110, 2, 2, 1267, 1268, 7, 102, 2, 2, 1268, 1673, 7, 99, 2, 2, 1269, 1270, 7, 110, 2, 2, 1270, 1271, 7, 102, 2, 2, 1271, 1673, 7, 122, 2, 2, 1272, 1273, 7, 110, 2, 2, 1273, 1274, 7, 99, 2, 2, 1274, 1673, 7, 122, 2, 2, 1275, 1276, 7, 118, 2, 2, 1276, 1277, 7, 99, 2, 2, 1277, 1673, 7, 123, 2, 2, 1278, 1279, 7, 118, 2, 2, 1279, 1280, 7, 99, 2, 2, 1280, 1673, 7, 122, 2, 2, 1281, 1282, 7, 100, 2, 2, 1282, 1283, 7, 101, 2, 2, 1283, 1673, 7, 117, 2, 2, 1284, 1285, 7, 101, 2, 2, 1285, 1286, 7, 110, 2, 2, 1286, 1673, 7, 120, 2, 2, 1287, 1288, 7, 118, 2, 2, 1288, 1289, 7, 117, 2, 2, 1289, 1673, 7, 122, 2, 2, 1290, 1291, 7, 110, 2, 2, 1291, 1292, 7, 99, 2, 2, 1292, 1673, 7, 117, 2, 2, 1293, 1294, 7, 101, 2, 2, 1294, 1295, 7, 114, 2, 2, 1295, 1673, 7, 123, 2, 2, 1296, 1297, 7, 101, 2, 2, 1297, 1298, 7, 111, 2, 2, 1298, 1673, 7, 114, 2, 2, 1299, 1300, 7, 101, 2, 2, 1300, 1301, 7, 114, 2, 2, 1301, 1673, 7, 122, 2, 2, 1302, 1303, 7, 102, 2, 2, 1303, 1304, 7, 101, 2, 2, 1304, 1673, 7, 114, 2, 2, 1305, 1306, 7, 102, 2, 2, 1306, 1307, 7, 103, 2, 2, 1307, 1673, 7, 101, 2, 2, 1308, 1309, 7, 107, 2, 2, 1309, 1310, 7, 112, 2, 2, 1310, 1673, 7, 101, 2, 2, 1311, 1312, 7, 99, 2, 2, 1312, 1313, 7, 122, 2, 2, 1313, 1673, 7, 117, 2, 2, 1314, 1315, 7, 100, 2, 2, 1315, 1316, 7, 112, 2, 2, 1316, 1673, 7, 103, 2, 2, 1317, 1318, 7, 101, 2, 2, 1318, 1319, 7, 110, 2, 2, 1319, 1673, 7, 102, 2, 2, 1320, 1321, 7, 117, 2, 2, 1321, 1322, 7, 100, 2, 2, 1322, 1673, 7, 101, 2, 2, 1323, 1324, 7, 107, 2, 2, 1324, 1325, 7, 117, 2, 2, 1325, 1673, 7, 101, 2, 2, 1326, 1327, 7, 107, 2, 2, 1327, 1328, 7, 112, 2, 2, 1328, 1673, 7, 122, 2, 2, 1329, 1330, 7, 100, 2, 2, 1330, 1331, 7, 103, 2, 2, 1331, 1673, 7, 115, 2, 2, 1332, 1333, 7, 117, 2, 2, 1333, 1334, 7, 103, 2, 2, 1334, 1673, 7, 102, 2, 2, 1335, 1336, 7, 102, 2, 2, 1336, 1337, 7, 103, 2, 2, 1337, 1673, 7, 122, 2, 2, 1338, 1339, 7, 107, 2, 2, 1339, 1340, 7, 112, 2, 2, 1340, 1673, 7, 123, 2, 2, 1341, 1342, 7, 116, 2, 2, 1342, 1343, 7, 113, 2, 2, 1343, 1673, 7, 116, 2, 2, 1344, 1345, 7, 100, 2, 2, 1345, 1346, 7, 100, 2, 2, 1346, 1347, 7, 116, 2, 2, 1347, 1673, 7, 50, 2, 2, 1348, 1349, 7, 100, 2, 2, 1349, 1350, 7, 100, 2, 2, 1350, 1351, 7, 116, 2, 2, 1351, 1673, 7, 51, 2, 2, 1352, 1353, 7, 100, 2, 2, 1353, 1354, 7, 100, 2, 2, 1354, 1355, 7, 116, 2, 2, 1355, 1673, 7, 52, 2, 2, 1356, 1357, 7, 100, 2, 2, 1357, 1358, 7, 100, 2, 2, 1358, 1359, 7, 116, 2, 2, 1359, 1673, 7, 53, 2, 2, 1360, 1361, 7, 100, 2, 2, 1361, 1362, 7, 100, 2, 2, 1362, 1363, 7, 116, 2, 2, 1363, 1673, 7, 54, 2, 2, 1364, 1365, 7, 100, 2, 2, 1365, 1366, 7, 100, 2, 2, 1366, 1367, 7, 116, 2, 2, 1367, 1673, 7, 55, 2, 2, 1368, 1369, 7, 100, 2, 2, 1369, 1370, 7, 100, 2, 2, 1370, 1371, 7, 116, 2, 2, 1371, 1673, 7, 56, 2, 2, 1372, 1373, 7, 100, 2, 2, 1373, 1374, 7, 100, 2, 2, 1374, 1375, 7, 116, 2, 2, 1375, 1673, 7, 57, 2, 2, 1376, 1377, 7, 100, 2, 2, 1377, 1378, 7, 100, 2, 2, 1378, 1379, 7, 117, 2, 2, 1379, 1673, 7, 50, 2, 2, 1380, 1381, 7, 100, 2, 2, 1381, 1382, 7, 100, 2, 2, 1382, 1383, 7, 117, 2, 2, 1383, 1673, 7, 51, 2, 2, 1384, 1385, 7, 100, 2, 2, 1385, 1386, 7, 100, 2, 2, 1386, 1387, 7, 117, 2, 2, 1387, 1673, 7, 52, 2, 2, 1388, 1389, 7, 100, 2, 2, 1389, 1390, 7, 100, 2, 2, 1390, 1391, 7, 117, 2, 2, 1391, 1673, 7, 53, 2, 2, 1392, 1393, 7, 100, 2, 2, 1393, 1394, 7, 100, 2, 2, 1394, 1395, 7, 117, 2, 2, 1395, 1673, 7, 54, 2, 2, 1396, 1397, 7, 100, 2, 2, 1397, 1398, 7, 100, 2, 2, 1398, 1399, 7, 117, 2, 2, 1399, 1673, 7, 55, 2, 2, 1400, 1401, 7, 100, 2, 2, 1401, 1402, 7, 100, 2, 2, 1402, 1403, 7, 117, 2, 2, 1403, 1673, 7, 56, 2, 2, 1404, 1405, 7, 100, 2, 2, 1405, 1406, 7, 100, 2, 2, 1406, 1407, 7, 117, 2, 2, 1407, 1673, 7, 57, 2, 2, 1408, 1409, 7, 100, 2, 2, 1409, 1410, 7, 116, 2, 2, 1410, 1673, 7, 99, 2, 2, 1411, 1412, 7, 114, 2, 2, 1412, 1413, 7, 106, 2, 2, 1413, 1673, 7, 122, 2, 2, 1414, 1415, 7, 114, 2, 2, 1415, 1416, 7, 106, 2, 2, 1416, 1673, 7, 123, 2, 2, 1417, 1418, 7, 114, 2, 2, 1418, 1419, 7, 110, 2, 2, 1419, 1673, 7, 122, 2, 2, 1420, 1421, 7, 114, 2, 2, 1421, 1422, 7, 110, 2, 2, 1422, 1673, 7, 123, 2, 2, 1423, 1424, 7, 116, 2, 2, 1424, 1425, 7, 111, 2, 2, 1425, 1426, 7, 100, 2, 2, 1426, 1673, 7, 50, 2, 2, 1427, 1428, 7, 116, 2, 2, 1428, 1429, 7, 111, 2, 2, 1429, 1430, 7, 100, 2, 2, 1430, 1673, 7, 51, 2, 2, 1431, 1432, 7, 116, 2, 2, 1432, 1433, 7, 111, 2, 2, 1433, 1434, 7, 100, 2, 2, 1434, 1673, 7, 52, 2, 2, 1435, 1436, 7, 116, 2, 2, 1436, 1437, 7, 111, 2, 2, 1437, 1438, 7, 100, 2, 2, 1438, 1673, 7, 53, 2, 2, 1439, 1440, 7, 116, 2, 2, 1440, 1441, 7, 111, 2, 2, 1441, 1442, 7, 100, 2, 2, 1442, 1673, 7, 54, 2, 2, 1443, 1444, 7, 116, 2, 2, 1444, 1445, 7, 111, 2, 2, 1445, 1446, 7, 100, 2, 2, 1446, 1673, 7, 55, 2, 2, 1447, 1448, 7, 116, 2, 2, 1448, 1449, 7, 111, 2, 2, 1449, 1450, 7, 100, 2, 2, 1450, 1673, 7, 56, 2, 2, 1451, 1452, 7, 116, 2, 2, 1452, 1453, 7, 111, 2, 2, 1453, 1454, 7, 100, 2, 2, 1454, 1673, 7, 57, 2, 2, 1455, 1456, 7, 117, 2, 2, 1456, 1457, 7, 111, 2, 2, 1457, 1458, 7, 100, 2, 2, 1458, 1673, 7, 50, 2, 2, 1459, 1460, 7, 117, 2, 2, 1460, 1461, 7, 111, 2, 2, 1461, 1462, 7, 100, 2, 2, 1462, 1673, 7, 51, 2, 2, 1463, 1464, 7, 117, 2, 2, 1464, 1465, 7, 111, 2, 2, 1465, 1466, 7, 100, 2, 2, 1466, 1673, 7, 52, 2, 2, 1467, 1468, 7, 117, 2, 2, 1468, 1469, 7, 111, 2, 2, 1469, 1470, 7, 100, 2, 2, 1470, 1673, 7, 53, 2, 2, 1471, 1472, 7, 117, 2, 2, 1472, 1473, 7, 111, 2, 2, 1473, 1474, 7, 100, 2, 2, 1474, 1673, 7, 54, 2, 2, 1475, 1476, 7, 117, 2, 2, 1476, 1477, 7, 111, 2, 2, 1477, 1478, 7, 100, 2, 2, 1478, 1673, 7, 55, 2, 2, 1479, 1480, 7, 117, 2, 2, 1480, 1481, 7, 111, 2, 2, 1481, 1482, 7, 100, 2, 2, 1482, 1673, 7, 56, 2, 2, 1483, 1484, 7, 117, 2, 2, 1484, 1485, 7, 111, 2, 2, 1485, 1486, 7, 100, 2, 2, 1486, 1673, 7, 57, 2, 2, 1487, 1488, 7, 117, 2, 2, 1488, 1489, 7, 118, 2, 2, 1489, 1673, 7, 114, 2, 2, 1490, 1491, 7, 117, 2, 2, 1491, 1492, 7, 118, 2, 2, 1492, 1673, 7, 124, 2, 2, 1493, 1494, 7, 118, 2, 2, 1494, 1495, 7, 116, 2, 2, 1495, 1673, 7, 100, 2, 2, 1496, 1497, 7, 118, 2, 2, 1497, 1498, 7, 117, 2, 2, 1498, 1673, 7, 100, 2, 2, 1499, 1500, 7, 121, 2, 2, 1500, 1501, 7, 99, 2, 2, 1501, 1673, 7, 107, 2, 2, 1502, 1503, 7, 101, 2, 2, 1503, 1504, 7, 110, 2, 2, 1504, 1673, 7, 103, 2, 2, 1505, 1506, 7, 117, 2, 2, 1506, 1507, 7, 103, 2, 2, 1507, 1673, 7, 103, 2, 2, 1508, 1509, 7, 118, 2, 2, 1509, 1510, 7, 117, 2, 2, 1510, 1673, 7, 123, 2, 2, 1511, 1512, 7, 110, 2, 2, 1512, 1513, 7, 100, 2, 2, 1513, 1514, 7, 114, 2, 2, 1514, 1673, 7, 110, 2, 2, 1515, 1516, 7, 107, 2, 2, 1516, 1517, 7, 112, 2, 2, 1517, 1673, 7, 124, 2, 2, 1518, 1519, 7, 118, 2, 2, 1519, 1520, 7, 123, 2, 2, 1520, 1673, 7, 117, 2, 2, 1521, 1522, 7, 110, 2, 2, 1522, 1523, 7, 100, 2, 2, 1523, 1524, 7, 111, 2, 2, 1524, 1673, 7, 107, 2, 2, 1525, 1526, 7, 102, 2, 2, 1526, 1527, 7, 103, 2, 2, 1527, 1673, 7, 124, 2, 2, 1528, 1529, 7, 112, 2, 2, 1529, 1530, 7, 103, 2, 2, 1530, 1673, 7, 105, 2, 2, 1531, 1532, 7, 99, 2, 2, 1532, 1533, 7, 117, 2, 2, 1533, 1673, 7, 116, 2, 2, 1534, 1535, 7, 118, 2, 2, 1535, 1536, 7, 99, 2, 2, 1536, 1673, 7, 124, 2, 2, 1537, 1538, 7, 110, 2, 2, 1538, 1539, 7, 100, 2, 2, 1539, 1540, 7, 120, 2, 2, 1540, 1673, 7, 101, 2, 2, 1541, 1542, 7, 118, 2, 2, 1542, 1543, 7, 99, 2, 2, 1543, 1673, 7, 100, 2, 2, 1544, 1545, 7, 111, 2, 2, 1545, 1546, 7, 99, 2, 2, 1546, 1673, 7, 114, 2, 2, 1547, 1548, 7, 116, 2, 2, 1548, 1549, 7, 118, 2, 2, 1549, 1673, 7, 112, 2, 2, 1550, 1551, 7, 110, 2, 2, 1551, 1552, 7, 100, 2, 2, 1552, 1553, 7, 117, 2, 2, 1553, 1673, 7, 116, 2, 2, 1554, 1555, 7, 118, 2, 2, 1555, 1556, 7, 124, 2, 2, 1556, 1673, 7, 99, 2, 2, 1557, 1558, 7, 110, 2, 2, 1558, 1559, 7, 100, 2, 2, 1559, 1560, 7, 120, 2, 2, 1560, 1673, 7, 117, 2, 2, 1561, 1562, 7, 118, 2, 2, 1562, 1563, 7, 100, 2, 2, 1563, 1673, 7, 99, 2, 2, 1564, 1565, 7, 110, 2, 2, 1565, 1566, 7, 100, 2, 2, 1566, 1567, 7, 116, 2, 2, 1567, 1673, 7, 99, 2, 2, 1568, 1569, 7, 110, 2, 2, 1569, 1570, 7, 100, 2, 2, 1570, 1571, 7, 101, 2, 2, 1571, 1673, 7, 101, 2, 2, 1572, 1573, 7, 110, 2, 2, 1573, 1574, 7, 102, 2, 2, 1574, 1673, 7, 124, 2, 2, 1575, 1576, 7, 110, 2, 2, 1576, 1577, 7, 100, 2, 2, 1577, 1578, 7, 101, 2, 2, 1578, 1673, 7, 117, 2, 2, 1579, 1580, 7, 101, 2, 2, 1580, 1581, 7, 114, 2, 2, 1581, 1673, 7, 124, 2, 2, 1582, 1583, 7, 102, 2, 2, 1583, 1584, 7, 103, 2, 2, 1584, 1673, 7, 121, 2, 2, 1585, 1586, 7, 99, 2, 2, 1586, 1587, 7, 117, 2, 2, 1587, 1673, 7, 121, 2, 2, 1588, 1589, 7, 110, 2, 2, 1589, 1590, 7, 100, 2, 2, 1590, 1591, 7, 112, 2, 2, 1591, 1673, 7, 103, 2, 2, 1592, 1593, 7, 114, 2, 2, 1593, 1594, 7, 106, 2, 2, 1594, 1673, 7, 124, 2, 2, 1595, 1596, 7, 107, 2, 2, 1596, 1597, 7, 112, 2, 2, 1597, 1673, 7, 121, 2, 2, 1598, 1599, 7, 116, 2, 2, 1599, 1600, 7, 113, 2, 2, 1600, 1673, 7, 121, 2, 2, 1601, 1602, 7, 110, 2, 2, 1602, 1603, 7, 100, 2, 2, 1603, 1604, 7, 103, 2, 2, 1604, 1673, 7, 115, 2, 2, 1605, 1606, 7, 114, 2, 2, 1606, 1607, 7, 106, 2, 2, 1607, 1673, 7, 121, 2, 2, 1608, 1609, 7, 114, 2, 2, 1609, 1610, 7, 110, 2, 2, 1610, 1673, 7, 124, 2, 2, 1611, 1612, 7, 103, 2, 2, 1612, 1613, 7, 113, 2, 2, 1613, 1673, 7, 111, 2, 2, 1614, 1615, 7, 99, 2, 2, 1615, 1616, 7, 102, 2, 2, 1616, 1617, 7, 101, 2, 2, 1617, 1673, 7, 115, 2, 2, 1618, 1619, 7, 99, 2, 2, 1619, 1620, 7, 112, 2, 2, 1620, 1621, 7, 102, 2, 2, 1621, 1673, 7, 115, 2, 2, 1622, 1623, 7, 99, 2, 2, 1623, 1624, 7, 117, 2, 2, 1624, 1625, 7, 110, 2, 2, 1625, 1673, 7, 115, 2, 2, 1626, 1627, 7, 99, 2, 2, 1627, 1628, 7, 117, 2, 2, 1628, 1629, 7, 116, 2, 2, 1629, 1673, 7, 115, 2, 2, 1630, 1631, 7, 100, 2, 2, 1631, 1632, 7, 107, 2, 2, 1632, 1633, 7, 118, 2, 2, 1633, 1673, 7, 115, 2, 2, 1634, 1635, 7, 101, 2, 2, 1635, 1636, 7, 114, 2, 2, 1636, 1673, 7, 115, 2, 2, 1637, 1638, 7, 102, 2, 2, 1638, 1639, 7, 103, 2, 2, 1639, 1673, 7, 115, 2, 2, 1640, 1641, 7, 103, 2, 2, 1641, 1642, 7, 113, 2, 2, 1642, 1643, 7, 116, 2, 2, 1643, 1673, 7, 115, 2, 2, 1644, 1645, 7, 107, 2, 2, 1645, 1646, 7, 112, 2, 2, 1646, 1673, 7, 115, 2, 2, 1647, 1648, 7, 110, 2, 2, 1648, 1649, 7, 102, 2, 2, 1649, 1673, 7, 115, 2, 2, 1650, 1651, 7, 110, 2, 2, 1651, 1652, 7, 117, 2, 2, 1652, 1653, 7, 116, 2, 2, 1653, 1673, 7, 115, 2, 2, 1654, 1655, 7, 113, 2, 2, 1655, 1656, 7, 116, 2, 2, 1656, 1673, 7, 115, 2, 2, 1657, 1658, 7, 116, 2, 2, 1658, 1659, 7, 113, 2, 2, 1659, 1660, 7, 110, 2, 2, 1660, 1673, 7, 115, 2, 2, 1661, 1662, 7, 116, 2, 2, 1662, 1663, 7, 113, 2, 2, 1663, 1664, 7, 116, 2, 2, 1664, 1673, 7, 115, 2, 2, 1665, 1666, 7, 117, 2, 2, 1666, 1667, 7, 100, 2, 2, 1667, 1668, 7, 101, 2, 2, 1668, 1673, 7, 115, 2, 2, 1669, 1670, 7, 117, 2, 2, 1670, 1671, 7, 118, 2, 2, 1671, 1673, 7, 115, 2, 2, 1672, 1122, 3, 2, 2, 2, 1672, 1125, 3, 2, 2, 2, 1672, 1128, 3, 2, 2, 2, 1672, 1131, 3, 2, 2, 2, 1672, 1134, 3, 2, 2, 2, 1672, 1137, 3, 2, 2, 2, 1672, 1140, 3, 2, 2, 2, 1672, 1143, 3, 2, 2, 2, 1672, 1146, 3, 2, 2, 2, 1672, 1149, 3, 2, 2, 2, 1672, 1152, 3, 2, 2, 2, 1672, 1155, 3, 2, 2, 2, 1672, 1158, 3, 2, 2, 2, 1672, 1161, 3, 2, 2, 2, 1672, 1164, 3, 2, 2, 2, 1672, 1167, 3, 2, 2, 2, 1672, 1170, 3, 2, 2, 2, 1672, 1173, 3, 2, 2, 2, 1672, 1176, 3, 2, 2, 2, 1672, 1179, 3, 2, 2, 2, 1672, 1182, 3, 2, 2, 2, 1672, 1185, 3, 2, 2, 2, 1672, 1188, 3, 2, 2, 2, 1672, 1191, 3, 2, 2, 2, 1672, 1194, 3, 2, 2, 2, 1672, 1197, 3, 2, 2, 2, 1672, 1200, 3, 2, 2, 2, 1672, 1203, 3, 2, 2, 2, 1672, 1206, 3, 2, 2, 2, 1672, 1209, 3, 2, 2, 2, 1672, 1212, 3, 2, 2, 2, 1672, 1215, 3, 2, 2, 2, 1672, 1218, 3, 2, 2, 2, 1672, 1221, 3, 2, 2, 2, 1672, 1224, 3, 2, 2, 2, 1672, 1227, 3, 2, 2, 2, 1672, 1230, 3, 2, 2, 2, 1672, 1233, 3, 2, 2, 2, 1672, 1236, 3, 2, 2, 2, 1672, 1239, 3, 2, 2, 2, 1672, 1242, 3, 2, 2, 2, 1672, 1245, 3, 2, 2, 2, 1672, 1248, 3, 2, 2, 2, 1672, 1251, 3, 2, 2, 2, 1672, 1254, 3, 2, 2, 2, 1672, 1257, 3, 2, 2, 2, 1672, 1260, 3, 2, 2, 2, 1672, 1263, 3, 2, 2, 2, 1672, 1266, 3, 2, 2, 2, 1672, 1269, 3, 2, 2, 2, 1672, 1272, 3, 2, 2, 2, 1672, 1275, 3, 2, 2, 2, 1672, 1278, 3, 2, 2, 2, 1672, 1281, 3, 2, 2, 2, 1672, 1284, 3, 2, 2, 2, 1672, 1287, 3, 2, 2, 2, 1672, 1290, 3, 2, 2, 2, 1672, 1293, 3, 2, 2, 2, 1672, 1296, 3, 2, 2, 2, 1672, 1299, 3, 2, 2, 2, 1672, 1302, 3, 2, 2, 2, 1672, 1305, 3, 2, 2, 2, 1672, 1308, 3, 2, 2, 2, 1672, 1311, 3, 2, 2, 2, 1672, 1314, 3, 2, 2, 2, 1672, 1317, 3, 2, 2, 2, 1672, 1320, 3, 2, 2, 2, 1672, 1323, 3, 2, 2, 2, 1672, 1326, 3, 2, 2, 2, 1672, 1329, 3, 2, 2, 2, 1672, 1332, 3, 2, 2, 2, 1672, 1335, 3, 2, 2, 2, 1672, 1338, 3, 2, 2, 2, 1672, 1341, 3, 2, 2, 2, 1672, 1344, 3, 2, 2, 2, 1672, 1348, 3, 2, 2, 2, 1672, 1352, 3, 2, 2, 2, 1672, 1356, 3, 2, 2, 2, 1672, 1360, 3, 2, 2, 2, 1672, 1364, 3, 2, 2, 2, 1672, 1368, 3, 2, 2, 2, 1672, 1372, 3, 2, 2, 2, 1672, 1376, 3, 2, 2, 2, 1672, 1380, 3, 2, 2, 2, 1672, 1384, 3, 2, 2, 2, 1672, 1388, 3, 2, 2, 2, 1672, 1392, 3, 2, 2, 2, 1672, 1396, 3, 2, 2, 2, 1672, 1400, 3, 2, 2, 2, 1672, 1404, 3, 2, 2, 2, 1672, 1408, 3, 2, 2, 2, 1672, 1411, 3, 2, 2, 2, 1672, 1414, 3, 2, 2, 2, 1672, 1417, 3, 2, 2, 2, 1672, 1420, 3, 2, 2, 2, 1672, 1423, 3, 2, 2, 2, 1672, 1427, 3, 2, 2, 2, 1672, 1431, 3, 2, 2, 2, 1672, 1435, 3, 2, 2, 2, 1672, 1439, 3, 2, 2, 2, 1672, 1443, 3, 2, 2, 2, 1672, 1447, 3, 2, 2, 2, 1672, 1451, 3, 2, 2, 2, 1672, 1455, 3, 2, 2, 2, 1672, 1459, 3, 2, 2, 2, 1672, 1463, 3, 2, 2, 2, 1672, 1467, 3, 2, 2, 2, 1672, 1471, 3, 2, 2, 2, 1672, 1475, 3, 2, 2, 2, 1672, 1479, 3, 2, 2, 2, 1672, 1483, 3, 2, 2, 2, 1672, 1487, 3, 2, 2, 2, 1672, 1490, 3, 2, 2, 2, 1672, 1493, 3, 2, 2, 2, 1672, 1496, 3, 2, 2, 2, 1672, 1499, 3, 2, 2, 2, 1672, 1502, 3, 2, 2, 2, 1672, 1505, 3, 2, 2, 2, 1672, 1508, 3, 2, 2, 2, 1672, 1511, 3, 2, 2, 2, 1672, 1515, 3, 2, 2, 2, 1672, 1518, 3, 2, 2, 2, 1672, 1521, 3, 2, 2, 2, 1672, 1525, 3, 2, 2, 2, 1672, 1528, 3, 2, 2, 2, 1672, 1531, 3, 2, 2, 2, 1672, 1534, 3, 2, 2, 2, 1672, 1537, 3, 2, 2, 2, 1672, 1541, 3, 2, 2, 2, 1672, 1544, 3, 2, 2, 2, 1672, 1547, 3, 2, 2, 2, 1672, 1550, 3, 2, 2, 2, 1672, 1554, 3, 2, 2, 2, 1672, 1557, 3, 2, 2, 2, 1672, 1561, 3, 2, 2, 2, 1672, 1564, 3, 2, 2, 2, 1672, 1568, 3, 2, 2, 2, 1672, 1572, 3, 2, 2, 2, 1672, 1575, 3, 2, 2, 2, 1672, 1579, 3, 2, 2, 2, 1672, 1582, 3, 2, 2, 2, 1672, 1585, 3, 2, 2, 2, 1672, 1588, 3, 2, 2, 2, 1672, 1592, 3, 2, 2, 2, 1672, 1595, 3, 2, 2, 2, 1672, 1598, 3, 2, 2, 2, 1672, 1601, 3, 2, 2, 2, 1672, 1605, 3, 2, 2, 2, 1672, 1608, 3, 2, 2, 2, 1672, 1611, 3, 2, 2, 2, 1672, 1614, 3, 2, 2, 2, 1672, 1618, 3, 2, 2, 2, 1672, 1622, 3, 2, 2, 2, 1672, 1626, 3, 2, 2, 2, 1672, 1630, 3, 2, 2, 2, 1672, 1634, 3, 2, 2, 2, 1672, 1637, 3, 2, 2, 2, 1672, 1640, 3, 2, 2, 2, 1672, 1644, 3, 2, 2, 2, 1672, 1647, 3, 2, 2, 2, 1672, 1650, 3, 2, 2, 2, 1672, 1654, 3, 2, 2, 2, 1672, 1657, 3, 2, 2, 2, 1672, 1661, 3, 2, 2, 2, 1672, 1665, 3, 2, 2, 2, 1672, 1669, 3, 2, 2, 2, 1673, 240, 3, 2, 2, 2, 1674, 1675, 7, 37, 2, 2, 1675, 242, 3, 2, 2, 2, 1676, 1677, 7, 60, 2, 2, 1677, 244, 3, 2, 2, 2, 1678, 1679, 7, 46, 2, 2, 1679, 246, 3, 2, 2, 2, 1680, 1681, 7, 42, 2, 2, 1681, 248, 3, 2, 2, 2, 1682, 1683, 7, 43, 2, 2, 1683, 250, 3, 2, 2, 2, 1684, 1685, 7, 93, 2, 2, 1685, 252, 3, 2, 2, 2, 1686, 1687, 7, 95, 2, 2, 1687, 254, 3, 2, 2, 2, 1688, 1689, 7, 48, 2, 2, 1689, 256, 3, 2, 2, 2, 1690, 1691, 7, 62, 2, 2, 1691, 1692, 7, 62, 2, 2, 1692, 258, 3, 2, 2, 2, 1693, 1694, 7, 64, 2, 2, 1694, 1695, 7, 64, 2, 2, 1695, 260, 3, 2, 2, 2, 1696, 1697, 7, 45, 2, 2, 1697, 262, 3, 2, 2, 2, 1698, 1699, 7, 47, 2, 2, 1699, 264, 3, 2, 2, 2, 1700, 1701, 7, 62, 2, 2, 1701, 266, 3, 2, 2, 2, 1702, 1703, 7, 64, 2, 2, 1703, 268, 3, 2, 2, 2, 1704, 1705, 7, 44, 2, 2, 1705, 270, 3, 2, 2, 2, 1706, 1707, 7, 49, 2, 2, 1707, 272, 3, 2, 2, 2, 1708, 1709, 7, 125, 2, 2, 1709, 1710, 8, 136, 9, 2, 1710, 274, 3, 2, 2, 2, 1711, 1712, 7, 127, 2, 2, 1712, 1713, 8, 137, 10, 2, 1713, 276, 3, 2, 2, 2, 1714, 1717, 5, 279, 139, 2, 1715, 1717, 5, 287, 143, 2, 1716, 1714, 3, 2, 2, 2, 1716, 1715, 3, 2, 2, 2, 1717, 278, 3, 2, 2, 2, 1718, 1722, 5, 281, 140, 2, 1719, 1722, 5, 283, 141, 2, 1720, 1722, 5, 285, 142, 2, 1721, 1718, 3, 2, 2, 2, 1721, 1719, 3, 2, 2, 2, 1721, 1720, 3, 2, 2, 2, 1722, 280, 3, 2, 2, 2, 1723, 1727, 7, 39, 2, 2, 1724, 1726, 5, 295, 147, 2, 1725, 1724, 3, 2, 2, 2, 1726, 1729, 3, 2, 2, 2, 1727, 1725, 3, 2, 2, 2, 1727, 1728, 3, 2, 2, 2, 1728, 1730, 3, 2, 2, 2, 1729, 1727, 3, 2, 2, 2, 1730, 1732, 7, 48, 2, 2, 1731, 1733, 5, 295, 147, 2, 1732, 1731, 3, 2, 2, 2, 1733, 1734, 3, 2, 2, 2, 1734, 1732, 3, 2, 2, 2, 1734, 1735, 3, 2, 2, 2, 1735, 282, 3, 2, 2, 2, 1736, 1738, 5, 297, 148, 2, 1737, 1736, 3, 2, 2, 2, 1738, 1741, 3, 2, 2, 2, 1739, 1737, 3, 2, 2, 2, 1739, 1740, 3, 2, 2, 2, 1740, 1742, 3, 2, 2, 2, 1741, 1739, 3, 2, 2, 2, 1742, 1744, 7, 48, 2, 2, 1743, 1745, 5, 297, 148, 2, 1744, 1743, 3, 2, 2, 2, 1745, 1746, 3, 2, 2, 2, 1746, 1744, 3, 2, 2, 2, 1746, 1747, 3, 2, 2, 2, 1747, 284, 3, 2, 2, 2, 1748, 1752, 7, 38, 2, 2, 1749, 1751, 5, 299, 149, 2, 1750, 1749, 3, 2, 2, 2, 1751, 1754, 3, 2, 2, 2, 1752, 1750, 3, 2, 2, 2, 1752, 1753, 3, 2, 2, 2, 1753, 1755, 3, 2, 2, 2, 1754, 1752, 3, 2, 2, 2, 1755, 1757, 7, 48, 2, 2, 1756, 1758, 5, 299, 149, 2, 1757, 1756, 3, 2, 2, 2, 1758, 1759, 3, 2, 2, 2, 1759, 1757, 3, 2, 2, 2, 1759, 1760, 3, 2, 2, 2, 1760, 286, 3, 2, 2, 2, 1761, 1765, 5, 291, 145, 2, 1762, 1765, 5, 293, 146, 2, 1763, 1765, 5, 289, 144, 2, 1764, 1761, 3, 2, 2, 2, 1764, 1762, 3, 2, 2, 2, 1764, 1763, 3, 2, 2, 2, 1765, 288, 3, 2, 2, 2, 1766, 1768, 7, 39, 2, 2, 1767, 1769, 5, 295, 147, 2, 1768, 1767, 3, 2, 2, 2, 1769, 1770, 3, 2, 2, 2, 1770, 1768, 3, 2, 2, 2, 1770, 1771, 3, 2, 2, 2, 1771, 290, 3, 2, 2, 2, 1772, 1774, 5, 297, 148, 2, 1773, 1772, 3, 2, 2, 2, 1774, 1775, 3, 2, 2, 2, 1775, 1773, 3, 2, 2, 2, 1775, 1776, 3, 2, 2, 2, 1776, 292, 3, 2, 2, 2, 1777, 1779, 7, 38, 2, 2, 1778, 1780, 5, 299, 149, 2, 1779, 1778, 3, 2, 2, 2, 1780, 1781, 3, 2, 2, 2, 1781, 1779, 3, 2, 2, 2, 1781, 1782, 3, 2, 2, 2, 1782, 294, 3, 2, 2, 2, 1783, 1784, 9, 5, 2, 2, 1784, 296, 3, 2, 2, 2, 1785, 1786, 9, 6, 2, 2, 1786, 298, 3, 2, 2, 2, 1787, 1788, 9, 7, 2, 2, 1788, 300, 3, 2, 2, 2, 1789, 1793, 7, 41, 2, 2, 1790, 1791, 7, 94, 2, 2, 1791, 1794, 9, 14, 2, 2, 1792, 1794, 10, 16, 2, 2, 1793, 1790, 3, 2, 2, 2, 1793, 1792, 3, 2, 2, 2, 1794, 1795, 3, 2, 2, 2, 1795, 1796, 7, 41, 2, 2, 1796, 302, 3, 2, 2, 2, 1797, 1799, 5, 305, 152, 2, 1798, 1800, 9, 19, 2, 2, 1799, 1798, 3, 2, 2, 2, 1800, 1801, 3, 2, 2, 2, 1801, 1799, 3, 2, 2, 2, 1801, 1802, 3, 2, 2, 2, 1802, 304, 3, 2, 2, 2, 1803, 1807, 7, 35, 2, 2, 1804, 1806, 5, 311, 155, 2, 1805, 1804, 3, 2, 2, 2, 1806, 1809, 3, 2, 2, 2, 1807, 1805, 3, 2, 2, 2, 1807, 1808, 3, 2, 2, 2, 1808, 306, 3, 2, 2, 2, 1809, 1807, 3, 2, 2, 2, 1810, 1814, 5, 309, 154, 2, 1811, 1813, 5, 311, 155, 2, 1812, 1811, 3, 2, 2, 2, 1813, 1816, 3, 2, 2, 2, 1814, 1812, 3, 2, 2, 2, 1814, 1815, 3, 2, 2, 2, 1815, 308, 3, 2, 2, 2, 1816, 1814, 3, 2, 2, 2, 1817, 1818, 9, 8, 2, 2, 1818, 310, 3, 2, 2, 2, 1819, 1820, 9, 9, 2, 2, 1820, 312, 3, 2, 2, 2, 1821, 1823, 9, 17, 2, 2, 1822, 1821, 3, 2, 2, 2, 1823, 1824, 3, 2, 2, 2, 1824, 1822, 3, 2, 2, 2, 1824, 1825, 3, 2, 2, 2, 1825, 1826, 3, 2, 2, 2, 1826, 1827, 8, 156, 7, 2, 1827, 314, 3, 2, 2, 2, 1828, 1829, 7, 49, 2, 2, 1829, 1830, 7, 49, 2, 2, 1830, 1834, 3, 2, 2, 2, 1831, 1833, 10, 18, 2, 2, 1832, 1831, 3, 2, 2, 2, 1833, 1836, 3, 2, 2, 2, 1834, 1832, 3, 2, 2, 2, 1834, 1835, 3, 2, 2, 2, 1835, 1837, 3, 2, 2, 2, 1836, 1834, 3, 2, 2, 2, 1837, 1838, 8, 157, 8, 2, 1838, 316, 3, 2, 2, 2, 1839, 1840, 7, 49, 2, 2, 1840, 1841, 7, 44, 2, 2, 1841, 1845, 3, 2, 2, 2, 1842, 1844, 11, 2, 2, 2, 1843, 1842, 3, 2, 2, 2, 1844, 1847, 3, 2, 2, 2, 1845, 1846, 3, 2, 2, 2, 1845, 1843, 3, 2, 2, 2, 1846, 1848, 3, 2, 2, 2, 1847, 1845, 3, 2, 2, 2, 1848, 1849, 7, 44, 2, 2, 1849, 1850, 7, 49, 2, 2, 1850, 1851, 3, 2, 2, 2, 1851, 1852, 8, 158, 8, 2, 1852, 318, 3, 2, 2, 2, 1853, 1855, 7, 62, 2, 2, 1854, 1856, 9, 20, 2, 2, 1855, 1854, 3, 2, 2, 2, 1856, 1857, 3, 2, 2, 2, 1857, 1855, 3, 2, 2, 2, 1857, 1858, 3, 2, 2, 2, 1858, 1859, 3, 2, 2, 2, 1859, 1860, 7, 64, 2, 2, 1860, 1861, 8, 159, 11, 2, 1861, 320, 3, 2, 2, 2, 1862, 1868, 7, 36, 2, 2, 1863, 1864, 7, 94, 2, 2, 1864, 1867, 7, 36, 2, 2, 1865, 1867, 10, 10, 2, 2, 1866, 1863, 3, 2, 2, 2, 1866, 1865, 3, 2, 2, 2, 1867, 1870, 3, 2, 2, 2, 1868, 1866, 3, 2, 2, 2, 1868, 1869, 3, 2, 2, 2, 1869, 1871, 3, 2, 2, 2, 1870, 1868, 3, 2, 2, 2, 1871, 1872, 7, 36, 2, 2, 1872, 1873, 8, 160, 12, 2, 1873, 322, 3, 2, 2, 2, 1874, 1876, 9, 17, 2, 2, 1875, 1874, 3, 2, 2, 2, 1876, 1877, 3, 2, 2, 2, 1877, 1875, 3, 2, 2, 2, 1877, 1878, 3, 2, 2, 2, 1878, 1879, 3, 2, 2, 2, 1879, 1880, 8, 161, 7, 2, 1880, 324, 3, 2, 2, 2, 1881, 1882, 7, 49, 2, 2, 1882, 1883, 7, 49, 2, 2, 1883, 1887, 3, 2, 2, 2, 1884, 1886, 10, 18, 2, 2, 1885, 1884, 3, 2, 2, 2, 1886, 1889, 3, 2, 2, 2, 1887, 1885, 3, 2, 2, 2, 1887, 1888, 3, 2, 2, 2, 1888, 1890, 3, 2, 2, 2, 1889, 1887, 3, 2, 2, 2, 1890, 1891, 8, 162, 8, 2, 1891, 326, 3, 2, 2, 2, 1892, 1893, 7, 49, 2, 2, 1893, 1894, 7, 44, 2, 2, 1894, 1898, 3, 2, 2, 2, 1895, 1897, 11, 2, 2, 2, 1896, 1895, 3, 2, 2, 2, 1897, 1900, 3, 2, 2, 2, 1898, 1899, 3, 2, 2, 2, 1898, 1896, 3, 2, 2, 2, 1899, 1901, 3, 2, 2, 2, 1900, 1898, 3, 2, 2, 2, 1901, 1902, 7, 44, 2, 2, 1902, 1903, 7, 49, 2, 2, 1903, 1904, 3, 2, 2, 2, 1904, 1905, 8, 163, 8, 2, 1905, 328, 3, 2, 2, 2, 68, 2, 3, 4, 438, 604, 769, 808, 819, 827, 875, 931, 936, 943, 948, 955, 960, 967, 974, 979, 986, 991, 996, 1003, 1009, 1011, 1016, 1023, 1028, 1040, 1053, 1055, 1060, 1064, 1066, 1069, 1077, 1080, 1087, 1097, 1108, 1672, 1716, 1721, 1727, 1734, 1739, 1746, 1752, 1759, 1764, 1770, 1775, 1781, 1793, 1801, 1807, 1814, 1824, 1834, 1845, 1857, 1866, 1868, 1877, 1887, 1898, 13, 3, 2, 2, 3, 66, 3, 3, 85, 4, 3, 86, 5, 3, 110, 6, 2, 3, 2, 2, 4, 2, 3, 136, 7, 3, 137, 8, 3, 159, 9, 3, 160, 10] \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java index b7772de15..56a7d5160 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java @@ -99,7 +99,7 @@ public class KickCLexer extends Lexer { "'--'", "'&'", "'~'", "'^'", "'|'", null, null, "'=='", "'!='", null, "'<='", "'>='", null, "'&&'", "'||'", "'='", null, "'typedef'", "'const'", "'extern'", "'export'", "'align'", "'inline'", "'volatile'", "'static'", - "'interrupt'", "'register'", "'__zp_reserve'", "'__address'", "'__zp'", + "'__interrupt'", "'register'", "'__zp_reserve'", "'__address'", "'__zp'", "'__mem'", "'__ssa'", "'__ma'", "'__intrinsic'", null, "'if'", "'else'", "'while'", "'do'", "'for'", "'switch'", "'return'", "'break'", "'continue'", "'asm'", "'default'", "'case'", "'struct'", "'enum'", "'sizeof'", "'typeid'", @@ -311,7 +311,7 @@ public class KickCLexer extends Lexer { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u009b\u0770\b\1\b"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u009b\u0772\b\1\b"+ "\1\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t"+ "\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21"+ "\t\21\4\22\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30"+ @@ -342,40 +342,40 @@ public class KickCLexer extends Lexer { "\3&\3&\3&\3&\3&\3&\3&\3&\3&\5&\u01b7\n&\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3"+ "\'\3(\3(\3(\3(\3(\3(\3)\3)\3)\3)\3)\3)\3)\3*\3*\3*\3*\3*\3*\3*\3+\3+\3"+ "+\3+\3+\3+\3,\3,\3,\3,\3,\3,\3,\3-\3-\3-\3-\3-\3-\3-\3-\3-\3.\3.\3.\3"+ - ".\3.\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3\60\3\60\3\60\3\60\3\60\3\60"+ - "\3\60\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61"+ - "\3\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\63\3\63"+ - "\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3\65"+ - "\3\65\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67"+ - "\3\67\3\67\3\67\3\67\38\38\38\38\38\38\38\38\38\38\38\38\38\38\38\38\3"+ - "8\38\38\38\38\38\38\38\38\38\38\38\38\58\u025b\n8\39\39\39\3:\3:\3:\3"+ - ":\3:\3;\3;\3;\3;\3;\3;\3<\3<\3<\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>\3>\3?\3"+ - "?\3?\3?\3?\3?\3?\3@\3@\3@\3@\3@\3@\3A\3A\3A\3A\3A\3A\3A\3A\3A\3B\3B\3"+ - "B\3B\3B\3B\3C\3C\3C\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3E\3E\3E\3E\3E\3E\3"+ - "E\3F\3F\3F\3F\3F\3G\3G\3G\3G\3G\3G\3G\3H\3H\3H\3H\3H\3H\3H\3I\3I\3I\3"+ - "I\3I\3I\3I\3I\3J\3J\3J\3J\3J\3J\3J\3J\3K\3K\3K\3K\3K\3K\3K\3K\3K\3L\3"+ - "L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3M\3M\3N\3N\3N\3N\3N\3N\3O\3O\3O\3O\3"+ - "O\3O\3O\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\5Q\u0300\nQ\3"+ - "R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3"+ - "R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\5R\u0327\nR\3S\3S\3S\3S\3S\3"+ - "S\3S\3S\3S\5S\u0332\nS\3T\3T\3T\3T\7T\u0338\nT\fT\16T\u033b\13T\3T\3T"+ - "\3T\3U\3U\3U\3U\3U\3U\3U\3U\3U\3U\3V\3V\3V\3V\3V\3V\3V\3V\3V\3V\3V\3W"+ - "\3W\3W\3W\3W\3W\3W\3W\3X\3X\3X\3X\3X\3X\3X\3X\3Y\3Y\3Y\3Y\3Y\5Y\u036a"+ + ".\3.\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3\60\3\60\3\60\3\60\3\60"+ + "\3\60\3\60\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61"+ + "\3\61\3\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\63"+ + "\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\65"+ + "\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67\3\67\3\67\3\67"+ + "\3\67\3\67\3\67\3\67\3\67\38\38\38\38\38\38\38\38\38\38\38\38\38\38\3"+ + "8\38\38\38\38\38\38\38\38\38\38\38\38\38\38\58\u025d\n8\39\39\39\3:\3"+ + ":\3:\3:\3:\3;\3;\3;\3;\3;\3;\3<\3<\3<\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>\3"+ + ">\3?\3?\3?\3?\3?\3?\3?\3@\3@\3@\3@\3@\3@\3A\3A\3A\3A\3A\3A\3A\3A\3A\3"+ + "B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3E\3E\3E\3E\3"+ + "E\3E\3E\3F\3F\3F\3F\3F\3G\3G\3G\3G\3G\3G\3G\3H\3H\3H\3H\3H\3H\3H\3I\3"+ + "I\3I\3I\3I\3I\3I\3I\3J\3J\3J\3J\3J\3J\3J\3J\3K\3K\3K\3K\3K\3K\3K\3K\3"+ + "K\3L\3L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3M\3M\3N\3N\3N\3N\3N\3N\3O\3O\3"+ + "O\3O\3O\3O\3O\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\5Q\u0302"+ + "\nQ\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R"+ + "\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\3R\5R\u0329\nR\3S\3S\3S\3S"+ + "\3S\3S\3S\3S\3S\5S\u0334\nS\3T\3T\3T\3T\7T\u033a\nT\fT\16T\u033d\13T\3"+ + "T\3T\3T\3U\3U\3U\3U\3U\3U\3U\3U\3U\3U\3V\3V\3V\3V\3V\3V\3V\3V\3V\3V\3"+ + "V\3W\3W\3W\3W\3W\3W\3W\3W\3X\3X\3X\3X\3X\3X\3X\3X\3Y\3Y\3Y\3Y\3Y\5Y\u036c"+ "\nY\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3[\3[\3[\3[\3[\3[\3[\3\\\3\\\3\\\3\\\3\\\3\\"+ "\3\\\3\\\3]\3]\3]\3]\3^\3^\3^\3^\3^\3^\3_\3_\3_\3_\3_\3_\3`\3`\3`\3`\3"+ - "`\3`\3`\3a\3a\3a\3a\3a\3a\3a\3b\3b\5b\u03a2\nb\3c\3c\3c\5c\u03a7\nc\3"+ - "d\3d\3d\3d\3d\5d\u03ae\nd\3d\7d\u03b1\nd\fd\16d\u03b4\13d\3d\3d\6d\u03b8"+ - "\nd\rd\16d\u03b9\3e\7e\u03bd\ne\fe\16e\u03c0\13e\3e\3e\6e\u03c4\ne\re"+ - "\16e\u03c5\3f\3f\3f\3f\3f\5f\u03cd\nf\3f\7f\u03d0\nf\ff\16f\u03d3\13f"+ - "\3f\3f\6f\u03d7\nf\rf\16f\u03d8\3g\3g\3g\5g\u03de\ng\3g\3g\3g\5g\u03e3"+ - "\ng\3h\3h\3h\6h\u03e8\nh\rh\16h\u03e9\3h\3h\6h\u03ee\nh\rh\16h\u03ef\5"+ - "h\u03f2\nh\3i\6i\u03f5\ni\ri\16i\u03f6\3j\3j\3j\3j\3j\5j\u03fe\nj\3j\6"+ - "j\u0401\nj\rj\16j\u0402\3k\3k\3l\3l\3m\3m\3n\3n\7n\u040d\nn\fn\16n\u0410"+ - "\13n\3n\3n\3o\3o\3p\3p\3q\3q\3q\3q\7q\u041c\nq\fq\16q\u041f\13q\3q\3q"+ - "\5q\u0423\nq\3q\3q\5q\u0427\nq\5q\u0429\nq\3q\5q\u042c\nq\3r\3r\3r\3r"+ - "\3r\3r\5r\u0434\nr\3r\5r\u0437\nr\3r\3r\3s\6s\u043c\ns\rs\16s\u043d\3"+ - "s\3s\3t\3t\3t\3t\7t\u0446\nt\ft\16t\u0449\13t\3t\3t\3u\3u\3u\3u\7u\u0451"+ - "\nu\fu\16u\u0454\13u\3u\3u\3u\3u\3u\3v\3v\3v\3v\3v\3v\3w\3w\3w\3w\3w\3"+ + "`\3`\3`\3a\3a\3a\3a\3a\3a\3a\3b\3b\5b\u03a4\nb\3c\3c\3c\5c\u03a9\nc\3"+ + "d\3d\3d\3d\3d\5d\u03b0\nd\3d\7d\u03b3\nd\fd\16d\u03b6\13d\3d\3d\6d\u03ba"+ + "\nd\rd\16d\u03bb\3e\7e\u03bf\ne\fe\16e\u03c2\13e\3e\3e\6e\u03c6\ne\re"+ + "\16e\u03c7\3f\3f\3f\3f\3f\5f\u03cf\nf\3f\7f\u03d2\nf\ff\16f\u03d5\13f"+ + "\3f\3f\6f\u03d9\nf\rf\16f\u03da\3g\3g\3g\5g\u03e0\ng\3g\3g\3g\5g\u03e5"+ + "\ng\3h\3h\3h\6h\u03ea\nh\rh\16h\u03eb\3h\3h\6h\u03f0\nh\rh\16h\u03f1\5"+ + "h\u03f4\nh\3i\6i\u03f7\ni\ri\16i\u03f8\3j\3j\3j\3j\3j\5j\u0400\nj\3j\6"+ + "j\u0403\nj\rj\16j\u0404\3k\3k\3l\3l\3m\3m\3n\3n\7n\u040f\nn\fn\16n\u0412"+ + "\13n\3n\3n\3o\3o\3p\3p\3q\3q\3q\3q\7q\u041e\nq\fq\16q\u0421\13q\3q\3q"+ + "\5q\u0425\nq\3q\3q\5q\u0429\nq\5q\u042b\nq\3q\5q\u042e\nq\3r\3r\3r\3r"+ + "\3r\3r\5r\u0436\nr\3r\5r\u0439\nr\3r\3r\3s\6s\u043e\ns\rs\16s\u043f\3"+ + "s\3s\3t\3t\3t\3t\7t\u0448\nt\ft\16t\u044b\13t\3t\3t\3u\3u\3u\3u\7u\u0453"+ + "\nu\fu\16u\u0456\13u\3u\3u\3u\3u\3u\3v\3v\3v\3v\3v\3v\3w\3w\3w\3w\3w\3"+ "w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3"+ "w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3"+ "w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3"+ @@ -399,37 +399,37 @@ public class KickCLexer extends Lexer { "w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3"+ "w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3"+ "w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3"+ - "w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\5w\u0687\nw\3x\3x\3y\3"+ + "w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\3w\5w\u0689\nw\3x\3x\3y\3"+ "y\3z\3z\3{\3{\3|\3|\3}\3}\3~\3~\3\177\3\177\3\u0080\3\u0080\3\u0080\3"+ "\u0081\3\u0081\3\u0081\3\u0082\3\u0082\3\u0083\3\u0083\3\u0084\3\u0084"+ "\3\u0085\3\u0085\3\u0086\3\u0086\3\u0087\3\u0087\3\u0088\3\u0088\3\u0088"+ - "\3\u0089\3\u0089\3\u0089\3\u008a\3\u008a\5\u008a\u06b3\n\u008a\3\u008b"+ - "\3\u008b\3\u008b\5\u008b\u06b8\n\u008b\3\u008c\3\u008c\7\u008c\u06bc\n"+ - "\u008c\f\u008c\16\u008c\u06bf\13\u008c\3\u008c\3\u008c\6\u008c\u06c3\n"+ - "\u008c\r\u008c\16\u008c\u06c4\3\u008d\7\u008d\u06c8\n\u008d\f\u008d\16"+ - "\u008d\u06cb\13\u008d\3\u008d\3\u008d\6\u008d\u06cf\n\u008d\r\u008d\16"+ - "\u008d\u06d0\3\u008e\3\u008e\7\u008e\u06d5\n\u008e\f\u008e\16\u008e\u06d8"+ - "\13\u008e\3\u008e\3\u008e\6\u008e\u06dc\n\u008e\r\u008e\16\u008e\u06dd"+ - "\3\u008f\3\u008f\3\u008f\5\u008f\u06e3\n\u008f\3\u0090\3\u0090\6\u0090"+ - "\u06e7\n\u0090\r\u0090\16\u0090\u06e8\3\u0091\6\u0091\u06ec\n\u0091\r"+ - "\u0091\16\u0091\u06ed\3\u0092\3\u0092\6\u0092\u06f2\n\u0092\r\u0092\16"+ - "\u0092\u06f3\3\u0093\3\u0093\3\u0094\3\u0094\3\u0095\3\u0095\3\u0096\3"+ - "\u0096\3\u0096\3\u0096\5\u0096\u0700\n\u0096\3\u0096\3\u0096\3\u0097\3"+ - "\u0097\6\u0097\u0706\n\u0097\r\u0097\16\u0097\u0707\3\u0098\3\u0098\7"+ - "\u0098\u070c\n\u0098\f\u0098\16\u0098\u070f\13\u0098\3\u0099\3\u0099\7"+ - "\u0099\u0713\n\u0099\f\u0099\16\u0099\u0716\13\u0099\3\u009a\3\u009a\3"+ - "\u009b\3\u009b\3\u009c\6\u009c\u071d\n\u009c\r\u009c\16\u009c\u071e\3"+ - "\u009c\3\u009c\3\u009d\3\u009d\3\u009d\3\u009d\7\u009d\u0727\n\u009d\f"+ - "\u009d\16\u009d\u072a\13\u009d\3\u009d\3\u009d\3\u009e\3\u009e\3\u009e"+ - "\3\u009e\7\u009e\u0732\n\u009e\f\u009e\16\u009e\u0735\13\u009e\3\u009e"+ - "\3\u009e\3\u009e\3\u009e\3\u009e\3\u009f\3\u009f\6\u009f\u073e\n\u009f"+ - "\r\u009f\16\u009f\u073f\3\u009f\3\u009f\3\u009f\3\u00a0\3\u00a0\3\u00a0"+ - "\3\u00a0\7\u00a0\u0749\n\u00a0\f\u00a0\16\u00a0\u074c\13\u00a0\3\u00a0"+ - "\3\u00a0\3\u00a0\3\u00a1\6\u00a1\u0752\n\u00a1\r\u00a1\16\u00a1\u0753"+ - "\3\u00a1\3\u00a1\3\u00a2\3\u00a2\3\u00a2\3\u00a2\7\u00a2\u075c\n\u00a2"+ - "\f\u00a2\16\u00a2\u075f\13\u00a2\3\u00a2\3\u00a2\3\u00a3\3\u00a3\3\u00a3"+ - "\3\u00a3\7\u00a3\u0767\n\u00a3\f\u00a3\16\u00a3\u076a\13\u00a3\3\u00a3"+ - "\3\u00a3\3\u00a3\3\u00a3\3\u00a3\6\u0339\u0452\u0733\u0768\2\u00a4\5\4"+ + "\3\u0089\3\u0089\3\u0089\3\u008a\3\u008a\5\u008a\u06b5\n\u008a\3\u008b"+ + "\3\u008b\3\u008b\5\u008b\u06ba\n\u008b\3\u008c\3\u008c\7\u008c\u06be\n"+ + "\u008c\f\u008c\16\u008c\u06c1\13\u008c\3\u008c\3\u008c\6\u008c\u06c5\n"+ + "\u008c\r\u008c\16\u008c\u06c6\3\u008d\7\u008d\u06ca\n\u008d\f\u008d\16"+ + "\u008d\u06cd\13\u008d\3\u008d\3\u008d\6\u008d\u06d1\n\u008d\r\u008d\16"+ + "\u008d\u06d2\3\u008e\3\u008e\7\u008e\u06d7\n\u008e\f\u008e\16\u008e\u06da"+ + "\13\u008e\3\u008e\3\u008e\6\u008e\u06de\n\u008e\r\u008e\16\u008e\u06df"+ + "\3\u008f\3\u008f\3\u008f\5\u008f\u06e5\n\u008f\3\u0090\3\u0090\6\u0090"+ + "\u06e9\n\u0090\r\u0090\16\u0090\u06ea\3\u0091\6\u0091\u06ee\n\u0091\r"+ + "\u0091\16\u0091\u06ef\3\u0092\3\u0092\6\u0092\u06f4\n\u0092\r\u0092\16"+ + "\u0092\u06f5\3\u0093\3\u0093\3\u0094\3\u0094\3\u0095\3\u0095\3\u0096\3"+ + "\u0096\3\u0096\3\u0096\5\u0096\u0702\n\u0096\3\u0096\3\u0096\3\u0097\3"+ + "\u0097\6\u0097\u0708\n\u0097\r\u0097\16\u0097\u0709\3\u0098\3\u0098\7"+ + "\u0098\u070e\n\u0098\f\u0098\16\u0098\u0711\13\u0098\3\u0099\3\u0099\7"+ + "\u0099\u0715\n\u0099\f\u0099\16\u0099\u0718\13\u0099\3\u009a\3\u009a\3"+ + "\u009b\3\u009b\3\u009c\6\u009c\u071f\n\u009c\r\u009c\16\u009c\u0720\3"+ + "\u009c\3\u009c\3\u009d\3\u009d\3\u009d\3\u009d\7\u009d\u0729\n\u009d\f"+ + "\u009d\16\u009d\u072c\13\u009d\3\u009d\3\u009d\3\u009e\3\u009e\3\u009e"+ + "\3\u009e\7\u009e\u0734\n\u009e\f\u009e\16\u009e\u0737\13\u009e\3\u009e"+ + "\3\u009e\3\u009e\3\u009e\3\u009e\3\u009f\3\u009f\6\u009f\u0740\n\u009f"+ + "\r\u009f\16\u009f\u0741\3\u009f\3\u009f\3\u009f\3\u00a0\3\u00a0\3\u00a0"+ + "\3\u00a0\7\u00a0\u074b\n\u00a0\f\u00a0\16\u00a0\u074e\13\u00a0\3\u00a0"+ + "\3\u00a0\3\u00a0\3\u00a1\6\u00a1\u0754\n\u00a1\r\u00a1\16\u00a1\u0755"+ + "\3\u00a1\3\u00a1\3\u00a2\3\u00a2\3\u00a2\3\u00a2\7\u00a2\u075e\n\u00a2"+ + "\f\u00a2\16\u00a2\u0761\13\u00a2\3\u00a2\3\u00a2\3\u00a3\3\u00a3\3\u00a3"+ + "\3\u00a3\7\u00a3\u0769\n\u00a3\f\u00a3\16\u00a3\u076c\13\u00a3\3\u00a3"+ + "\3\u00a3\3\u00a3\3\u00a3\3\u00a3\6\u033b\u0454\u0735\u076a\2\u00a4\5\4"+ "\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22"+ "#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C"+ "#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u\2\2\u0699\u069a\7>\2\2\u069a"+ - "\u0102\3\2\2\2\u069b\u069c\7@\2\2\u069c\u069d\7@\2\2\u069d\u0104\3\2\2"+ - "\2\u069e\u069f\7-\2\2\u069f\u0106\3\2\2\2\u06a0\u06a1\7/\2\2\u06a1\u0108"+ - "\3\2\2\2\u06a2\u06a3\7>\2\2\u06a3\u010a\3\2\2\2\u06a4\u06a5\7@\2\2\u06a5"+ - "\u010c\3\2\2\2\u06a6\u06a7\7,\2\2\u06a7\u010e\3\2\2\2\u06a8\u06a9\7\61"+ - "\2\2\u06a9\u0110\3\2\2\2\u06aa\u06ab\7}\2\2\u06ab\u06ac\b\u0088\t\2\u06ac"+ - "\u0112\3\2\2\2\u06ad\u06ae\7\177\2\2\u06ae\u06af\b\u0089\n\2\u06af\u0114"+ - "\3\2\2\2\u06b0\u06b3\5\u0117\u008b\2\u06b1\u06b3\5\u011f\u008f\2\u06b2"+ - "\u06b0\3\2\2\2\u06b2\u06b1\3\2\2\2\u06b3\u0116\3\2\2\2\u06b4\u06b8\5\u0119"+ - "\u008c\2\u06b5\u06b8\5\u011b\u008d\2\u06b6\u06b8\5\u011d\u008e\2\u06b7"+ - "\u06b4\3\2\2\2\u06b7\u06b5\3\2\2\2\u06b7\u06b6\3\2\2\2\u06b8\u0118\3\2"+ - "\2\2\u06b9\u06bd\7\'\2\2\u06ba\u06bc\5\u0127\u0093\2\u06bb\u06ba\3\2\2"+ - "\2\u06bc\u06bf\3\2\2\2\u06bd\u06bb\3\2\2\2\u06bd\u06be\3\2\2\2\u06be\u06c0"+ - "\3\2\2\2\u06bf\u06bd\3\2\2\2\u06c0\u06c2\7\60\2\2\u06c1\u06c3\5\u0127"+ - "\u0093\2\u06c2\u06c1\3\2\2\2\u06c3\u06c4\3\2\2\2\u06c4\u06c2\3\2\2\2\u06c4"+ - "\u06c5\3\2\2\2\u06c5\u011a\3\2\2\2\u06c6\u06c8\5\u0129\u0094\2\u06c7\u06c6"+ - "\3\2\2\2\u06c8\u06cb\3\2\2\2\u06c9\u06c7\3\2\2\2\u06c9\u06ca\3\2\2\2\u06ca"+ - "\u06cc\3\2\2\2\u06cb\u06c9\3\2\2\2\u06cc\u06ce\7\60\2\2\u06cd\u06cf\5"+ - "\u0129\u0094\2\u06ce\u06cd\3\2\2\2\u06cf\u06d0\3\2\2\2\u06d0\u06ce\3\2"+ - "\2\2\u06d0\u06d1\3\2\2\2\u06d1\u011c\3\2\2\2\u06d2\u06d6\7&\2\2\u06d3"+ - "\u06d5\5\u012b\u0095\2\u06d4\u06d3\3\2\2\2\u06d5\u06d8\3\2\2\2\u06d6\u06d4"+ - "\3\2\2\2\u06d6\u06d7\3\2\2\2\u06d7\u06d9\3\2\2\2\u06d8\u06d6\3\2\2\2\u06d9"+ - "\u06db\7\60\2\2\u06da\u06dc\5\u012b\u0095\2\u06db\u06da\3\2\2\2\u06dc"+ - "\u06dd\3\2\2\2\u06dd\u06db\3\2\2\2\u06dd\u06de\3\2\2\2\u06de\u011e\3\2"+ - "\2\2\u06df\u06e3\5\u0123\u0091\2\u06e0\u06e3\5\u0125\u0092\2\u06e1\u06e3"+ - "\5\u0121\u0090\2\u06e2\u06df\3\2\2\2\u06e2\u06e0\3\2\2\2\u06e2\u06e1\3"+ - "\2\2\2\u06e3\u0120\3\2\2\2\u06e4\u06e6\7\'\2\2\u06e5\u06e7\5\u0127\u0093"+ - "\2\u06e6\u06e5\3\2\2\2\u06e7\u06e8\3\2\2\2\u06e8\u06e6\3\2\2\2\u06e8\u06e9"+ - "\3\2\2\2\u06e9\u0122\3\2\2\2\u06ea\u06ec\5\u0129\u0094\2\u06eb\u06ea\3"+ - "\2\2\2\u06ec\u06ed\3\2\2\2\u06ed\u06eb\3\2\2\2\u06ed\u06ee\3\2\2\2\u06ee"+ - "\u0124\3\2\2\2\u06ef\u06f1\7&\2\2\u06f0\u06f2\5\u012b\u0095\2\u06f1\u06f0"+ - "\3\2\2\2\u06f2\u06f3\3\2\2\2\u06f3\u06f1\3\2\2\2\u06f3\u06f4\3\2\2\2\u06f4"+ - "\u0126\3\2\2\2\u06f5\u06f6\t\5\2\2\u06f6\u0128\3\2\2\2\u06f7\u06f8\t\6"+ - "\2\2\u06f8\u012a\3\2\2\2\u06f9\u06fa\t\7\2\2\u06fa\u012c\3\2\2\2\u06fb"+ - "\u06ff\7)\2\2\u06fc\u06fd\7^\2\2\u06fd\u0700\t\16\2\2\u06fe\u0700\n\20"+ - "\2\2\u06ff\u06fc\3\2\2\2\u06ff\u06fe\3\2\2\2\u0700\u0701\3\2\2\2\u0701"+ - "\u0702\7)\2\2\u0702\u012e\3\2\2\2\u0703\u0705\5\u0131\u0098\2\u0704\u0706"+ - "\t\23\2\2\u0705\u0704\3\2\2\2\u0706\u0707\3\2\2\2\u0707\u0705\3\2\2\2"+ - "\u0707\u0708\3\2\2\2\u0708\u0130\3\2\2\2\u0709\u070d\7#\2\2\u070a\u070c"+ - "\5\u0137\u009b\2\u070b\u070a\3\2\2\2\u070c\u070f\3\2\2\2\u070d\u070b\3"+ - "\2\2\2\u070d\u070e\3\2\2\2\u070e\u0132\3\2\2\2\u070f\u070d\3\2\2\2\u0710"+ - "\u0714\5\u0135\u009a\2\u0711\u0713\5\u0137\u009b\2\u0712\u0711\3\2\2\2"+ - "\u0713\u0716\3\2\2\2\u0714\u0712\3\2\2\2\u0714\u0715\3\2\2\2\u0715\u0134"+ - "\3\2\2\2\u0716\u0714\3\2\2\2\u0717\u0718\t\b\2\2\u0718\u0136\3\2\2\2\u0719"+ - "\u071a\t\t\2\2\u071a\u0138\3\2\2\2\u071b\u071d\t\21\2\2\u071c\u071b\3"+ - "\2\2\2\u071d\u071e\3\2\2\2\u071e\u071c\3\2\2\2\u071e\u071f\3\2\2\2\u071f"+ - "\u0720\3\2\2\2\u0720\u0721\b\u009c\7\2\u0721\u013a\3\2\2\2\u0722\u0723"+ - "\7\61\2\2\u0723\u0724\7\61\2\2\u0724\u0728\3\2\2\2\u0725\u0727\n\22\2"+ - "\2\u0726\u0725\3\2\2\2\u0727\u072a\3\2\2\2\u0728\u0726\3\2\2\2\u0728\u0729"+ - "\3\2\2\2\u0729\u072b\3\2\2\2\u072a\u0728\3\2\2\2\u072b\u072c\b\u009d\b"+ - "\2\u072c\u013c\3\2\2\2\u072d\u072e\7\61\2\2\u072e\u072f\7,\2\2\u072f\u0733"+ - "\3\2\2\2\u0730\u0732\13\2\2\2\u0731\u0730\3\2\2\2\u0732\u0735\3\2\2\2"+ - "\u0733\u0734\3\2\2\2\u0733\u0731\3\2\2\2\u0734\u0736\3\2\2\2\u0735\u0733"+ - "\3\2\2\2\u0736\u0737\7,\2\2\u0737\u0738\7\61\2\2\u0738\u0739\3\2\2\2\u0739"+ - "\u073a\b\u009e\b\2\u073a\u013e\3\2\2\2\u073b\u073d\7>\2\2\u073c\u073e"+ - "\t\24\2\2\u073d\u073c\3\2\2\2\u073e\u073f\3\2\2\2\u073f\u073d\3\2\2\2"+ - "\u073f\u0740\3\2\2\2\u0740\u0741\3\2\2\2\u0741\u0742\7@\2\2\u0742\u0743"+ - "\b\u009f\13\2\u0743\u0140\3\2\2\2\u0744\u074a\7$\2\2\u0745\u0746\7^\2"+ - "\2\u0746\u0749\7$\2\2\u0747\u0749\n\n\2\2\u0748\u0745\3\2\2\2\u0748\u0747"+ - "\3\2\2\2\u0749\u074c\3\2\2\2\u074a\u0748\3\2\2\2\u074a\u074b\3\2\2\2\u074b"+ - "\u074d\3\2\2\2\u074c\u074a\3\2\2\2\u074d\u074e\7$\2\2\u074e\u074f\b\u00a0"+ - "\f\2\u074f\u0142\3\2\2\2\u0750\u0752\t\21\2\2\u0751\u0750\3\2\2\2\u0752"+ - "\u0753\3\2\2\2\u0753\u0751\3\2\2\2\u0753\u0754\3\2\2\2\u0754\u0755\3\2"+ - "\2\2\u0755\u0756\b\u00a1\7\2\u0756\u0144\3\2\2\2\u0757\u0758\7\61\2\2"+ - "\u0758\u0759\7\61\2\2\u0759\u075d\3\2\2\2\u075a\u075c\n\22\2\2\u075b\u075a"+ - "\3\2\2\2\u075c\u075f\3\2\2\2\u075d\u075b\3\2\2\2\u075d\u075e\3\2\2\2\u075e"+ - "\u0760\3\2\2\2\u075f\u075d\3\2\2\2\u0760\u0761\b\u00a2\b\2\u0761\u0146"+ - "\3\2\2\2\u0762\u0763\7\61\2\2\u0763\u0764\7,\2\2\u0764\u0768\3\2\2\2\u0765"+ - "\u0767\13\2\2\2\u0766\u0765\3\2\2\2\u0767\u076a\3\2\2\2\u0768\u0769\3"+ - "\2\2\2\u0768\u0766\3\2\2\2\u0769\u076b\3\2\2\2\u076a\u0768\3\2\2\2\u076b"+ - "\u076c\7,\2\2\u076c\u076d\7\61\2\2\u076d\u076e\3\2\2\2\u076e\u076f\b\u00a3"+ - "\b\2\u076f\u0148\3\2\2\2D\2\3\4\u01b6\u025a\u02ff\u0326\u0331\u0339\u0369"+ - "\u03a1\u03a6\u03ad\u03b2\u03b9\u03be\u03c5\u03cc\u03d1\u03d8\u03dd\u03e2"+ - "\u03e9\u03ef\u03f1\u03f6\u03fd\u0402\u040e\u041b\u041d\u0422\u0426\u0428"+ - "\u042b\u0433\u0436\u043d\u0447\u0452\u0686\u06b2\u06b7\u06bd\u06c4\u06c9"+ - "\u06d0\u06d6\u06dd\u06e2\u06e8\u06ed\u06f3\u06ff\u0707\u070d\u0714\u071e"+ - "\u0728\u0733\u073f\u0748\u074a\u0753\u075d\u0768\r\3\2\2\3B\3\3U\4\3V"+ + "\u01f2\7a\2\2\u01f2\u01f3\7a\2\2\u01f3\u01f4\7k\2\2\u01f4\u01f5\7p\2\2"+ + "\u01f5\u01f6\7v\2\2\u01f6\u01f7\7g\2\2\u01f7\u01f8\7t\2\2\u01f8\u01f9"+ + "\7t\2\2\u01f9\u01fa\7w\2\2\u01fa\u01fb\7r\2\2\u01fb\u01fc\7v\2\2\u01fc"+ + "`\3\2\2\2\u01fd\u01fe\7t\2\2\u01fe\u01ff\7g\2\2\u01ff\u0200\7i\2\2\u0200"+ + "\u0201\7k\2\2\u0201\u0202\7u\2\2\u0202\u0203\7v\2\2\u0203\u0204\7g\2\2"+ + "\u0204\u0205\7t\2\2\u0205b\3\2\2\2\u0206\u0207\7a\2\2\u0207\u0208\7a\2"+ + "\2\u0208\u0209\7|\2\2\u0209\u020a\7r\2\2\u020a\u020b\7a\2\2\u020b\u020c"+ + "\7t\2\2\u020c\u020d\7g\2\2\u020d\u020e\7u\2\2\u020e\u020f\7g\2\2\u020f"+ + "\u0210\7t\2\2\u0210\u0211\7x\2\2\u0211\u0212\7g\2\2\u0212d\3\2\2\2\u0213"+ + "\u0214\7a\2\2\u0214\u0215\7a\2\2\u0215\u0216\7c\2\2\u0216\u0217\7f\2\2"+ + "\u0217\u0218\7f\2\2\u0218\u0219\7t\2\2\u0219\u021a\7g\2\2\u021a\u021b"+ + "\7u\2\2\u021b\u021c\7u\2\2\u021cf\3\2\2\2\u021d\u021e\7a\2\2\u021e\u021f"+ + "\7a\2\2\u021f\u0220\7|\2\2\u0220\u0221\7r\2\2\u0221h\3\2\2\2\u0222\u0223"+ + "\7a\2\2\u0223\u0224\7a\2\2\u0224\u0225\7o\2\2\u0225\u0226\7g\2\2\u0226"+ + "\u0227\7o\2\2\u0227j\3\2\2\2\u0228\u0229\7a\2\2\u0229\u022a\7a\2\2\u022a"+ + "\u022b\7u\2\2\u022b\u022c\7u\2\2\u022c\u022d\7c\2\2\u022dl\3\2\2\2\u022e"+ + "\u022f\7a\2\2\u022f\u0230\7a\2\2\u0230\u0231\7o\2\2\u0231\u0232\7c\2\2"+ + "\u0232n\3\2\2\2\u0233\u0234\7a\2\2\u0234\u0235\7a\2\2\u0235\u0236\7k\2"+ + "\2\u0236\u0237\7p\2\2\u0237\u0238\7v\2\2\u0238\u0239\7t\2\2\u0239\u023a"+ + "\7k\2\2\u023a\u023b\7p\2\2\u023b\u023c\7u\2\2\u023c\u023d\7k\2\2\u023d"+ + "\u023e\7e\2\2\u023ep\3\2\2\2\u023f\u0240\7a\2\2\u0240\u0241\7a\2\2\u0241"+ + "\u0242\7u\2\2\u0242\u0243\7v\2\2\u0243\u0244\7c\2\2\u0244\u0245\7e\2\2"+ + "\u0245\u0246\7m\2\2\u0246\u0247\7e\2\2\u0247\u0248\7c\2\2\u0248\u0249"+ + "\7n\2\2\u0249\u025d\7n\2\2\u024a\u024b\7a\2\2\u024b\u024c\7a\2\2\u024c"+ + "\u024d\7r\2\2\u024d\u024e\7j\2\2\u024e\u024f\7k\2\2\u024f\u0250\7e\2\2"+ + "\u0250\u0251\7c\2\2\u0251\u0252\7n\2\2\u0252\u025d\7n\2\2\u0253\u0254"+ + "\7a\2\2\u0254\u0255\7a\2\2\u0255\u0256\7x\2\2\u0256\u0257\7c\2\2\u0257"+ + "\u0258\7t\2\2\u0258\u0259\7e\2\2\u0259\u025a\7c\2\2\u025a\u025b\7n\2\2"+ + "\u025b\u025d\7n\2\2\u025c\u023f\3\2\2\2\u025c\u024a\3\2\2\2\u025c\u0253"+ + "\3\2\2\2\u025dr\3\2\2\2\u025e\u025f\7k\2\2\u025f\u0260\7h\2\2\u0260t\3"+ + "\2\2\2\u0261\u0262\7g\2\2\u0262\u0263\7n\2\2\u0263\u0264\7u\2\2\u0264"+ + "\u0265\7g\2\2\u0265v\3\2\2\2\u0266\u0267\7y\2\2\u0267\u0268\7j\2\2\u0268"+ + "\u0269\7k\2\2\u0269\u026a\7n\2\2\u026a\u026b\7g\2\2\u026bx\3\2\2\2\u026c"+ + "\u026d\7f\2\2\u026d\u026e\7q\2\2\u026ez\3\2\2\2\u026f\u0270\7h\2\2\u0270"+ + "\u0271\7q\2\2\u0271\u0272\7t\2\2\u0272|\3\2\2\2\u0273\u0274\7u\2\2\u0274"+ + "\u0275\7y\2\2\u0275\u0276\7k\2\2\u0276\u0277\7v\2\2\u0277\u0278\7e\2\2"+ + "\u0278\u0279\7j\2\2\u0279~\3\2\2\2\u027a\u027b\7t\2\2\u027b\u027c\7g\2"+ + "\2\u027c\u027d\7v\2\2\u027d\u027e\7w\2\2\u027e\u027f\7t\2\2\u027f\u0280"+ + "\7p\2\2\u0280\u0080\3\2\2\2\u0281\u0282\7d\2\2\u0282\u0283\7t\2\2\u0283"+ + "\u0284\7g\2\2\u0284\u0285\7c\2\2\u0285\u0286\7m\2\2\u0286\u0082\3\2\2"+ + "\2\u0287\u0288\7e\2\2\u0288\u0289\7q\2\2\u0289\u028a\7p\2\2\u028a\u028b"+ + "\7v\2\2\u028b\u028c\7k\2\2\u028c\u028d\7p\2\2\u028d\u028e\7w\2\2\u028e"+ + "\u028f\7g\2\2\u028f\u0084\3\2\2\2\u0290\u0291\7c\2\2\u0291\u0292\7u\2"+ + "\2\u0292\u0293\7o\2\2\u0293\u0294\3\2\2\2\u0294\u0295\bB\3\2\u0295\u0086"+ + "\3\2\2\2\u0296\u0297\7f\2\2\u0297\u0298\7g\2\2\u0298\u0299\7h\2\2\u0299"+ + "\u029a\7c\2\2\u029a\u029b\7w\2\2\u029b\u029c\7n\2\2\u029c\u029d\7v\2\2"+ + "\u029d\u0088\3\2\2\2\u029e\u029f\7e\2\2\u029f\u02a0\7c\2\2\u02a0\u02a1"+ + "\7u\2\2\u02a1\u02a2\7g\2\2\u02a2\u008a\3\2\2\2\u02a3\u02a4\7u\2\2\u02a4"+ + "\u02a5\7v\2\2\u02a5\u02a6\7t\2\2\u02a6\u02a7\7w\2\2\u02a7\u02a8\7e\2\2"+ + "\u02a8\u02a9\7v\2\2\u02a9\u008c\3\2\2\2\u02aa\u02ab\7g\2\2\u02ab\u02ac"+ + "\7p\2\2\u02ac\u02ad\7w\2\2\u02ad\u02ae\7o\2\2\u02ae\u008e\3\2\2\2\u02af"+ + "\u02b0\7u\2\2\u02b0\u02b1\7k\2\2\u02b1\u02b2\7|\2\2\u02b2\u02b3\7g\2\2"+ + "\u02b3\u02b4\7q\2\2\u02b4\u02b5\7h\2\2\u02b5\u0090\3\2\2\2\u02b6\u02b7"+ + "\7v\2\2\u02b7\u02b8\7{\2\2\u02b8\u02b9\7r\2\2\u02b9\u02ba\7g\2\2\u02ba"+ + "\u02bb\7k\2\2\u02bb\u02bc\7f\2\2\u02bc\u0092\3\2\2\2\u02bd\u02be\7f\2"+ + "\2\u02be\u02bf\7g\2\2\u02bf\u02c0\7h\2\2\u02c0\u02c1\7k\2\2\u02c1\u02c2"+ + "\7p\2\2\u02c2\u02c3\7g\2\2\u02c3\u02c4\7f\2\2\u02c4\u0094\3\2\2\2\u02c5"+ + "\u02c6\7m\2\2\u02c6\u02c7\7k\2\2\u02c7\u02c8\7e\2\2\u02c8\u02c9\7m\2\2"+ + "\u02c9\u02ca\7c\2\2\u02ca\u02cb\7u\2\2\u02cb\u02cc\7o\2\2\u02cc\u0096"+ + "\3\2\2\2\u02cd\u02ce\7t\2\2\u02ce\u02cf\7g\2\2\u02cf\u02d0\7u\2\2\u02d0"+ + "\u02d1\7q\2\2\u02d1\u02d2\7w\2\2\u02d2\u02d3\7t\2\2\u02d3\u02d4\7e\2\2"+ + "\u02d4\u02d5\7g\2\2\u02d5\u0098\3\2\2\2\u02d6\u02d7\7w\2\2\u02d7\u02d8"+ + "\7u\2\2\u02d8\u02d9\7g\2\2\u02d9\u02da\7u\2\2\u02da\u009a\3\2\2\2\u02db"+ + "\u02dc\7e\2\2\u02dc\u02dd\7n\2\2\u02dd\u02de\7q\2\2\u02de\u02df\7d\2\2"+ + "\u02df\u02e0\7d\2\2\u02e0\u02e1\7g\2\2\u02e1\u02e2\7t\2\2\u02e2\u02e3"+ + "\7u\2\2\u02e3\u009c\3\2\2\2\u02e4\u02e5\7d\2\2\u02e5\u02e6\7{\2\2\u02e6"+ + "\u02e7\7v\2\2\u02e7\u02e8\7g\2\2\u02e8\u02e9\7u\2\2\u02e9\u009e\3\2\2"+ + "\2\u02ea\u02eb\7e\2\2\u02eb\u02ec\7{\2\2\u02ec\u02ed\7e\2\2\u02ed\u02ee"+ + "\7n\2\2\u02ee\u02ef\7g\2\2\u02ef\u02f0\7u\2\2\u02f0\u00a0\3\2\2\2\u02f1"+ + "\u02f2\7#\2\2\u02f2\u00a2\3\2\2\2\u02f3\u02f4\7u\2\2\u02f4\u02f5\7k\2"+ + "\2\u02f5\u02f6\7i\2\2\u02f6\u02f7\7p\2\2\u02f7\u02f8\7g\2\2\u02f8\u0302"+ + "\7f\2\2\u02f9\u02fa\7w\2\2\u02fa\u02fb\7p\2\2\u02fb\u02fc\7u\2\2\u02fc"+ + "\u02fd\7k\2\2\u02fd\u02fe\7i\2\2\u02fe\u02ff\7p\2\2\u02ff\u0300\7g\2\2"+ + "\u0300\u0302\7f\2\2\u0301\u02f3\3\2\2\2\u0301\u02f9\3\2\2\2\u0302\u00a4"+ + "\3\2\2\2\u0303\u0304\7d\2\2\u0304\u0305\7{\2\2\u0305\u0306\7v\2\2\u0306"+ + "\u0329\7g\2\2\u0307\u0308\7y\2\2\u0308\u0309\7q\2\2\u0309\u030a\7t\2\2"+ + "\u030a\u0329\7f\2\2\u030b\u030c\7f\2\2\u030c\u030d\7y\2\2\u030d\u030e"+ + "\7q\2\2\u030e\u030f\7t\2\2\u030f\u0329\7f\2\2\u0310\u0311\7d\2\2\u0311"+ + "\u0312\7q\2\2\u0312\u0313\7q\2\2\u0313\u0329\7n\2\2\u0314\u0315\7e\2\2"+ + "\u0315\u0316\7j\2\2\u0316\u0317\7c\2\2\u0317\u0329\7t\2\2\u0318\u0319"+ + "\7u\2\2\u0319\u031a\7j\2\2\u031a\u031b\7q\2\2\u031b\u031c\7t\2\2\u031c"+ + "\u0329\7v\2\2\u031d\u031e\7k\2\2\u031e\u031f\7p\2\2\u031f\u0329\7v\2\2"+ + "\u0320\u0321\7n\2\2\u0321\u0322\7q\2\2\u0322\u0323\7p\2\2\u0323\u0329"+ + "\7i\2\2\u0324\u0325\7x\2\2\u0325\u0326\7q\2\2\u0326\u0327\7k\2\2\u0327"+ + "\u0329\7f\2\2\u0328\u0303\3\2\2\2\u0328\u0307\3\2\2\2\u0328\u030b\3\2"+ + "\2\2\u0328\u0310\3\2\2\2\u0328\u0314\3\2\2\2\u0328\u0318\3\2\2\2\u0328"+ + "\u031d\3\2\2\2\u0328\u0320\3\2\2\2\u0328\u0324\3\2\2\2\u0329\u00a6\3\2"+ + "\2\2\u032a\u032b\7v\2\2\u032b\u032c\7t\2\2\u032c\u032d\7w\2\2\u032d\u0334"+ + "\7g\2\2\u032e\u032f\7h\2\2\u032f\u0330\7c\2\2\u0330\u0331\7n\2\2\u0331"+ + "\u0332\7u\2\2\u0332\u0334\7g\2\2\u0333\u032a\3\2\2\2\u0333\u032e\3\2\2"+ + "\2\u0334\u00a8\3\2\2\2\u0335\u0336\7}\2\2\u0336\u0337\7}\2\2\u0337\u033b"+ + "\3\2\2\2\u0338\u033a\13\2\2\2\u0339\u0338\3\2\2\2\u033a\u033d\3\2\2\2"+ + "\u033b\u033c\3\2\2\2\u033b\u0339\3\2\2\2\u033c\u033e\3\2\2\2\u033d\u033b"+ + "\3\2\2\2\u033e\u033f\7\177\2\2\u033f\u0340\7\177\2\2\u0340\u00aa\3\2\2"+ + "\2\u0341\u0342\7%\2\2\u0342\u0343\7k\2\2\u0343\u0344\7o\2\2\u0344\u0345"+ + "\7r\2\2\u0345\u0346\7q\2\2\u0346\u0347\7t\2\2\u0347\u0348\7v\2\2\u0348"+ + "\u0349\3\2\2\2\u0349\u034a\bU\4\2\u034a\u00ac\3\2\2\2\u034b\u034c\7%\2"+ + "\2\u034c\u034d\7k\2\2\u034d\u034e\7p\2\2\u034e\u034f\7e\2\2\u034f\u0350"+ + "\7n\2\2\u0350\u0351\7w\2\2\u0351\u0352\7f\2\2\u0352\u0353\7g\2\2\u0353"+ + "\u0354\3\2\2\2\u0354\u0355\bV\5\2\u0355\u00ae\3\2\2\2\u0356\u0357\7%\2"+ + "\2\u0357\u0358\7r\2\2\u0358\u0359\7t\2\2\u0359\u035a\7c\2\2\u035a\u035b"+ + "\7i\2\2\u035b\u035c\7o\2\2\u035c\u035d\7c\2\2\u035d\u00b0\3\2\2\2\u035e"+ + "\u035f\7%\2\2\u035f\u0360\7f\2\2\u0360\u0361\7g\2\2\u0361\u0362\7h\2\2"+ + "\u0362\u0363\7k\2\2\u0363\u0364\7p\2\2\u0364\u0365\7g\2\2\u0365\u00b2"+ + "\3\2\2\2\u0366\u0367\7^\2\2\u0367\u036c\7\f\2\2\u0368\u0369\7^\2\2\u0369"+ + "\u036a\7\17\2\2\u036a\u036c\7\f\2\2\u036b\u0366\3\2\2\2\u036b\u0368\3"+ + "\2\2\2\u036c\u00b4\3\2\2\2\u036d\u036e\7%\2\2\u036e\u036f\7w\2\2\u036f"+ + "\u0370\7p\2\2\u0370\u0371\7f\2\2\u0371\u0372\7g\2\2\u0372\u0373\7h\2\2"+ + "\u0373\u00b6\3\2\2\2\u0374\u0375\7%\2\2\u0375\u0376\7k\2\2\u0376\u0377"+ + "\7h\2\2\u0377\u0378\7f\2\2\u0378\u0379\7g\2\2\u0379\u037a\7h\2\2\u037a"+ + "\u00b8\3\2\2\2\u037b\u037c\7%\2\2\u037c\u037d\7k\2\2\u037d\u037e\7h\2"+ + "\2\u037e\u037f\7p\2\2\u037f\u0380\7f\2\2\u0380\u0381\7g\2\2\u0381\u0382"+ + "\7h\2\2\u0382\u00ba\3\2\2\2\u0383\u0384\7%\2\2\u0384\u0385\7k\2\2\u0385"+ + "\u0386\7h\2\2\u0386\u00bc\3\2\2\2\u0387\u0388\7%\2\2\u0388\u0389\7g\2"+ + "\2\u0389\u038a\7n\2\2\u038a\u038b\7k\2\2\u038b\u038c\7h\2\2\u038c\u00be"+ + "\3\2\2\2\u038d\u038e\7%\2\2\u038e\u038f\7g\2\2\u038f\u0390\7n\2\2\u0390"+ + "\u0391\7u\2\2\u0391\u0392\7g\2\2\u0392\u00c0\3\2\2\2\u0393\u0394\7%\2"+ + "\2\u0394\u0395\7g\2\2\u0395\u0396\7p\2\2\u0396\u0397\7f\2\2\u0397\u0398"+ + "\7k\2\2\u0398\u0399\7h\2\2\u0399\u00c2\3\2\2\2\u039a\u039b\7%\2\2\u039b"+ + "\u039c\7g\2\2\u039c\u039d\7t\2\2\u039d\u039e\7t\2\2\u039e\u039f\7q\2\2"+ + "\u039f\u03a0\7t\2\2\u03a0\u00c4\3\2\2\2\u03a1\u03a4\5\u00c7c\2\u03a2\u03a4"+ + "\5\u00cfg\2\u03a3\u03a1\3\2\2\2\u03a3\u03a2\3\2\2\2\u03a4\u00c6\3\2\2"+ + "\2\u03a5\u03a9\5\u00c9d\2\u03a6\u03a9\5\u00cbe\2\u03a7\u03a9\5\u00cdf"+ + "\2\u03a8\u03a5\3\2\2\2\u03a8\u03a6\3\2\2\2\u03a8\u03a7\3\2\2\2\u03a9\u00c8"+ + "\3\2\2\2\u03aa\u03b0\7\'\2\2\u03ab\u03ac\7\62\2\2\u03ac\u03b0\7d\2\2\u03ad"+ + "\u03ae\7\62\2\2\u03ae\u03b0\7D\2\2\u03af\u03aa\3\2\2\2\u03af\u03ab\3\2"+ + "\2\2\u03af\u03ad\3\2\2\2\u03b0\u03b4\3\2\2\2\u03b1\u03b3\5\u00d7k\2\u03b2"+ + "\u03b1\3\2\2\2\u03b3\u03b6\3\2\2\2\u03b4\u03b2\3\2\2\2\u03b4\u03b5\3\2"+ + "\2\2\u03b5\u03b7\3\2\2\2\u03b6\u03b4\3\2\2\2\u03b7\u03b9\7\60\2\2\u03b8"+ + "\u03ba\5\u00d7k\2\u03b9\u03b8\3\2\2\2\u03ba\u03bb\3\2\2\2\u03bb\u03b9"+ + "\3\2\2\2\u03bb\u03bc\3\2\2\2\u03bc\u00ca\3\2\2\2\u03bd\u03bf\5\u00d9l"+ + "\2\u03be\u03bd\3\2\2\2\u03bf\u03c2\3\2\2\2\u03c0\u03be\3\2\2\2\u03c0\u03c1"+ + "\3\2\2\2\u03c1\u03c3\3\2\2\2\u03c2\u03c0\3\2\2\2\u03c3\u03c5\7\60\2\2"+ + "\u03c4\u03c6\5\u00d9l\2\u03c5\u03c4\3\2\2\2\u03c6\u03c7\3\2\2\2\u03c7"+ + "\u03c5\3\2\2\2\u03c7\u03c8\3\2\2\2\u03c8\u00cc\3\2\2\2\u03c9\u03cf\7&"+ + "\2\2\u03ca\u03cb\7\62\2\2\u03cb\u03cf\7z\2\2\u03cc\u03cd\7\62\2\2\u03cd"+ + "\u03cf\7Z\2\2\u03ce\u03c9\3\2\2\2\u03ce\u03ca\3\2\2\2\u03ce\u03cc\3\2"+ + "\2\2\u03cf\u03d3\3\2\2\2\u03d0\u03d2\5\u00dbm\2\u03d1\u03d0\3\2\2\2\u03d2"+ + "\u03d5\3\2\2\2\u03d3\u03d1\3\2\2\2\u03d3\u03d4\3\2\2\2\u03d4\u03d6\3\2"+ + "\2\2\u03d5\u03d3\3\2\2\2\u03d6\u03d8\7\60\2\2\u03d7\u03d9\5\u00dbm\2\u03d8"+ + "\u03d7\3\2\2\2\u03d9\u03da\3\2\2\2\u03da\u03d8\3\2\2\2\u03da\u03db\3\2"+ + "\2\2\u03db\u00ce\3\2\2\2\u03dc\u03e0\5\u00d3i\2\u03dd\u03e0\5\u00d5j\2"+ + "\u03de\u03e0\5\u00d1h\2\u03df\u03dc\3\2\2\2\u03df\u03dd\3\2\2\2\u03df"+ + "\u03de\3\2\2\2\u03e0\u03e4\3\2\2\2\u03e1\u03e2\t\2\2\2\u03e2\u03e5\t\3"+ + "\2\2\u03e3\u03e5\7n\2\2\u03e4\u03e1\3\2\2\2\u03e4\u03e3\3\2\2\2\u03e4"+ + "\u03e5\3\2\2\2\u03e5\u00d0\3\2\2\2\u03e6\u03e7\7\62\2\2\u03e7\u03e9\t"+ + "\4\2\2\u03e8\u03ea\5\u00d7k\2\u03e9\u03e8\3\2\2\2\u03ea\u03eb\3\2\2\2"+ + "\u03eb\u03e9\3\2\2\2\u03eb\u03ec\3\2\2\2\u03ec\u03f4\3\2\2\2\u03ed\u03ef"+ + "\7\'\2\2\u03ee\u03f0\5\u00d7k\2\u03ef\u03ee\3\2\2\2\u03f0\u03f1\3\2\2"+ + "\2\u03f1\u03ef\3\2\2\2\u03f1\u03f2\3\2\2\2\u03f2\u03f4\3\2\2\2\u03f3\u03e6"+ + "\3\2\2\2\u03f3\u03ed\3\2\2\2\u03f4\u00d2\3\2\2\2\u03f5\u03f7\5\u00d9l"+ + "\2\u03f6\u03f5\3\2\2\2\u03f7\u03f8\3\2\2\2\u03f8\u03f6\3\2\2\2\u03f8\u03f9"+ + "\3\2\2\2\u03f9\u00d4\3\2\2\2\u03fa\u0400\7&\2\2\u03fb\u03fc\7\62\2\2\u03fc"+ + "\u0400\7z\2\2\u03fd\u03fe\7\62\2\2\u03fe\u0400\7Z\2\2\u03ff\u03fa\3\2"+ + "\2\2\u03ff\u03fb\3\2\2\2\u03ff\u03fd\3\2\2\2\u0400\u0402\3\2\2\2\u0401"+ + "\u0403\5\u00dbm\2\u0402\u0401\3\2\2\2\u0403\u0404\3\2\2\2\u0404\u0402"+ + "\3\2\2\2\u0404\u0405\3\2\2\2\u0405\u00d6\3\2\2\2\u0406\u0407\t\5\2\2\u0407"+ + "\u00d8\3\2\2\2\u0408\u0409\t\6\2\2\u0409\u00da\3\2\2\2\u040a\u040b\t\7"+ + "\2\2\u040b\u00dc\3\2\2\2\u040c\u0410\5\u00dfo\2\u040d\u040f\5\u00e1p\2"+ + "\u040e\u040d\3\2\2\2\u040f\u0412\3\2\2\2\u0410\u040e\3\2\2\2\u0410\u0411"+ + "\3\2\2\2\u0411\u0413\3\2\2\2\u0412\u0410\3\2\2\2\u0413\u0414\bn\6\2\u0414"+ + "\u00de\3\2\2\2\u0415\u0416\t\b\2\2\u0416\u00e0\3\2\2\2\u0417\u0418\t\t"+ + "\2\2\u0418\u00e2\3\2\2\2\u0419\u041f\7$\2\2\u041a\u041b\7^\2\2\u041b\u041e"+ + "\7$\2\2\u041c\u041e\n\n\2\2\u041d\u041a\3\2\2\2\u041d\u041c\3\2\2\2\u041e"+ + "\u0421\3\2\2\2\u041f\u041d\3\2\2\2\u041f\u0420\3\2\2\2\u0420\u0422\3\2"+ + "\2\2\u0421\u041f\3\2\2\2\u0422\u0424\7$\2\2\u0423\u0425\t\13\2\2\u0424"+ + "\u0423\3\2\2\2\u0424\u0425\3\2\2\2\u0425\u042a\3\2\2\2\u0426\u0428\t\f"+ + "\2\2\u0427\u0429\t\r\2\2\u0428\u0427\3\2\2\2\u0428\u0429\3\2\2\2\u0429"+ + "\u042b\3\2\2\2\u042a\u0426\3\2\2\2\u042a\u042b\3\2\2\2\u042b\u042d\3\2"+ + "\2\2\u042c\u042e\t\13\2\2\u042d\u042c\3\2\2\2\u042d\u042e\3\2\2\2\u042e"+ + "\u00e4\3\2\2\2\u042f\u0438\7)\2\2\u0430\u0435\7^\2\2\u0431\u0436\t\16"+ + "\2\2\u0432\u0433\7z\2\2\u0433\u0434\t\17\2\2\u0434\u0436\t\17\2\2\u0435"+ + "\u0431\3\2\2\2\u0435\u0432\3\2\2\2\u0436\u0439\3\2\2\2\u0437\u0439\n\20"+ + "\2\2\u0438\u0430\3\2\2\2\u0438\u0437\3\2\2\2\u0439\u043a\3\2\2\2\u043a"+ + "\u043b\7)\2\2\u043b\u00e6\3\2\2\2\u043c\u043e\t\21\2\2\u043d\u043c\3\2"+ + "\2\2\u043e\u043f\3\2\2\2\u043f\u043d\3\2\2\2\u043f\u0440\3\2\2\2\u0440"+ + "\u0441\3\2\2\2\u0441\u0442\bs\7\2\u0442\u00e8\3\2\2\2\u0443\u0444\7\61"+ + "\2\2\u0444\u0445\7\61\2\2\u0445\u0449\3\2\2\2\u0446\u0448\n\22\2\2\u0447"+ + "\u0446\3\2\2\2\u0448\u044b\3\2\2\2\u0449\u0447\3\2\2\2\u0449\u044a\3\2"+ + "\2\2\u044a\u044c\3\2\2\2\u044b\u0449\3\2\2\2\u044c\u044d\bt\b\2\u044d"+ + "\u00ea\3\2\2\2\u044e\u044f\7\61\2\2\u044f\u0450\7,\2\2\u0450\u0454\3\2"+ + "\2\2\u0451\u0453\13\2\2\2\u0452\u0451\3\2\2\2\u0453\u0456\3\2\2\2\u0454"+ + "\u0455\3\2\2\2\u0454\u0452\3\2\2\2\u0455\u0457\3\2\2\2\u0456\u0454\3\2"+ + "\2\2\u0457\u0458\7,\2\2\u0458\u0459\7\61\2\2\u0459\u045a\3\2\2\2\u045a"+ + "\u045b\bu\b\2\u045b\u00ec\3\2\2\2\u045c\u045d\7\60\2\2\u045d\u045e\7d"+ + "\2\2\u045e\u045f\7{\2\2\u045f\u0460\7v\2\2\u0460\u0461\7g\2\2\u0461\u00ee"+ + "\3\2\2\2\u0462\u0463\7d\2\2\u0463\u0464\7t\2\2\u0464\u0689\7m\2\2\u0465"+ + "\u0466\7q\2\2\u0466\u0467\7t\2\2\u0467\u0689\7c\2\2\u0468\u0469\7m\2\2"+ + "\u0469\u046a\7k\2\2\u046a\u0689\7n\2\2\u046b\u046c\7u\2\2\u046c\u046d"+ + "\7n\2\2\u046d\u0689\7q\2\2\u046e\u046f\7p\2\2\u046f\u0470\7q\2\2\u0470"+ + "\u0689\7r\2\2\u0471\u0472\7c\2\2\u0472\u0473\7u\2\2\u0473\u0689\7n\2\2"+ + "\u0474\u0475\7r\2\2\u0475\u0476\7j\2\2\u0476\u0689\7r\2\2\u0477\u0478"+ + "\7c\2\2\u0478\u0479\7p\2\2\u0479\u0689\7e\2\2\u047a\u047b\7d\2\2\u047b"+ + "\u047c\7r\2\2\u047c\u0689\7n\2\2\u047d\u047e\7e\2\2\u047e\u047f\7n\2\2"+ + "\u047f\u0689\7e\2\2\u0480\u0481\7l\2\2\u0481\u0482\7u\2\2\u0482\u0689"+ + "\7t\2\2\u0483\u0484\7c\2\2\u0484\u0485\7p\2\2\u0485\u0689\7f\2\2\u0486"+ + "\u0487\7t\2\2\u0487\u0488\7n\2\2\u0488\u0689\7c\2\2\u0489\u048a\7d\2\2"+ + "\u048a\u048b\7k\2\2\u048b\u0689\7v\2\2\u048c\u048d\7t\2\2\u048d\u048e"+ + "\7q\2\2\u048e\u0689\7n\2\2\u048f\u0490\7r\2\2\u0490\u0491\7n\2\2\u0491"+ + "\u0689\7c\2\2\u0492\u0493\7r\2\2\u0493\u0494\7n\2\2\u0494\u0689\7r\2\2"+ + "\u0495\u0496\7d\2\2\u0496\u0497\7o\2\2\u0497\u0689\7k\2\2\u0498\u0499"+ + "\7u\2\2\u0499\u049a\7g\2\2\u049a\u0689\7e\2\2\u049b\u049c\7t\2\2\u049c"+ + "\u049d\7v\2\2\u049d\u0689\7k\2\2\u049e\u049f\7g\2\2\u049f\u04a0\7q\2\2"+ + "\u04a0\u0689\7t\2\2\u04a1\u04a2\7u\2\2\u04a2\u04a3\7t\2\2\u04a3\u0689"+ + "\7g\2\2\u04a4\u04a5\7n\2\2\u04a5\u04a6\7u\2\2\u04a6\u0689\7t\2\2\u04a7"+ + "\u04a8\7r\2\2\u04a8\u04a9\7j\2\2\u04a9\u0689\7c\2\2\u04aa\u04ab\7c\2\2"+ + "\u04ab\u04ac\7n\2\2\u04ac\u0689\7t\2\2\u04ad\u04ae\7l\2\2\u04ae\u04af"+ + "\7o\2\2\u04af\u0689\7r\2\2\u04b0\u04b1\7d\2\2\u04b1\u04b2\7x\2\2\u04b2"+ + "\u0689\7e\2\2\u04b3\u04b4\7e\2\2\u04b4\u04b5\7n\2\2\u04b5\u0689\7k\2\2"+ + "\u04b6\u04b7\7t\2\2\u04b7\u04b8\7v\2\2\u04b8\u0689\7u\2\2\u04b9\u04ba"+ + "\7c\2\2\u04ba\u04bb\7f\2\2\u04bb\u0689\7e\2\2\u04bc\u04bd\7t\2\2\u04bd"+ + "\u04be\7t\2\2\u04be\u0689\7c\2\2\u04bf\u04c0\7d\2\2\u04c0\u04c1\7x\2\2"+ + "\u04c1\u0689\7u\2\2\u04c2\u04c3\7u\2\2\u04c3\u04c4\7g\2\2\u04c4\u0689"+ + "\7k\2\2\u04c5\u04c6\7u\2\2\u04c6\u04c7\7c\2\2\u04c7\u0689\7z\2\2\u04c8"+ + "\u04c9\7u\2\2\u04c9\u04ca\7v\2\2\u04ca\u0689\7{\2\2\u04cb\u04cc\7u\2\2"+ + "\u04cc\u04cd\7v\2\2\u04cd\u0689\7c\2\2\u04ce\u04cf\7u\2\2\u04cf\u04d0"+ + "\7v\2\2\u04d0\u0689\7z\2\2\u04d1\u04d2\7f\2\2\u04d2\u04d3\7g\2\2\u04d3"+ + "\u0689\7{\2\2\u04d4\u04d5\7v\2\2\u04d5\u04d6\7z\2\2\u04d6\u0689\7c\2\2"+ + "\u04d7\u04d8\7z\2\2\u04d8\u04d9\7c\2\2\u04d9\u0689\7c\2\2\u04da\u04db"+ + "\7d\2\2\u04db\u04dc\7e\2\2\u04dc\u0689\7e\2\2\u04dd\u04de\7c\2\2\u04de"+ + "\u04df\7j\2\2\u04df\u0689\7z\2\2\u04e0\u04e1\7v\2\2\u04e1\u04e2\7{\2\2"+ + "\u04e2\u0689\7c\2\2\u04e3\u04e4\7v\2\2\u04e4\u04e5\7z\2\2\u04e5\u0689"+ + "\7u\2\2\u04e6\u04e7\7v\2\2\u04e7\u04e8\7c\2\2\u04e8\u0689\7u\2\2\u04e9"+ + "\u04ea\7u\2\2\u04ea\u04eb\7j\2\2\u04eb\u0689\7{\2\2\u04ec\u04ed\7u\2\2"+ + "\u04ed\u04ee\7j\2\2\u04ee\u0689\7z\2\2\u04ef\u04f0\7n\2\2\u04f0\u04f1"+ + "\7f\2\2\u04f1\u0689\7{\2\2\u04f2\u04f3\7n\2\2\u04f3\u04f4\7f\2\2\u04f4"+ + "\u0689\7c\2\2\u04f5\u04f6\7n\2\2\u04f6\u04f7\7f\2\2\u04f7\u0689\7z\2\2"+ + "\u04f8\u04f9\7n\2\2\u04f9\u04fa\7c\2\2\u04fa\u0689\7z\2\2\u04fb\u04fc"+ + "\7v\2\2\u04fc\u04fd\7c\2\2\u04fd\u0689\7{\2\2\u04fe\u04ff\7v\2\2\u04ff"+ + "\u0500\7c\2\2\u0500\u0689\7z\2\2\u0501\u0502\7d\2\2\u0502\u0503\7e\2\2"+ + "\u0503\u0689\7u\2\2\u0504\u0505\7e\2\2\u0505\u0506\7n\2\2\u0506\u0689"+ + "\7x\2\2\u0507\u0508\7v\2\2\u0508\u0509\7u\2\2\u0509\u0689\7z\2\2\u050a"+ + "\u050b\7n\2\2\u050b\u050c\7c\2\2\u050c\u0689\7u\2\2\u050d\u050e\7e\2\2"+ + "\u050e\u050f\7r\2\2\u050f\u0689\7{\2\2\u0510\u0511\7e\2\2\u0511\u0512"+ + "\7o\2\2\u0512\u0689\7r\2\2\u0513\u0514\7e\2\2\u0514\u0515\7r\2\2\u0515"+ + "\u0689\7z\2\2\u0516\u0517\7f\2\2\u0517\u0518\7e\2\2\u0518\u0689\7r\2\2"+ + "\u0519\u051a\7f\2\2\u051a\u051b\7g\2\2\u051b\u0689\7e\2\2\u051c\u051d"+ + "\7k\2\2\u051d\u051e\7p\2\2\u051e\u0689\7e\2\2\u051f\u0520\7c\2\2\u0520"+ + "\u0521\7z\2\2\u0521\u0689\7u\2\2\u0522\u0523\7d\2\2\u0523\u0524\7p\2\2"+ + "\u0524\u0689\7g\2\2\u0525\u0526\7e\2\2\u0526\u0527\7n\2\2\u0527\u0689"+ + "\7f\2\2\u0528\u0529\7u\2\2\u0529\u052a\7d\2\2\u052a\u0689\7e\2\2\u052b"+ + "\u052c\7k\2\2\u052c\u052d\7u\2\2\u052d\u0689\7e\2\2\u052e\u052f\7k\2\2"+ + "\u052f\u0530\7p\2\2\u0530\u0689\7z\2\2\u0531\u0532\7d\2\2\u0532\u0533"+ + "\7g\2\2\u0533\u0689\7s\2\2\u0534\u0535\7u\2\2\u0535\u0536\7g\2\2\u0536"+ + "\u0689\7f\2\2\u0537\u0538\7f\2\2\u0538\u0539\7g\2\2\u0539\u0689\7z\2\2"+ + "\u053a\u053b\7k\2\2\u053b\u053c\7p\2\2\u053c\u0689\7{\2\2\u053d\u053e"+ + "\7t\2\2\u053e\u053f\7q\2\2\u053f\u0689\7t\2\2\u0540\u0541\7d\2\2\u0541"+ + "\u0542\7d\2\2\u0542\u0543\7t\2\2\u0543\u0689\7\62\2\2\u0544\u0545\7d\2"+ + "\2\u0545\u0546\7d\2\2\u0546\u0547\7t\2\2\u0547\u0689\7\63\2\2\u0548\u0549"+ + "\7d\2\2\u0549\u054a\7d\2\2\u054a\u054b\7t\2\2\u054b\u0689\7\64\2\2\u054c"+ + "\u054d\7d\2\2\u054d\u054e\7d\2\2\u054e\u054f\7t\2\2\u054f\u0689\7\65\2"+ + "\2\u0550\u0551\7d\2\2\u0551\u0552\7d\2\2\u0552\u0553\7t\2\2\u0553\u0689"+ + "\7\66\2\2\u0554\u0555\7d\2\2\u0555\u0556\7d\2\2\u0556\u0557\7t\2\2\u0557"+ + "\u0689\7\67\2\2\u0558\u0559\7d\2\2\u0559\u055a\7d\2\2\u055a\u055b\7t\2"+ + "\2\u055b\u0689\78\2\2\u055c\u055d\7d\2\2\u055d\u055e\7d\2\2\u055e\u055f"+ + "\7t\2\2\u055f\u0689\79\2\2\u0560\u0561\7d\2\2\u0561\u0562\7d\2\2\u0562"+ + "\u0563\7u\2\2\u0563\u0689\7\62\2\2\u0564\u0565\7d\2\2\u0565\u0566\7d\2"+ + "\2\u0566\u0567\7u\2\2\u0567\u0689\7\63\2\2\u0568\u0569\7d\2\2\u0569\u056a"+ + "\7d\2\2\u056a\u056b\7u\2\2\u056b\u0689\7\64\2\2\u056c\u056d\7d\2\2\u056d"+ + "\u056e\7d\2\2\u056e\u056f\7u\2\2\u056f\u0689\7\65\2\2\u0570\u0571\7d\2"+ + "\2\u0571\u0572\7d\2\2\u0572\u0573\7u\2\2\u0573\u0689\7\66\2\2\u0574\u0575"+ + "\7d\2\2\u0575\u0576\7d\2\2\u0576\u0577\7u\2\2\u0577\u0689\7\67\2\2\u0578"+ + "\u0579\7d\2\2\u0579\u057a\7d\2\2\u057a\u057b\7u\2\2\u057b\u0689\78\2\2"+ + "\u057c\u057d\7d\2\2\u057d\u057e\7d\2\2\u057e\u057f\7u\2\2\u057f\u0689"+ + "\79\2\2\u0580\u0581\7d\2\2\u0581\u0582\7t\2\2\u0582\u0689\7c\2\2\u0583"+ + "\u0584\7r\2\2\u0584\u0585\7j\2\2\u0585\u0689\7z\2\2\u0586\u0587\7r\2\2"+ + "\u0587\u0588\7j\2\2\u0588\u0689\7{\2\2\u0589\u058a\7r\2\2\u058a\u058b"+ + "\7n\2\2\u058b\u0689\7z\2\2\u058c\u058d\7r\2\2\u058d\u058e\7n\2\2\u058e"+ + "\u0689\7{\2\2\u058f\u0590\7t\2\2\u0590\u0591\7o\2\2\u0591\u0592\7d\2\2"+ + "\u0592\u0689\7\62\2\2\u0593\u0594\7t\2\2\u0594\u0595\7o\2\2\u0595\u0596"+ + "\7d\2\2\u0596\u0689\7\63\2\2\u0597\u0598\7t\2\2\u0598\u0599\7o\2\2\u0599"+ + "\u059a\7d\2\2\u059a\u0689\7\64\2\2\u059b\u059c\7t\2\2\u059c\u059d\7o\2"+ + "\2\u059d\u059e\7d\2\2\u059e\u0689\7\65\2\2\u059f\u05a0\7t\2\2\u05a0\u05a1"+ + "\7o\2\2\u05a1\u05a2\7d\2\2\u05a2\u0689\7\66\2\2\u05a3\u05a4\7t\2\2\u05a4"+ + "\u05a5\7o\2\2\u05a5\u05a6\7d\2\2\u05a6\u0689\7\67\2\2\u05a7\u05a8\7t\2"+ + "\2\u05a8\u05a9\7o\2\2\u05a9\u05aa\7d\2\2\u05aa\u0689\78\2\2\u05ab\u05ac"+ + "\7t\2\2\u05ac\u05ad\7o\2\2\u05ad\u05ae\7d\2\2\u05ae\u0689\79\2\2\u05af"+ + "\u05b0\7u\2\2\u05b0\u05b1\7o\2\2\u05b1\u05b2\7d\2\2\u05b2\u0689\7\62\2"+ + "\2\u05b3\u05b4\7u\2\2\u05b4\u05b5\7o\2\2\u05b5\u05b6\7d\2\2\u05b6\u0689"+ + "\7\63\2\2\u05b7\u05b8\7u\2\2\u05b8\u05b9\7o\2\2\u05b9\u05ba\7d\2\2\u05ba"+ + "\u0689\7\64\2\2\u05bb\u05bc\7u\2\2\u05bc\u05bd\7o\2\2\u05bd\u05be\7d\2"+ + "\2\u05be\u0689\7\65\2\2\u05bf\u05c0\7u\2\2\u05c0\u05c1\7o\2\2\u05c1\u05c2"+ + "\7d\2\2\u05c2\u0689\7\66\2\2\u05c3\u05c4\7u\2\2\u05c4\u05c5\7o\2\2\u05c5"+ + "\u05c6\7d\2\2\u05c6\u0689\7\67\2\2\u05c7\u05c8\7u\2\2\u05c8\u05c9\7o\2"+ + "\2\u05c9\u05ca\7d\2\2\u05ca\u0689\78\2\2\u05cb\u05cc\7u\2\2\u05cc\u05cd"+ + "\7o\2\2\u05cd\u05ce\7d\2\2\u05ce\u0689\79\2\2\u05cf\u05d0\7u\2\2\u05d0"+ + "\u05d1\7v\2\2\u05d1\u0689\7r\2\2\u05d2\u05d3\7u\2\2\u05d3\u05d4\7v\2\2"+ + "\u05d4\u0689\7|\2\2\u05d5\u05d6\7v\2\2\u05d6\u05d7\7t\2\2\u05d7\u0689"+ + "\7d\2\2\u05d8\u05d9\7v\2\2\u05d9\u05da\7u\2\2\u05da\u0689\7d\2\2\u05db"+ + "\u05dc\7y\2\2\u05dc\u05dd\7c\2\2\u05dd\u0689\7k\2\2\u05de\u05df\7e\2\2"+ + "\u05df\u05e0\7n\2\2\u05e0\u0689\7g\2\2\u05e1\u05e2\7u\2\2\u05e2\u05e3"+ + "\7g\2\2\u05e3\u0689\7g\2\2\u05e4\u05e5\7v\2\2\u05e5\u05e6\7u\2\2\u05e6"+ + "\u0689\7{\2\2\u05e7\u05e8\7n\2\2\u05e8\u05e9\7d\2\2\u05e9\u05ea\7r\2\2"+ + "\u05ea\u0689\7n\2\2\u05eb\u05ec\7k\2\2\u05ec\u05ed\7p\2\2\u05ed\u0689"+ + "\7|\2\2\u05ee\u05ef\7v\2\2\u05ef\u05f0\7{\2\2\u05f0\u0689\7u\2\2\u05f1"+ + "\u05f2\7n\2\2\u05f2\u05f3\7d\2\2\u05f3\u05f4\7o\2\2\u05f4\u0689\7k\2\2"+ + "\u05f5\u05f6\7f\2\2\u05f6\u05f7\7g\2\2\u05f7\u0689\7|\2\2\u05f8\u05f9"+ + "\7p\2\2\u05f9\u05fa\7g\2\2\u05fa\u0689\7i\2\2\u05fb\u05fc\7c\2\2\u05fc"+ + "\u05fd\7u\2\2\u05fd\u0689\7t\2\2\u05fe\u05ff\7v\2\2\u05ff\u0600\7c\2\2"+ + "\u0600\u0689\7|\2\2\u0601\u0602\7n\2\2\u0602\u0603\7d\2\2\u0603\u0604"+ + "\7x\2\2\u0604\u0689\7e\2\2\u0605\u0606\7v\2\2\u0606\u0607\7c\2\2\u0607"+ + "\u0689\7d\2\2\u0608\u0609\7o\2\2\u0609\u060a\7c\2\2\u060a\u0689\7r\2\2"+ + "\u060b\u060c\7t\2\2\u060c\u060d\7v\2\2\u060d\u0689\7p\2\2\u060e\u060f"+ + "\7n\2\2\u060f\u0610\7d\2\2\u0610\u0611\7u\2\2\u0611\u0689\7t\2\2\u0612"+ + "\u0613\7v\2\2\u0613\u0614\7|\2\2\u0614\u0689\7c\2\2\u0615\u0616\7n\2\2"+ + "\u0616\u0617\7d\2\2\u0617\u0618\7x\2\2\u0618\u0689\7u\2\2\u0619\u061a"+ + "\7v\2\2\u061a\u061b\7d\2\2\u061b\u0689\7c\2\2\u061c\u061d\7n\2\2\u061d"+ + "\u061e\7d\2\2\u061e\u061f\7t\2\2\u061f\u0689\7c\2\2\u0620\u0621\7n\2\2"+ + "\u0621\u0622\7d\2\2\u0622\u0623\7e\2\2\u0623\u0689\7e\2\2\u0624\u0625"+ + "\7n\2\2\u0625\u0626\7f\2\2\u0626\u0689\7|\2\2\u0627\u0628\7n\2\2\u0628"+ + "\u0629\7d\2\2\u0629\u062a\7e\2\2\u062a\u0689\7u\2\2\u062b\u062c\7e\2\2"+ + "\u062c\u062d\7r\2\2\u062d\u0689\7|\2\2\u062e\u062f\7f\2\2\u062f\u0630"+ + "\7g\2\2\u0630\u0689\7y\2\2\u0631\u0632\7c\2\2\u0632\u0633\7u\2\2\u0633"+ + "\u0689\7y\2\2\u0634\u0635\7n\2\2\u0635\u0636\7d\2\2\u0636\u0637\7p\2\2"+ + "\u0637\u0689\7g\2\2\u0638\u0639\7r\2\2\u0639\u063a\7j\2\2\u063a\u0689"+ + "\7|\2\2\u063b\u063c\7k\2\2\u063c\u063d\7p\2\2\u063d\u0689\7y\2\2\u063e"+ + "\u063f\7t\2\2\u063f\u0640\7q\2\2\u0640\u0689\7y\2\2\u0641\u0642\7n\2\2"+ + "\u0642\u0643\7d\2\2\u0643\u0644\7g\2\2\u0644\u0689\7s\2\2\u0645\u0646"+ + "\7r\2\2\u0646\u0647\7j\2\2\u0647\u0689\7y\2\2\u0648\u0649\7r\2\2\u0649"+ + "\u064a\7n\2\2\u064a\u0689\7|\2\2\u064b\u064c\7g\2\2\u064c\u064d\7q\2\2"+ + "\u064d\u0689\7o\2\2\u064e\u064f\7c\2\2\u064f\u0650\7f\2\2\u0650\u0651"+ + "\7e\2\2\u0651\u0689\7s\2\2\u0652\u0653\7c\2\2\u0653\u0654\7p\2\2\u0654"+ + "\u0655\7f\2\2\u0655\u0689\7s\2\2\u0656\u0657\7c\2\2\u0657\u0658\7u\2\2"+ + "\u0658\u0659\7n\2\2\u0659\u0689\7s\2\2\u065a\u065b\7c\2\2\u065b\u065c"+ + "\7u\2\2\u065c\u065d\7t\2\2\u065d\u0689\7s\2\2\u065e\u065f\7d\2\2\u065f"+ + "\u0660\7k\2\2\u0660\u0661\7v\2\2\u0661\u0689\7s\2\2\u0662\u0663\7e\2\2"+ + "\u0663\u0664\7r\2\2\u0664\u0689\7s\2\2\u0665\u0666\7f\2\2\u0666\u0667"+ + "\7g\2\2\u0667\u0689\7s\2\2\u0668\u0669\7g\2\2\u0669\u066a\7q\2\2\u066a"+ + "\u066b\7t\2\2\u066b\u0689\7s\2\2\u066c\u066d\7k\2\2\u066d\u066e\7p\2\2"+ + "\u066e\u0689\7s\2\2\u066f\u0670\7n\2\2\u0670\u0671\7f\2\2\u0671\u0689"+ + "\7s\2\2\u0672\u0673\7n\2\2\u0673\u0674\7u\2\2\u0674\u0675\7t\2\2\u0675"+ + "\u0689\7s\2\2\u0676\u0677\7q\2\2\u0677\u0678\7t\2\2\u0678\u0689\7s\2\2"+ + "\u0679\u067a\7t\2\2\u067a\u067b\7q\2\2\u067b\u067c\7n\2\2\u067c\u0689"+ + "\7s\2\2\u067d\u067e\7t\2\2\u067e\u067f\7q\2\2\u067f\u0680\7t\2\2\u0680"+ + "\u0689\7s\2\2\u0681\u0682\7u\2\2\u0682\u0683\7d\2\2\u0683\u0684\7e\2\2"+ + "\u0684\u0689\7s\2\2\u0685\u0686\7u\2\2\u0686\u0687\7v\2\2\u0687\u0689"+ + "\7s\2\2\u0688\u0462\3\2\2\2\u0688\u0465\3\2\2\2\u0688\u0468\3\2\2\2\u0688"+ + "\u046b\3\2\2\2\u0688\u046e\3\2\2\2\u0688\u0471\3\2\2\2\u0688\u0474\3\2"+ + "\2\2\u0688\u0477\3\2\2\2\u0688\u047a\3\2\2\2\u0688\u047d\3\2\2\2\u0688"+ + "\u0480\3\2\2\2\u0688\u0483\3\2\2\2\u0688\u0486\3\2\2\2\u0688\u0489\3\2"+ + "\2\2\u0688\u048c\3\2\2\2\u0688\u048f\3\2\2\2\u0688\u0492\3\2\2\2\u0688"+ + "\u0495\3\2\2\2\u0688\u0498\3\2\2\2\u0688\u049b\3\2\2\2\u0688\u049e\3\2"+ + "\2\2\u0688\u04a1\3\2\2\2\u0688\u04a4\3\2\2\2\u0688\u04a7\3\2\2\2\u0688"+ + "\u04aa\3\2\2\2\u0688\u04ad\3\2\2\2\u0688\u04b0\3\2\2\2\u0688\u04b3\3\2"+ + "\2\2\u0688\u04b6\3\2\2\2\u0688\u04b9\3\2\2\2\u0688\u04bc\3\2\2\2\u0688"+ + "\u04bf\3\2\2\2\u0688\u04c2\3\2\2\2\u0688\u04c5\3\2\2\2\u0688\u04c8\3\2"+ + "\2\2\u0688\u04cb\3\2\2\2\u0688\u04ce\3\2\2\2\u0688\u04d1\3\2\2\2\u0688"+ + "\u04d4\3\2\2\2\u0688\u04d7\3\2\2\2\u0688\u04da\3\2\2\2\u0688\u04dd\3\2"+ + "\2\2\u0688\u04e0\3\2\2\2\u0688\u04e3\3\2\2\2\u0688\u04e6\3\2\2\2\u0688"+ + "\u04e9\3\2\2\2\u0688\u04ec\3\2\2\2\u0688\u04ef\3\2\2\2\u0688\u04f2\3\2"+ + "\2\2\u0688\u04f5\3\2\2\2\u0688\u04f8\3\2\2\2\u0688\u04fb\3\2\2\2\u0688"+ + "\u04fe\3\2\2\2\u0688\u0501\3\2\2\2\u0688\u0504\3\2\2\2\u0688\u0507\3\2"+ + "\2\2\u0688\u050a\3\2\2\2\u0688\u050d\3\2\2\2\u0688\u0510\3\2\2\2\u0688"+ + "\u0513\3\2\2\2\u0688\u0516\3\2\2\2\u0688\u0519\3\2\2\2\u0688\u051c\3\2"+ + "\2\2\u0688\u051f\3\2\2\2\u0688\u0522\3\2\2\2\u0688\u0525\3\2\2\2\u0688"+ + "\u0528\3\2\2\2\u0688\u052b\3\2\2\2\u0688\u052e\3\2\2\2\u0688\u0531\3\2"+ + "\2\2\u0688\u0534\3\2\2\2\u0688\u0537\3\2\2\2\u0688\u053a\3\2\2\2\u0688"+ + "\u053d\3\2\2\2\u0688\u0540\3\2\2\2\u0688\u0544\3\2\2\2\u0688\u0548\3\2"+ + "\2\2\u0688\u054c\3\2\2\2\u0688\u0550\3\2\2\2\u0688\u0554\3\2\2\2\u0688"+ + "\u0558\3\2\2\2\u0688\u055c\3\2\2\2\u0688\u0560\3\2\2\2\u0688\u0564\3\2"+ + "\2\2\u0688\u0568\3\2\2\2\u0688\u056c\3\2\2\2\u0688\u0570\3\2\2\2\u0688"+ + "\u0574\3\2\2\2\u0688\u0578\3\2\2\2\u0688\u057c\3\2\2\2\u0688\u0580\3\2"+ + "\2\2\u0688\u0583\3\2\2\2\u0688\u0586\3\2\2\2\u0688\u0589\3\2\2\2\u0688"+ + "\u058c\3\2\2\2\u0688\u058f\3\2\2\2\u0688\u0593\3\2\2\2\u0688\u0597\3\2"+ + "\2\2\u0688\u059b\3\2\2\2\u0688\u059f\3\2\2\2\u0688\u05a3\3\2\2\2\u0688"+ + "\u05a7\3\2\2\2\u0688\u05ab\3\2\2\2\u0688\u05af\3\2\2\2\u0688\u05b3\3\2"+ + "\2\2\u0688\u05b7\3\2\2\2\u0688\u05bb\3\2\2\2\u0688\u05bf\3\2\2\2\u0688"+ + "\u05c3\3\2\2\2\u0688\u05c7\3\2\2\2\u0688\u05cb\3\2\2\2\u0688\u05cf\3\2"+ + "\2\2\u0688\u05d2\3\2\2\2\u0688\u05d5\3\2\2\2\u0688\u05d8\3\2\2\2\u0688"+ + "\u05db\3\2\2\2\u0688\u05de\3\2\2\2\u0688\u05e1\3\2\2\2\u0688\u05e4\3\2"+ + "\2\2\u0688\u05e7\3\2\2\2\u0688\u05eb\3\2\2\2\u0688\u05ee\3\2\2\2\u0688"+ + "\u05f1\3\2\2\2\u0688\u05f5\3\2\2\2\u0688\u05f8\3\2\2\2\u0688\u05fb\3\2"+ + "\2\2\u0688\u05fe\3\2\2\2\u0688\u0601\3\2\2\2\u0688\u0605\3\2\2\2\u0688"+ + "\u0608\3\2\2\2\u0688\u060b\3\2\2\2\u0688\u060e\3\2\2\2\u0688\u0612\3\2"+ + "\2\2\u0688\u0615\3\2\2\2\u0688\u0619\3\2\2\2\u0688\u061c\3\2\2\2\u0688"+ + "\u0620\3\2\2\2\u0688\u0624\3\2\2\2\u0688\u0627\3\2\2\2\u0688\u062b\3\2"+ + "\2\2\u0688\u062e\3\2\2\2\u0688\u0631\3\2\2\2\u0688\u0634\3\2\2\2\u0688"+ + "\u0638\3\2\2\2\u0688\u063b\3\2\2\2\u0688\u063e\3\2\2\2\u0688\u0641\3\2"+ + "\2\2\u0688\u0645\3\2\2\2\u0688\u0648\3\2\2\2\u0688\u064b\3\2\2\2\u0688"+ + "\u064e\3\2\2\2\u0688\u0652\3\2\2\2\u0688\u0656\3\2\2\2\u0688\u065a\3\2"+ + "\2\2\u0688\u065e\3\2\2\2\u0688\u0662\3\2\2\2\u0688\u0665\3\2\2\2\u0688"+ + "\u0668\3\2\2\2\u0688\u066c\3\2\2\2\u0688\u066f\3\2\2\2\u0688\u0672\3\2"+ + "\2\2\u0688\u0676\3\2\2\2\u0688\u0679\3\2\2\2\u0688\u067d\3\2\2\2\u0688"+ + "\u0681\3\2\2\2\u0688\u0685\3\2\2\2\u0689\u00f0\3\2\2\2\u068a\u068b\7%"+ + "\2\2\u068b\u00f2\3\2\2\2\u068c\u068d\7<\2\2\u068d\u00f4\3\2\2\2\u068e"+ + "\u068f\7.\2\2\u068f\u00f6\3\2\2\2\u0690\u0691\7*\2\2\u0691\u00f8\3\2\2"+ + "\2\u0692\u0693\7+\2\2\u0693\u00fa\3\2\2\2\u0694\u0695\7]\2\2\u0695\u00fc"+ + "\3\2\2\2\u0696\u0697\7_\2\2\u0697\u00fe\3\2\2\2\u0698\u0699\7\60\2\2\u0699"+ + "\u0100\3\2\2\2\u069a\u069b\7>\2\2\u069b\u069c\7>\2\2\u069c\u0102\3\2\2"+ + "\2\u069d\u069e\7@\2\2\u069e\u069f\7@\2\2\u069f\u0104\3\2\2\2\u06a0\u06a1"+ + "\7-\2\2\u06a1\u0106\3\2\2\2\u06a2\u06a3\7/\2\2\u06a3\u0108\3\2\2\2\u06a4"+ + "\u06a5\7>\2\2\u06a5\u010a\3\2\2\2\u06a6\u06a7\7@\2\2\u06a7\u010c\3\2\2"+ + "\2\u06a8\u06a9\7,\2\2\u06a9\u010e\3\2\2\2\u06aa\u06ab\7\61\2\2\u06ab\u0110"+ + "\3\2\2\2\u06ac\u06ad\7}\2\2\u06ad\u06ae\b\u0088\t\2\u06ae\u0112\3\2\2"+ + "\2\u06af\u06b0\7\177\2\2\u06b0\u06b1\b\u0089\n\2\u06b1\u0114\3\2\2\2\u06b2"+ + "\u06b5\5\u0117\u008b\2\u06b3\u06b5\5\u011f\u008f\2\u06b4\u06b2\3\2\2\2"+ + "\u06b4\u06b3\3\2\2\2\u06b5\u0116\3\2\2\2\u06b6\u06ba\5\u0119\u008c\2\u06b7"+ + "\u06ba\5\u011b\u008d\2\u06b8\u06ba\5\u011d\u008e\2\u06b9\u06b6\3\2\2\2"+ + "\u06b9\u06b7\3\2\2\2\u06b9\u06b8\3\2\2\2\u06ba\u0118\3\2\2\2\u06bb\u06bf"+ + "\7\'\2\2\u06bc\u06be\5\u0127\u0093\2\u06bd\u06bc\3\2\2\2\u06be\u06c1\3"+ + "\2\2\2\u06bf\u06bd\3\2\2\2\u06bf\u06c0\3\2\2\2\u06c0\u06c2\3\2\2\2\u06c1"+ + "\u06bf\3\2\2\2\u06c2\u06c4\7\60\2\2\u06c3\u06c5\5\u0127\u0093\2\u06c4"+ + "\u06c3\3\2\2\2\u06c5\u06c6\3\2\2\2\u06c6\u06c4\3\2\2\2\u06c6\u06c7\3\2"+ + "\2\2\u06c7\u011a\3\2\2\2\u06c8\u06ca\5\u0129\u0094\2\u06c9\u06c8\3\2\2"+ + "\2\u06ca\u06cd\3\2\2\2\u06cb\u06c9\3\2\2\2\u06cb\u06cc\3\2\2\2\u06cc\u06ce"+ + "\3\2\2\2\u06cd\u06cb\3\2\2\2\u06ce\u06d0\7\60\2\2\u06cf\u06d1\5\u0129"+ + "\u0094\2\u06d0\u06cf\3\2\2\2\u06d1\u06d2\3\2\2\2\u06d2\u06d0\3\2\2\2\u06d2"+ + "\u06d3\3\2\2\2\u06d3\u011c\3\2\2\2\u06d4\u06d8\7&\2\2\u06d5\u06d7\5\u012b"+ + "\u0095\2\u06d6\u06d5\3\2\2\2\u06d7\u06da\3\2\2\2\u06d8\u06d6\3\2\2\2\u06d8"+ + "\u06d9\3\2\2\2\u06d9\u06db\3\2\2\2\u06da\u06d8\3\2\2\2\u06db\u06dd\7\60"+ + "\2\2\u06dc\u06de\5\u012b\u0095\2\u06dd\u06dc\3\2\2\2\u06de\u06df\3\2\2"+ + "\2\u06df\u06dd\3\2\2\2\u06df\u06e0\3\2\2\2\u06e0\u011e\3\2\2\2\u06e1\u06e5"+ + "\5\u0123\u0091\2\u06e2\u06e5\5\u0125\u0092\2\u06e3\u06e5\5\u0121\u0090"+ + "\2\u06e4\u06e1\3\2\2\2\u06e4\u06e2\3\2\2\2\u06e4\u06e3\3\2\2\2\u06e5\u0120"+ + "\3\2\2\2\u06e6\u06e8\7\'\2\2\u06e7\u06e9\5\u0127\u0093\2\u06e8\u06e7\3"+ + "\2\2\2\u06e9\u06ea\3\2\2\2\u06ea\u06e8\3\2\2\2\u06ea\u06eb\3\2\2\2\u06eb"+ + "\u0122\3\2\2\2\u06ec\u06ee\5\u0129\u0094\2\u06ed\u06ec\3\2\2\2\u06ee\u06ef"+ + "\3\2\2\2\u06ef\u06ed\3\2\2\2\u06ef\u06f0\3\2\2\2\u06f0\u0124\3\2\2\2\u06f1"+ + "\u06f3\7&\2\2\u06f2\u06f4\5\u012b\u0095\2\u06f3\u06f2\3\2\2\2\u06f4\u06f5"+ + "\3\2\2\2\u06f5\u06f3\3\2\2\2\u06f5\u06f6\3\2\2\2\u06f6\u0126\3\2\2\2\u06f7"+ + "\u06f8\t\5\2\2\u06f8\u0128\3\2\2\2\u06f9\u06fa\t\6\2\2\u06fa\u012a\3\2"+ + "\2\2\u06fb\u06fc\t\7\2\2\u06fc\u012c\3\2\2\2\u06fd\u0701\7)\2\2\u06fe"+ + "\u06ff\7^\2\2\u06ff\u0702\t\16\2\2\u0700\u0702\n\20\2\2\u0701\u06fe\3"+ + "\2\2\2\u0701\u0700\3\2\2\2\u0702\u0703\3\2\2\2\u0703\u0704\7)\2\2\u0704"+ + "\u012e\3\2\2\2\u0705\u0707\5\u0131\u0098\2\u0706\u0708\t\23\2\2\u0707"+ + "\u0706\3\2\2\2\u0708\u0709\3\2\2\2\u0709\u0707\3\2\2\2\u0709\u070a\3\2"+ + "\2\2\u070a\u0130\3\2\2\2\u070b\u070f\7#\2\2\u070c\u070e\5\u0137\u009b"+ + "\2\u070d\u070c\3\2\2\2\u070e\u0711\3\2\2\2\u070f\u070d\3\2\2\2\u070f\u0710"+ + "\3\2\2\2\u0710\u0132\3\2\2\2\u0711\u070f\3\2\2\2\u0712\u0716\5\u0135\u009a"+ + "\2\u0713\u0715\5\u0137\u009b\2\u0714\u0713\3\2\2\2\u0715\u0718\3\2\2\2"+ + "\u0716\u0714\3\2\2\2\u0716\u0717\3\2\2\2\u0717\u0134\3\2\2\2\u0718\u0716"+ + "\3\2\2\2\u0719\u071a\t\b\2\2\u071a\u0136\3\2\2\2\u071b\u071c\t\t\2\2\u071c"+ + "\u0138\3\2\2\2\u071d\u071f\t\21\2\2\u071e\u071d\3\2\2\2\u071f\u0720\3"+ + "\2\2\2\u0720\u071e\3\2\2\2\u0720\u0721\3\2\2\2\u0721\u0722\3\2\2\2\u0722"+ + "\u0723\b\u009c\7\2\u0723\u013a\3\2\2\2\u0724\u0725\7\61\2\2\u0725\u0726"+ + "\7\61\2\2\u0726\u072a\3\2\2\2\u0727\u0729\n\22\2\2\u0728\u0727\3\2\2\2"+ + "\u0729\u072c\3\2\2\2\u072a\u0728\3\2\2\2\u072a\u072b\3\2\2\2\u072b\u072d"+ + "\3\2\2\2\u072c\u072a\3\2\2\2\u072d\u072e\b\u009d\b\2\u072e\u013c\3\2\2"+ + "\2\u072f\u0730\7\61\2\2\u0730\u0731\7,\2\2\u0731\u0735\3\2\2\2\u0732\u0734"+ + "\13\2\2\2\u0733\u0732\3\2\2\2\u0734\u0737\3\2\2\2\u0735\u0736\3\2\2\2"+ + "\u0735\u0733\3\2\2\2\u0736\u0738\3\2\2\2\u0737\u0735\3\2\2\2\u0738\u0739"+ + "\7,\2\2\u0739\u073a\7\61\2\2\u073a\u073b\3\2\2\2\u073b\u073c\b\u009e\b"+ + "\2\u073c\u013e\3\2\2\2\u073d\u073f\7>\2\2\u073e\u0740\t\24\2\2\u073f\u073e"+ + "\3\2\2\2\u0740\u0741\3\2\2\2\u0741\u073f\3\2\2\2\u0741\u0742\3\2\2\2\u0742"+ + "\u0743\3\2\2\2\u0743\u0744\7@\2\2\u0744\u0745\b\u009f\13\2\u0745\u0140"+ + "\3\2\2\2\u0746\u074c\7$\2\2\u0747\u0748\7^\2\2\u0748\u074b\7$\2\2\u0749"+ + "\u074b\n\n\2\2\u074a\u0747\3\2\2\2\u074a\u0749\3\2\2\2\u074b\u074e\3\2"+ + "\2\2\u074c\u074a\3\2\2\2\u074c\u074d\3\2\2\2\u074d\u074f\3\2\2\2\u074e"+ + "\u074c\3\2\2\2\u074f\u0750\7$\2\2\u0750\u0751\b\u00a0\f\2\u0751\u0142"+ + "\3\2\2\2\u0752\u0754\t\21\2\2\u0753\u0752\3\2\2\2\u0754\u0755\3\2\2\2"+ + "\u0755\u0753\3\2\2\2\u0755\u0756\3\2\2\2\u0756\u0757\3\2\2\2\u0757\u0758"+ + "\b\u00a1\7\2\u0758\u0144\3\2\2\2\u0759\u075a\7\61\2\2\u075a\u075b\7\61"+ + "\2\2\u075b\u075f\3\2\2\2\u075c\u075e\n\22\2\2\u075d\u075c\3\2\2\2\u075e"+ + "\u0761\3\2\2\2\u075f\u075d\3\2\2\2\u075f\u0760\3\2\2\2\u0760\u0762\3\2"+ + "\2\2\u0761\u075f\3\2\2\2\u0762\u0763\b\u00a2\b\2\u0763\u0146\3\2\2\2\u0764"+ + "\u0765\7\61\2\2\u0765\u0766\7,\2\2\u0766\u076a\3\2\2\2\u0767\u0769\13"+ + "\2\2\2\u0768\u0767\3\2\2\2\u0769\u076c\3\2\2\2\u076a\u076b\3\2\2\2\u076a"+ + "\u0768\3\2\2\2\u076b\u076d\3\2\2\2\u076c\u076a\3\2\2\2\u076d\u076e\7,"+ + "\2\2\u076e\u076f\7\61\2\2\u076f\u0770\3\2\2\2\u0770\u0771\b\u00a3\b\2"+ + "\u0771\u0148\3\2\2\2D\2\3\4\u01b6\u025c\u0301\u0328\u0333\u033b\u036b"+ + "\u03a3\u03a8\u03af\u03b4\u03bb\u03c0\u03c7\u03ce\u03d3\u03da\u03df\u03e4"+ + "\u03eb\u03f1\u03f3\u03f8\u03ff\u0404\u0410\u041d\u041f\u0424\u0428\u042a"+ + "\u042d\u0435\u0438\u043f\u0449\u0454\u0688\u06b4\u06b9\u06bf\u06c6\u06cb"+ + "\u06d2\u06d8\u06df\u06e4\u06ea\u06ef\u06f5\u0701\u0709\u070f\u0716\u0720"+ + "\u072a\u0735\u0741\u074a\u074c\u0755\u075f\u076a\r\3\2\2\3B\3\3U\4\3V"+ "\5\3n\6\2\3\2\2\4\2\3\u0088\7\3\u0089\b\3\u009f\t\3\u00a0\n"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens index e89e29078..0efb2b18f 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens @@ -178,7 +178,7 @@ IMPORT_COMMENT_BLOCK=153 'inline'=44 'volatile'=45 'static'=46 -'interrupt'=47 +'__interrupt'=47 'register'=48 '__zp_reserve'=49 '__address'=50 diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.interp b/src/main/java/dk/camelot64/kickc/parser/KickCParser.interp index b14b412ad..b64800bc2 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.interp +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.interp @@ -46,7 +46,7 @@ null 'inline' 'volatile' 'static' -'interrupt' +'__interrupt' 'register' '__zp_reserve' '__address' diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java index 7d65034c8..d0c08706f 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java @@ -84,7 +84,7 @@ public class KickCParser extends Parser { "'--'", "'&'", "'~'", "'^'", "'|'", null, null, "'=='", "'!='", null, "'<='", "'>='", null, "'&&'", "'||'", "'='", null, "'typedef'", "'const'", "'extern'", "'export'", "'align'", "'inline'", "'volatile'", "'static'", - "'interrupt'", "'register'", "'__zp_reserve'", "'__address'", "'__zp'", + "'__interrupt'", "'register'", "'__zp_reserve'", "'__address'", "'__zp'", "'__mem'", "'__ssa'", "'__ma'", "'__intrinsic'", null, "'if'", "'else'", "'while'", "'do'", "'for'", "'switch'", "'return'", "'break'", "'continue'", "'asm'", "'default'", "'case'", "'struct'", "'enum'", "'sizeof'", "'typeid'", diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.tokens b/src/main/java/dk/camelot64/kickc/parser/KickCParser.tokens index e89e29078..0efb2b18f 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.tokens +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.tokens @@ -178,7 +178,7 @@ IMPORT_COMMENT_BLOCK=153 'inline'=44 'volatile'=45 'static'=46 -'interrupt'=47 +'__interrupt'=47 'register'=48 '__zp_reserve'=49 '__address'=50 diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 6cc4e0ea6..48e129733 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -34,27 +34,26 @@ import java.util.stream.Collectors; public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor { /** The C parser keeping track of C-files and lexers */ - private CParser cParser; + private final CParser cParser; /** The source ANTLR parse tree of the source file. */ - private KickCParser.FileContext fileCtx; + private final KickCParser.FileContext fileCtx; /** The program containing all compile structures. */ - private Program program; + private final Program program; /** Used to build the scopes of the source file. */ - private Stack scopeStack; - /** The memory area used by default for variables. */ - private Variable.MemoryArea defaultMemoryArea; + private final Stack scopeStack; /** All #pragma constructor_for() statements. Collected during parsing and handled by {@link #generate()} before returning. */ - private List pragmaConstructorFors; + private final List pragmaConstructorFors; - public Pass0GenerateStatementSequence(CParser cParser, KickCParser.FileContext fileCtx, Program program, Procedure.CallingConvention initialCallingConvention, StringEncoding defaultEncoding) { + + public Pass0GenerateStatementSequence(CParser cParser, KickCParser.FileContext fileCtx, Program program, Procedure.CallingConvention initialCallingConvention, StringEncoding defaultEncoding, String defaultInterruptType) { this.cParser = cParser; this.fileCtx = fileCtx; this.program = program; this.scopeStack = new Stack<>(); - this.defaultMemoryArea = Variable.MemoryArea.ZEROPAGE_MEMORY; this.currentCallingConvention = initialCallingConvention; this.currentEncoding = defaultEncoding; this.pragmaConstructorFors = new ArrayList(); + this.currentInterruptType = defaultInterruptType; scopeStack.push(program.getScope()); } @@ -250,6 +249,9 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor reservedZps = pragmaParamRanges(ctx.pragmaParam()); program.addReservedZps(reservedZps); @@ -372,12 +374,15 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor 1) { - interruptType = ctx.getChild(2).getText().toUpperCase(Locale.ENGLISH); + interruptType = ctx.getChild(2).getText().toLowerCase(Locale.ENGLISH); } else { - // The default interrupt type - interruptType = Procedure.InterruptType.DEFAULT.name(); + interruptType = currentInterruptType; } - Procedure.InterruptType type = Procedure.InterruptType.valueOf(interruptType); - return new Directive.Interrupt(type); + return new Directive.Interrupt(interruptType); } @Override @@ -1435,7 +1438,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor loopStack = new Stack<>(); + private final Stack loopStack = new Stack<>(); @Override public Void visitStmtWhile(KickCParser.StmtWhileContext ctx) { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 3964c7379..7dc5c8d85 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -32,14 +32,14 @@ public class Pass4CodeGeneration { boolean warnFragmentMissing; /** The program being generated. */ - private Program program; + private final Program program; /** * Keeps track of the phi transitions into blocks during code generation. * Used to ensure that duplicate transitions are only code generated once. * Maps to-blocks to the transition information for the block */ - private Map transitionsGenerated = new LinkedHashMap<>(); + private final Map transitionsGenerated = new LinkedHashMap<>(); /** * Determines if a phi-transition has already been code-generated @@ -97,7 +97,7 @@ public class Pass4CodeGeneration { String entryName = program.getStartProcedure().getFullName(); linkScriptBody = linkScriptBody.replace("%E", entryName); Number startAddress = program.getTargetPlatform().getStartAddress(); - if(startAddress!=null) + if(startAddress != null) linkScriptBody = linkScriptBody.replace("%P", AsmFormat.getAsmNumber(startAddress)); asm.addLine(new AsmInlineKickAsm(linkScriptBody, 0L, 0L)); @@ -181,7 +181,7 @@ public class Pass4CodeGeneration { // Name of the current data segment private String currentCodeSegmentName = Scope.SEGMENT_CODE_DEFAULT; // Name of the current code segment - private String currentDataSegmentName = Scope.SEGMENT_DATA_DEFAULT; + private final String currentDataSegmentName = Scope.SEGMENT_DATA_DEFAULT; // Name of the current active segment private String currentSegmentName = ""; @@ -751,13 +751,13 @@ public class Pass4CodeGeneration { } } } else if(value instanceof ConstantString) { - ConstantString stringValue = (ConstantString) value; - // Ensure encoding is good - String asmConstant = AsmFormat.getAsmConstant(program, stringValue, 99, scopeRef); - dataChunk.addDataString(asmConstant, getEncoding(stringValue)); - if(stringValue.isZeroTerminated()) { - dataChunk.addDataNumeric(AsmDataNumeric.Type.BYTE, "0", null); - } + ConstantString stringValue = (ConstantString) value; + // Ensure encoding is good + String asmConstant = AsmFormat.getAsmConstant(program, stringValue, 99, scopeRef); + dataChunk.addDataString(asmConstant, getEncoding(stringValue)); + if(stringValue.isZeroTerminated()) { + dataChunk.addDataNumeric(AsmDataNumeric.Type.BYTE, "0", null); + } } else if(SymbolType.BYTE.equals(valueType) || SymbolType.SBYTE.equals(valueType)) { dataChunk.addDataNumeric(AsmDataNumeric.Type.BYTE, AsmFormat.getAsmConstant(program, value, 99, scopeRef), getEncoding(value)); } else if(SymbolType.WORD.equals(valueType) || SymbolType.SWORD.equals(valueType)) { @@ -838,9 +838,9 @@ public class Pass4CodeGeneration { throw new AsmFragmentInstance.AluNotApplicableException(); } StatementAssignment assignment = (StatementAssignment) statement; - AsmFragmentInstanceSpecFactory asmFragmentInstanceSpecFactory = new AsmFragmentInstanceSpecFactory(assignment, assignmentAlu, program); - ensureEncoding(asm, asmFragmentInstanceSpecFactory); - generateAsm(asm, asmFragmentInstanceSpecFactory.getAsmFragmentInstanceSpec()); + AsmFragmentInstanceSpecBuilder asmFragmentInstanceSpecBuilder = AsmFragmentInstanceSpecBuilder.assignmentAlu(assignment, assignmentAlu, program); + ensureEncoding(asm, asmFragmentInstanceSpecBuilder); + generateAsm(asm, asmFragmentInstanceSpecBuilder.getAsmFragmentInstanceSpec()); aluState.clear(); return; } @@ -855,8 +855,7 @@ public class Pass4CodeGeneration { Registers.Register lValRegister = program.getSymbolInfos().getVariable(lValueRef).getAllocation(); if(lValRegister.getType().equals(Registers.RegisterType.REG_ALU)) { //asm.addComment(statement + " // ALU"); - StatementAssignment assignmentAlu = assignment; - aluState.setAluAssignment(assignmentAlu); + aluState.setAluAssignment(assignment); isAlu = true; } } @@ -864,15 +863,15 @@ public class Pass4CodeGeneration { if(assignment.getOperator() == null && assignment.getrValue1() == null && isRegisterCopy(lValue, assignment.getrValue2())) { //asm.addComment(lValue.toString(program) + " = " + assignment.getrValue2().toString(program) + " // register copy " + getRegister(lValue)); } else { - AsmFragmentInstanceSpecFactory asmFragmentInstanceSpecFactory = new AsmFragmentInstanceSpecFactory(assignment, program); - ensureEncoding(asm, asmFragmentInstanceSpecFactory); - generateAsm(asm, asmFragmentInstanceSpecFactory.getAsmFragmentInstanceSpec()); + AsmFragmentInstanceSpecBuilder asmFragmentInstanceSpecBuilder = AsmFragmentInstanceSpecBuilder.assignment(assignment, program); + ensureEncoding(asm, asmFragmentInstanceSpecBuilder); + generateAsm(asm, asmFragmentInstanceSpecBuilder.getAsmFragmentInstanceSpec()); } } } else if(statement instanceof StatementConditionalJump) { - AsmFragmentInstanceSpecFactory asmFragmentInstanceSpecFactory = new AsmFragmentInstanceSpecFactory((StatementConditionalJump) statement, block, program, getGraph()); - ensureEncoding(asm, asmFragmentInstanceSpecFactory); - generateAsm(asm, asmFragmentInstanceSpecFactory.getAsmFragmentInstanceSpec()); + AsmFragmentInstanceSpecBuilder asmFragmentInstanceSpecBuilder = AsmFragmentInstanceSpecBuilder.conditionalJump((StatementConditionalJump) statement, block, program); + ensureEncoding(asm, asmFragmentInstanceSpecBuilder); + generateAsm(asm, asmFragmentInstanceSpecBuilder.getAsmFragmentInstanceSpec()); } else if(statement instanceof StatementCall) { StatementCall call = (StatementCall) statement; Procedure procedure = getScope().getProcedure(call.getProcedure()); @@ -895,9 +894,9 @@ public class Pass4CodeGeneration { asm.getCurrentChunk().setFragment("jsr"); asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else if(statement instanceof StatementExprSideEffect) { - AsmFragmentInstanceSpecFactory asmFragmentInstanceSpecFactory = new AsmFragmentInstanceSpecFactory((StatementExprSideEffect) statement, program); - ensureEncoding(asm, asmFragmentInstanceSpecFactory); - generateAsm(asm, asmFragmentInstanceSpecFactory.getAsmFragmentInstanceSpec()); + AsmFragmentInstanceSpecBuilder asmFragmentInstanceSpecBuilder = AsmFragmentInstanceSpecBuilder.exprSideEffect((StatementExprSideEffect) statement, program); + ensureEncoding(asm, asmFragmentInstanceSpecBuilder); + generateAsm(asm, asmFragmentInstanceSpecBuilder.getAsmFragmentInstanceSpec()); } else if(statement instanceof StatementReturn) { Procedure procedure = null; ScopeRef scope = block.getScope(); @@ -907,7 +906,7 @@ public class Pass4CodeGeneration { if(procedure == null || procedure.getInterruptType() == null) { asm.addInstruction("rts", CpuAddressingMode.NON, null, false); } else { - generateInterruptExit(asm, statement, procedure.getInterruptType()); + generateInterruptExit(asm, procedure); } } else if(statement instanceof StatementAsm) { StatementAsm statementAsm = (StatementAsm) statement; @@ -1025,30 +1024,21 @@ public class Pass4CodeGeneration { * @param procedure The interrupt procedure */ private void generateInterruptEntry(AsmProgram asm, Procedure procedure) { - Procedure.InterruptType interruptType = procedure.getInterruptType(); - asm.startChunk(procedure.getRef(), null, "entry interrupt(" + interruptType.name() + ")"); - if(Procedure.InterruptType.KERNEL_MIN.equals(interruptType)) { - // No entry ASM needed - } else if(Procedure.InterruptType.KERNEL_KEYBOARD.equals(interruptType)) { - // No entry ASM needed - } else if(Procedure.InterruptType.HARDWARE_ALL.equals(interruptType)) { - asm.addInstruction("sta", CpuAddressingMode.ABS, "rega+1", false).setDontOptimize(true); - asm.addInstruction("stx", CpuAddressingMode.ABS, "regx+1", false).setDontOptimize(true); - asm.addInstruction("sty", CpuAddressingMode.ABS, "regy+1", false).setDontOptimize(true); - } else if(Procedure.InterruptType.HARDWARE_STACK.equals(interruptType)) { - asm.addInstruction("pha", CpuAddressingMode.NON, null, false).setDontOptimize(true); - asm.addInstruction("txa", CpuAddressingMode.NON, null, false).setDontOptimize(true); - asm.addInstruction("pha", CpuAddressingMode.NON, null, false).setDontOptimize(true); - asm.addInstruction("tya", CpuAddressingMode.NON, null, false).setDontOptimize(true); - asm.addInstruction("pha", CpuAddressingMode.NON, null, false).setDontOptimize(true); - } else if(Procedure.InterruptType.HARDWARE_NONE.equals(interruptType)) { - // No entry ASM needed - } else if(Procedure.InterruptType.HARDWARE_CLOBBER.equals(interruptType)) { - asm.addInstruction("sta", CpuAddressingMode.ABS, "rega+1", false).setDontOptimize(true); - asm.addInstruction("stx", CpuAddressingMode.ABS, "regx+1", false).setDontOptimize(true); - asm.addInstruction("sty", CpuAddressingMode.ABS, "regy+1", false).setDontOptimize(true); + final String interruptType = procedure.getInterruptType().toLowerCase(); + AsmFragmentInstanceSpecBuilder entryFragment; + String entryName; + if(interruptType.contains("clobber")) { + entryFragment = AsmFragmentInstanceSpecBuilder.interruptEntry(interruptType.replace("clobber", "all"), program); + entryName = entryFragment.getAsmFragmentInstanceSpec().getSignature().replace("all", "clobber"); } else { - throw new RuntimeException("Interrupt Type not supported " + interruptType.name()); + entryFragment = AsmFragmentInstanceSpecBuilder.interruptEntry(interruptType, program); + entryName = entryFragment.getAsmFragmentInstanceSpec().getSignature(); + } + try { + asm.startChunk(procedure.getRef(), null, "interrupt(" + entryName+ ")"); + generateAsm(asm, entryFragment.getAsmFragmentInstanceSpec()); + } catch(AsmFragmentTemplateSynthesizer.UnknownFragmentException e) { + throw new CompileError("Interrupt type not supported " + procedure.getInterruptType() + " int " + procedure.toString() + "\n" + e.getMessage()); } } @@ -1056,42 +1046,28 @@ public class Pass4CodeGeneration { * Generate exit-code for ending an interrupt procedure based on the interrupt type * * @param asm The assembler to generate code into - * @param statement The return statement - * @param interruptType The type of interrupt to generate + * @param procedure The procedure */ - private void generateInterruptExit(AsmProgram asm, Statement statement, Procedure.InterruptType interruptType) { - asm.getCurrentChunk().setSource(asm.getCurrentChunk().getSource() + " - exit interrupt(" + interruptType.name() + ")"); - if(Procedure.InterruptType.KERNEL_MIN.equals(interruptType)) { - asm.addInstruction("jmp", CpuAddressingMode.ABS, "$ea81", false); - } else if(Procedure.InterruptType.KERNEL_KEYBOARD.equals(interruptType)) { - asm.addInstruction("jmp", CpuAddressingMode.ABS, "$ea31", false); - } else if(Procedure.InterruptType.HARDWARE_ALL.equals(interruptType)) { - asm.addLabel("rega").setDontOptimize(true); - asm.addInstruction("lda", CpuAddressingMode.IMM, "00", false).setDontOptimize(true); - asm.addLabel("regx").setDontOptimize(true); - asm.addInstruction("ldx", CpuAddressingMode.IMM, "00", false).setDontOptimize(true); - asm.addLabel("regy").setDontOptimize(true); - asm.addInstruction("ldy", CpuAddressingMode.IMM, "00", false).setDontOptimize(true); - asm.addInstruction("rti", CpuAddressingMode.NON, null, false); - } else if(Procedure.InterruptType.HARDWARE_STACK.equals(interruptType)) { - asm.addInstruction("pla", CpuAddressingMode.NON, null, false).setDontOptimize(true); - asm.addInstruction("tay", CpuAddressingMode.NON, null, false).setDontOptimize(true); - asm.addInstruction("pla", CpuAddressingMode.NON, null, false).setDontOptimize(true); - asm.addInstruction("tax", CpuAddressingMode.NON, null, false).setDontOptimize(true); - asm.addInstruction("pla", CpuAddressingMode.NON, null, false).setDontOptimize(true); - asm.addInstruction("rti", CpuAddressingMode.NON, null, false); - } else if(Procedure.InterruptType.HARDWARE_NONE.equals(interruptType)) { - asm.addInstruction("rti", CpuAddressingMode.NON, null, false); - } else if(Procedure.InterruptType.HARDWARE_CLOBBER.equals(interruptType)) { - asm.addLabel("rega").setDontOptimize(true); - asm.addInstruction("lda", CpuAddressingMode.IMM, "00", false).setDontOptimize(true); - asm.addLabel("regx").setDontOptimize(true); - asm.addInstruction("ldx", CpuAddressingMode.IMM, "00", false).setDontOptimize(true); - asm.addLabel("regy").setDontOptimize(true); - asm.addInstruction("ldy", CpuAddressingMode.IMM, "00", false).setDontOptimize(true); - asm.addInstruction("rti", CpuAddressingMode.NON, null, false); + private void generateInterruptExit(AsmProgram asm, Procedure procedure) { + final String interruptType = procedure.getInterruptType().toLowerCase(); + AsmFragmentInstanceSpecBuilder entryFragment; + String entryName; + if(interruptType.contains("clobber")) { + entryFragment = AsmFragmentInstanceSpecBuilder.interruptExit(interruptType.replace("clobber", "all"), program); + entryName = entryFragment.getAsmFragmentInstanceSpec().getSignature().replace("all", "clobber"); } else { - throw new RuntimeException("Interrupt Type not supported " + statement); + entryFragment = AsmFragmentInstanceSpecBuilder.interruptExit(interruptType, program); + entryName = entryFragment.getAsmFragmentInstanceSpec().getSignature(); + } + asm.startChunk(procedure.getRef(), null, "interrupt(" + entryName + ")"); + try { + generateAsm(asm, entryFragment.getAsmFragmentInstanceSpec()); + } catch(AsmFragmentTemplateSynthesizer.UnknownFragmentException e) { + throw new CompileError("Interrupt type not supported " + procedure.getInterruptType() + " int " + procedure.toString() + "\n" + e.getMessage()); + } + // Mark labels as don't optimize + for(AsmLine asmLine : asm.getCurrentChunk().getLines()) { + if(asmLine instanceof AsmLabel) ((AsmLabel) asmLine).setDontOptimize(true); } } @@ -1168,9 +1144,9 @@ public class Pass4CodeGeneration { if(isRegisterCopy(lValue, rValue)) { asm.getCurrentChunk().setFragment("register_copy"); } else { - AsmFragmentInstanceSpecFactory asmFragmentInstanceSpecFactory = new AsmFragmentInstanceSpecFactory(lValue, rValue, program, scope); - ensureEncoding(asm, asmFragmentInstanceSpecFactory); - generateAsm(asm, asmFragmentInstanceSpecFactory.getAsmFragmentInstanceSpec()); + AsmFragmentInstanceSpecBuilder asmFragmentInstanceSpecBuilder = AsmFragmentInstanceSpecBuilder.assignment(lValue, rValue, program, scope); + ensureEncoding(asm, asmFragmentInstanceSpecBuilder); + generateAsm(asm, asmFragmentInstanceSpecBuilder.getAsmFragmentInstanceSpec()); } } transitionSetGenerated(transition); @@ -1186,7 +1162,7 @@ public class Pass4CodeGeneration { * @param asm The ASM program (where any .encoding directive will be emitted) * @param asmFragmentInstance The ASM fragment to be emitted */ - private static void ensureEncoding(AsmProgram asm, AsmFragmentInstanceSpecFactory asmFragmentInstance) { + private static void ensureEncoding(AsmProgram asm, AsmFragmentInstanceSpecBuilder asmFragmentInstance) { asm.ensureEncoding(getEncoding(asmFragmentInstance)); } @@ -1222,7 +1198,7 @@ public class Pass4CodeGeneration { * @param asmFragmentInstance The asm fragment instance to examine * @return Any encoding found inside the constant */ - private static Set getEncoding(AsmFragmentInstanceSpecFactory asmFragmentInstance) { + private static Set getEncoding(AsmFragmentInstanceSpecBuilder asmFragmentInstance) { LinkedHashSet encodings = new LinkedHashSet<>(); Map bindings = asmFragmentInstance.getBindings(); for(Value boundValue : bindings.values()) { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4InterruptClobberFix.java b/src/main/java/dk/camelot64/kickc/passes/Pass4InterruptClobberFix.java index e8161fb77..727f90210 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4InterruptClobberFix.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4InterruptClobberFix.java @@ -1,21 +1,20 @@ package dk.camelot64.kickc.passes; -import dk.camelot64.kickc.asm.AsmChunk; import dk.camelot64.cpufamily6502.CpuClobber; -import dk.camelot64.kickc.asm.AsmLine; -import dk.camelot64.kickc.asm.AsmProgram; +import dk.camelot64.kickc.asm.*; +import dk.camelot64.kickc.fragment.AsmFragmentInstance; +import dk.camelot64.kickc.fragment.AsmFragmentInstanceSpecBuilder; +import dk.camelot64.kickc.fragment.AsmFragmentTemplateSynthesizer; import dk.camelot64.kickc.model.CallGraph; import dk.camelot64.kickc.model.Program; import dk.camelot64.kickc.model.symbols.Procedure; import dk.camelot64.kickc.model.values.ProcedureRef; import dk.camelot64.kickc.model.values.ScopeRef; -import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.ListIterator; -/*** Ensure that all interrupt procedures with type {@link Procedure.InterruptType#HARDWARE_CLOBBER } only saves the necessary registers. */ +/*** Ensure that all interrupt procedures with CLOBBER type only saves the necessary registers. */ public class Pass4InterruptClobberFix extends Pass2Base { public Pass4InterruptClobberFix(Program program) { @@ -28,44 +27,38 @@ public class Pass4InterruptClobberFix extends Pass2Base { public void fix() { Collection procedures = getProgram().getScope().getAllProcedures(true); for(Procedure procedure : procedures) { - if(Procedure.InterruptType.HARDWARE_CLOBBER.equals(procedure.getInterruptType())) { - + if(procedure.getInterruptType() != null && procedure.getInterruptType().toLowerCase().contains("clobber")) { // Find the interrupt routine clobber CpuClobber procClobber = getProcedureClobber(procedure); - getLog().append("Interrupt procedure "+procedure.getFullName()+" clobbers "+procClobber.toString()); - + getLog().append("Interrupt procedure " + procedure.getFullName() + " clobbers " + procClobber.toString()); // Find the entry/exit blocks for the interrupt AsmChunk interruptEntry = null; AsmChunk interruptExit = null; for(AsmChunk asmChunk : getProgram().getAsm().getChunks()) { if(procedure.getFullName().equals(asmChunk.getScopeLabel())) { - if(asmChunk.getSource().contains(Procedure.InterruptType.HARDWARE_CLOBBER.name())) { - if(asmChunk.getSource().contains("entry interrupt")) { + if(asmChunk.getSource().contains("clobber")) { + if(asmChunk.getSource().endsWith("_entry)")) { interruptEntry = asmChunk; - } else if(asmChunk.getSource().contains("exit interrupt")) { + } else if(asmChunk.getSource().endsWith("_exit)")) { interruptExit = asmChunk; } else { - throw new RuntimeException("Unknown interrupt ASM chunk "+ asmChunk.getSource()); + throw new RuntimeException("Unknown interrupt ASM chunk " + asmChunk.getSource()); } continue; } } } - if(interruptEntry==null || interruptExit==null) { - throw new RuntimeException("Cannot find interrupt entry/exit for interrupt "+procedure.getFullName()); + if(interruptEntry == null || interruptExit == null) { + throw new RuntimeException("Cannot find interrupt entry/exit for interrupt " + procedure.getFullName()); } - List notClobberedRegisters = getNonClobberedRegisterNames(procClobber); - if(notClobberedRegisters.isEmpty()) { - // All registers clobbered - no need to fix anything - continue; - } - // Remove all lines saving/restoring non-clobbered registers in entry - pruneNonClobberedInterruptLines(interruptEntry, notClobberedRegisters); - // Remove all lines saving/restoring non-clobbered registers in entry - pruneNonClobberedInterruptLines(interruptExit, notClobberedRegisters); - + String clobberedRegisters = getClobberedRegisterNames(procClobber); + // Update the interrupt entry ASM with the proper clobber fragment + updateClobberFragment(interruptEntry, clobberedRegisters); + // Update the interrupt exit ASM with the proper clobber fragment + updateClobberFragment(interruptExit, clobberedRegisters); } } + } private CpuClobber getProcedureClobber(Procedure procedure) { @@ -73,7 +66,7 @@ public class Pass4InterruptClobberFix extends Pass2Base { CpuClobber procClobber = CpuClobber.CLOBBER_NONE; for(AsmChunk asmChunk : asm.getChunks()) { if(procedure.getFullName().equals(asmChunk.getScopeLabel())) { - if(asmChunk.getSource().contains(Procedure.InterruptType.HARDWARE_CLOBBER.name())) { + if(asmChunk.getSource().contains("clobber")) { // Do not count clobber in the entry/exit continue; } @@ -96,33 +89,76 @@ public class Pass4InterruptClobberFix extends Pass2Base { return procClobber; } - private List getNonClobberedRegisterNames(CpuClobber procClobber) { - List notClobberedRegisters = new ArrayList<>(); - if(!procClobber.isRegisterA()) { - notClobberedRegisters.add("a"); + /** + * Get the clobbered registers + * + * @param procClobber CPU clobber from running the interrupt routine + * @return The clobbered registers as a string. "axyz" is all registers, "" is none. + */ + private String getClobberedRegisterNames(CpuClobber procClobber) { + String clobberedRegisters = ""; + if(procClobber.isRegisterA()) { + clobberedRegisters += "a"; } - if(!procClobber.isRegisterX()) { - notClobberedRegisters.add("x"); + if(procClobber.isRegisterX()) { + clobberedRegisters += "x"; } - if(!procClobber.isRegisterY()) { - notClobberedRegisters.add("y"); + if(procClobber.isRegisterY()) { + clobberedRegisters += "y"; } - return notClobberedRegisters; + if(procClobber.isRegisterZ()) { + clobberedRegisters += "z"; + } + return clobberedRegisters; } - private void pruneNonClobberedInterruptLines(AsmChunk interruptEntryExit, List notClobberedRegisters) { - ListIterator entryLines = interruptEntryExit.getLines().listIterator(); - while(entryLines.hasNext()) { - AsmLine line = entryLines.next(); - for(String notClobberedReg : notClobberedRegisters) { - final String lineAsm = line.getAsm(); - if(lineAsm.contains("ld"+notClobberedReg) || lineAsm.contains("st"+notClobberedReg) || lineAsm.contains("reg"+notClobberedReg)) { - // Found an A/X/Y in the asm where A/X/Y is not clobbered - remove the line - getLog().append("Removing interrupt register storage "+line.toString()+" in "+interruptEntryExit.getIndex()+" "+interruptEntryExit.getSource()); - entryLines.remove(); - } + /** + * Replace the current code with the proper version handling only the clobbered registers + * + * @param interruptAsmChunk The AsmFragment representing an interrupt entry/exit + * @param clobberedRegisters The clobbered registers + */ + private void updateClobberFragment(AsmChunk interruptAsmChunk, String clobberedRegisters) { + // find the clobber fragment sub-name + String clobberName = "clob" + clobberedRegisters; + if(clobberedRegisters.equals("")) + clobberName = "none"; + String allRegisters = "axy" + (getProgram().getTargetCpu().getCpu65xx().hasRegisterZ() ? "z" : ""); + if(clobberedRegisters.equals(allRegisters)) + clobberName = "all"; + + // Find the interrupt type name (including "isr_" and "_entry"/"_exit" + String interruptType = interruptAsmChunk.getSource(); + interruptType = interruptType.substring(("interrupt(".length()), interruptType.length() - 1); + + // Find the correct clobber name based on the clobbered registers + final String interruptSignatureFinal = interruptType.replace("clobber", clobberName); + AsmFragmentInstanceSpecBuilder interruptFragment = AsmFragmentInstanceSpecBuilder.interrupt(interruptSignatureFinal, getProgram()); + String interruptFragmentName = interruptFragment.getAsmFragmentInstanceSpec().getSignature(); + + // Generate the fragment + final AsmFragmentTemplateSynthesizer cpuSynthesizer = getProgram().getAsmFragmentMasterSynthesizer().getSynthesizer(getProgram().getTargetCpu()); + final AsmFragmentInstance fragmentInstance = cpuSynthesizer.getFragmentInstance(interruptFragment.getAsmFragmentInstanceSpec(), getProgram().getLog()); + interruptAsmChunk.setFragment(fragmentInstance.getFragmentName()); + final AsmProgram asmLines = new AsmProgram(getProgram().getTargetCpu()); + asmLines.startChunk(getProgram().getScope().getRef(), interruptAsmChunk.getStatementIdx(), interruptAsmChunk.getSource()); + fragmentInstance.generate(asmLines); + + // Replace the chunk lines with the generated lines + final List interruptAsmChunkLines = interruptAsmChunk.getLines(); + int line_idx = interruptAsmChunkLines.get(0).getIndex(); + boolean hasScopeEnd = interruptAsmChunkLines.get(interruptAsmChunkLines.size() - 1) instanceof AsmScopeEnd; + interruptAsmChunkLines.clear(); + interruptAsmChunk.setSource("interrupt(" + interruptFragmentName+ ")"); + for(AsmChunk chunk : asmLines.getChunks()) { + for(AsmLine line : chunk.getLines()) { + interruptAsmChunk.addLine(line); + line.setIndex(line_idx++); + if(line instanceof AsmLabel) ((AsmLabel) line).setDontOptimize(true); } } + if(hasScopeEnd) + interruptAsmChunkLines.add(new AsmScopeEnd()); } } diff --git a/src/main/kc/target/asm6502.tgt b/src/main/kc/target/asm6502.tgt index 2b95d9bfd..fbfd87318 100644 --- a/src/main/kc/target/asm6502.tgt +++ b/src/main/kc/target/asm6502.tgt @@ -3,6 +3,7 @@ "link": "asm6502.ld", "start_address": "0x2000", "cpu": "MOS6502X", + "interrupt": "hardware_all", "emulator": "x64sc" } diff --git a/src/main/kc/target/atari2600.tgt b/src/main/kc/target/atari2600.tgt index c6e379c4e..1a33e7587 100644 --- a/src/main/kc/target/atari2600.tgt +++ b/src/main/kc/target/atari2600.tgt @@ -3,6 +3,7 @@ "extension": "a26", "link": "atari2600.ld", "cpu": "MOS6502X", + "interrupt": "hardware_all", "zp_reserve": [ "0x00..0x7f" ], "encoding": "screencode_atari", "defines": { diff --git a/src/main/kc/target/atarixl.tgt b/src/main/kc/target/atarixl.tgt index b72221120..48c646f72 100644 --- a/src/main/kc/target/atarixl.tgt +++ b/src/main/kc/target/atarixl.tgt @@ -1,6 +1,7 @@ { "description": "Atari XL/XE executable XEX file with a single segment.", "cpu": "MOS6502X", + "interrupt": "hardware_all", "link": "atarixl.ld", "start_address": "0x2000", "zp_reserve": [ "0x00..0x7f" ], diff --git a/src/main/kc/target/c64.tgt b/src/main/kc/target/c64.tgt index 1272b879e..d7b18ac70 100644 --- a/src/main/kc/target/c64.tgt +++ b/src/main/kc/target/c64.tgt @@ -4,6 +4,7 @@ "link": "c64.ld", "start_address": "0x080d", "cpu": "MOS6502X", + "interrupt": "rom_min_c64", "emulator": "x64sc", "defines": { "__C64__": 1 diff --git a/src/main/kc/target/c64basic.tgt b/src/main/kc/target/c64basic.tgt index 62b13cbf1..23046fa4f 100644 --- a/src/main/kc/target/c64basic.tgt +++ b/src/main/kc/target/c64basic.tgt @@ -3,6 +3,7 @@ "link": "c64basic.ld", "start_address": "0x080d", "cpu": "MOS6502X", + "interrupt": "rom_min_c64", "emulator": "x64sc", "defines": { "__C64__": 1 diff --git a/src/main/kc/target/cx16.tgt b/src/main/kc/target/cx16.tgt index 53863cd3c..db826e32a 100644 --- a/src/main/kc/target/cx16.tgt +++ b/src/main/kc/target/cx16.tgt @@ -4,6 +4,7 @@ "link": "cx16.ld", "start_address": "0x080d", "cpu": "WDC65C02", + "interrupt": "rom_min_cx16", "emulator": "x16emu -debug -run -scale 2 -prg", "defines": { "__CX16__": 1 diff --git a/src/main/kc/target/mega65.tgt b/src/main/kc/target/mega65.tgt index ed76a70d3..d1e4c5584 100644 --- a/src/main/kc/target/mega65.tgt +++ b/src/main/kc/target/mega65.tgt @@ -4,6 +4,7 @@ "link": "mega65.ld", "start_address": "0x2017", "cpu": "MEGA45GS02", + "interrupt": "rom_min_mega65", "emulator": "xmega65 -prg", "defines": { "__MEGA65__": 1 diff --git a/src/main/kc/target/mega65_c64.tgt b/src/main/kc/target/mega65_c64.tgt index c21d2603a..4c2c60624 100644 --- a/src/main/kc/target/mega65_c64.tgt +++ b/src/main/kc/target/mega65_c64.tgt @@ -4,6 +4,7 @@ "link": "mega65_c64.ld", "start_address": "0x080d", "cpu": "MEGA45GS02", + "interrupt": "rom_min_c64", "emulator": "xmega65 -prg", "defines": { "__MEGA65__": 1, diff --git a/src/main/kc/target/nes.tgt b/src/main/kc/target/nes.tgt index e4f2b6560..6633aa454 100644 --- a/src/main/kc/target/nes.tgt +++ b/src/main/kc/target/nes.tgt @@ -2,10 +2,11 @@ "description": "Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring).", "extension": "nes", "link": "nes.ld", - "cpu": "MOS6502X", - "emulator": "Nestopia", + "cpu": "ROM6502X", + "interrupt": "hardware_all", "zp_reserve": [ ], "defines": { "__NES__": 1 - } + }, + "emulator": "Nestopia" } \ No newline at end of file diff --git a/src/main/kc/target/plus4.tgt b/src/main/kc/target/plus4.tgt index 18358d219..d0937d316 100644 --- a/src/main/kc/target/plus4.tgt +++ b/src/main/kc/target/plus4.tgt @@ -4,6 +4,7 @@ "link": "plus4.ld", "start_address": "0x100d", "cpu": "MOS6502X", + "interrupt": "rom_min_plus4", "emulator": "xplus4", "defines": { "__PLUS4__": 1 diff --git a/src/main/kc/target/plus4basic.tgt b/src/main/kc/target/plus4basic.tgt index 3bbd30f0c..6be0ef7fe 100644 --- a/src/main/kc/target/plus4basic.tgt +++ b/src/main/kc/target/plus4basic.tgt @@ -3,6 +3,7 @@ "link": "plus4basic.ld", "start_address": "0x100d", "cpu": "MOS6502X", + "interrupt": "rom_min_plus4", "emulator": "xplus4", "defines": { "__PLUS4__": 1 diff --git a/src/main/kc/target/vic20.tgt b/src/main/kc/target/vic20.tgt index d3de57cf8..9c0c329f8 100644 --- a/src/main/kc/target/vic20.tgt +++ b/src/main/kc/target/vic20.tgt @@ -4,6 +4,7 @@ "link": "vic20.ld", "start_address": "0x100d", "cpu": "MOS6502X", + "interrupt": "rom_min_vic20", "emulator": "xvic", "defines": { "__VIC20__": 1 diff --git a/src/main/kc/target/vic20basic.tgt b/src/main/kc/target/vic20basic.tgt index 281cf07ef..0c37815d3 100644 --- a/src/main/kc/target/vic20basic.tgt +++ b/src/main/kc/target/vic20basic.tgt @@ -3,6 +3,7 @@ "link": "vic20basic.ld", "start_address": "0x100d", "cpu": "MOS6502X", + "interrupt": "rom_min_vic20", "emulator": "xvic", "defines": { "__VIC20__": 1 diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 95e612650..85e4c2174 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -3852,6 +3852,16 @@ public class TestPrograms { compileAndCompare("irq-kernel-minimal.c"); } + @Test + public void testIrqUnknownType() throws IOException, URISyntaxException { + assertError("irq-unknown-type.c", "Interrupt type not supported unknown", false); + } + + @Test + public void testIrqPragma() throws IOException, URISyntaxException { + compileAndCompare("irq-pragma.c"); + } + @Test public void testIrqHyperscreen() throws IOException, URISyntaxException { compileAndCompare("examples/irq/irq-hyperscreen.c"); diff --git a/src/test/kc/bitmap-plot-0.c b/src/test/kc/bitmap-plot-0.c index 84f4f8a4d..4f8a81cac 100644 --- a/src/test/kc/bitmap-plot-0.c +++ b/src/test/kc/bitmap-plot-0.c @@ -50,7 +50,7 @@ void init_irq() { } // Interrupt Routine counting frames -interrupt(hardware_clobber) void irq() { +__interrupt(hardware_clobber) void irq() { *BG_COLOR = WHITE; if(frame_cnt) frame_cnt++; *BG_COLOR = BLACK; diff --git a/src/test/kc/bitmap-plot-1.c b/src/test/kc/bitmap-plot-1.c index c27f34d13..300e1d3d3 100644 --- a/src/test/kc/bitmap-plot-1.c +++ b/src/test/kc/bitmap-plot-1.c @@ -57,7 +57,7 @@ void init_irq() { } // Interrupt Routine counting frames -interrupt(hardware_clobber) void irq() { +__interrupt(hardware_clobber) void irq() { *BG_COLOR = WHITE; if(frame_cnt) frame_cnt++; *BG_COLOR = BLACK; diff --git a/src/test/kc/bitmap-plot-2.c b/src/test/kc/bitmap-plot-2.c index 53ea5570e..77760829d 100644 --- a/src/test/kc/bitmap-plot-2.c +++ b/src/test/kc/bitmap-plot-2.c @@ -66,7 +66,7 @@ void init_irq() { } // Interrupt Routine counting frames -interrupt(hardware_clobber) void irq() { +__interrupt(hardware_clobber) void irq() { *BG_COLOR = WHITE; if(frame_cnt) frame_cnt++; *BG_COLOR = BLACK; diff --git a/src/test/kc/clobber-a-problem.c b/src/test/kc/clobber-a-problem.c index 5f6f66f91..1263fee16 100644 --- a/src/test/kc/clobber-a-problem.c +++ b/src/test/kc/clobber-a-problem.c @@ -12,7 +12,7 @@ void main() { volatile byte irq_raster_next = 0; -interrupt(hardware_clobber) void irq() { +__interrupt(hardware_clobber) void irq() { *BORDER_COLOR = DARK_GREY; irq_raster_next += 21; // Setup next interrupt diff --git a/src/test/kc/complex/ataritempest/ataritempest.c b/src/test/kc/complex/ataritempest/ataritempest.c index e977175eb..dd5cf0c36 100644 --- a/src/test/kc/complex/ataritempest/ataritempest.c +++ b/src/test/kc/complex/ataritempest/ataritempest.c @@ -4,6 +4,7 @@ #pragma link("ataritempest.ld") #pragma extension("bin") +#pragma cpu(ROM6502X) char* const BG_COLOR = 0xc01a; @@ -17,7 +18,7 @@ void entryPoint() { SCREEN[i] = MESSAGE[i]; } -void interrupt(HARDWARE_ALL) nmiHandler() { +void __interrupt(hardware_clobber) nmiHandler() { (*BG_COLOR)++; } diff --git a/src/test/kc/complex/clearscreen/clearscreen.c b/src/test/kc/complex/clearscreen/clearscreen.c index b7c4bb05e..addd54030 100644 --- a/src/test/kc/complex/clearscreen/clearscreen.c +++ b/src/test/kc/complex/clearscreen/clearscreen.c @@ -305,7 +305,7 @@ void setupRasterIrq(unsigned int raster, void()* irqRoutine) { const char RASTER_IRQ_TOP = 0x30; // Raster Interrupt at the top of the screen -interrupt(hardware_all) void irqTop() { +__interrupt(hardware_clobber) void irqTop() { if(DEBUG) { for( char i: 0..4) {} *BORDER_COLOR = WHITE; @@ -325,7 +325,7 @@ interrupt(hardware_all) void irqTop() { const char RASTER_IRQ_MIDDLE = 0xff; // Raster Interrupt at the bottom of the screen -interrupt(hardware_all) void irqBottom() { +__interrupt(hardware_clobber) void irqBottom() { if(DEBUG) { for( char i: 0..4) {} *BORDER_COLOR = WHITE; diff --git a/src/test/kc/complex/lazynes/lazynes.c b/src/test/kc/complex/lazynes/lazynes.c index 5ac8ad615..949e3c0fb 100644 --- a/src/test/kc/complex/lazynes/lazynes.c +++ b/src/test/kc/complex/lazynes/lazynes.c @@ -91,7 +91,7 @@ volatile char scroll_y; char * volatile vram_update_list; // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) -interrupt(hardware_stack) void vblank() { +__interrupt(hardware_clobber) void vblank() { // Transfer any queued data to the PPU lnListTransfer(); // DMA transfer the entire sprite buffer to the PPU diff --git a/src/test/kc/complex/lazynes/lazynes.h b/src/test/kc/complex/lazynes/lazynes.h index 7ec7242e9..ef1f7a61c 100644 --- a/src/test/kc/complex/lazynes/lazynes.h +++ b/src/test/kc/complex/lazynes/lazynes.h @@ -13,7 +13,7 @@ typedef unsigned short uword; // RESET Called when the NES is reset, including when it is turned on. void main(); // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) -interrupt(hardware_stack) void vblank(); +__interrupt(hardware_clobber) void vblank(); // Wait for next vblank // flags: 0, lfBlank or lfSplit (see below) diff --git a/src/test/kc/complex/nes-balls/kickballs-2.c b/src/test/kc/complex/nes-balls/kickballs-2.c index 98d2a84ec..b4b782c73 100644 --- a/src/test/kc/complex/nes-balls/kickballs-2.c +++ b/src/test/kc/complex/nes-balls/kickballs-2.c @@ -129,7 +129,7 @@ int main(void) } // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) -interrupt(hardware_stack) void vblank() { +__interrupt(hardware_clobber) void vblank() { // Set scroll PPU->PPUSCROLL = 0; PPU->PPUSCROLL = scroll_y; diff --git a/src/test/kc/complex/nes-balls/kickballs-3.c b/src/test/kc/complex/nes-balls/kickballs-3.c index 979f4f8f9..e8840120f 100644 --- a/src/test/kc/complex/nes-balls/kickballs-3.c +++ b/src/test/kc/complex/nes-balls/kickballs-3.c @@ -129,7 +129,7 @@ int main(void) } // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) -interrupt(hardware_stack) void vblank() { +__interrupt(hardware_clobber) void vblank() { // Set scroll PPU->PPUSCROLL = 0; PPU->PPUSCROLL = scroll_y; diff --git a/src/test/kc/complex/polygon/polygon.c b/src/test/kc/complex/polygon/polygon.c index bb09b081c..e913ac30f 100644 --- a/src/test/kc/complex/polygon/polygon.c +++ b/src/test/kc/complex/polygon/polygon.c @@ -125,7 +125,7 @@ void setup_irq() { } // Interrupt Routine 1: Just above last text line. -interrupt(kernel_min) void irq_bottom_1() { +__interrupt void irq_bottom_1() { // Change border color VICII->BORDER_COLOR = DARK_GREY; // Show the cycle counter @@ -138,7 +138,7 @@ interrupt(kernel_min) void irq_bottom_1() { } // Interrupt Routine 2 -interrupt(kernel_keyboard) void irq_bottom_2() { +__interrupt(rom_sys_c64) void irq_bottom_2() { // Change border color VICII->BORDER_COLOR = BLACK; // Show the current canvas (unless a key is being pressed) diff --git a/src/test/kc/complex/spritescroller/spritescroller.c b/src/test/kc/complex/spritescroller/spritescroller.c index c236b8a12..9d2b5e41f 100644 --- a/src/test/kc/complex/spritescroller/spritescroller.c +++ b/src/test/kc/complex/spritescroller/spritescroller.c @@ -136,7 +136,7 @@ void plex_move() { volatile bool frame_done = false; // Show sprites from the multiplexer, rescheduling the IRQ as many times as needed -interrupt(kernel_min) void plex_irq() { +__interrupt void plex_irq() { asm { sei } //*BORDER_COLOR = WHITE; // Show sprites until finding one that should not be shown until a few raster lines later diff --git a/src/test/kc/complex/tetris/tetris-sprites.c b/src/test/kc/complex/tetris/tetris-sprites.c index cdf12f64b..c40361d47 100644 --- a/src/test/kc/complex/tetris/tetris-sprites.c +++ b/src/test/kc/complex/tetris/tetris-sprites.c @@ -56,7 +56,7 @@ void sprites_irq_init() { // Raster Interrupt Routine - sets up the sprites covering the playfield // Repeats 10 timers every 2 lines from line IRQ_RASTER_FIRST // Utilizes duplicated gfx in the sprites to allow for some leeway in updating the sprite pointers -interrupt(hardware_clobber) void sprites_irq() { +__interrupt(hardware_clobber) void sprites_irq() { //(*BG_COLOR)++; // Clear decimal flag (because it is used by the score algorithm) asm { cld } diff --git a/src/test/kc/const-volatile-problem.c b/src/test/kc/const-volatile-problem.c index 5ad6e72bb..d38cc0d31 100644 --- a/src/test/kc/const-volatile-problem.c +++ b/src/test/kc/const-volatile-problem.c @@ -17,7 +17,7 @@ void main() { } // Interrupt Routine -interrupt(kernel_keyboard) void irq() { +__interrupt(rom_sys_c64) void irq() { PLEX_SCREEN_PTR1[idx]++; PLEX_SCREEN_PTR2[idx]++; idx++; diff --git a/src/test/kc/examples/cx16/rasterbars.c b/src/test/kc/examples/cx16/rasterbars.c index 9bb74263a..e4bff8ccc 100644 --- a/src/test/kc/examples/cx16/rasterbars.c +++ b/src/test/kc/examples/cx16/rasterbars.c @@ -1,7 +1,7 @@ // Example program for the Commander X16 // Displays raster bars in the border -#pragma target(cx16) +#pragma target(cx16) #include #include <6502.h> #include @@ -42,7 +42,7 @@ volatile char cnt = 2; volatile char sin_idx = 100; // LINE Interrupt Routine -void irq_line() { +__interrupt void irq_line() { // Update the border *VERA_CTRL |= VERA_DCSEL; *VERA_DC_HSTART = hstart; @@ -84,15 +84,4 @@ void irq_line() { // Reset the LINE interrupt *VERA_ISR = VERA_LINE; - // Exit CX16 KERNAL IRQ - asm { - // soft exit (keep kernal running) - // jmp $e034 - // hard exit (no kernal activity) - ply - plx - pla - rti - } - } \ No newline at end of file diff --git a/src/test/kc/examples/cx16/sprites.c b/src/test/kc/examples/cx16/sprites.c index aa697dabd..737878102 100644 --- a/src/test/kc/examples/cx16/sprites.c +++ b/src/test/kc/examples/cx16/sprites.c @@ -7,7 +7,7 @@ #define NUM_SPRITES 32 -// A 64*64 8bpp TUT sprite +// A 64*64 8bpp TUT sprite and palette align(0x1000) char SPRITE_PIXELS[64*64+0x200] = kickasm(resource "tut.png") {{ .var pic = LoadPicture("tut.png") // palette: rgb->idx @@ -16,8 +16,10 @@ align(0x1000) char SPRITE_PIXELS[64*64+0x200] = kickasm(resource "tut.png") {{ .var palList = List() // Next palette index .var nxt_idx = 0; + // Extract palette while outputting pixels as palete index values .for (var y=0; y<64; y++) { .for (var x=0;x<64; x++) { + // Find palette index (add if not known) .var rgb = pic.getPixel(x,y); .var idx = palette.get(rgb) .if(idx==null) { @@ -25,11 +27,12 @@ align(0x1000) char SPRITE_PIXELS[64*64+0x200] = kickasm(resource "tut.png") {{ .eval palette.put(rgb,idx); .eval palList.add(rgb) } - // Output pixel index + // Output pixel as palette index .byte idx } } - // Output sprite palette (offset 64*64 bytes) + .if(nxt_idx>256) .error "Image has too many colours "+nxt_idx + // Output sprite palette (at offset 64*64 bytes) .for(var i=0;i<256;i++) { .var rgb = palList.get(i) .var red = floor(rgb / [256*256]) @@ -40,7 +43,6 @@ align(0x1000) char SPRITE_PIXELS[64*64+0x200] = kickasm(resource "tut.png") {{ // bits bits 0-3 red .byte red/16 } - }}; // Address to use for sprite pixels in VRAM @@ -90,7 +92,7 @@ volatile unsigned int sin_idx_x = 119; volatile unsigned int sin_idx_y = 79; // VSYNC Interrupt Routine -void irq_vsync() { +__interrupt(rom_sys_cx16) void irq_vsync() { // Move the sprite around if(++sin_idx_x==SINX_LEN) sin_idx_x = 0; if(--sin_idx_y==0xffff) sin_idx_y = SINY_LEN-1; diff --git a/src/test/kc/examples/cx16/text.c b/src/test/kc/examples/cx16/text.c index 17be9dc92..c4d18cc11 100644 --- a/src/test/kc/examples/cx16/text.c +++ b/src/test/kc/examples/cx16/text.c @@ -5,7 +5,6 @@ #include void main() { - // Copy message to screen one char at a time char MSG[] = "hello world!"; char* vaddr = DEFAULT_SCREEN; @@ -13,7 +12,6 @@ void main() { vpoke(0, vaddr++, MSG[i]); // Message vpoke(0, vaddr++, 0x21); // Red background, White foreground } - // Copy message (and colors) to screen using memcpy_to_vram char MSG2[] = "h e l l o w o r l d ! "; // Space is 0x20, red background black foreground memcpy_to_vram(0, DEFAULT_SCREEN+0x100, MSG2, sizeof(MSG2)); diff --git a/src/test/kc/examples/irq/irq-hyperscreen.c b/src/test/kc/examples/irq/irq-hyperscreen.c index 99eb03a80..57e43dd3e 100644 --- a/src/test/kc/examples/irq/irq-hyperscreen.c +++ b/src/test/kc/examples/irq/irq-hyperscreen.c @@ -24,7 +24,7 @@ void main() { } // Interrupt Routine 1 -interrupt(hardware_stack) void irq_bottom_1() { +__interrupt(hardware_clobber) void irq_bottom_1() { VICII->BORDER_COLOR = WHITE; // Set screen height to 24 lines - this is done after the border should have started drawing - so it wont start VICII->CONTROL1 &= ($ff^VIC_RSEL); @@ -37,7 +37,7 @@ interrupt(hardware_stack) void irq_bottom_1() { } // Interrupt Routine 2 -interrupt(hardware_stack) void irq_bottom_2() { +__interrupt(hardware_clobber) void irq_bottom_2() { VICII->BORDER_COLOR = WHITE; // Set screen height back to 25 lines (preparing for the next screen) VICII->CONTROL1 |= VIC_RSEL; diff --git a/src/test/kc/examples/mega65/banked-music.c b/src/test/kc/examples/mega65/banked-music.c index e9e9d0527..eec969317 100644 --- a/src/test/kc/examples/mega65/banked-music.c +++ b/src/test/kc/examples/mega65/banked-music.c @@ -61,7 +61,7 @@ void main() { } // Raster IRQ routine -interrupt(hardware_stack) void irq() { +__interrupt(hardware_clobber) void irq() { // Acknowledge the IRQ VICII->IRQ_STATUS = IRQ_RASTER; // Color border diff --git a/src/test/kc/examples/mega65/raster65.c b/src/test/kc/examples/mega65/raster65.c index 8c9e77420..472406c80 100644 --- a/src/test/kc/examples/mega65/raster65.c +++ b/src/test/kc/examples/mega65/raster65.c @@ -102,7 +102,7 @@ volatile char greet_zoomx; volatile char greet_idx; // BIG INTERRUPT LOOP -interrupt(hardware_stack) void irq() { +__interrupt(hardware_clobber) void irq() { // force NTSC every frame (hehe) VICIV->RASLINE0 |= 0x80; // Acknowledge the IRQ diff --git a/src/test/kc/examples/music/music_irq.c b/src/test/kc/examples/music/music_irq.c index 99008fa92..965dbf985 100755 --- a/src/test/kc/examples/music/music_irq.c +++ b/src/test/kc/examples/music/music_irq.c @@ -28,7 +28,7 @@ void main() { } // Raster IRQ Routine playing music -interrupt(kernel_keyboard) void irq_play() { +__interrupt(rom_sys_c64) void irq_play() { (VICII->BORDER_COLOR)++; // Play SID (*musicPlay)(); diff --git a/src/test/kc/examples/nes/nes-conio.c b/src/test/kc/examples/nes/nes-conio.c index d1f20d75d..72fe8e73c 100644 --- a/src/test/kc/examples/nes/nes-conio.c +++ b/src/test/kc/examples/nes/nes-conio.c @@ -46,7 +46,7 @@ volatile char x_scroll; volatile char y_scroll; // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) -interrupt(hardware_stack) void vblank() { +__interrupt void vblank() { // Read controller 1 char joy = readJoy1(); if(joy&JOY_DOWN) { diff --git a/src/test/kc/examples/nes/nes-demo.c b/src/test/kc/examples/nes/nes-demo.c index d08b00368..2e7f155e4 100644 --- a/src/test/kc/examples/nes/nes-demo.c +++ b/src/test/kc/examples/nes/nes-demo.c @@ -30,7 +30,7 @@ void main() { } // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) -interrupt(hardware_stack) void vblank() { +__interrupt void vblank() { // Read controller 1 char joy = readJoy1(); diff --git a/src/test/kc/examples/nes/nes-dxycp.c b/src/test/kc/examples/nes/nes-dxycp.c index ac2b18f53..d21b96082 100644 --- a/src/test/kc/examples/nes/nes-dxycp.c +++ b/src/test/kc/examples/nes/nes-dxycp.c @@ -31,7 +31,7 @@ volatile char x_sin_idx = 73; volatile char x_sin_idx_2 = 82; // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) -interrupt(hardware_stack) void vblank() { +__interrupt void vblank() { // Set scroll PPU->PPUSCROLL = 0; PPU->PPUSCROLL = 0; diff --git a/src/test/kc/examples/nmisamples/nmisamples.c b/src/test/kc/examples/nmisamples/nmisamples.c index c72447d54..f517ea51a 100644 --- a/src/test/kc/examples/nmisamples/nmisamples.c +++ b/src/test/kc/examples/nmisamples/nmisamples.c @@ -32,7 +32,7 @@ void main() { asm { cli } } -interrupt(hardware_all) void nmi() { +__interrupt(hardware_clobber) void nmi() { (VICII->BORDER_COLOR)++; asm { lda CIA2_INTERRUPT } SID->VOLUME_FILTER_MODE = *sample & $0f; @@ -40,7 +40,7 @@ interrupt(hardware_all) void nmi() { (VICII->BORDER_COLOR)--; } -interrupt(hardware_all) void nmi2() { +__interrupt(hardware_clobber) void nmi2() { (VICII->BORDER_COLOR)++; asm { lda CIA2_INTERRUPT } SID->VOLUME_FILTER_MODE = *sample >> 4; diff --git a/src/test/kc/interrupt-volatile-reuse-problem1.c b/src/test/kc/interrupt-volatile-reuse-problem1.c index 6c880ee29..7fdc2406a 100644 --- a/src/test/kc/interrupt-volatile-reuse-problem1.c +++ b/src/test/kc/interrupt-volatile-reuse-problem1.c @@ -8,7 +8,7 @@ void main() { *KERNEL_IRQ = &irq; } -interrupt void irq() { +__interrupt void irq() { SCREEN[40] = col1++; SCREEN[41] = col2++; } diff --git a/src/test/kc/interrupt-volatile-reuse-problem2.c b/src/test/kc/interrupt-volatile-reuse-problem2.c index 0a6aa2a84..15792675d 100644 --- a/src/test/kc/interrupt-volatile-reuse-problem2.c +++ b/src/test/kc/interrupt-volatile-reuse-problem2.c @@ -19,7 +19,7 @@ void main() { } } -interrupt void irq() { +__interrupt void irq() { // Acknowledge the IRQ *IRQ_STATUS = 1; asm { lda $dc0d } diff --git a/src/test/kc/irq-hardware-clobber-jsr.c b/src/test/kc/irq-hardware-clobber-jsr.c index d9ed5c958..fd2b50dd0 100644 --- a/src/test/kc/irq-hardware-clobber-jsr.c +++ b/src/test/kc/irq-hardware-clobber-jsr.c @@ -22,7 +22,7 @@ void main() { } // Interrupt Routine -interrupt(hardware_clobber) void irq() { +__interrupt(hardware_clobber) void irq() { do_irq(); } diff --git a/src/test/kc/irq-hardware-clobber.c b/src/test/kc/irq-hardware-clobber.c index 903f107f2..618ed4802 100644 --- a/src/test/kc/irq-hardware-clobber.c +++ b/src/test/kc/irq-hardware-clobber.c @@ -50,7 +50,7 @@ void main() { } // Interrupt Routine -interrupt(hardware_clobber) void irq() { +__interrupt(hardware_clobber) void irq() { *BG_COLOR = WHITE; *BG_COLOR = BLACK; // Acknowledge the IRQ diff --git a/src/test/kc/irq-hardware-stack.c b/src/test/kc/irq-hardware-stack.c index c4d1f4c8e..b1811dc08 100644 --- a/src/test/kc/irq-hardware-stack.c +++ b/src/test/kc/irq-hardware-stack.c @@ -1,5 +1,7 @@ // A minimal working raster IRQ +#pragma cpu(rom6502x) + void()** const KERNEL_IRQ = $0314; void()** const HARDWARE_IRQ = $fffe; byte* const RASTER = $d012; @@ -50,7 +52,7 @@ void main() { } // Interrupt Routine -interrupt(hardware_stack) void irq() { +__interrupt(hardware_all) void irq() { *BG_COLOR = WHITE; *BG_COLOR = BLACK; // Acknowledge the IRQ diff --git a/src/test/kc/irq-hardware.c b/src/test/kc/irq-hardware.c index 501fb4fbc..42466f089 100644 --- a/src/test/kc/irq-hardware.c +++ b/src/test/kc/irq-hardware.c @@ -50,7 +50,7 @@ void main() { } // Interrupt Routine -interrupt(hardware_all) void irq() { +__interrupt(hardware_all) void irq() { *BG_COLOR = WHITE; *BG_COLOR = BLACK; // Acknowledge the IRQ diff --git a/src/test/kc/irq-idx-problem.c b/src/test/kc/irq-idx-problem.c index 5d99e772c..02f4aa895 100644 --- a/src/test/kc/irq-idx-problem.c +++ b/src/test/kc/irq-idx-problem.c @@ -28,7 +28,7 @@ byte IRQ_CHANGE_VAL[] = { $0b, $0b, $63, $00, $00, $80, volatile byte irq_idx = 0; -interrupt(kernel_min) void table_driven_irq() { +__interrupt void table_driven_irq() { do { byte idx = IRQ_CHANGE_IDX[irq_idx]; byte val = IRQ_CHANGE_VAL[irq_idx]; diff --git a/src/test/kc/irq-kernel-minimal.c b/src/test/kc/irq-kernel-minimal.c index 24285196b..258cc561b 100644 --- a/src/test/kc/irq-kernel-minimal.c +++ b/src/test/kc/irq-kernel-minimal.c @@ -10,7 +10,7 @@ void main() { } // The Interrupt Handler -interrupt(kernel_keyboard) void irq() { +__interrupt(rom_sys_c64) void irq() { *BG_COLOR = WHITE; *BG_COLOR = BLACK; } \ No newline at end of file diff --git a/src/test/kc/irq-kernel.c b/src/test/kc/irq-kernel.c index cc5316186..0bf937af2 100644 --- a/src/test/kc/irq-kernel.c +++ b/src/test/kc/irq-kernel.c @@ -31,7 +31,7 @@ void main() { } // Interrupt Routine -interrupt(kernel_keyboard) void irq() { +__interrupt(rom_sys_c64) void irq() { *BG_COLOR = WHITE; *BG_COLOR = BLACK; // Acknowledge the IRQ diff --git a/src/test/kc/irq-local-var-overlap-problem.c b/src/test/kc/irq-local-var-overlap-problem.c index 5cf6aa977..956cfb94d 100644 --- a/src/test/kc/irq-local-var-overlap-problem.c +++ b/src/test/kc/irq-local-var-overlap-problem.c @@ -35,7 +35,7 @@ void main() { } } -interrupt(kernel_min) void irq() { +__interrupt void irq() { (*BG_COLOR)++; for( byte i: 0..10 ) for( byte j: 0..10 ) diff --git a/src/test/kc/irq-pragma.c b/src/test/kc/irq-pragma.c new file mode 100644 index 000000000..43e47607f --- /dev/null +++ b/src/test/kc/irq-pragma.c @@ -0,0 +1,21 @@ +// A minimal working IRQ with #pragma defining the type + +#pragma interrupt(rom_sys_c64) + +// The vector used when the KERNAL serves IRQ interrupts +void()** const KERNEL_IRQ = 0x0314; +char* const BG_COLOR = 0xd021; + + +// Setup the IRQ routine +void main() { + asm { sei } + *KERNEL_IRQ = &irq; + asm { cli } +} + +// The Interrupt Handler +__interrupt void irq() { + *BG_COLOR = 1; + *BG_COLOR = 0; +} \ No newline at end of file diff --git a/src/test/kc/irq-raster.c b/src/test/kc/irq-raster.c index 11313db5e..2defc506c 100644 --- a/src/test/kc/irq-raster.c +++ b/src/test/kc/irq-raster.c @@ -31,7 +31,7 @@ void main() { } // Interrupt Routine -interrupt void irq() { +__interrupt void irq() { *BG_COLOR = WHITE; *BG_COLOR = BLACK; // Acknowledge the IRQ diff --git a/src/test/kc/irq-unknown-type.c b/src/test/kc/irq-unknown-type.c new file mode 100644 index 000000000..0ff7662dc --- /dev/null +++ b/src/test/kc/irq-unknown-type.c @@ -0,0 +1,18 @@ +// Unknown interrupt type + +// The vector used when the KERNAL serves IRQ interrupts +void()** const KERNEL_IRQ = 0x0314; +char* const BG_COLOR = 0xd021; + +// Setup the IRQ routine +void main() { + asm { sei } + *KERNEL_IRQ = &irq; + asm { cli } +} + +// The Interrupt Handler +__interrupt(unknown) void irq() { + *BG_COLOR = 1; + *BG_COLOR = 0; +} \ No newline at end of file diff --git a/src/test/kc/irq-volatile-bool-problem.c b/src/test/kc/irq-volatile-bool-problem.c index 5258a805d..9d33cd376 100644 --- a/src/test/kc/irq-volatile-bool-problem.c +++ b/src/test/kc/irq-volatile-bool-problem.c @@ -33,7 +33,7 @@ void main() { volatile bool framedone = false; -interrupt(kernel_min) void irq() { +__interrupt void irq() { (*BG_COLOR)++; *IRQ_STATUS = IRQ_RASTER; if (*RASTER>50) { diff --git a/src/test/kc/kickasm-uses-prevent-deletion.c b/src/test/kc/kickasm-uses-prevent-deletion.c index cc40f1640..c495ddb76 100644 --- a/src/test/kc/kickasm-uses-prevent-deletion.c +++ b/src/test/kc/kickasm-uses-prevent-deletion.c @@ -20,7 +20,7 @@ void main() { // The Interrupt Handler -interrupt(kernel_keyboard) void irq() { +__interrupt(rom_sys_c64) void irq() { *BG_COLOR = WHITE; *BG_COLOR = BLACK; } diff --git a/src/test/kc/longbranch-interrupt-problem.c b/src/test/kc/longbranch-interrupt-problem.c index b718dd37c..23f2cc8a4 100644 --- a/src/test/kc/longbranch-interrupt-problem.c +++ b/src/test/kc/longbranch-interrupt-problem.c @@ -13,7 +13,7 @@ void main() { } } -interrupt(kernel_min) void irq() { +__interrupt void irq() { asm { lda $dc0d } diff --git a/src/test/kc/multiplexer-irq/simple-multiplexer-irq.c b/src/test/kc/multiplexer-irq/simple-multiplexer-irq.c index 06b47c246..a5b57bf16 100644 --- a/src/test/kc/multiplexer-irq/simple-multiplexer-irq.c +++ b/src/test/kc/multiplexer-irq/simple-multiplexer-irq.c @@ -51,7 +51,7 @@ void init() { volatile bool framedone = true; -interrupt(kernel_min) void plex_irq() { +__interrupt void plex_irq() { asm { sei } *BORDER_COLOR = WHITE; char rasterY; diff --git a/src/test/kc/no-calledinterrupt.c b/src/test/kc/no-calledinterrupt.c index 6204ed70d..390cf17c0 100644 --- a/src/test/kc/no-calledinterrupt.c +++ b/src/test/kc/no-calledinterrupt.c @@ -7,6 +7,6 @@ void main() { irq(); } -interrupt void irq() { +__interrupt void irq() { SCREEN[1]++; } \ No newline at end of file diff --git a/src/test/kc/no-inlineinterrupt.c b/src/test/kc/no-inlineinterrupt.c index 1cfef84bc..d4104c851 100644 --- a/src/test/kc/no-inlineinterrupt.c +++ b/src/test/kc/no-inlineinterrupt.c @@ -6,6 +6,6 @@ void main() { SCREEN[0]++; } -inline interrupt void irq() { +inline __interrupt void irq() { SCREEN[1]++; } \ No newline at end of file diff --git a/src/test/kc/no-paraminterrupt.c b/src/test/kc/no-paraminterrupt.c index 16a4e1915..f13a9c21d 100644 --- a/src/test/kc/no-paraminterrupt.c +++ b/src/test/kc/no-paraminterrupt.c @@ -6,6 +6,6 @@ void main() { SCREEN[0]++; } -interrupt void irq(byte b) { +__interrupt void irq(byte b) { SCREEN[1]++; } \ No newline at end of file diff --git a/src/test/kc/no-returninterrupt.c b/src/test/kc/no-returninterrupt.c index 3b3294280..c66762bf4 100644 --- a/src/test/kc/no-returninterrupt.c +++ b/src/test/kc/no-returninterrupt.c @@ -6,7 +6,7 @@ void main() { SCREEN[0]++; } -interrupt byte irq() { +__interrupt byte irq() { SCREEN[1]++; return 2; } \ No newline at end of file diff --git a/src/test/kc/test-interrupt-notype.c b/src/test/kc/test-interrupt-notype.c index bad346b33..0e4d6ebff 100644 --- a/src/test/kc/test-interrupt-notype.c +++ b/src/test/kc/test-interrupt-notype.c @@ -9,7 +9,7 @@ void main() { } } -interrupt void irq() { +__interrupt void irq() { (*BG_COLOR)++; asm { lda $dc0d diff --git a/src/test/kc/test-interrupt-volatile-write.c b/src/test/kc/test-interrupt-volatile-write.c index b6baec62d..9218cd27f 100644 --- a/src/test/kc/test-interrupt-volatile-write.c +++ b/src/test/kc/test-interrupt-volatile-write.c @@ -14,7 +14,7 @@ void main() { } } -interrupt(kernel_min) void irq() { +__interrupt void irq() { asm { lda $dc0d } diff --git a/src/test/kc/test-interrupt-volatile.c b/src/test/kc/test-interrupt-volatile.c index d50825a8c..ee6980f75 100644 --- a/src/test/kc/test-interrupt-volatile.c +++ b/src/test/kc/test-interrupt-volatile.c @@ -9,7 +9,7 @@ void main() { } } -interrupt(kernel_min) void irq() { +__interrupt void irq() { asm { lda $dc0d } diff --git a/src/test/kc/test-interrupt.c b/src/test/kc/test-interrupt.c index 6962bd521..0e4d6ebff 100644 --- a/src/test/kc/test-interrupt.c +++ b/src/test/kc/test-interrupt.c @@ -9,7 +9,7 @@ void main() { } } -interrupt(kernel_min) void irq() { +__interrupt void irq() { (*BG_COLOR)++; asm { lda $dc0d diff --git a/src/test/kc/unused-irq.c b/src/test/kc/unused-irq.c index 96bdc73c8..d2c253c36 100644 --- a/src/test/kc/unused-irq.c +++ b/src/test/kc/unused-irq.c @@ -9,11 +9,11 @@ void main() { void()** const HARDWARE_IRQ = $fffe; // Unused Interrupt Routine -interrupt void irq1() { +__interrupt void irq1() { *HARDWARE_IRQ = &irq2; } // Unused Interrupt Routine -interrupt void irq2() { +__interrupt void irq2() { *HARDWARE_IRQ = &irq1; } \ No newline at end of file diff --git a/src/test/ref/bitmap-plot-0.asm b/src/test/ref/bitmap-plot-0.asm index 82dcd3e7e..8432b399f 100644 --- a/src/test/ref/bitmap-plot-0.asm +++ b/src/test/ref/bitmap-plot-0.asm @@ -51,7 +51,7 @@ __start: { } // Interrupt Routine counting frames irq: { - sta rega+1 + pha // *BG_COLOR = WHITE lda #WHITE sta BG_COLOR @@ -70,8 +70,7 @@ irq: { lda #IRQ_RASTER sta IRQ_STATUS // } - rega: - lda #00 + pla rti } main: { diff --git a/src/test/ref/bitmap-plot-0.cfg b/src/test/ref/bitmap-plot-0.cfg index 36101e4cc..895fb5fca 100644 --- a/src/test/ref/bitmap-plot-0.cfg +++ b/src/test/ref/bitmap-plot-0.cfg @@ -14,7 +14,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from [5] *BG_COLOR = WHITE [6] if(0==frame_cnt) goto irq::@1 diff --git a/src/test/ref/bitmap-plot-0.log b/src/test/ref/bitmap-plot-0.log index bbe004d60..b474677f3 100644 --- a/src/test/ref/bitmap-plot-0.log +++ b/src/test/ref/bitmap-plot-0.log @@ -1,7 +1,7 @@ Resolved forward reference frame_cnt to frame_cnt Resolved forward reference frame_cnt to frame_cnt Resolved forward reference frame_cnt to frame_cnt -Resolved forward reference irq to interrupt(HARDWARE_CLOBBER) void irq() +Resolved forward reference irq to __interrupt(hardware_clobber) void irq() Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx Inlined call main::$2 = call toD018 SCREEN BITMAP Inlined call call __init @@ -343,7 +343,7 @@ init_irq::@return: scope:[init_irq] from init_irq return to:@return -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from *BG_COLOR = WHITE irq::$1 = 0 != frame_cnt @@ -559,7 +559,7 @@ byte* bitmap_screen#8 byte* bitmap_screen#9 volatile byte frame_cnt loadstore void init_irq() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() bool~ irq::$0 bool~ irq::$1 void main() @@ -1155,7 +1155,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from [5] *BG_COLOR = WHITE [6] if(0==frame_cnt) goto irq::@1 @@ -1375,7 +1375,7 @@ byte bitmap_plot::y#0 2103.0 byte* bitmap_screen volatile byte frame_cnt loadstore 7.777777777777779 void init_irq() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() void main() byte* main::toD0181_gfx byte main::toD0181_return @@ -1602,31 +1602,31 @@ Uplift Scope [init_irq] Uplift Scope [irq] Uplift Scope [__start] -Uplifting [memset] best 4846 combination zp[2]:18 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:35 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:13 [ memset::num#2 ] zp[2]:15 [ memset::str#3 ] -Uplifting [bitmap_init] best 4336 combination zp[2]:11 [ 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]:26 [ bitmap_init::$5 ] zp[1]:27 [ bitmap_init::$6 ] zp[1]:24 [ bitmap_init::$7 ] +Uplifting [memset] best 4954 combination zp[2]:18 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:35 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:13 [ memset::num#2 ] zp[2]:15 [ memset::str#3 ] +Uplifting [bitmap_init] best 4444 combination zp[2]:11 [ 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]:26 [ bitmap_init::$5 ] zp[1]:27 [ bitmap_init::$6 ] zp[1]:24 [ bitmap_init::$7 ] Limited combination testing to 100 combinations of 15360 possible. -Uplifting [bitmap_plot] best 4297 combination reg byte x [ bitmap_plot::y#0 ] zp[2]:30 [ bitmap_plot::$0 ] reg byte x [ bitmap_plot::$1 ] zp[2]:32 [ bitmap_plot::plotter#1 ] zp[2]:28 [ bitmap_plot::plotter#0 ] zp[2]:21 [ bitmap_plot::x#0 ] -Uplifting [main] best 4297 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 4297 combination zp[1]:20 [ frame_cnt ] -Uplifting [MOS6526_CIA] best 4297 combination -Uplifting [MOS6569_VICII] best 4297 combination -Uplifting [MOS6581_SID] best 4297 combination -Uplifting [bitmap_clear] best 4297 combination -Uplifting [init_irq] best 4297 combination -Uplifting [irq] best 4297 combination -Uplifting [__start] best 4297 combination +Uplifting [bitmap_plot] best 4405 combination reg byte x [ bitmap_plot::y#0 ] zp[2]:30 [ bitmap_plot::$0 ] reg byte x [ bitmap_plot::$1 ] zp[2]:32 [ bitmap_plot::plotter#1 ] zp[2]:28 [ bitmap_plot::plotter#0 ] zp[2]:21 [ bitmap_plot::x#0 ] +Uplifting [main] best 4405 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 4405 combination zp[1]:20 [ frame_cnt ] +Uplifting [MOS6526_CIA] best 4405 combination +Uplifting [MOS6569_VICII] best 4405 combination +Uplifting [MOS6581_SID] best 4405 combination +Uplifting [bitmap_clear] best 4405 combination +Uplifting [init_irq] best 4405 combination +Uplifting [irq] best 4405 combination +Uplifting [__start] best 4405 combination Attempting to uplift remaining variables inzp[1]:26 [ bitmap_init::$5 ] -Uplifting [bitmap_init] best 4237 combination reg byte a [ bitmap_init::$5 ] +Uplifting [bitmap_init] best 4345 combination reg byte a [ bitmap_init::$5 ] Attempting to uplift remaining variables inzp[1]:27 [ bitmap_init::$6 ] -Uplifting [bitmap_init] best 4177 combination reg byte a [ bitmap_init::$6 ] +Uplifting [bitmap_init] best 4285 combination reg byte a [ bitmap_init::$6 ] Attempting to uplift remaining variables inzp[1]:24 [ bitmap_init::$7 ] -Uplifting [bitmap_init] best 4177 combination zp[1]:24 [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 4285 combination zp[1]:24 [ bitmap_init::$7 ] Attempting to uplift remaining variables inzp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ] -Uplifting [main] best 4177 combination zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ] +Uplifting [main] best 4285 combination zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ] Attempting to uplift remaining variables inzp[1]:4 [ main::y#2 main::y#1 ] -Uplifting [main] best 4177 combination zp[1]:4 [ main::y#2 main::y#1 ] +Uplifting [main] best 4285 combination zp[1]:4 [ main::y#2 main::y#1 ] Attempting to uplift remaining variables inzp[1]:20 [ frame_cnt ] -Uplifting [] best 4177 combination zp[1]:20 [ frame_cnt ] +Uplifting [] best 4285 combination zp[1]:20 [ frame_cnt ] Coalescing zero page register [ zp[2]:2 [ main::x#2 main::x#1 ] ] with [ zp[2]:21 [ bitmap_plot::x#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:13 [ memset::num#2 ] ] with [ zp[2]:35 [ memset::end#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:15 [ memset::str#3 ] ] with [ zp[2]:18 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 @@ -1639,12 +1639,6 @@ Allocated (was zp[1]:24) zp[1]:9 [ bitmap_init::$7 ] Allocated (was zp[2]:28) zp[2]:10 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] Allocated (was zp[2]:30) zp[2]:12 [ bitmap_plot::$0 memset::num#2 memset::end#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] Interrupt procedure irq clobbers AcnzP -Removing interrupt register storage stx regx+1 in 13 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage sty regy+1 in 13 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regx: in 22 [10] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldx #00 in 22 [10] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regy: in 22 [10] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldy #00 in 22 [10] return - exit interrupt(HARDWARE_CLOBBER) ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -1720,8 +1714,8 @@ __start: { // irq // Interrupt Routine counting frames irq: { - // entry interrupt(HARDWARE_CLOBBER) - sta rega+1 + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry + pha // [5] *BG_COLOR = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE sta BG_COLOR @@ -1747,9 +1741,9 @@ irq: { jmp __breturn // irq::@return __breturn: - // [10] return - exit interrupt(HARDWARE_CLOBBER) - rega: - lda #00 + // [10] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit + pla rti } // main @@ -2265,7 +2259,6 @@ Replacing label __b3_from___b4 with __b3 Replacing label __b2_from___b3 with __b2 Removing instruction __b1_from___init1: Removing instruction main_from___b1: -Removing instruction __breturn: Removing instruction __b8_from_main: Removing instruction bitmap_clear_from___b8: Removing instruction toD0181_from___b9: @@ -2291,6 +2284,7 @@ Removing instruction __init1: Removing instruction __b1: Removing instruction __breturn: Removing instruction __b2: +Removing instruction __breturn: Removing instruction bitmap_init_from_main: Removing instruction __b8: Removing instruction __b9: @@ -2385,7 +2379,7 @@ const to_nomodify byte* bitmap_plot_ylo[$100] = { fill( $100, 0) } byte* bitmap_screen volatile byte frame_cnt loadstore zp[1]:8 7.777777777777779 void init_irq() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() void main() byte* main::toD0181_gfx byte main::toD0181_return @@ -2441,7 +2435,7 @@ reg byte x [ bitmap_plot::$1 ] FINAL ASSEMBLER -Score: 3150 +Score: 3232 // File Comments // Tests the simple bitmap plotter - and counts plots per frame in an IRQ @@ -2509,8 +2503,8 @@ __start: { // irq // Interrupt Routine counting frames irq: { - // entry interrupt(HARDWARE_CLOBBER) - sta rega+1 + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry + pha // *BG_COLOR = WHITE // [5] *BG_COLOR = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE @@ -2537,9 +2531,9 @@ irq: { sta IRQ_STATUS // irq::@return // } - // [10] return - exit interrupt(HARDWARE_CLOBBER) - rega: - lda #00 + // [10] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit + pla rti } // main diff --git a/src/test/ref/bitmap-plot-0.sym b/src/test/ref/bitmap-plot-0.sym index 9c7f670f5..4e94d9bdc 100644 --- a/src/test/ref/bitmap-plot-0.sym +++ b/src/test/ref/bitmap-plot-0.sym @@ -65,7 +65,7 @@ const to_nomodify byte* bitmap_plot_ylo[$100] = { fill( $100, 0) } byte* bitmap_screen volatile byte frame_cnt loadstore zp[1]:8 7.777777777777779 void init_irq() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() void main() byte* main::toD0181_gfx byte main::toD0181_return diff --git a/src/test/ref/bitmap-plot-1.asm b/src/test/ref/bitmap-plot-1.asm index 28df6f107..941b1f5fa 100644 --- a/src/test/ref/bitmap-plot-1.asm +++ b/src/test/ref/bitmap-plot-1.asm @@ -60,7 +60,7 @@ __start: { } // Interrupt Routine counting frames irq: { - sta rega+1 + pha // *BG_COLOR = WHITE lda #WHITE sta BG_COLOR @@ -79,8 +79,7 @@ irq: { lda #IRQ_RASTER sta IRQ_STATUS // } - rega: - lda #00 + pla rti } main: { diff --git a/src/test/ref/bitmap-plot-1.cfg b/src/test/ref/bitmap-plot-1.cfg index d686c84b1..115baf3eb 100644 --- a/src/test/ref/bitmap-plot-1.cfg +++ b/src/test/ref/bitmap-plot-1.cfg @@ -14,7 +14,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from [5] *BG_COLOR = WHITE [6] if(0==frame_cnt) goto irq::@1 diff --git a/src/test/ref/bitmap-plot-1.log b/src/test/ref/bitmap-plot-1.log index 76ae657e5..ddcd2798c 100644 --- a/src/test/ref/bitmap-plot-1.log +++ b/src/test/ref/bitmap-plot-1.log @@ -1,7 +1,7 @@ Resolved forward reference frame_cnt to frame_cnt Resolved forward reference frame_cnt to frame_cnt Resolved forward reference frame_cnt to frame_cnt -Resolved forward reference irq to interrupt(HARDWARE_CLOBBER) void irq() +Resolved forward reference irq to __interrupt(hardware_clobber) void irq() Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx Inlined call main::$3 = call toD018 SCREEN BITMAP Inlined call call __init @@ -858,7 +858,7 @@ init_irq::@return: scope:[init_irq] from init_irq return to:@return -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from *BG_COLOR = WHITE irq::$1 = 0 != frame_cnt @@ -1188,7 +1188,7 @@ word divr16u::return#5 word divr16u::return#6 volatile byte frame_cnt loadstore void init_irq() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() bool~ irq::$0 bool~ irq::$1 void main() @@ -2572,7 +2572,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from [5] *BG_COLOR = WHITE [6] if(0==frame_cnt) goto irq::@1 @@ -3102,7 +3102,7 @@ word divr16u::return#2 2002.0 word divr16u::return#3 2002.0 volatile byte frame_cnt loadstore 4.468085106382979 void init_irq() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() void main() signed dword~ main::$10 202.0 word~ main::$11 202.0 @@ -3944,34 +3944,34 @@ Uplift Scope [init_irq] Uplift Scope [irq] Uplift Scope [__start] -Uplifting [mul16u] best 27399 combination zp[4]:45 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:49 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:43 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp[2]:41 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] zp[4]:211 [ mul16u::return#3 ] zp[4]:137 [ mul16u::return#2 ] -Uplifting [divr16u] best 27189 combination zp[2]:53 [ 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]:57 [ 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]:55 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:160 [ divr16u::return#2 ] zp[2]:164 [ divr16u::return#3 ] -Uplifting [mulu16_sel] best 27171 combination zp[2]:60 [ mulu16_sel::v1#5 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 ] zp[4]:215 [ mulu16_sel::$0 ] zp[4]:219 [ mulu16_sel::$1 ] zp[2]:62 [ mulu16_sel::v2#5 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#3 ] zp[2]:223 [ mulu16_sel::return#12 ] zp[2]:178 [ mulu16_sel::return#0 ] zp[2]:182 [ mulu16_sel::return#1 ] zp[2]:186 [ mulu16_sel::return#2 ] zp[2]:192 [ mulu16_sel::return#10 ] zp[2]:196 [ mulu16_sel::return#11 ] reg byte x [ mulu16_sel::select#5 ] -Uplifting [sin16s] best 27162 combination zp[4]:28 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:32 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:172 [ sin16s::$4 ] zp[2]:180 [ sin16s::x2#0 ] zp[2]:188 [ sin16s::x3_6#0 ] zp[2]:194 [ sin16s::x4#0 ] zp[2]:198 [ sin16s::x5#0 ] zp[2]:200 [ sin16s::x5_128#0 ] zp[2]:184 [ sin16s::x3#0 ] zp[2]:202 [ sin16s::usinx#1 ] zp[2]:176 [ sin16s::x1#0 ] zp[2]:121 [ sin16s::return#0 ] zp[2]:190 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] -Uplifting [mul16s] best 27162 combination zp[4]:23 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp[2]:141 [ mul16s::$6 ] zp[2]:143 [ mul16s::$11 ] zp[2]:145 [ mul16s::$9 ] zp[2]:147 [ mul16s::$12 ] zp[2]:19 [ mul16s::a#3 mul16s::a#0 ] zp[4]:149 [ mul16s::return#0 ] zp[4]:123 [ mul16s::return#2 ] zp[2]:21 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] zp[4]:72 [ mul16s::return#3 ] zp[4]:94 [ mul16s::return#4 ] -Uplifting [memset] best 27146 combination zp[2]:39 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:204 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:34 [ memset::num#2 ] zp[2]:36 [ memset::str#3 ] -Uplifting [bitmap_init] best 26636 combination zp[2]:17 [ 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]:135 [ bitmap_init::$5 ] zp[1]:136 [ bitmap_init::$6 ] zp[1]:133 [ bitmap_init::$7 ] +Uplifting [mul16u] best 27507 combination zp[4]:45 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:49 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:43 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp[2]:41 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] zp[4]:211 [ mul16u::return#3 ] zp[4]:137 [ mul16u::return#2 ] +Uplifting [divr16u] best 27297 combination zp[2]:53 [ 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]:57 [ 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]:55 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:160 [ divr16u::return#2 ] zp[2]:164 [ divr16u::return#3 ] +Uplifting [mulu16_sel] best 27279 combination zp[2]:60 [ mulu16_sel::v1#5 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 ] zp[4]:215 [ mulu16_sel::$0 ] zp[4]:219 [ mulu16_sel::$1 ] zp[2]:62 [ mulu16_sel::v2#5 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#3 ] zp[2]:223 [ mulu16_sel::return#12 ] zp[2]:178 [ mulu16_sel::return#0 ] zp[2]:182 [ mulu16_sel::return#1 ] zp[2]:186 [ mulu16_sel::return#2 ] zp[2]:192 [ mulu16_sel::return#10 ] zp[2]:196 [ mulu16_sel::return#11 ] reg byte x [ mulu16_sel::select#5 ] +Uplifting [sin16s] best 27270 combination zp[4]:28 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:32 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:172 [ sin16s::$4 ] zp[2]:180 [ sin16s::x2#0 ] zp[2]:188 [ sin16s::x3_6#0 ] zp[2]:194 [ sin16s::x4#0 ] zp[2]:198 [ sin16s::x5#0 ] zp[2]:200 [ sin16s::x5_128#0 ] zp[2]:184 [ sin16s::x3#0 ] zp[2]:202 [ sin16s::usinx#1 ] zp[2]:176 [ sin16s::x1#0 ] zp[2]:121 [ sin16s::return#0 ] zp[2]:190 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] +Uplifting [mul16s] best 27270 combination zp[4]:23 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp[2]:141 [ mul16s::$6 ] zp[2]:143 [ mul16s::$11 ] zp[2]:145 [ mul16s::$9 ] zp[2]:147 [ mul16s::$12 ] zp[2]:19 [ mul16s::a#3 mul16s::a#0 ] zp[4]:149 [ mul16s::return#0 ] zp[4]:123 [ mul16s::return#2 ] zp[2]:21 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] zp[4]:72 [ mul16s::return#3 ] zp[4]:94 [ mul16s::return#4 ] +Uplifting [memset] best 27254 combination zp[2]:39 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:204 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:34 [ memset::num#2 ] zp[2]:36 [ memset::str#3 ] +Uplifting [bitmap_init] best 26744 combination zp[2]:17 [ 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]:135 [ bitmap_init::$5 ] zp[1]:136 [ bitmap_init::$6 ] zp[1]:133 [ bitmap_init::$7 ] Limited combination testing to 100 combinations of 15360 possible. -Uplifting [bitmap_plot] best 26599 combination reg byte a [ bitmap_plot::y#0 ] zp[2]:155 [ bitmap_plot::$0 ] reg byte x [ bitmap_plot::$1 ] zp[2]:157 [ bitmap_plot::plotter#1 ] zp[2]:153 [ bitmap_plot::plotter#0 ] zp[2]:110 [ bitmap_plot::x#0 ] -Uplifting [sin16s_gen2] best 26599 combination zp[2]:6 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp[4]:127 [ sin16s_gen2::$6 ] zp[4]:8 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp[2]:131 [ sin16s_gen2::$8 ] zp[2]:12 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp[4]:117 [ sin16s_gen2::step#0 ] -Uplifting [div32u16u] best 26599 combination zp[2]:166 [ div32u16u::quotient_lo#0 ] zp[2]:162 [ div32u16u::quotient_hi#0 ] zp[4]:168 [ div32u16u::return#0 ] zp[4]:113 [ div32u16u::return#2 ] -Uplifting [main] best 26359 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 26359 combination zp[2]:209 [ rem16u#0 ] zp[1]:65 [ frame_cnt ] -Uplifting [MOS6526_CIA] best 26359 combination -Uplifting [MOS6569_VICII] best 26359 combination -Uplifting [MOS6581_SID] best 26359 combination -Uplifting [bitmap_clear] best 26359 combination -Uplifting [init_irq] best 26359 combination -Uplifting [irq] best 26359 combination -Uplifting [__start] best 26359 combination +Uplifting [bitmap_plot] best 26707 combination reg byte a [ bitmap_plot::y#0 ] zp[2]:155 [ bitmap_plot::$0 ] reg byte x [ bitmap_plot::$1 ] zp[2]:157 [ bitmap_plot::plotter#1 ] zp[2]:153 [ bitmap_plot::plotter#0 ] zp[2]:110 [ bitmap_plot::x#0 ] +Uplifting [sin16s_gen2] best 26707 combination zp[2]:6 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp[4]:127 [ sin16s_gen2::$6 ] zp[4]:8 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp[2]:131 [ sin16s_gen2::$8 ] zp[2]:12 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp[4]:117 [ sin16s_gen2::step#0 ] +Uplifting [div32u16u] best 26707 combination zp[2]:166 [ div32u16u::quotient_lo#0 ] zp[2]:162 [ div32u16u::quotient_hi#0 ] zp[4]:168 [ div32u16u::return#0 ] zp[4]:113 [ div32u16u::return#2 ] +Uplifting [main] best 26467 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 26467 combination zp[2]:209 [ rem16u#0 ] zp[1]:65 [ frame_cnt ] +Uplifting [MOS6526_CIA] best 26467 combination +Uplifting [MOS6569_VICII] best 26467 combination +Uplifting [MOS6581_SID] best 26467 combination +Uplifting [bitmap_clear] best 26467 combination +Uplifting [init_irq] best 26467 combination +Uplifting [irq] best 26467 combination +Uplifting [__start] best 26467 combination Attempting to uplift remaining variables inzp[1]:135 [ bitmap_init::$5 ] -Uplifting [bitmap_init] best 26299 combination reg byte a [ bitmap_init::$5 ] +Uplifting [bitmap_init] best 26407 combination reg byte a [ bitmap_init::$5 ] Attempting to uplift remaining variables inzp[1]:136 [ bitmap_init::$6 ] -Uplifting [bitmap_init] best 26239 combination reg byte a [ bitmap_init::$6 ] +Uplifting [bitmap_init] best 26347 combination reg byte a [ bitmap_init::$6 ] Attempting to uplift remaining variables inzp[1]:133 [ bitmap_init::$7 ] -Uplifting [bitmap_init] best 26239 combination zp[1]:133 [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 26347 combination zp[1]:133 [ bitmap_init::$7 ] Attempting to uplift remaining variables inzp[1]:65 [ frame_cnt ] -Uplifting [] best 26239 combination zp[1]:65 [ frame_cnt ] +Uplifting [] best 26347 combination zp[1]:65 [ frame_cnt ] Coalescing zero page register [ zp[2]:32 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp[2]:202 [ sin16s::usinx#1 ] ] - score: 2 Coalescing zero page register [ zp[2]:60 [ mulu16_sel::v1#5 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 ] ] with [ zp[2]:184 [ sin16s::x3#0 ] ] - score: 2 Coalescing zero page register [ zp[2]:19 [ mul16s::a#3 mul16s::a#0 ] ] with [ zp[2]:121 [ sin16s::return#0 ] ] - score: 1 @@ -4052,12 +4052,6 @@ Allocated (was zp[2]:176) zp[2]:40 [ sin16s::x1#0 div32u16u::quotient_hi#0 mul16 Allocated (was zp[2]:178) zp[2]:42 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] Allocated (was zp[2]:209) zp[2]:44 [ rem16u#0 ] Interrupt procedure irq clobbers AcnzP -Removing interrupt register storage stx regx+1 in 13 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage sty regy+1 in 13 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regx: in 22 [10] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldx #00 in 22 [10] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regy: in 22 [10] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldy #00 in 22 [10] return - exit interrupt(HARDWARE_CLOBBER) ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -4142,8 +4136,8 @@ __start: { // irq // Interrupt Routine counting frames irq: { - // entry interrupt(HARDWARE_CLOBBER) - sta rega+1 + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry + pha // [5] *BG_COLOR = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE sta BG_COLOR @@ -4169,9 +4163,9 @@ irq: { jmp __breturn // irq::@return __breturn: - // [10] return - exit interrupt(HARDWARE_CLOBBER) - rega: - lda #00 + // [10] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit + pla rti } // main @@ -5746,7 +5740,6 @@ Replacing label __b3_from___b2 with __b3 Replacing label __b1_from___b3 with __b1 Removing instruction __b1_from___init1: Removing instruction main_from___b1: -Removing instruction __breturn: Removing instruction __b6_from_main: Removing instruction bitmap_init_from___b6: Removing instruction __b7_from___b6: @@ -5796,6 +5789,7 @@ Removing instruction __init1: Removing instruction __b1: Removing instruction __breturn: Removing instruction __b2: +Removing instruction __breturn: Removing instruction sin16s_gen2_from_main: Removing instruction __b6: Removing instruction __b7: @@ -5993,7 +5987,7 @@ word divr16u::return#2 return zp[2]:20 2002.0 word divr16u::return#3 return zp[2]:20 2002.0 volatile byte frame_cnt loadstore zp[1]:22 4.468085106382979 void init_irq() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() void main() signed dword~ main::$10 zp[4]:12 202.0 word~ main::$11 reg byte alu 202.0 @@ -6210,7 +6204,7 @@ zp[2]:44 [ rem16u#0 ] FINAL ASSEMBLER -Score: 20422 +Score: 20504 // File Comments // Tests the simple bitmap plotter - and counts plots per frame in an IRQ @@ -6287,8 +6281,8 @@ __start: { // irq // Interrupt Routine counting frames irq: { - // entry interrupt(HARDWARE_CLOBBER) - sta rega+1 + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry + pha // *BG_COLOR = WHITE // [5] *BG_COLOR = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE @@ -6315,9 +6309,9 @@ irq: { sta IRQ_STATUS // irq::@return // } - // [10] return - exit interrupt(HARDWARE_CLOBBER) - rega: - lda #00 + // [10] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit + pla rti } // main diff --git a/src/test/ref/bitmap-plot-1.sym b/src/test/ref/bitmap-plot-1.sym index 599c6ab87..5fd686198 100644 --- a/src/test/ref/bitmap-plot-1.sym +++ b/src/test/ref/bitmap-plot-1.sym @@ -109,7 +109,7 @@ word divr16u::return#2 return zp[2]:20 2002.0 word divr16u::return#3 return zp[2]:20 2002.0 volatile byte frame_cnt loadstore zp[1]:22 4.468085106382979 void init_irq() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() void main() signed dword~ main::$10 zp[4]:12 202.0 word~ main::$11 reg byte alu 202.0 diff --git a/src/test/ref/bitmap-plot-2.asm b/src/test/ref/bitmap-plot-2.asm index ee1a27d44..7dd18b001 100644 --- a/src/test/ref/bitmap-plot-2.asm +++ b/src/test/ref/bitmap-plot-2.asm @@ -61,7 +61,7 @@ __start: { } // Interrupt Routine counting frames irq: { - sta rega+1 + pha // *BG_COLOR = WHITE lda #WHITE sta BG_COLOR @@ -80,8 +80,7 @@ irq: { lda #IRQ_RASTER sta IRQ_STATUS // } - rega: - lda #00 + pla rti } main: { diff --git a/src/test/ref/bitmap-plot-2.cfg b/src/test/ref/bitmap-plot-2.cfg index 042b758a2..b2eed0c71 100644 --- a/src/test/ref/bitmap-plot-2.cfg +++ b/src/test/ref/bitmap-plot-2.cfg @@ -14,7 +14,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from [5] *BG_COLOR = WHITE [6] if(0==frame_cnt) goto irq::@1 diff --git a/src/test/ref/bitmap-plot-2.log b/src/test/ref/bitmap-plot-2.log index 1ee9ba956..d93f8a0e7 100644 --- a/src/test/ref/bitmap-plot-2.log +++ b/src/test/ref/bitmap-plot-2.log @@ -1,7 +1,7 @@ Resolved forward reference frame_cnt to frame_cnt Resolved forward reference frame_cnt to frame_cnt Resolved forward reference frame_cnt to frame_cnt -Resolved forward reference irq to interrupt(HARDWARE_CLOBBER) void irq() +Resolved forward reference irq to __interrupt(hardware_clobber) void irq() Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx Inlined call main::$3 = call toD018 SCREEN BITMAP Inlined call call __init @@ -920,7 +920,7 @@ init_irq::@return: scope:[init_irq] from init_irq return to:@return -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from *BG_COLOR = WHITE irq::$1 = 0 != frame_cnt @@ -1259,7 +1259,7 @@ word divr16u::return#5 word divr16u::return#6 volatile byte frame_cnt loadstore void init_irq() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() bool~ irq::$0 bool~ irq::$1 void main() @@ -2743,7 +2743,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from [5] *BG_COLOR = WHITE [6] if(0==frame_cnt) goto irq::@1 @@ -3292,7 +3292,7 @@ word divr16u::return#2 2002.0 word divr16u::return#3 2002.0 volatile byte frame_cnt loadstore 3.8181818181818183 void init_irq() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() void main() signed word~ main::$11 202.0 word~ main::$26 202.0 @@ -4172,36 +4172,36 @@ Uplift Scope [init_irq] Uplift Scope [irq] Uplift Scope [__start] -Uplifting [mul16u] best 27299 combination zp[4]:48 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:52 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:46 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp[2]:44 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] zp[4]:210 [ mul16u::return#3 ] zp[4]:136 [ mul16u::return#2 ] -Uplifting [divr16u] best 27089 combination zp[2]:56 [ 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]:60 [ 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]:58 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:159 [ divr16u::return#2 ] zp[2]:163 [ divr16u::return#3 ] -Uplifting [mulu16_sel] best 27071 combination zp[2]:63 [ mulu16_sel::v1#5 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 ] zp[4]:214 [ mulu16_sel::$0 ] zp[4]:218 [ mulu16_sel::$1 ] zp[2]:65 [ mulu16_sel::v2#5 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#3 ] zp[2]:222 [ mulu16_sel::return#12 ] zp[2]:177 [ mulu16_sel::return#0 ] zp[2]:181 [ mulu16_sel::return#1 ] zp[2]:185 [ mulu16_sel::return#2 ] zp[2]:191 [ mulu16_sel::return#10 ] zp[2]:195 [ mulu16_sel::return#11 ] reg byte x [ mulu16_sel::select#5 ] -Uplifting [sin16s] best 27062 combination zp[4]:31 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:35 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:171 [ sin16s::$4 ] zp[2]:179 [ sin16s::x2#0 ] zp[2]:187 [ sin16s::x3_6#0 ] zp[2]:193 [ sin16s::x4#0 ] zp[2]:197 [ sin16s::x5#0 ] zp[2]:199 [ sin16s::x5_128#0 ] zp[2]:183 [ sin16s::x3#0 ] zp[2]:201 [ sin16s::usinx#1 ] zp[2]:175 [ sin16s::x1#0 ] zp[2]:120 [ sin16s::return#0 ] zp[2]:189 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] -Uplifting [mul16s] best 27062 combination zp[4]:26 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp[2]:140 [ mul16s::$6 ] zp[2]:142 [ mul16s::$11 ] zp[2]:144 [ mul16s::$9 ] zp[2]:146 [ mul16s::$12 ] zp[2]:22 [ mul16s::a#3 mul16s::a#2 mul16s::a#1 mul16s::a#0 ] zp[4]:148 [ mul16s::return#0 ] zp[4]:122 [ mul16s::return#2 ] zp[2]:24 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] zp[4]:75 [ mul16s::return#3 ] zp[4]:95 [ mul16s::return#4 ] -Uplifting [memset] best 27046 combination zp[2]:42 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:203 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:37 [ memset::num#2 ] zp[2]:39 [ memset::str#3 ] -Uplifting [bitmap_init] best 26536 combination zp[2]:20 [ 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]:134 [ bitmap_init::$5 ] zp[1]:135 [ bitmap_init::$6 ] zp[1]:132 [ bitmap_init::$7 ] +Uplifting [mul16u] best 27407 combination zp[4]:48 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:52 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:46 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp[2]:44 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] zp[4]:210 [ mul16u::return#3 ] zp[4]:136 [ mul16u::return#2 ] +Uplifting [divr16u] best 27197 combination zp[2]:56 [ 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]:60 [ 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]:58 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:159 [ divr16u::return#2 ] zp[2]:163 [ divr16u::return#3 ] +Uplifting [mulu16_sel] best 27179 combination zp[2]:63 [ mulu16_sel::v1#5 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 ] zp[4]:214 [ mulu16_sel::$0 ] zp[4]:218 [ mulu16_sel::$1 ] zp[2]:65 [ mulu16_sel::v2#5 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#3 ] zp[2]:222 [ mulu16_sel::return#12 ] zp[2]:177 [ mulu16_sel::return#0 ] zp[2]:181 [ mulu16_sel::return#1 ] zp[2]:185 [ mulu16_sel::return#2 ] zp[2]:191 [ mulu16_sel::return#10 ] zp[2]:195 [ mulu16_sel::return#11 ] reg byte x [ mulu16_sel::select#5 ] +Uplifting [sin16s] best 27170 combination zp[4]:31 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:35 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:171 [ sin16s::$4 ] zp[2]:179 [ sin16s::x2#0 ] zp[2]:187 [ sin16s::x3_6#0 ] zp[2]:193 [ sin16s::x4#0 ] zp[2]:197 [ sin16s::x5#0 ] zp[2]:199 [ sin16s::x5_128#0 ] zp[2]:183 [ sin16s::x3#0 ] zp[2]:201 [ sin16s::usinx#1 ] zp[2]:175 [ sin16s::x1#0 ] zp[2]:120 [ sin16s::return#0 ] zp[2]:189 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] +Uplifting [mul16s] best 27170 combination zp[4]:26 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp[2]:140 [ mul16s::$6 ] zp[2]:142 [ mul16s::$11 ] zp[2]:144 [ mul16s::$9 ] zp[2]:146 [ mul16s::$12 ] zp[2]:22 [ mul16s::a#3 mul16s::a#2 mul16s::a#1 mul16s::a#0 ] zp[4]:148 [ mul16s::return#0 ] zp[4]:122 [ mul16s::return#2 ] zp[2]:24 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] zp[4]:75 [ mul16s::return#3 ] zp[4]:95 [ mul16s::return#4 ] +Uplifting [memset] best 27154 combination zp[2]:42 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:203 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:37 [ memset::num#2 ] zp[2]:39 [ memset::str#3 ] +Uplifting [bitmap_init] best 26644 combination zp[2]:20 [ 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]:134 [ bitmap_init::$5 ] zp[1]:135 [ bitmap_init::$6 ] zp[1]:132 [ bitmap_init::$7 ] Limited combination testing to 100 combinations of 15360 possible. -Uplifting [bitmap_plot] best 26499 combination reg byte a [ bitmap_plot::y#0 ] zp[2]:154 [ bitmap_plot::$0 ] reg byte x [ bitmap_plot::$1 ] zp[2]:156 [ bitmap_plot::plotter#1 ] zp[2]:152 [ bitmap_plot::plotter#0 ] zp[2]:109 [ bitmap_plot::x#0 ] -Uplifting [sin16s_gen2] best 26499 combination zp[2]:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp[4]:126 [ sin16s_gen2::$6 ] zp[4]:11 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp[2]:130 [ sin16s_gen2::$8 ] zp[2]:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp[4]:116 [ sin16s_gen2::step#0 ] -Uplifting [div32u16u] best 26499 combination zp[2]:165 [ div32u16u::quotient_lo#0 ] zp[2]:161 [ div32u16u::quotient_hi#0 ] zp[4]:167 [ div32u16u::return#0 ] zp[4]:112 [ div32u16u::return#2 ] -Uplifting [main] best 26499 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 26499 combination zp[2]:208 [ rem16u#0 ] zp[1]:68 [ frame_cnt ] -Uplifting [MOS6526_CIA] best 26499 combination -Uplifting [MOS6569_VICII] best 26499 combination -Uplifting [MOS6581_SID] best 26499 combination -Uplifting [bitmap_clear] best 26499 combination -Uplifting [init_irq] best 26499 combination -Uplifting [irq] best 26499 combination -Uplifting [__start] best 26499 combination +Uplifting [bitmap_plot] best 26607 combination reg byte a [ bitmap_plot::y#0 ] zp[2]:154 [ bitmap_plot::$0 ] reg byte x [ bitmap_plot::$1 ] zp[2]:156 [ bitmap_plot::plotter#1 ] zp[2]:152 [ bitmap_plot::plotter#0 ] zp[2]:109 [ bitmap_plot::x#0 ] +Uplifting [sin16s_gen2] best 26607 combination zp[2]:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp[4]:126 [ sin16s_gen2::$6 ] zp[4]:11 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp[2]:130 [ sin16s_gen2::$8 ] zp[2]:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp[4]:116 [ sin16s_gen2::step#0 ] +Uplifting [div32u16u] best 26607 combination zp[2]:165 [ div32u16u::quotient_lo#0 ] zp[2]:161 [ div32u16u::quotient_hi#0 ] zp[4]:167 [ div32u16u::return#0 ] zp[4]:112 [ div32u16u::return#2 ] +Uplifting [main] best 26607 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 26607 combination zp[2]:208 [ rem16u#0 ] zp[1]:68 [ frame_cnt ] +Uplifting [MOS6526_CIA] best 26607 combination +Uplifting [MOS6569_VICII] best 26607 combination +Uplifting [MOS6581_SID] best 26607 combination +Uplifting [bitmap_clear] best 26607 combination +Uplifting [init_irq] best 26607 combination +Uplifting [irq] best 26607 combination +Uplifting [__start] best 26607 combination Attempting to uplift remaining variables inzp[1]:134 [ bitmap_init::$5 ] -Uplifting [bitmap_init] best 26439 combination reg byte a [ bitmap_init::$5 ] +Uplifting [bitmap_init] best 26547 combination reg byte a [ bitmap_init::$5 ] Attempting to uplift remaining variables inzp[1]:135 [ bitmap_init::$6 ] -Uplifting [bitmap_init] best 26379 combination reg byte a [ bitmap_init::$6 ] +Uplifting [bitmap_init] best 26487 combination reg byte a [ bitmap_init::$6 ] Attempting to uplift remaining variables inzp[1]:132 [ bitmap_init::$7 ] -Uplifting [bitmap_init] best 26379 combination zp[1]:132 [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 26487 combination zp[1]:132 [ bitmap_init::$7 ] Attempting to uplift remaining variables inzp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] -Uplifting [main] best 26379 combination zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] +Uplifting [main] best 26487 combination zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] Attempting to uplift remaining variables inzp[1]:68 [ frame_cnt ] -Uplifting [] best 26379 combination zp[1]:68 [ frame_cnt ] +Uplifting [] best 26487 combination zp[1]:68 [ frame_cnt ] Coalescing zero page register [ zp[2]:4 [ main::r#10 main::r#1 ] ] with [ zp[2]:22 [ mul16s::a#3 mul16s::a#2 mul16s::a#1 mul16s::a#0 ] ] - score: 2 Coalescing zero page register [ zp[2]:35 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp[2]:201 [ sin16s::usinx#1 ] ] - score: 2 Coalescing zero page register [ zp[2]:63 [ mulu16_sel::v1#5 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 ] ] with [ zp[2]:183 [ sin16s::x3#0 ] ] - score: 2 @@ -4284,12 +4284,6 @@ Allocated (was zp[2]:175) zp[2]:43 [ sin16s::x1#0 div32u16u::quotient_hi#0 mul16 Allocated (was zp[2]:177) zp[2]:45 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_plot::$0 mul16s::$6 mul16s::$11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] Allocated (was zp[2]:208) zp[2]:47 [ rem16u#0 ] Interrupt procedure irq clobbers AcnzP -Removing interrupt register storage stx regx+1 in 13 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage sty regy+1 in 13 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regx: in 22 [10] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldx #00 in 22 [10] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regy: in 22 [10] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldy #00 in 22 [10] return - exit interrupt(HARDWARE_CLOBBER) ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -4375,8 +4369,8 @@ __start: { // irq // Interrupt Routine counting frames irq: { - // entry interrupt(HARDWARE_CLOBBER) - sta rega+1 + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry + pha // [5] *BG_COLOR = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE sta BG_COLOR @@ -4402,9 +4396,9 @@ irq: { jmp __breturn // irq::@return __breturn: - // [10] return - exit interrupt(HARDWARE_CLOBBER) - rega: - lda #00 + // [10] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit + pla rti } // main @@ -6044,7 +6038,6 @@ Replacing label __b3_from___b2 with __b3 Replacing label __b1_from___b3 with __b1 Removing instruction __b1_from___init1: Removing instruction main_from___b1: -Removing instruction __breturn: Removing instruction __b9_from_main: Removing instruction bitmap_init_from___b9: Removing instruction __b10_from___b9: @@ -6096,6 +6089,7 @@ Removing instruction __init1: Removing instruction __b1: Removing instruction __breturn: Removing instruction __b2: +Removing instruction __breturn: Removing instruction sin16s_gen2_from_main: Removing instruction __b9: Removing instruction __b10: @@ -6301,7 +6295,7 @@ word divr16u::return#2 return zp[2]:28 2002.0 word divr16u::return#3 return zp[2]:28 2002.0 volatile byte frame_cnt loadstore zp[1]:27 3.8181818181818183 void init_irq() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() void main() signed word~ main::$11 zp[2]:30 202.0 word~ main::$26 zp[2]:13 202.0 @@ -6527,7 +6521,7 @@ zp[2]:47 [ rem16u#0 ] FINAL ASSEMBLER -Score: 20582 +Score: 20664 // File Comments // Tests the simple bitmap plotter - and counts plots per frame in an IRQ @@ -6605,8 +6599,8 @@ __start: { // irq // Interrupt Routine counting frames irq: { - // entry interrupt(HARDWARE_CLOBBER) - sta rega+1 + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry + pha // *BG_COLOR = WHITE // [5] *BG_COLOR = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE @@ -6633,9 +6627,9 @@ irq: { sta IRQ_STATUS // irq::@return // } - // [10] return - exit interrupt(HARDWARE_CLOBBER) - rega: - lda #00 + // [10] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit + pla rti } // main diff --git a/src/test/ref/bitmap-plot-2.sym b/src/test/ref/bitmap-plot-2.sym index 2b65d9d9f..5d1d1a996 100644 --- a/src/test/ref/bitmap-plot-2.sym +++ b/src/test/ref/bitmap-plot-2.sym @@ -110,7 +110,7 @@ word divr16u::return#2 return zp[2]:28 2002.0 word divr16u::return#3 return zp[2]:28 2002.0 volatile byte frame_cnt loadstore zp[1]:27 3.8181818181818183 void init_irq() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() void main() signed word~ main::$11 zp[2]:30 202.0 word~ main::$26 zp[2]:13 202.0 diff --git a/src/test/ref/clobber-a-problem.asm b/src/test/ref/clobber-a-problem.asm index 550f375b3..456fcf854 100644 --- a/src/test/ref/clobber-a-problem.asm +++ b/src/test/ref/clobber-a-problem.asm @@ -42,9 +42,9 @@ irq: { sta BORDER_COLOR // } rega: - lda #00 + lda #0 regx: - ldx #00 + ldx #0 rti } main: { diff --git a/src/test/ref/clobber-a-problem.cfg b/src/test/ref/clobber-a-problem.cfg index b6512be98..a963759f2 100644 --- a/src/test/ref/clobber-a-problem.cfg +++ b/src/test/ref/clobber-a-problem.cfg @@ -14,7 +14,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from [5] *BORDER_COLOR = DARK_GREY [6] irq_raster_next = irq_raster_next + $15 diff --git a/src/test/ref/clobber-a-problem.log b/src/test/ref/clobber-a-problem.log index fc82e951c..bf8a17c76 100644 --- a/src/test/ref/clobber-a-problem.log +++ b/src/test/ref/clobber-a-problem.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(HARDWARE_CLOBBER) void irq() +Resolved forward reference irq to __interrupt(hardware_clobber) void irq() Inlined call call __init CONTROL FLOW GRAPH SSA @@ -11,7 +11,7 @@ main::@return: scope:[main] from main return to:@return -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from *BORDER_COLOR = DARK_GREY irq_raster_next = irq_raster_next + $15 @@ -56,7 +56,7 @@ const byte DARK_GREY = $b const nomodify void()** KERNEL_IRQ = (void()**)$314 const byte* RASTER = (byte*)$d012 void __start() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() number~ irq::$0 bool~ irq::$1 bool~ irq::$2 @@ -127,7 +127,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from [5] *BORDER_COLOR = DARK_GREY [6] irq_raster_next = irq_raster_next + $15 @@ -158,7 +158,7 @@ main::@return: scope:[main] from main VARIABLE REGISTER WEIGHTS void __start() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() byte~ irq::$0 4.0 byte irq::raster_next byte irq::raster_next#0 2.6666666666666665 @@ -195,17 +195,14 @@ Uplift Scope [] 4: zp[1]:3 [ irq_raster_next ] Uplift Scope [main] Uplift Scope [__start] -Uplifting [irq] best 252 combination reg byte x [ irq::raster_next#2 irq::raster_next#0 irq::raster_next#1 ] reg byte a [ irq::$0 ] -Uplifting [] best 252 combination zp[1]:3 [ irq_raster_next ] -Uplifting [main] best 252 combination -Uplifting [__start] best 252 combination +Uplifting [irq] best 360 combination reg byte x [ irq::raster_next#2 irq::raster_next#0 irq::raster_next#1 ] reg byte a [ irq::$0 ] +Uplifting [] best 360 combination zp[1]:3 [ irq_raster_next ] +Uplifting [main] best 360 combination +Uplifting [__start] best 360 combination Attempting to uplift remaining variables inzp[1]:3 [ irq_raster_next ] -Uplifting [] best 252 combination zp[1]:3 [ irq_raster_next ] +Uplifting [] best 360 combination zp[1]:3 [ irq_raster_next ] Allocated (was zp[1]:3) zp[1]:2 [ irq_raster_next ] Interrupt procedure irq clobbers AXcnzP -Removing interrupt register storage sty regy+1 in 12 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regy: in 26 [14] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldy #00 in 26 [14] return - exit interrupt(HARDWARE_CLOBBER) ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -243,7 +240,7 @@ __start: { } // irq irq: { - // entry interrupt(HARDWARE_CLOBBER) + // interrupt(isr_hardware_clobax_entry) -- isr_hardware_clobax_entry sta rega+1 stx regx+1 // [5] *BORDER_COLOR = DARK_GREY -- _deref_pbuc1=vbuc2 @@ -282,11 +279,12 @@ irq: { jmp __breturn // irq::@return __breturn: - // [14] return - exit interrupt(HARDWARE_CLOBBER) + // [14] return + // interrupt(isr_hardware_clobax_exit) -- isr_hardware_clobax_exit rega: - lda #00 + lda #0 regx: - ldx #00 + ldx #0 rti } // main @@ -335,7 +333,7 @@ const byte DARK_GREY = $b const nomodify void()** KERNEL_IRQ = (void()**) 788 const byte* RASTER = (byte*) 53266 void __start() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() byte~ irq::$0 reg byte a 4.0 byte irq::raster_next byte irq::raster_next#0 reg byte x 2.6666666666666665 @@ -350,7 +348,7 @@ reg byte a [ irq::$0 ] FINAL ASSEMBLER -Score: 159 +Score: 249 // File Comments // Upstart @@ -381,7 +379,7 @@ __start: { } // irq irq: { - // entry interrupt(HARDWARE_CLOBBER) + // interrupt(isr_hardware_clobax_entry) -- isr_hardware_clobax_entry sta rega+1 stx regx+1 // *BORDER_COLOR = DARK_GREY @@ -421,11 +419,12 @@ irq: { sta BORDER_COLOR // irq::@return // } - // [14] return - exit interrupt(HARDWARE_CLOBBER) + // [14] return + // interrupt(isr_hardware_clobax_exit) -- isr_hardware_clobax_exit rega: - lda #00 + lda #0 regx: - ldx #00 + ldx #0 rti } // main diff --git a/src/test/ref/clobber-a-problem.sym b/src/test/ref/clobber-a-problem.sym index b4dce8c23..c482e5e08 100644 --- a/src/test/ref/clobber-a-problem.sym +++ b/src/test/ref/clobber-a-problem.sym @@ -4,7 +4,7 @@ const byte DARK_GREY = $b const nomodify void()** KERNEL_IRQ = (void()**) 788 const byte* RASTER = (byte*) 53266 void __start() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() byte~ irq::$0 reg byte a 4.0 byte irq::raster_next byte irq::raster_next#0 reg byte x 2.6666666666666665 diff --git a/src/test/ref/complex/ataritempest/ataritempest.asm b/src/test/ref/complex/ataritempest/ataritempest.asm index c669d60be..c5d0ae9ed 100644 --- a/src/test/ref/complex/ataritempest/ataritempest.asm +++ b/src/test/ref/complex/ataritempest/ataritempest.asm @@ -1,6 +1,7 @@ // Atari Tempest ROM Development Template // Each function of the kernal is a no-args function // The functions are placed in the SYSCALLS table surrounded by JMP and NOP +.cpu _6502 .file [name="ataritempest.bin", type="bin", segments="AtariTempest"] .segmentdef AtariTempest [segments="Code, RomData, Vectors"] .segmentdef Code [start=$9000, min=$9000, max=$Fff9] @@ -18,18 +19,9 @@ main: { rts } nmiHandler: { - sta rega+1 - stx regx+1 - sty regy+1 // (*BG_COLOR)++; inc BG_COLOR // } - rega: - lda #00 - regx: - ldx #00 - regy: - ldy #00 rti } entryPoint: { diff --git a/src/test/ref/complex/ataritempest/ataritempest.cfg b/src/test/ref/complex/ataritempest/ataritempest.cfg index 23c90252f..10897214e 100644 --- a/src/test/ref/complex/ataritempest/ataritempest.cfg +++ b/src/test/ref/complex/ataritempest/ataritempest.cfg @@ -7,7 +7,7 @@ main::@return: scope:[main] from main [1] return to:@return -interrupt(HARDWARE_ALL) void nmiHandler() +__interrupt(hardware_clobber) void nmiHandler() nmiHandler: scope:[nmiHandler] from [2] *BG_COLOR = ++ *BG_COLOR to:nmiHandler::@return diff --git a/src/test/ref/complex/ataritempest/ataritempest.log b/src/test/ref/complex/ataritempest/ataritempest.log index 0f3aad956..75289d47d 100644 --- a/src/test/ref/complex/ataritempest/ataritempest.log +++ b/src/test/ref/complex/ataritempest/ataritempest.log @@ -17,7 +17,7 @@ entryPoint::@return: scope:[entryPoint] from entryPoint::@1 return to:@return -interrupt(HARDWARE_ALL) void nmiHandler() +__interrupt(hardware_clobber) void nmiHandler() nmiHandler: scope:[nmiHandler] from *BG_COLOR = ++ *BG_COLOR to:nmiHandler::@return @@ -56,7 +56,7 @@ byte entryPoint::i#0 byte entryPoint::i#1 byte entryPoint::i#2 void main() -interrupt(HARDWARE_ALL) void nmiHandler() +__interrupt(hardware_clobber) void nmiHandler() Simplifying constant pointer cast (byte*) 49178 Successful SSA optimization PassNCastSimplification @@ -103,7 +103,7 @@ main::@return: scope:[main] from main [1] return to:@return -interrupt(HARDWARE_ALL) void nmiHandler() +__interrupt(hardware_clobber) void nmiHandler() nmiHandler: scope:[nmiHandler] from [2] *BG_COLOR = ++ *BG_COLOR to:nmiHandler::@return @@ -132,7 +132,7 @@ byte entryPoint::i byte entryPoint::i#1 16.5 byte entryPoint::i#2 22.0 void main() -interrupt(HARDWARE_ALL) void nmiHandler() +__interrupt(hardware_clobber) void nmiHandler() Initial phi equivalence classes [ entryPoint::i#2 entryPoint::i#1 ] @@ -153,10 +153,11 @@ Uplift Scope [nmiHandler] Uplift Scope [main] Uplift Scope [] -Uplifting [entryPoint] best 432 combination reg byte x [ entryPoint::i#2 entryPoint::i#1 ] -Uplifting [nmiHandler] best 432 combination -Uplifting [main] best 432 combination -Uplifting [] best 432 combination +Uplifting [entryPoint] best 650 combination reg byte x [ entryPoint::i#2 entryPoint::i#1 ] +Uplifting [nmiHandler] best 650 combination +Uplifting [main] best 650 combination +Uplifting [] best 650 combination +Interrupt procedure nmiHandler clobbers nzP ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -164,6 +165,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Each function of the kernal is a no-args function // The functions are placed in the SYSCALLS table surrounded by JMP and NOP // Upstart +.cpu _6502 .file [name="ataritempest.bin", type="bin", segments="AtariTempest"] .segmentdef AtariTempest [segments="Code, RomData, Vectors"] .segmentdef Code [start=$9000, min=$9000, max=$Fff9] @@ -187,22 +189,14 @@ main: { } // nmiHandler nmiHandler: { - // entry interrupt(HARDWARE_ALL) - sta rega+1 - stx regx+1 - sty regy+1 + // interrupt(isr_hardware_none_entry) -- isr_hardware_none_entry // [2] *BG_COLOR = ++ *BG_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BG_COLOR jmp __breturn // nmiHandler::@return __breturn: - // [3] return - exit interrupt(HARDWARE_ALL) - rega: - lda #00 - regx: - ldx #00 - regy: - ldy #00 + // [3] return + // interrupt(isr_hardware_none_exit) -- isr_hardware_none_exit rti } // entryPoint @@ -248,10 +242,10 @@ Removing instruction jmp __b1 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Replacing label __b1_from___b1 with __b1 -Removing instruction __breturn: Removing instruction __b1_from___b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction __breturn: +Removing instruction __breturn: Removing instruction __b1_from_entryPoint: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination @@ -268,19 +262,20 @@ byte entryPoint::i byte entryPoint::i#1 reg byte x 16.5 byte entryPoint::i#2 reg byte x 22.0 void main() -interrupt(HARDWARE_ALL) void nmiHandler() +__interrupt(hardware_clobber) void nmiHandler() reg byte x [ entryPoint::i#2 entryPoint::i#1 ] FINAL ASSEMBLER -Score: 336 +Score: 264 // File Comments // Atari Tempest ROM Development Template // Each function of the kernal is a no-args function // The functions are placed in the SYSCALLS table surrounded by JMP and NOP // Upstart +.cpu _6502 .file [name="ataritempest.bin", type="bin", segments="AtariTempest"] .segmentdef AtariTempest [segments="Code, RomData, Vectors"] .segmentdef Code [start=$9000, min=$9000, max=$Fff9] @@ -304,22 +299,14 @@ main: { } // nmiHandler nmiHandler: { - // entry interrupt(HARDWARE_ALL) - sta rega+1 - stx regx+1 - sty regy+1 + // interrupt(isr_hardware_none_entry) -- isr_hardware_none_entry // (*BG_COLOR)++; // [2] *BG_COLOR = ++ *BG_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BG_COLOR // nmiHandler::@return // } - // [3] return - exit interrupt(HARDWARE_ALL) - rega: - lda #00 - regx: - ldx #00 - regy: - ldy #00 + // [3] return + // interrupt(isr_hardware_none_exit) -- isr_hardware_none_exit rti } // entryPoint diff --git a/src/test/ref/complex/ataritempest/ataritempest.sym b/src/test/ref/complex/ataritempest/ataritempest.sym index b3a87ff62..3735394a7 100644 --- a/src/test/ref/complex/ataritempest/ataritempest.sym +++ b/src/test/ref/complex/ataritempest/ataritempest.sym @@ -7,6 +7,6 @@ byte entryPoint::i byte entryPoint::i#1 reg byte x 16.5 byte entryPoint::i#2 reg byte x 22.0 void main() -interrupt(HARDWARE_ALL) void nmiHandler() +__interrupt(hardware_clobber) void nmiHandler() reg byte x [ entryPoint::i#2 entryPoint::i#1 ] diff --git a/src/test/ref/complex/clearscreen/clearscreen.asm b/src/test/ref/complex/clearscreen/clearscreen.asm index ee354ade4..a36b1b674 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.asm +++ b/src/test/ref/complex/clearscreen/clearscreen.asm @@ -130,18 +130,16 @@ irqBottom: { sta IRQ_STATUS // } rega: - lda #00 + lda #0 regx: - ldx #00 + ldx #0 regy: - ldy #00 + ldy #0 rti } // Raster Interrupt at the top of the screen irqTop: { - sta rega+1 - stx regx+1 - sty regy+1 + pha // *RASTER = RASTER_IRQ_MIDDLE // Trigger IRQ at the middle of the screen lda #RASTER_IRQ_MIDDLE @@ -156,12 +154,7 @@ irqTop: { lda #IRQ_RASTER sta IRQ_STATUS // } - rega: - lda #00 - regx: - ldx #00 - regy: - ldy #00 + pla rti } // Allocates a block of size chars of memory, returning a pointer to the beginning of the block. diff --git a/src/test/ref/complex/clearscreen/clearscreen.cfg b/src/test/ref/complex/clearscreen/clearscreen.cfg index 6f2132868..13d8a1dd2 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.cfg +++ b/src/test/ref/complex/clearscreen/clearscreen.cfg @@ -22,7 +22,7 @@ __start::@return: scope:[__start] from __start::@1 [8] return to:@return -interrupt(HARDWARE_ALL) void irqBottom() +__interrupt(hardware_clobber) void irqBottom() irqBottom: scope:[irqBottom] from [9] phi() to:irqBottom::@1 @@ -39,7 +39,7 @@ irqBottom::@return: scope:[irqBottom] from irqBottom::@2 [15] return to:@return -interrupt(HARDWARE_ALL) void irqTop() +__interrupt(hardware_clobber) void irqTop() irqTop: scope:[irqTop] from [16] phi() to:irqTop::@1 diff --git a/src/test/ref/complex/clearscreen/clearscreen.log b/src/test/ref/complex/clearscreen/clearscreen.log index 3d482eae4..6a55a48f6 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.log +++ b/src/test/ref/complex/clearscreen/clearscreen.log @@ -1,7 +1,7 @@ Resolved forward reference RASTER_IRQ_TOP to RASTER_IRQ_TOP -Resolved forward reference irqTop to interrupt(HARDWARE_ALL) void irqTop() +Resolved forward reference irqTop to __interrupt(hardware_clobber) void irqTop() Resolved forward reference RASTER_IRQ_MIDDLE to RASTER_IRQ_MIDDLE -Resolved forward reference irqBottom to interrupt(HARDWARE_ALL) void irqBottom() +Resolved forward reference irqBottom to __interrupt(hardware_clobber) void irqBottom() Constantified RValue PROCESSING[main::$10] = { x: 0, y: 0, vx: 0, vy: 0, id: 0, ptr: 0, col: 0, status: STATUS_FREE, screenPtr: (byte*)0 } Constantified RValue getCharToProcess::closest = (struct ProcessingChar){ getCharToProcess::x, getCharToProcess::y, getCharToProcess::dist } Constantified RValue PROCESSING[startProcessing::$22] = (struct ProcessingSprite){ startProcessing::spriteX, startProcessing::spriteY, (word)startProcessing::$15, $3c, startProcessing::spriteIdx, startProcessing::spritePtr, startProcessing::spriteCol, STATUS_NEW, startProcessing::screenPtr } @@ -941,7 +941,7 @@ setupRasterIrq::@return: scope:[setupRasterIrq] from setupRasterIrq::@2 return to:@return -interrupt(HARDWARE_ALL) void irqTop() +__interrupt(hardware_clobber) void irqTop() irqTop: scope:[irqTop] from irqTop::$0 = ! DEBUG if(irqTop::$0) goto irqTop::@1 @@ -979,7 +979,7 @@ irqTop::@return: scope:[irqTop] from irqTop::@1 return to:@return -interrupt(HARDWARE_ALL) void irqBottom() +__interrupt(hardware_clobber) void irqBottom() irqBottom: scope:[irqBottom] from irqBottom::$0 = ! DEBUG if(irqBottom::$0) goto irqBottom::@1 @@ -1555,7 +1555,7 @@ byte init_angle_screen::y#5 byte init_angle_screen::y#6 signed word init_angle_screen::yw signed word init_angle_screen::yw#0 -interrupt(HARDWARE_ALL) void irqBottom() +__interrupt(hardware_clobber) void irqBottom() bool~ irqBottom::$0 bool~ irqBottom::$2 bool~ irqBottom::$3 @@ -1563,7 +1563,7 @@ byte irqBottom::i byte irqBottom::i#0 byte irqBottom::i#1 byte irqBottom::i#2 -interrupt(HARDWARE_ALL) void irqTop() +__interrupt(hardware_clobber) void irqTop() bool~ irqTop::$0 bool~ irqTop::$1 bool~ irqTop::$2 @@ -3079,7 +3079,7 @@ __start::@return: scope:[__start] from __start::@1 [8] return to:@return -interrupt(HARDWARE_ALL) void irqBottom() +__interrupt(hardware_clobber) void irqBottom() irqBottom: scope:[irqBottom] from [9] phi() to:irqBottom::@1 @@ -3096,7 +3096,7 @@ irqBottom::@return: scope:[irqBottom] from irqBottom::@2 [15] return to:@return -interrupt(HARDWARE_ALL) void irqTop() +__interrupt(hardware_clobber) void irqTop() irqTop: scope:[irqTop] from [16] phi() to:irqTop::@1 @@ -3774,9 +3774,9 @@ byte init_angle_screen::y#1 1501.5 byte init_angle_screen::y#5 461.65384615384613 signed word init_angle_screen::yw word init_angle_screen::yw#0 5000.5 -interrupt(HARDWARE_ALL) void irqBottom() +__interrupt(hardware_clobber) void irqBottom() byte irqBottom::i -interrupt(HARDWARE_ALL) void irqTop() +__interrupt(hardware_clobber) void irqTop() byte irqTop::i byte irqTop::i1 void main() @@ -4856,136 +4856,136 @@ Uplift Scope [irqTop] Uplift Scope [irqBottom] Uplift Scope [__start] -Uplifting [atan2_16] best 1276432 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:48 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:50 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:43 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:38 [ 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]:40 [ 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]:45 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] zp[2]:108 [ atan2_16::return#2 ] zp[2]:104 [ atan2_16::x#0 ] zp[2]:106 [ atan2_16::y#0 ] +Uplifting [atan2_16] best 1276648 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:48 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:50 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:43 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:38 [ 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]:40 [ 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]:45 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] zp[2]:108 [ atan2_16::return#2 ] zp[2]:104 [ atan2_16::x#0 ] zp[2]:106 [ atan2_16::y#0 ] Limited combination testing to 100 combinations of 144 possible. -Uplifting [getCharToProcess] best 1263099 combination reg byte x [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] zp[1]:27 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] zp[1]:29 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] zp[1]:28 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] zp[1]:26 [ getCharToProcess::x#2 getCharToProcess::x#1 ] zp[1]:25 [ getCharToProcess::y#7 getCharToProcess::y#1 ] zp[2]:23 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] zp[2]:21 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] zp[2]:120 [ getCharToProcess::$12 ] zp[2]:122 [ getCharToProcess::$13 ] zp[2]:124 [ getCharToProcess::$8 ] zp[2]:126 [ getCharToProcess::$9 ] zp[2]:118 [ getCharToProcess::$11 ] zp[1]:65 [ getCharToProcess::return_x#0 ] zp[1]:66 [ getCharToProcess::return_y#0 ] zp[1]:67 [ getCharToProcess::return_dist#0 ] +Uplifting [getCharToProcess] best 1263315 combination reg byte x [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] zp[1]:27 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] zp[1]:29 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] zp[1]:28 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] zp[1]:26 [ getCharToProcess::x#2 getCharToProcess::x#1 ] zp[1]:25 [ getCharToProcess::y#7 getCharToProcess::y#1 ] zp[2]:23 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] zp[2]:21 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] zp[2]:120 [ getCharToProcess::$12 ] zp[2]:122 [ getCharToProcess::$13 ] zp[2]:124 [ getCharToProcess::$8 ] zp[2]:126 [ getCharToProcess::$9 ] zp[2]:118 [ getCharToProcess::$11 ] zp[1]:65 [ getCharToProcess::return_x#0 ] zp[1]:66 [ getCharToProcess::return_y#0 ] zp[1]:67 [ getCharToProcess::return_dist#0 ] Limited combination testing to 100 combinations of 46656 possible. -Uplifting [init_angle_screen] best 1261499 combination zp[1]:17 [ 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]:110 [ init_angle_screen::angle_w#0 ] zp[2]:112 [ init_angle_screen::$7 ] zp[1]:115 [ init_angle_screen::$9 ] zp[1]:116 [ init_angle_screen::$10 ] zp[1]:117 [ init_angle_screen::$11 ] zp[1]:16 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp[1]:114 [ init_angle_screen::ang_w#0 ] zp[2]:102 [ init_angle_screen::yw#0 ] zp[2]:99 [ init_angle_screen::xw#0 ] zp[1]:11 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp[2]:14 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp[2]:12 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ] zp[2]:58 [ init_angle_screen::screen#0 ] +Uplifting [init_angle_screen] best 1261715 combination zp[1]:17 [ 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]:110 [ init_angle_screen::angle_w#0 ] zp[2]:112 [ init_angle_screen::$7 ] zp[1]:115 [ init_angle_screen::$9 ] zp[1]:116 [ init_angle_screen::$10 ] zp[1]:117 [ init_angle_screen::$11 ] zp[1]:16 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp[1]:114 [ init_angle_screen::ang_w#0 ] zp[2]:102 [ init_angle_screen::yw#0 ] zp[2]:99 [ init_angle_screen::xw#0 ] zp[1]:11 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp[2]:14 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp[2]:12 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ] zp[2]:58 [ init_angle_screen::screen#0 ] Limited combination testing to 100 combinations of 65536 possible. -Uplifting [initSprites] best 1261379 combination zp[2]:18 [ initSprites::sp#2 initSprites::sp#1 ] reg byte x [ initSprites::i#2 initSprites::i#1 ] -Uplifting [processChars] best 1261139 combination zp[1]:10 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] reg byte a [ processChars::$87 ] reg byte a [ processChars::$88 ] reg byte a [ processChars::$89 ] reg byte a [ processChars::$28 ] zp[1]:83 [ processChars::$9 ] zp[1]:84 [ processChars::$10 ] zp[1]:90 [ processChars::$73 ] zp[1]:91 [ processChars::xchar#0 ] zp[1]:92 [ processChars::$29 ] zp[1]:93 [ processChars::$79 ] zp[1]:94 [ processChars::ychar#0 ] zp[1]:95 [ processChars::$30 ] zp[1]:96 [ processChars::$25 ] zp[1]:9 [ processChars::i#10 processChars::i#1 ] zp[2]:85 [ processChars::$12 ] zp[2]:88 [ processChars::$21 ] zp[1]:87 [ processChars::ypos#0 ] zp[1]:80 [ processChars::bitmask#0 ] zp[2]:81 [ processChars::xpos#0 ] zp[1]:73 [ processChars::$13 ] zp[2]:78 [ processChars::processing#0 ] +Uplifting [initSprites] best 1261595 combination zp[2]:18 [ initSprites::sp#2 initSprites::sp#1 ] reg byte x [ initSprites::i#2 initSprites::i#1 ] +Uplifting [processChars] best 1261355 combination zp[1]:10 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] reg byte a [ processChars::$87 ] reg byte a [ processChars::$88 ] reg byte a [ processChars::$89 ] reg byte a [ processChars::$28 ] zp[1]:83 [ processChars::$9 ] zp[1]:84 [ processChars::$10 ] zp[1]:90 [ processChars::$73 ] zp[1]:91 [ processChars::xchar#0 ] zp[1]:92 [ processChars::$29 ] zp[1]:93 [ processChars::$79 ] zp[1]:94 [ processChars::ychar#0 ] zp[1]:95 [ processChars::$30 ] zp[1]:96 [ processChars::$25 ] zp[1]:9 [ processChars::i#10 processChars::i#1 ] zp[2]:85 [ processChars::$12 ] zp[2]:88 [ processChars::$21 ] zp[1]:87 [ processChars::ypos#0 ] zp[1]:80 [ processChars::bitmask#0 ] zp[2]:81 [ processChars::xpos#0 ] zp[1]:73 [ processChars::$13 ] zp[2]:78 [ processChars::processing#0 ] Limited combination testing to 100 combinations of 134217728 possible. -Uplifting [main] best 1260899 combination zp[2]:6 [ main::dst#2 main::dst#0 main::dst#1 ] zp[2]:4 [ main::src#2 main::src#1 ] zp[1]:8 [ main::i#2 main::i#1 ] reg byte a [ main::$11 ] reg byte a [ main::$12 ] reg byte a [ main::$13 ] reg byte a [ main::$14 ] zp[1]:64 [ main::$10 ] zp[1]:70 [ main::center_dist#0 ] zp[1]:68 [ main::center_x#0 ] zp[1]:69 [ main::center_y#0 ] +Uplifting [main] best 1261115 combination zp[2]:6 [ main::dst#2 main::dst#0 main::dst#1 ] zp[2]:4 [ main::src#2 main::src#1 ] zp[1]:8 [ main::i#2 main::i#1 ] reg byte a [ main::$11 ] reg byte a [ main::$12 ] reg byte a [ main::$13 ] reg byte a [ main::$14 ] zp[1]:64 [ main::$10 ] zp[1]:70 [ main::center_dist#0 ] zp[1]:68 [ main::center_x#0 ] zp[1]:69 [ main::center_y#0 ] Limited combination testing to 100 combinations of 65536 possible. -Uplifting [] best 1260899 combination zp[2]:2 [ heap_head#6 heap_head#0 ] zp[2]:54 [ SCREEN_DIST#0 ] zp[2]:52 [ SCREEN_COPY#0 ] -Uplifting [malloc] best 1260899 combination zp[2]:56 [ malloc::mem#0 ] -Uplifting [RADIX] best 1260899 combination -Uplifting [MOS6526_CIA] best 1260899 combination -Uplifting [MOS6569_VICII] best 1260899 combination -Uplifting [MOS6581_SID] best 1260899 combination -Uplifting [ProcessingChar] best 1260899 combination -Uplifting [ProcessingSprite] best 1260899 combination -Uplifting [ProcessingSprite::$0] best 1260899 combination -Uplifting [setupRasterIrq] best 1260899 combination -Uplifting [irqTop] best 1260899 combination -Uplifting [irqBottom] best 1260899 combination -Uplifting [__start] best 1260899 combination +Uplifting [] best 1261115 combination zp[2]:2 [ heap_head#6 heap_head#0 ] zp[2]:54 [ SCREEN_DIST#0 ] zp[2]:52 [ SCREEN_COPY#0 ] +Uplifting [malloc] best 1261115 combination zp[2]:56 [ malloc::mem#0 ] +Uplifting [RADIX] best 1261115 combination +Uplifting [MOS6526_CIA] best 1261115 combination +Uplifting [MOS6569_VICII] best 1261115 combination +Uplifting [MOS6581_SID] best 1261115 combination +Uplifting [ProcessingChar] best 1261115 combination +Uplifting [ProcessingSprite] best 1261115 combination +Uplifting [ProcessingSprite::$0] best 1261115 combination +Uplifting [setupRasterIrq] best 1261115 combination +Uplifting [irqTop] best 1261115 combination +Uplifting [irqBottom] best 1261115 combination +Uplifting [__start] best 1261115 combination Attempting to uplift remaining variables inzp[1]:27 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] -Uplifting [getCharToProcess] best 1260899 combination zp[1]:27 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] +Uplifting [getCharToProcess] best 1261115 combination zp[1]:27 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] Attempting to uplift remaining variables inzp[1]:29 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] -Uplifting [getCharToProcess] best 1260899 combination zp[1]:29 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] +Uplifting [getCharToProcess] best 1261115 combination zp[1]:29 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] Attempting to uplift remaining variables inzp[1]:32 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] -Uplifting [startProcessing] best 1260899 combination zp[1]:32 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] +Uplifting [startProcessing] best 1261115 combination zp[1]:32 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] Attempting to uplift remaining variables inzp[1]:128 [ startProcessing::$28 ] -Uplifting [startProcessing] best 1254899 combination reg byte a [ startProcessing::$28 ] +Uplifting [startProcessing] best 1255115 combination reg byte a [ startProcessing::$28 ] Attempting to uplift remaining variables inzp[1]:129 [ startProcessing::$29 ] -Uplifting [startProcessing] best 1248899 combination reg byte a [ startProcessing::$29 ] +Uplifting [startProcessing] best 1249115 combination reg byte a [ startProcessing::$29 ] Attempting to uplift remaining variables inzp[1]:130 [ startProcessing::$30 ] -Uplifting [startProcessing] best 1242899 combination reg byte a [ startProcessing::$30 ] +Uplifting [startProcessing] best 1243115 combination reg byte a [ startProcessing::$30 ] Attempting to uplift remaining variables inzp[1]:131 [ startProcessing::$31 ] -Uplifting [startProcessing] best 1236899 combination reg byte a [ startProcessing::$31 ] +Uplifting [startProcessing] best 1237115 combination reg byte a [ startProcessing::$31 ] Attempting to uplift remaining variables inzp[1]:132 [ startProcessing::$21 ] -Uplifting [startProcessing] best 1232899 combination reg byte a [ startProcessing::$21 ] +Uplifting [startProcessing] best 1233115 combination reg byte a [ startProcessing::$21 ] Attempting to uplift remaining variables inzp[1]:28 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] -Uplifting [getCharToProcess] best 1232899 combination zp[1]:28 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] +Uplifting [getCharToProcess] best 1233115 combination zp[1]:28 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] Attempting to uplift remaining variables inzp[1]:26 [ getCharToProcess::x#2 getCharToProcess::x#1 ] -Uplifting [getCharToProcess] best 1214899 combination reg byte y [ getCharToProcess::x#2 getCharToProcess::x#1 ] +Uplifting [getCharToProcess] best 1215115 combination reg byte y [ getCharToProcess::x#2 getCharToProcess::x#1 ] Attempting to uplift remaining variables inzp[1]:31 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] -Uplifting [startProcessing] best 1213999 combination reg byte x [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] +Uplifting [startProcessing] best 1214215 combination reg byte x [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] Attempting to uplift remaining variables inzp[1]:37 [ startProcessing::i1#2 startProcessing::i1#1 ] -Uplifting [startProcessing] best 1213099 combination reg byte x [ startProcessing::i1#2 startProcessing::i1#1 ] +Uplifting [startProcessing] best 1213315 combination reg byte x [ startProcessing::i1#2 startProcessing::i1#1 ] Attempting to uplift remaining variables inzp[1]:25 [ getCharToProcess::y#7 getCharToProcess::y#1 ] -Uplifting [getCharToProcess] best 1213099 combination zp[1]:25 [ getCharToProcess::y#7 getCharToProcess::y#1 ] +Uplifting [getCharToProcess] best 1213315 combination zp[1]:25 [ getCharToProcess::y#7 getCharToProcess::y#1 ] Attempting to uplift remaining variables inzp[1]:17 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Uplifting [init_angle_screen] best 1213099 combination zp[1]:17 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Uplifting [init_angle_screen] best 1213315 combination zp[1]:17 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] Attempting to uplift remaining variables inzp[1]:115 [ init_angle_screen::$9 ] -Uplifting [init_angle_screen] best 1212499 combination reg byte a [ init_angle_screen::$9 ] +Uplifting [init_angle_screen] best 1212715 combination reg byte a [ init_angle_screen::$9 ] Attempting to uplift remaining variables inzp[1]:116 [ init_angle_screen::$10 ] -Uplifting [init_angle_screen] best 1212099 combination reg byte a [ init_angle_screen::$10 ] +Uplifting [init_angle_screen] best 1212315 combination reg byte a [ init_angle_screen::$10 ] Attempting to uplift remaining variables inzp[1]:117 [ init_angle_screen::$11 ] -Uplifting [init_angle_screen] best 1211499 combination reg byte a [ init_angle_screen::$11 ] +Uplifting [init_angle_screen] best 1211715 combination reg byte a [ init_angle_screen::$11 ] Attempting to uplift remaining variables inzp[1]:16 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Uplifting [init_angle_screen] best 1211499 combination zp[1]:16 [ init_angle_screen::x#2 init_angle_screen::x#1 ] +Uplifting [init_angle_screen] best 1211715 combination zp[1]:16 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Attempting to uplift remaining variables inzp[1]:114 [ init_angle_screen::ang_w#0 ] -Uplifting [init_angle_screen] best 1211499 combination zp[1]:114 [ init_angle_screen::ang_w#0 ] +Uplifting [init_angle_screen] best 1211715 combination zp[1]:114 [ init_angle_screen::ang_w#0 ] Attempting to uplift remaining variables inzp[1]:175 [ startProcessing::$36 ] -Uplifting [startProcessing] best 1211493 combination reg byte a [ startProcessing::$36 ] +Uplifting [startProcessing] best 1211709 combination reg byte a [ startProcessing::$36 ] Attempting to uplift remaining variables inzp[1]:176 [ startProcessing::$37 ] -Uplifting [startProcessing] best 1211487 combination reg byte a [ startProcessing::$37 ] +Uplifting [startProcessing] best 1211703 combination reg byte a [ startProcessing::$37 ] Attempting to uplift remaining variables inzp[1]:177 [ startProcessing::$38 ] -Uplifting [startProcessing] best 1211481 combination reg byte a [ startProcessing::$38 ] +Uplifting [startProcessing] best 1211697 combination reg byte a [ startProcessing::$38 ] Attempting to uplift remaining variables inzp[1]:178 [ startProcessing::$39 ] -Uplifting [startProcessing] best 1211475 combination reg byte a [ startProcessing::$39 ] +Uplifting [startProcessing] best 1211691 combination reg byte a [ startProcessing::$39 ] Attempting to uplift remaining variables inzp[1]:11 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Uplifting [init_angle_screen] best 1211475 combination zp[1]:11 [ init_angle_screen::y#5 init_angle_screen::y#1 ] +Uplifting [init_angle_screen] best 1211691 combination zp[1]:11 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Attempting to uplift remaining variables inzp[1]:179 [ startProcessing::$22 ] -Uplifting [startProcessing] best 1211447 combination reg byte x [ startProcessing::$22 ] +Uplifting [startProcessing] best 1211663 combination reg byte x [ startProcessing::$22 ] Attempting to uplift remaining variables inzp[1]:152 [ startProcessing::ch#0 ] -Uplifting [startProcessing] best 1211441 combination reg byte a [ startProcessing::ch#0 ] +Uplifting [startProcessing] best 1211657 combination reg byte a [ startProcessing::ch#0 ] Attempting to uplift remaining variables inzp[1]:10 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] -Uplifting [processChars] best 1211441 combination zp[1]:10 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] +Uplifting [processChars] best 1211657 combination zp[1]:10 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] Attempting to uplift remaining variables inzp[1]:8 [ main::i#2 main::i#1 ] -Uplifting [main] best 1211441 combination zp[1]:8 [ main::i#2 main::i#1 ] +Uplifting [main] best 1211657 combination zp[1]:8 [ main::i#2 main::i#1 ] Attempting to uplift remaining variables inzp[1]:64 [ main::$10 ] -Uplifting [main] best 1211401 combination reg byte a [ main::$10 ] +Uplifting [main] best 1211617 combination reg byte a [ main::$10 ] Attempting to uplift remaining variables inzp[1]:70 [ main::center_dist#0 ] -Uplifting [main] best 1211341 combination reg byte a [ main::center_dist#0 ] +Uplifting [main] best 1211557 combination reg byte a [ main::center_dist#0 ] Attempting to uplift remaining variables inzp[1]:83 [ processChars::$9 ] -Uplifting [processChars] best 1211281 combination reg byte a [ processChars::$9 ] +Uplifting [processChars] best 1211497 combination reg byte a [ processChars::$9 ] Attempting to uplift remaining variables inzp[1]:84 [ processChars::$10 ] -Uplifting [processChars] best 1211221 combination reg byte a [ processChars::$10 ] +Uplifting [processChars] best 1211437 combination reg byte a [ processChars::$10 ] Attempting to uplift remaining variables inzp[1]:90 [ processChars::$73 ] -Uplifting [processChars] best 1211181 combination reg byte a [ processChars::$73 ] +Uplifting [processChars] best 1211397 combination reg byte a [ processChars::$73 ] Attempting to uplift remaining variables inzp[1]:91 [ processChars::xchar#0 ] -Uplifting [processChars] best 1211121 combination reg byte a [ processChars::xchar#0 ] +Uplifting [processChars] best 1211337 combination reg byte a [ processChars::xchar#0 ] Attempting to uplift remaining variables inzp[1]:92 [ processChars::$29 ] -Uplifting [processChars] best 1211081 combination reg byte a [ processChars::$29 ] +Uplifting [processChars] best 1211297 combination reg byte a [ processChars::$29 ] Attempting to uplift remaining variables inzp[1]:93 [ processChars::$79 ] -Uplifting [processChars] best 1211041 combination reg byte a [ processChars::$79 ] +Uplifting [processChars] best 1211257 combination reg byte a [ processChars::$79 ] Attempting to uplift remaining variables inzp[1]:94 [ processChars::ychar#0 ] -Uplifting [processChars] best 1210981 combination reg byte a [ processChars::ychar#0 ] +Uplifting [processChars] best 1211197 combination reg byte a [ processChars::ychar#0 ] Attempting to uplift remaining variables inzp[1]:95 [ processChars::$30 ] -Uplifting [processChars] best 1210941 combination reg byte a [ processChars::$30 ] +Uplifting [processChars] best 1211157 combination reg byte a [ processChars::$30 ] Attempting to uplift remaining variables inzp[1]:96 [ processChars::$25 ] -Uplifting [processChars] best 1210881 combination reg byte a [ processChars::$25 ] +Uplifting [processChars] best 1211097 combination reg byte a [ processChars::$25 ] Attempting to uplift remaining variables inzp[1]:173 [ startProcessing::spritePtr#0 ] -Uplifting [startProcessing] best 1210881 combination zp[1]:173 [ startProcessing::spritePtr#0 ] +Uplifting [startProcessing] best 1211097 combination zp[1]:173 [ startProcessing::spritePtr#0 ] Attempting to uplift remaining variables inzp[1]:9 [ processChars::i#10 processChars::i#1 ] -Uplifting [processChars] best 1210881 combination zp[1]:9 [ processChars::i#10 processChars::i#1 ] +Uplifting [processChars] best 1211097 combination zp[1]:9 [ processChars::i#10 processChars::i#1 ] Attempting to uplift remaining variables inzp[1]:174 [ startProcessing::$15 ] -Uplifting [startProcessing] best 1210879 combination reg byte y [ startProcessing::$15 ] +Uplifting [startProcessing] best 1211095 combination reg byte y [ startProcessing::$15 ] Attempting to uplift remaining variables inzp[1]:65 [ getCharToProcess::return_x#0 ] -Uplifting [getCharToProcess] best 1210819 combination reg byte y [ getCharToProcess::return_x#0 ] +Uplifting [getCharToProcess] best 1211035 combination reg byte y [ getCharToProcess::return_x#0 ] Attempting to uplift remaining variables inzp[1]:66 [ getCharToProcess::return_y#0 ] -Uplifting [getCharToProcess] best 1210759 combination reg byte a [ getCharToProcess::return_y#0 ] +Uplifting [getCharToProcess] best 1210975 combination reg byte a [ getCharToProcess::return_y#0 ] Attempting to uplift remaining variables inzp[1]:67 [ getCharToProcess::return_dist#0 ] -Uplifting [getCharToProcess] best 1210719 combination reg byte x [ getCharToProcess::return_dist#0 ] +Uplifting [getCharToProcess] best 1210935 combination reg byte x [ getCharToProcess::return_dist#0 ] Attempting to uplift remaining variables inzp[1]:68 [ main::center_x#0 ] -Uplifting [main] best 1210659 combination reg byte y [ main::center_x#0 ] +Uplifting [main] best 1210875 combination reg byte y [ main::center_x#0 ] Attempting to uplift remaining variables inzp[1]:69 [ main::center_y#0 ] -Uplifting [main] best 1210659 combination zp[1]:69 [ main::center_y#0 ] +Uplifting [main] best 1210875 combination zp[1]:69 [ main::center_y#0 ] Attempting to uplift remaining variables inzp[1]:145 [ startProcessing::spriteCol#0 ] -Uplifting [startProcessing] best 1210659 combination zp[1]:145 [ startProcessing::spriteCol#0 ] +Uplifting [startProcessing] best 1210875 combination zp[1]:145 [ startProcessing::spriteCol#0 ] Attempting to uplift remaining variables inzp[1]:71 [ startProcessing::center_x#0 ] -Uplifting [startProcessing] best 1210659 combination zp[1]:71 [ startProcessing::center_x#0 ] +Uplifting [startProcessing] best 1210875 combination zp[1]:71 [ startProcessing::center_x#0 ] Attempting to uplift remaining variables inzp[1]:87 [ processChars::ypos#0 ] -Uplifting [processChars] best 1210659 combination zp[1]:87 [ processChars::ypos#0 ] +Uplifting [processChars] best 1210875 combination zp[1]:87 [ processChars::ypos#0 ] Attempting to uplift remaining variables inzp[1]:80 [ processChars::bitmask#0 ] -Uplifting [processChars] best 1210659 combination zp[1]:80 [ processChars::bitmask#0 ] +Uplifting [processChars] best 1210875 combination zp[1]:80 [ processChars::bitmask#0 ] Attempting to uplift remaining variables inzp[1]:73 [ processChars::$13 ] -Uplifting [processChars] best 1210659 combination zp[1]:73 [ processChars::$13 ] +Uplifting [processChars] best 1210875 combination zp[1]:73 [ processChars::$13 ] Attempting to uplift remaining variables inzp[1]:72 [ startProcessing::center_y#0 ] -Uplifting [startProcessing] best 1210659 combination zp[1]:72 [ startProcessing::center_y#0 ] +Uplifting [startProcessing] best 1210875 combination zp[1]:72 [ startProcessing::center_y#0 ] Coalescing zero page register [ zp[2]:14 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp[2]:58 [ init_angle_screen::screen#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:33 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] ] with [ zp[2]:155 [ startProcessing::$6 ] ] - score: 1 Coalescing zero page register [ zp[2]:35 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] ] with [ zp[2]:150 [ startProcessing::$4 ] ] - score: 1 @@ -5060,6 +5060,8 @@ Allocated (was zp[1]:145) zp[1]:39 [ startProcessing::spriteCol#0 getCharToProce Allocated (was zp[2]:157) zp[2]:40 [ startProcessing::$26 startProcessing::$8 startProcessing::$9 startProcessing::spriteX#0 init_angle_screen::yw#0 atan2_16::y#0 ] Allocated (was zp[2]:165) zp[2]:42 [ startProcessing::$27 startProcessing::$11 startProcessing::$12 startProcessing::spriteY#0 getCharToProcess::$11 getCharToProcess::$13 getCharToProcess::$8 getCharToProcess::$9 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 ] Allocated (was zp[1]:173) zp[1]:44 [ startProcessing::spritePtr#0 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Interrupt procedure irqTop clobbers AnzP +Interrupt procedure irqBottom clobbers AXYcnzvPS ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -5207,7 +5209,7 @@ __start: { // irqBottom // Raster Interrupt at the bottom of the screen irqBottom: { - // entry interrupt(HARDWARE_ALL) + // interrupt(isr_hardware_all_entry) -- isr_hardware_all_entry sta rega+1 stx regx+1 sty regy+1 @@ -5239,23 +5241,21 @@ irqBottom: { jmp __breturn // irqBottom::@return __breturn: - // [15] return - exit interrupt(HARDWARE_ALL) + // [15] return + // interrupt(isr_hardware_all_exit) -- isr_hardware_all_exit rega: - lda #00 + lda #0 regx: - ldx #00 + ldx #0 regy: - ldy #00 + ldy #0 rti } // irqTop // Raster Interrupt at the top of the screen irqTop: { - // entry interrupt(HARDWARE_ALL) - sta rega+1 - stx regx+1 - sty regy+1 - jmp __b1 + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry + pha // irqTop::@1 __b1: // [17] *RASTER = RASTER_IRQ_MIDDLE -- _deref_pbuc1=vbuc2 @@ -5274,13 +5274,9 @@ irqTop: { jmp __breturn // irqTop::@return __breturn: - // [20] return - exit interrupt(HARDWARE_ALL) - rega: - lda #00 - regx: - ldx #00 - regy: - ldy #00 + // [20] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit + pla rti } // malloc @@ -7069,7 +7065,6 @@ 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 __breturn Removing instruction jmp __b9 @@ -7187,7 +7182,6 @@ Removing instruction __b1_from___b3: Removing instruction __b1_from_irqBottom: Removing instruction processChars_from___b1: Removing instruction __breturn: -Removing instruction __breturn: Removing instruction __b3_from___b3: Removing instruction __b4_from___b3: Removing instruction __b10_from___b4: @@ -7236,6 +7230,7 @@ Removing instruction __b1: Removing instruction __b2: Removing instruction __b1: Removing instruction __breturn: +Removing instruction __breturn: Removing instruction __b9: Removing instruction __b1_from___b9: Removing instruction __b3_from___b1: @@ -7304,23 +7299,23 @@ Removing instruction jmp __b6 Succesful ASM optimization Pass5NextJumpElimination Removing instruction ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [499] bne __b1 to beq -Fixing long branch [1073] bne __b2 to beq -Fixing long branch [1200] beq __b12 to bne -Fixing long branch [304] beq __b2 to bne -Fixing long branch [364] bne __b4 to beq +Fixing long branch [492] bne __b1 to beq +Fixing long branch [1066] bne __b2 to beq +Fixing long branch [1193] beq __b12 to bne +Fixing long branch [297] beq __b2 to bne +Fixing long branch [357] bne __b4 to beq +Fixing long branch [390] bcc __b6 to bcs Fixing long branch [397] bcc __b6 to bcs Fixing long branch [404] bcc __b6 to bcs Fixing long branch [411] bcc __b6 to bcs -Fixing long branch [418] bcc __b6 to bcs +Fixing long branch [419] bcc __b6 to bcs Fixing long branch [426] bcc __b6 to bcs -Fixing long branch [433] bcc __b6 to bcs -Fixing long branch [441] bcc __b6 to bcs -Fixing long branch [739] beq __b11 to bne -Fixing long branch [871] bne __b3 to beq -Fixing long branch [877] beq __b8 to bne -Fixing long branch [1119] bpl __b1 to bmi -Fixing long branch [1131] bpl __b4 to bmi +Fixing long branch [434] bcc __b6 to bcs +Fixing long branch [732] beq __b11 to bne +Fixing long branch [864] bne __b3 to beq +Fixing long branch [870] beq __b8 to bne +Fixing long branch [1112] bpl __b1 to bmi +Fixing long branch [1124] bpl __b4 to bmi FINAL SYMBOL TABLE const struct ProcessingSprite $0 = { x: 0, y: 0, vx: 0, vy: 0, id: 0, ptr: 0, col: 0, status: STATUS_FREE, screenPtr: (byte*) 0 } @@ -7546,9 +7541,9 @@ byte init_angle_screen::y#1 y zp[1]:20 1501.5 byte init_angle_screen::y#5 y zp[1]:20 461.65384615384613 signed word init_angle_screen::yw word init_angle_screen::yw#0 yw zp[2]:40 5000.5 -interrupt(HARDWARE_ALL) void irqBottom() +__interrupt(hardware_clobber) void irqBottom() byte irqBottom::i -interrupt(HARDWARE_ALL) void irqTop() +__interrupt(hardware_clobber) void irqTop() byte irqTop::i byte irqTop::i1 void main() @@ -7765,7 +7760,7 @@ reg byte a [ atan2_16::$22 ] FINAL ASSEMBLER -Score: 1110858 +Score: 1110964 // File Comments // Clears start screen throwing around the letters (by turning them into sprites) @@ -7901,7 +7896,7 @@ __start: { // irqBottom // Raster Interrupt at the bottom of the screen irqBottom: { - // entry interrupt(HARDWARE_ALL) + // interrupt(isr_hardware_all_entry) -- isr_hardware_all_entry sta rega+1 stx regx+1 sty regy+1 @@ -7930,22 +7925,21 @@ irqBottom: { sta IRQ_STATUS // irqBottom::@return // } - // [15] return - exit interrupt(HARDWARE_ALL) + // [15] return + // interrupt(isr_hardware_all_exit) -- isr_hardware_all_exit rega: - lda #00 + lda #0 regx: - ldx #00 + ldx #0 regy: - ldy #00 + ldy #0 rti } // irqTop // Raster Interrupt at the top of the screen irqTop: { - // entry interrupt(HARDWARE_ALL) - sta rega+1 - stx regx+1 - sty regy+1 + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry + pha // irqTop::@1 // *RASTER = RASTER_IRQ_MIDDLE // [17] *RASTER = RASTER_IRQ_MIDDLE -- _deref_pbuc1=vbuc2 @@ -7965,13 +7959,9 @@ irqTop: { sta IRQ_STATUS // irqTop::@return // } - // [20] return - exit interrupt(HARDWARE_ALL) - rega: - lda #00 - regx: - ldx #00 - regy: - ldy #00 + // [20] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit + pla rti } // malloc diff --git a/src/test/ref/complex/clearscreen/clearscreen.sym b/src/test/ref/complex/clearscreen/clearscreen.sym index 4a9e5e0de..31cb3cb11 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.sym +++ b/src/test/ref/complex/clearscreen/clearscreen.sym @@ -221,9 +221,9 @@ byte init_angle_screen::y#1 y zp[1]:20 1501.5 byte init_angle_screen::y#5 y zp[1]:20 461.65384615384613 signed word init_angle_screen::yw word init_angle_screen::yw#0 yw zp[2]:40 5000.5 -interrupt(HARDWARE_ALL) void irqBottom() +__interrupt(hardware_clobber) void irqBottom() byte irqBottom::i -interrupt(HARDWARE_ALL) void irqTop() +__interrupt(hardware_clobber) void irqTop() byte irqTop::i byte irqTop::i1 void main() diff --git a/src/test/ref/complex/nes-balls/kickballs-2.asm b/src/test/ref/complex/nes-balls/kickballs-2.asm index a5a56760a..47744042b 100644 --- a/src/test/ref/complex/nes-balls/kickballs-2.asm +++ b/src/test/ref/complex/nes-balls/kickballs-2.asm @@ -8,6 +8,7 @@ // https://wiki.nesdev.com/w/index.php/PPU_registers // http://nesdev.com/2C02%20technical%20reference.TXT // Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018. +.cpu _6502 // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html // https://forums.nesdev.com/viewtopic.php?f=2&t=9896 @@ -92,10 +93,6 @@ __start: { } // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) vblank: { - pha - txa - pha - tya pha // PPU->PPUSCROLL = 0 // Set scroll @@ -114,10 +111,6 @@ vblank: { inc.z vblank_hit // } pla - tay - pla - tax - pla rti } main: { diff --git a/src/test/ref/complex/nes-balls/kickballs-2.cfg b/src/test/ref/complex/nes-balls/kickballs-2.cfg index 10217ba2e..ff0cc3cc5 100644 --- a/src/test/ref/complex/nes-balls/kickballs-2.cfg +++ b/src/test/ref/complex/nes-balls/kickballs-2.cfg @@ -15,7 +15,7 @@ __start::@return: scope:[__start] from __start::@1 [5] return to:@return -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_clobber) void vblank() vblank: scope:[vblank] from [6] *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) = 0 [7] *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) = scroll_y diff --git a/src/test/ref/complex/nes-balls/kickballs-2.log b/src/test/ref/complex/nes-balls/kickballs-2.log index 5a45484d2..1cef1c99c 100644 --- a/src/test/ref/complex/nes-balls/kickballs-2.log +++ b/src/test/ref/complex/nes-balls/kickballs-2.log @@ -538,7 +538,7 @@ main::@return: scope:[main] from main::@5 return to:@return -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_clobber) void vblank() vblank: scope:[vblank] from vblank::$3 = (byte*)PPU vblank::$1 = vblank::$3 + OFFSET_STRUCT_RICOH_2C02_PPUSCROLL @@ -979,7 +979,7 @@ word rand_state#8 word rand_state#9 volatile byte scroll_y loadstore const to_nomodify byte* sine_table[$100] = { $40, $42, $43, $45, $46, $48, $49, $4b, $4c, $4e, $50, $51, $53, $54, $56, $57, $58, $5a, $5b, $5d, $5e, $60, $61, $62, $64, $65, $66, $67, $69, $6a, $6b, $6c, $6d, $6e, $6f, $70, $71, $72, $73, $74, $75, $76, $77, $78, $78, $79, $7a, $7b, $7b, $7c, $7c, $7d, $7d, $7e, $7e, $7e, $7f, $7f, $7f, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $7f, $7f, $7f, $7e, $7e, $7e, $7d, $7d, $7c, $7c, $7b, $7b, $7a, $79, $78, $78, $77, $76, $75, $74, $73, $72, $71, $70, $6f, $6e, $6d, $6c, $6b, $6a, $69, $67, $66, $65, $64, $62, $61, $60, $5e, $5d, $5b, $5a, $58, $57, $56, $54, $53, $51, $50, $4e, $4c, $4b, $49, $48, $46, $45, $43, $42, $40, $3e, $3d, $3b, $3a, $38, $37, $35, $34, $32, $30, $2f, $2d, $2c, $2a, $29, $28, $26, $25, $23, $22, $20, $1f, $1e, $1c, $1b, $1a, $19, $17, $16, $15, $14, $13, $12, $11, $10, $f, $e, $d, $c, $b, $a, 9, 8, 8, 7, 6, 5, 5, 4, 4, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 8, 9, $a, $b, $c, $d, $e, $f, $10, $11, $12, $13, $14, $15, $16, $17, $19, $1a, $1b, $1c, $1e, $1f, $20, $22, $23, $25, $26, $28, $29, $2a, $2c, $2d, $2f, $30, $32, $34, $35, $37, $38, $3a, $3b, $3d, $3e } -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_clobber) void vblank() byte*~ vblank::$1 byte*~ vblank::$2 byte*~ vblank::$3 @@ -1798,7 +1798,7 @@ __start::@return: scope:[__start] from __start::@1 [5] return to:@return -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_clobber) void vblank() vblank: scope:[vblank] from [6] *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) = 0 [7] *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) = scroll_y @@ -2161,7 +2161,7 @@ word rand_state#10 1102.0 word rand_state#11 146.93333333333334 word rand_state#17 67.33333333333333 volatile byte scroll_y loadstore 105.0 -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_clobber) void vblank() struct SpriteData* vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer volatile byte vblank_hit loadstore 10.757281553398059 @@ -2567,62 +2567,62 @@ Uplift Scope [$0] Uplift Scope [vblank] Uplift Scope [__start] -Uplifting [ppuDataTransfer] best 51990 combination zp[2]:13 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] zp[2]:15 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$0 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$1 ] zp[2]:9 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] zp[2]:11 [ ppuDataTransfer::cpuData#2 ] -Uplifting [rand] best 51990 combination zp[2]:68 [ rand::$0 ] zp[2]:72 [ rand::$1 ] zp[2]:76 [ rand::$2 ] zp[2]:78 [ rand::return#0 ] zp[2]:51 [ rand::return#2 ] zp[2]:58 [ rand::return#3 ] -Uplifting [] best 51990 combination zp[2]:70 [ rand_state#0 ] zp[2]:74 [ rand_state#1 ] zp[2]:23 [ rand_state#10 rand_state#17 rand_state#11 ] zp[1]:25 [ scroll_y ] zp[1]:26 [ vblank_hit ] -Uplifting [ppuDataFill] best 51978 combination zp[2]:21 [ ppuDataFill::i#2 ppuDataFill::i#1 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] zp[2]:19 [ ppuDataFill::size#3 ] zp[2]:17 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] -Uplifting [RICOH_2C02] best 51978 combination -Uplifting [RICOH_2A03] best 51978 combination -Uplifting [SpriteData] best 51978 combination -Uplifting [RADIX] best 51978 combination -Uplifting [printf_format_number] best 51978 combination -Uplifting [printf_buffer_number] best 51978 combination -Uplifting [printf_format_string] best 51978 combination -Uplifting [$0] best 51978 combination -Uplifting [vblank] best 51978 combination -Uplifting [__start] best 51978 combination +Uplifting [ppuDataTransfer] best 52188 combination zp[2]:13 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] zp[2]:15 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$0 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$1 ] zp[2]:9 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] zp[2]:11 [ ppuDataTransfer::cpuData#2 ] +Uplifting [rand] best 52188 combination zp[2]:68 [ rand::$0 ] zp[2]:72 [ rand::$1 ] zp[2]:76 [ rand::$2 ] zp[2]:78 [ rand::return#0 ] zp[2]:51 [ rand::return#2 ] zp[2]:58 [ rand::return#3 ] +Uplifting [] best 52188 combination zp[2]:70 [ rand_state#0 ] zp[2]:74 [ rand_state#1 ] zp[2]:23 [ rand_state#10 rand_state#17 rand_state#11 ] zp[1]:25 [ scroll_y ] zp[1]:26 [ vblank_hit ] +Uplifting [ppuDataFill] best 52176 combination zp[2]:21 [ ppuDataFill::i#2 ppuDataFill::i#1 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] zp[2]:19 [ ppuDataFill::size#3 ] zp[2]:17 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] +Uplifting [RICOH_2C02] best 52176 combination +Uplifting [RICOH_2A03] best 52176 combination +Uplifting [SpriteData] best 52176 combination +Uplifting [RADIX] best 52176 combination +Uplifting [printf_format_number] best 52176 combination +Uplifting [printf_buffer_number] best 52176 combination +Uplifting [printf_format_string] best 52176 combination +Uplifting [$0] best 52176 combination +Uplifting [vblank] best 52176 combination +Uplifting [__start] best 52176 combination Attempting to uplift remaining variables inzp[1]:7 [ main::i#10 main::i#4 ] -Uplifting [main] best 51978 combination zp[1]:7 [ main::i#10 main::i#4 ] +Uplifting [main] best 52176 combination zp[1]:7 [ main::i#10 main::i#4 ] Attempting to uplift remaining variables inzp[1]:8 [ main::sprite_idx#3 main::sprite_idx#2 ] -Uplifting [main] best 51978 combination zp[1]:8 [ main::sprite_idx#3 main::sprite_idx#2 ] +Uplifting [main] best 52176 combination zp[1]:8 [ main::sprite_idx#3 main::sprite_idx#2 ] Attempting to uplift remaining variables inzp[1]:40 [ main::$26 ] -Uplifting [main] best 51978 combination zp[1]:40 [ main::$26 ] +Uplifting [main] best 52176 combination zp[1]:40 [ main::$26 ] Attempting to uplift remaining variables inzp[1]:41 [ main::$30 ] -Uplifting [main] best 51378 combination reg byte a [ main::$30 ] +Uplifting [main] best 51576 combination reg byte a [ main::$30 ] Attempting to uplift remaining variables inzp[1]:48 [ main::$48 ] -Uplifting [main] best 50078 combination reg byte x [ main::$48 ] +Uplifting [main] best 50276 combination reg byte x [ main::$48 ] Attempting to uplift remaining variables inzp[1]:33 [ main::$44 ] -Uplifting [main] best 46678 combination reg byte y [ main::$44 ] +Uplifting [main] best 46876 combination reg byte y [ main::$44 ] Attempting to uplift remaining variables inzp[1]:6 [ main::timer#3 main::timer#15 main::timer#21 ] -Uplifting [main] best 46678 combination zp[1]:6 [ main::timer#3 main::timer#15 main::timer#21 ] +Uplifting [main] best 46876 combination zp[1]:6 [ main::timer#3 main::timer#15 main::timer#21 ] Attempting to uplift remaining variables inzp[1]:2 [ main::initNES1_i#2 main::initNES1_i#1 ] -Uplifting [main] best 46348 combination reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] +Uplifting [main] best 46546 combination reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] Attempting to uplift remaining variables inzp[1]:3 [ main::i#14 main::i#2 ] -Uplifting [main] best 46248 combination reg byte x [ main::i#14 main::i#2 ] +Uplifting [main] best 46446 combination reg byte x [ main::i#14 main::i#2 ] Attempting to uplift remaining variables inzp[1]:4 [ main::timer_2#2 main::timer_2#1 ] -Uplifting [main] best 46248 combination zp[1]:4 [ main::timer_2#2 main::timer_2#1 ] +Uplifting [main] best 46446 combination zp[1]:4 [ main::timer_2#2 main::timer_2#1 ] Attempting to uplift remaining variables inzp[1]:27 [ main::initNES1_waitForVBlank1_$0 ] -Uplifting [main] best 46188 combination reg byte a [ main::initNES1_waitForVBlank1_$0 ] +Uplifting [main] best 46386 combination reg byte a [ main::initNES1_waitForVBlank1_$0 ] Attempting to uplift remaining variables inzp[1]:28 [ main::initNES1_waitForVBlank2_$0 ] -Uplifting [main] best 46128 combination reg byte a [ main::initNES1_waitForVBlank2_$0 ] +Uplifting [main] best 46326 combination reg byte a [ main::initNES1_waitForVBlank2_$0 ] Attempting to uplift remaining variables inzp[1]:30 [ main::$14 ] -Uplifting [main] best 46068 combination reg byte a [ main::$14 ] +Uplifting [main] best 46266 combination reg byte a [ main::$14 ] Attempting to uplift remaining variables inzp[1]:62 [ main::$12 ] -Uplifting [main] best 46008 combination reg byte a [ main::$12 ] +Uplifting [main] best 46206 combination reg byte a [ main::$12 ] Attempting to uplift remaining variables inzp[1]:5 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] -Uplifting [main] best 46008 combination zp[1]:5 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] +Uplifting [main] best 46206 combination zp[1]:5 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] Attempting to uplift remaining variables inzp[1]:32 [ main::$38 ] -Uplifting [main] best 45938 combination reg byte x [ main::$38 ] +Uplifting [main] best 46136 combination reg byte x [ main::$38 ] Attempting to uplift remaining variables inzp[1]:25 [ scroll_y ] -Uplifting [] best 45938 combination zp[1]:25 [ scroll_y ] +Uplifting [] best 46136 combination zp[1]:25 [ scroll_y ] Attempting to uplift remaining variables inzp[1]:31 [ main::timer#1 ] -Uplifting [main] best 45878 combination reg byte x [ main::timer#1 ] +Uplifting [main] best 46076 combination reg byte x [ main::timer#1 ] Attempting to uplift remaining variables inzp[1]:29 [ main::h_bar#1 ] -Uplifting [main] best 45878 combination zp[1]:29 [ main::h_bar#1 ] +Uplifting [main] best 46076 combination zp[1]:29 [ main::h_bar#1 ] Attempting to uplift remaining variables inzp[1]:57 [ main::$36 ] -Uplifting [main] best 45808 combination reg byte y [ main::$36 ] +Uplifting [main] best 46006 combination reg byte y [ main::$36 ] Attempting to uplift remaining variables inzp[1]:26 [ vblank_hit ] -Uplifting [] best 45808 combination zp[1]:26 [ vblank_hit ] +Uplifting [] best 46006 combination zp[1]:26 [ vblank_hit ] Coalescing zero page register [ zp[2]:11 [ ppuDataTransfer::cpuData#2 ] ] with [ zp[2]:15 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] ] - score: 1 Coalescing zero page register [ zp[2]:23 [ rand_state#10 rand_state#17 rand_state#11 ] ] with [ zp[2]:70 [ rand_state#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:23 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 ] ] with [ zp[2]:74 [ rand_state#1 ] ] - score: 1 @@ -2658,6 +2658,7 @@ Allocated (was zp[2]:51) zp[2]:25 [ rand::return#2 main::$9 rand::return#0 main: Allocated (was zp[2]:68) zp[2]:27 [ rand::$0 ] Allocated (was zp[2]:72) zp[2]:29 [ rand::$1 ] Allocated (was zp[2]:76) zp[2]:31 [ rand::$2 ] +Interrupt procedure vblank clobbers AnzP ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -2672,6 +2673,7 @@ ASSEMBLER BEFORE OPTIMIZATION // http://nesdev.com/2C02%20technical%20reference.TXT // Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018. // Upstart +.cpu _6502 // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html // https://forums.nesdev.com/viewtopic.php?f=2&t=9896 @@ -2775,11 +2777,7 @@ __start: { // vblank // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) vblank: { - // entry interrupt(HARDWARE_STACK) - pha - txa - pha - tya + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry pha // [6] *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) = 0 -- _deref_pbuc1=vbuc2 // Set scroll @@ -2805,11 +2803,8 @@ vblank: { jmp __breturn // vblank::@return __breturn: - // [11] return - exit interrupt(HARDWARE_STACK) - pla - tay - pla - tax + // [11] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit pla rti } @@ -3765,8 +3760,8 @@ Removing instruction jmp __b5 Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [219] bcc __b2 to bcs -Fixing long branch [243] bne __b25 to beq +Fixing long branch [212] bcc __b2 to bcs +Fixing long branch [236] bne __b25 to beq FINAL SYMBOL TABLE const struct RICOH_2A03* APU = (struct RICOH_2A03*) 16384 @@ -3895,7 +3890,7 @@ word rand_state#11 rand_state zp[2]:7 146.93333333333334 word rand_state#17 rand_state zp[2]:7 67.33333333333333 volatile byte scroll_y loadstore zp[1]:9 105.0 const to_nomodify byte* sine_table[$100] = { $40, $42, $43, $45, $46, $48, $49, $4b, $4c, $4e, $50, $51, $53, $54, $56, $57, $58, $5a, $5b, $5d, $5e, $60, $61, $62, $64, $65, $66, $67, $69, $6a, $6b, $6c, $6d, $6e, $6f, $70, $71, $72, $73, $74, $75, $76, $77, $78, $78, $79, $7a, $7b, $7b, $7c, $7c, $7d, $7d, $7e, $7e, $7e, $7f, $7f, $7f, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $7f, $7f, $7f, $7e, $7e, $7e, $7d, $7d, $7c, $7c, $7b, $7b, $7a, $79, $78, $78, $77, $76, $75, $74, $73, $72, $71, $70, $6f, $6e, $6d, $6c, $6b, $6a, $69, $67, $66, $65, $64, $62, $61, $60, $5e, $5d, $5b, $5a, $58, $57, $56, $54, $53, $51, $50, $4e, $4c, $4b, $49, $48, $46, $45, $43, $42, $40, $3e, $3d, $3b, $3a, $38, $37, $35, $34, $32, $30, $2f, $2d, $2c, $2a, $29, $28, $26, $25, $23, $22, $20, $1f, $1e, $1c, $1b, $1a, $19, $17, $16, $15, $14, $13, $12, $11, $10, $f, $e, $d, $c, $b, $a, 9, 8, 8, 7, 6, 5, 5, 4, 4, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 8, 9, $a, $b, $c, $d, $e, $f, $10, $11, $12, $13, $14, $15, $16, $17, $19, $1a, $1b, $1c, $1e, $1f, $20, $22, $23, $25, $26, $28, $29, $2a, $2c, $2d, $2f, $30, $32, $34, $35, $37, $38, $3a, $3b, $3d, $3e } -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_clobber) void vblank() struct SpriteData* vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer volatile byte vblank_hit loadstore zp[1]:10 10.757281553398059 @@ -3939,7 +3934,7 @@ zp[2]:31 [ rand::$2 ] FINAL ASSEMBLER -Score: 41003 +Score: 40981 // File Comments //#pragma emulator("java -jar /Applications/Nintaco_bin_2020-05-01/Nintaco.jar") @@ -3953,6 +3948,7 @@ Score: 41003 // http://nesdev.com/2C02%20technical%20reference.TXT // Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018. // Upstart +.cpu _6502 // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html // https://forums.nesdev.com/viewtopic.php?f=2&t=9896 @@ -4049,11 +4045,7 @@ __start: { // vblank // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) vblank: { - // entry interrupt(HARDWARE_STACK) - pha - txa - pha - tya + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry pha // PPU->PPUSCROLL = 0 // [6] *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) = 0 -- _deref_pbuc1=vbuc2 @@ -4079,11 +4071,8 @@ vblank: { inc.z vblank_hit // vblank::@return // } - // [11] return - exit interrupt(HARDWARE_STACK) - pla - tay - pla - tax + // [11] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit pla rti } diff --git a/src/test/ref/complex/nes-balls/kickballs-2.sym b/src/test/ref/complex/nes-balls/kickballs-2.sym index 84ab5e4ed..879be7d8b 100644 --- a/src/test/ref/complex/nes-balls/kickballs-2.sym +++ b/src/test/ref/complex/nes-balls/kickballs-2.sym @@ -124,7 +124,7 @@ word rand_state#11 rand_state zp[2]:7 146.93333333333334 word rand_state#17 rand_state zp[2]:7 67.33333333333333 volatile byte scroll_y loadstore zp[1]:9 105.0 const to_nomodify byte* sine_table[$100] = { $40, $42, $43, $45, $46, $48, $49, $4b, $4c, $4e, $50, $51, $53, $54, $56, $57, $58, $5a, $5b, $5d, $5e, $60, $61, $62, $64, $65, $66, $67, $69, $6a, $6b, $6c, $6d, $6e, $6f, $70, $71, $72, $73, $74, $75, $76, $77, $78, $78, $79, $7a, $7b, $7b, $7c, $7c, $7d, $7d, $7e, $7e, $7e, $7f, $7f, $7f, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $7f, $7f, $7f, $7e, $7e, $7e, $7d, $7d, $7c, $7c, $7b, $7b, $7a, $79, $78, $78, $77, $76, $75, $74, $73, $72, $71, $70, $6f, $6e, $6d, $6c, $6b, $6a, $69, $67, $66, $65, $64, $62, $61, $60, $5e, $5d, $5b, $5a, $58, $57, $56, $54, $53, $51, $50, $4e, $4c, $4b, $49, $48, $46, $45, $43, $42, $40, $3e, $3d, $3b, $3a, $38, $37, $35, $34, $32, $30, $2f, $2d, $2c, $2a, $29, $28, $26, $25, $23, $22, $20, $1f, $1e, $1c, $1b, $1a, $19, $17, $16, $15, $14, $13, $12, $11, $10, $f, $e, $d, $c, $b, $a, 9, 8, 8, 7, 6, 5, 5, 4, 4, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 8, 9, $a, $b, $c, $d, $e, $f, $10, $11, $12, $13, $14, $15, $16, $17, $19, $1a, $1b, $1c, $1e, $1f, $20, $22, $23, $25, $26, $28, $29, $2a, $2c, $2d, $2f, $30, $32, $34, $35, $37, $38, $3a, $3b, $3d, $3e } -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_clobber) void vblank() struct SpriteData* vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer volatile byte vblank_hit loadstore zp[1]:10 10.757281553398059 diff --git a/src/test/ref/complex/nes-balls/kickballs-3.asm b/src/test/ref/complex/nes-balls/kickballs-3.asm index 1c7744894..17e0d6def 100644 --- a/src/test/ref/complex/nes-balls/kickballs-3.asm +++ b/src/test/ref/complex/nes-balls/kickballs-3.asm @@ -1,3 +1,4 @@ +.cpu _6502 // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html // https://forums.nesdev.com/viewtopic.php?f=2&t=9896 @@ -82,10 +83,6 @@ __start: { } // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) vblank: { - pha - txa - pha - tya pha // PPU->PPUSCROLL = 0 // Set scroll @@ -104,10 +101,6 @@ vblank: { inc.z vblank_hit // } pla - tay - pla - tax - pla rti } main: { diff --git a/src/test/ref/complex/nes-balls/kickballs-3.cfg b/src/test/ref/complex/nes-balls/kickballs-3.cfg index c586ef2e4..65d67ae84 100644 --- a/src/test/ref/complex/nes-balls/kickballs-3.cfg +++ b/src/test/ref/complex/nes-balls/kickballs-3.cfg @@ -15,7 +15,7 @@ __start::@return: scope:[__start] from __start::@1 [5] return to:@return -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_clobber) void vblank() vblank: scope:[vblank] from [6] *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) = 0 [7] *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) = scroll_y diff --git a/src/test/ref/complex/nes-balls/kickballs-3.log b/src/test/ref/complex/nes-balls/kickballs-3.log index 114161783..2baa0483f 100644 --- a/src/test/ref/complex/nes-balls/kickballs-3.log +++ b/src/test/ref/complex/nes-balls/kickballs-3.log @@ -560,7 +560,7 @@ main::@return: scope:[main] from main::@5 return to:@return -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_clobber) void vblank() vblank: scope:[vblank] from vblank::$3 = (byte*)PPU vblank::$1 = vblank::$3 + OFFSET_STRUCT_RICOH_2C02_PPUSCROLL @@ -1023,7 +1023,7 @@ word rand_state#8 word rand_state#9 volatile byte scroll_y loadstore const to_nomodify byte* sine_table[$100] = { $40, $42, $43, $45, $46, $48, $49, $4b, $4c, $4e, $50, $51, $53, $54, $56, $57, $58, $5a, $5b, $5d, $5e, $60, $61, $62, $64, $65, $66, $67, $69, $6a, $6b, $6c, $6d, $6e, $6f, $70, $71, $72, $73, $74, $75, $76, $77, $78, $78, $79, $7a, $7b, $7b, $7c, $7c, $7d, $7d, $7e, $7e, $7e, $7f, $7f, $7f, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $7f, $7f, $7f, $7e, $7e, $7e, $7d, $7d, $7c, $7c, $7b, $7b, $7a, $79, $78, $78, $77, $76, $75, $74, $73, $72, $71, $70, $6f, $6e, $6d, $6c, $6b, $6a, $69, $67, $66, $65, $64, $62, $61, $60, $5e, $5d, $5b, $5a, $58, $57, $56, $54, $53, $51, $50, $4e, $4c, $4b, $49, $48, $46, $45, $43, $42, $40, $3e, $3d, $3b, $3a, $38, $37, $35, $34, $32, $30, $2f, $2d, $2c, $2a, $29, $28, $26, $25, $23, $22, $20, $1f, $1e, $1c, $1b, $1a, $19, $17, $16, $15, $14, $13, $12, $11, $10, $f, $e, $d, $c, $b, $a, 9, 8, 8, 7, 6, 5, 5, 4, 4, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 8, 9, $a, $b, $c, $d, $e, $f, $10, $11, $12, $13, $14, $15, $16, $17, $19, $1a, $1b, $1c, $1e, $1f, $20, $22, $23, $25, $26, $28, $29, $2a, $2c, $2d, $2f, $30, $32, $34, $35, $37, $38, $3a, $3b, $3d, $3e } -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_clobber) void vblank() byte*~ vblank::$1 byte*~ vblank::$2 byte*~ vblank::$3 @@ -1869,7 +1869,7 @@ __start::@return: scope:[__start] from __start::@1 [5] return to:@return -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_clobber) void vblank() vblank: scope:[vblank] from [6] *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) = 0 [7] *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) = scroll_y @@ -2248,7 +2248,7 @@ word rand_state#10 1102.0 word rand_state#11 129.64705882352942 word rand_state#17 67.33333333333333 volatile byte scroll_y loadstore 105.0 -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_clobber) void vblank() struct SpriteData* vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer volatile byte vblank_hit loadstore 9.981981981981983 @@ -2708,48 +2708,48 @@ Uplift Scope [$0] Uplift Scope [vblank] Uplift Scope [__start] -Uplifting [main] best 70612 combination zp[2]:45 [ main::$71 ] zp[2]:41 [ main::$63 ] zp[2]:9 [ main::i#10 main::i#4 ] zp[2]:43 [ main::$20 ] zp[2]:57 [ main::$78 ] zp[2]:59 [ main::$31 ] zp[2]:47 [ main::$69 ] zp[1]:11 [ main::sprite_idx#3 main::sprite_idx#2 ] zp[1]:53 [ main::$26 ] reg byte a [ main::$30 ] reg byte x [ main::$48 ] zp[2]:66 [ main::$33 ] zp[2]:54 [ main::$76 ] zp[2]:49 [ main::$23 ] zp[2]:51 [ main::$25 ] zp[2]:61 [ main::$73 ] zp[2]:63 [ main::$32 ] zp[2]:39 [ main::$44 ] zp[1]:8 [ main::timer#3 main::timer#15 main::timer#21 ] zp[1]:2 [ main::initNES1_i#2 main::initNES1_i#1 ] zp[2]:3 [ main::i#14 main::i#2 ] zp[1]:5 [ main::timer_2#2 main::timer_2#1 ] zp[1]:30 [ main::initNES1_waitForVBlank1_$0 ] zp[1]:31 [ main::initNES1_waitForVBlank2_$0 ] zp[1]:33 [ main::$14 ] zp[2]:35 [ main::$38 ] zp[2]:70 [ main::$9 ] zp[2]:76 [ main::$55 ] zp[2]:80 [ main::$11 ] zp[2]:83 [ main::$56 ] zp[2]:6 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] zp[2]:37 [ main::$58 ] zp[1]:34 [ main::timer#1 ] zp[1]:82 [ main::$12 ] zp[1]:32 [ main::h_bar#1 ] zp[2]:72 [ main::$10 ] zp[2]:74 [ main::$36 ] +Uplifting [main] best 70810 combination zp[2]:45 [ main::$71 ] zp[2]:41 [ main::$63 ] zp[2]:9 [ main::i#10 main::i#4 ] zp[2]:43 [ main::$20 ] zp[2]:57 [ main::$78 ] zp[2]:59 [ main::$31 ] zp[2]:47 [ main::$69 ] zp[1]:11 [ main::sprite_idx#3 main::sprite_idx#2 ] zp[1]:53 [ main::$26 ] reg byte a [ main::$30 ] reg byte x [ main::$48 ] zp[2]:66 [ main::$33 ] zp[2]:54 [ main::$76 ] zp[2]:49 [ main::$23 ] zp[2]:51 [ main::$25 ] zp[2]:61 [ main::$73 ] zp[2]:63 [ main::$32 ] zp[2]:39 [ main::$44 ] zp[1]:8 [ main::timer#3 main::timer#15 main::timer#21 ] zp[1]:2 [ main::initNES1_i#2 main::initNES1_i#1 ] zp[2]:3 [ main::i#14 main::i#2 ] zp[1]:5 [ main::timer_2#2 main::timer_2#1 ] zp[1]:30 [ main::initNES1_waitForVBlank1_$0 ] zp[1]:31 [ main::initNES1_waitForVBlank2_$0 ] zp[1]:33 [ main::$14 ] zp[2]:35 [ main::$38 ] zp[2]:70 [ main::$9 ] zp[2]:76 [ main::$55 ] zp[2]:80 [ main::$11 ] zp[2]:83 [ main::$56 ] zp[2]:6 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] zp[2]:37 [ main::$58 ] zp[1]:34 [ main::timer#1 ] zp[1]:82 [ main::$12 ] zp[1]:32 [ main::h_bar#1 ] zp[2]:72 [ main::$10 ] zp[2]:74 [ main::$36 ] Limited combination testing to 100 combinations of 884736 possible. -Uplifting [ppuDataTransfer] best 70540 combination zp[2]:16 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] zp[2]:18 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$0 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$1 ] zp[2]:12 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] zp[2]:14 [ ppuDataTransfer::cpuData#2 ] -Uplifting [rand] best 70540 combination zp[2]:90 [ rand::$0 ] zp[2]:94 [ rand::$1 ] zp[2]:98 [ rand::$2 ] zp[2]:100 [ rand::return#0 ] zp[2]:68 [ rand::return#2 ] zp[2]:78 [ rand::return#3 ] -Uplifting [] best 70540 combination zp[2]:92 [ rand_state#0 ] zp[2]:96 [ rand_state#1 ] zp[2]:26 [ rand_state#10 rand_state#17 rand_state#11 ] zp[1]:28 [ scroll_y ] zp[1]:29 [ vblank_hit ] -Uplifting [ppuDataFill] best 70528 combination zp[2]:24 [ ppuDataFill::i#2 ppuDataFill::i#1 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] zp[2]:22 [ ppuDataFill::size#3 ] zp[2]:20 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] -Uplifting [RICOH_2C02] best 70528 combination -Uplifting [RICOH_2A03] best 70528 combination -Uplifting [SpriteData] best 70528 combination -Uplifting [RADIX] best 70528 combination -Uplifting [printf_format_number] best 70528 combination -Uplifting [printf_buffer_number] best 70528 combination -Uplifting [printf_format_string] best 70528 combination -Uplifting [$0] best 70528 combination -Uplifting [vblank] best 70528 combination -Uplifting [__start] best 70528 combination +Uplifting [ppuDataTransfer] best 70738 combination zp[2]:16 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] zp[2]:18 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$0 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$1 ] zp[2]:12 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] zp[2]:14 [ ppuDataTransfer::cpuData#2 ] +Uplifting [rand] best 70738 combination zp[2]:90 [ rand::$0 ] zp[2]:94 [ rand::$1 ] zp[2]:98 [ rand::$2 ] zp[2]:100 [ rand::return#0 ] zp[2]:68 [ rand::return#2 ] zp[2]:78 [ rand::return#3 ] +Uplifting [] best 70738 combination zp[2]:92 [ rand_state#0 ] zp[2]:96 [ rand_state#1 ] zp[2]:26 [ rand_state#10 rand_state#17 rand_state#11 ] zp[1]:28 [ scroll_y ] zp[1]:29 [ vblank_hit ] +Uplifting [ppuDataFill] best 70726 combination zp[2]:24 [ ppuDataFill::i#2 ppuDataFill::i#1 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] zp[2]:22 [ ppuDataFill::size#3 ] zp[2]:20 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] +Uplifting [RICOH_2C02] best 70726 combination +Uplifting [RICOH_2A03] best 70726 combination +Uplifting [SpriteData] best 70726 combination +Uplifting [RADIX] best 70726 combination +Uplifting [printf_format_number] best 70726 combination +Uplifting [printf_buffer_number] best 70726 combination +Uplifting [printf_format_string] best 70726 combination +Uplifting [$0] best 70726 combination +Uplifting [vblank] best 70726 combination +Uplifting [__start] best 70726 combination Attempting to uplift remaining variables inzp[1]:11 [ main::sprite_idx#3 main::sprite_idx#2 ] -Uplifting [main] best 70528 combination zp[1]:11 [ main::sprite_idx#3 main::sprite_idx#2 ] +Uplifting [main] best 70726 combination zp[1]:11 [ main::sprite_idx#3 main::sprite_idx#2 ] Attempting to uplift remaining variables inzp[1]:53 [ main::$26 ] -Uplifting [main] best 70528 combination zp[1]:53 [ main::$26 ] +Uplifting [main] best 70726 combination zp[1]:53 [ main::$26 ] Attempting to uplift remaining variables inzp[1]:8 [ main::timer#3 main::timer#15 main::timer#21 ] -Uplifting [main] best 70528 combination zp[1]:8 [ main::timer#3 main::timer#15 main::timer#21 ] +Uplifting [main] best 70726 combination zp[1]:8 [ main::timer#3 main::timer#15 main::timer#21 ] Attempting to uplift remaining variables inzp[1]:2 [ main::initNES1_i#2 main::initNES1_i#1 ] -Uplifting [main] best 70198 combination reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] +Uplifting [main] best 70396 combination reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] Attempting to uplift remaining variables inzp[1]:5 [ main::timer_2#2 main::timer_2#1 ] -Uplifting [main] best 70198 combination zp[1]:5 [ main::timer_2#2 main::timer_2#1 ] +Uplifting [main] best 70396 combination zp[1]:5 [ main::timer_2#2 main::timer_2#1 ] Attempting to uplift remaining variables inzp[1]:30 [ main::initNES1_waitForVBlank1_$0 ] -Uplifting [main] best 70138 combination reg byte a [ main::initNES1_waitForVBlank1_$0 ] +Uplifting [main] best 70336 combination reg byte a [ main::initNES1_waitForVBlank1_$0 ] Attempting to uplift remaining variables inzp[1]:31 [ main::initNES1_waitForVBlank2_$0 ] -Uplifting [main] best 70078 combination reg byte a [ main::initNES1_waitForVBlank2_$0 ] +Uplifting [main] best 70276 combination reg byte a [ main::initNES1_waitForVBlank2_$0 ] Attempting to uplift remaining variables inzp[1]:33 [ main::$14 ] -Uplifting [main] best 70018 combination reg byte a [ main::$14 ] +Uplifting [main] best 70216 combination reg byte a [ main::$14 ] Attempting to uplift remaining variables inzp[1]:28 [ scroll_y ] -Uplifting [] best 70018 combination zp[1]:28 [ scroll_y ] +Uplifting [] best 70216 combination zp[1]:28 [ scroll_y ] Attempting to uplift remaining variables inzp[1]:34 [ main::timer#1 ] -Uplifting [main] best 69958 combination reg byte x [ main::timer#1 ] +Uplifting [main] best 70156 combination reg byte x [ main::timer#1 ] Attempting to uplift remaining variables inzp[1]:82 [ main::$12 ] -Uplifting [main] best 69938 combination reg byte x [ main::$12 ] +Uplifting [main] best 70136 combination reg byte x [ main::$12 ] Attempting to uplift remaining variables inzp[1]:32 [ main::h_bar#1 ] -Uplifting [main] best 69938 combination zp[1]:32 [ main::h_bar#1 ] +Uplifting [main] best 70136 combination zp[1]:32 [ main::h_bar#1 ] Attempting to uplift remaining variables inzp[1]:29 [ vblank_hit ] -Uplifting [] best 69938 combination zp[1]:29 [ vblank_hit ] +Uplifting [] best 70136 combination zp[1]:29 [ vblank_hit ] Coalescing zero page register [ zp[2]:14 [ ppuDataTransfer::cpuData#2 ] ] with [ zp[2]:18 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] ] - score: 1 Coalescing zero page register [ zp[2]:26 [ rand_state#10 rand_state#17 rand_state#11 ] ] with [ zp[2]:92 [ rand_state#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:26 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 ] ] with [ zp[2]:96 [ rand_state#1 ] ] - score: 1 @@ -2797,10 +2797,12 @@ Allocated (was zp[2]:76) zp[2]:39 [ main::$55 ] Allocated (was zp[2]:90) zp[2]:41 [ rand::$0 ] Allocated (was zp[2]:94) zp[2]:43 [ rand::$1 ] Allocated (was zp[2]:98) zp[2]:45 [ rand::$2 ] +Interrupt procedure vblank clobbers AnzP ASSEMBLER BEFORE OPTIMIZATION // File Comments // Upstart +.cpu _6502 // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html // https://forums.nesdev.com/viewtopic.php?f=2&t=9896 @@ -2904,11 +2906,7 @@ __start: { // vblank // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) vblank: { - // entry interrupt(HARDWARE_STACK) - pha - txa - pha - tya + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry pha // [6] *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) = 0 -- _deref_pbuc1=vbuc2 // Set scroll @@ -2934,11 +2932,8 @@ vblank: { jmp __breturn // vblank::@return __breturn: - // [11] return - exit interrupt(HARDWARE_STACK) - pla - tay - pla - tax + // [11] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit pla rti } @@ -4054,8 +4049,8 @@ Removing instruction jmp __b5 Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [225] bcc __b2 to bcs -Fixing long branch [254] bne __b25 to beq +Fixing long branch [218] bcc __b2 to bcs +Fixing long branch [247] bne __b25 to beq FINAL SYMBOL TABLE const struct RICOH_2A03* APU = (struct RICOH_2A03*) 16384 @@ -4192,7 +4187,7 @@ word rand_state#11 rand_state zp[2]:11 129.64705882352942 word rand_state#17 rand_state zp[2]:11 67.33333333333333 volatile byte scroll_y loadstore zp[1]:13 105.0 const to_nomodify byte* sine_table[$100] = { $40, $42, $43, $45, $46, $48, $49, $4b, $4c, $4e, $50, $51, $53, $54, $56, $57, $58, $5a, $5b, $5d, $5e, $60, $61, $62, $64, $65, $66, $67, $69, $6a, $6b, $6c, $6d, $6e, $6f, $70, $71, $72, $73, $74, $75, $76, $77, $78, $78, $79, $7a, $7b, $7b, $7c, $7c, $7d, $7d, $7e, $7e, $7e, $7f, $7f, $7f, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $7f, $7f, $7f, $7e, $7e, $7e, $7d, $7d, $7c, $7c, $7b, $7b, $7a, $79, $78, $78, $77, $76, $75, $74, $73, $72, $71, $70, $6f, $6e, $6d, $6c, $6b, $6a, $69, $67, $66, $65, $64, $62, $61, $60, $5e, $5d, $5b, $5a, $58, $57, $56, $54, $53, $51, $50, $4e, $4c, $4b, $49, $48, $46, $45, $43, $42, $40, $3e, $3d, $3b, $3a, $38, $37, $35, $34, $32, $30, $2f, $2d, $2c, $2a, $29, $28, $26, $25, $23, $22, $20, $1f, $1e, $1c, $1b, $1a, $19, $17, $16, $15, $14, $13, $12, $11, $10, $f, $e, $d, $c, $b, $a, 9, 8, 8, 7, 6, 5, 5, 4, 4, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 8, 9, $a, $b, $c, $d, $e, $f, $10, $11, $12, $13, $14, $15, $16, $17, $19, $1a, $1b, $1c, $1e, $1f, $20, $22, $23, $25, $26, $28, $29, $2a, $2c, $2d, $2f, $30, $32, $34, $35, $37, $38, $3a, $3b, $3d, $3e } -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_clobber) void vblank() struct SpriteData* vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer volatile byte vblank_hit loadstore zp[1]:14 9.981981981981983 @@ -4238,10 +4233,11 @@ zp[2]:45 [ rand::$2 ] FINAL ASSEMBLER -Score: 64793 +Score: 64771 // File Comments // Upstart +.cpu _6502 // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html // https://forums.nesdev.com/viewtopic.php?f=2&t=9896 @@ -4338,11 +4334,7 @@ __start: { // vblank // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) vblank: { - // entry interrupt(HARDWARE_STACK) - pha - txa - pha - tya + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry pha // PPU->PPUSCROLL = 0 // [6] *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) = 0 -- _deref_pbuc1=vbuc2 @@ -4368,11 +4360,8 @@ vblank: { inc.z vblank_hit // vblank::@return // } - // [11] return - exit interrupt(HARDWARE_STACK) - pla - tay - pla - tax + // [11] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit pla rti } diff --git a/src/test/ref/complex/nes-balls/kickballs-3.sym b/src/test/ref/complex/nes-balls/kickballs-3.sym index f360dddfb..ceb0df180 100644 --- a/src/test/ref/complex/nes-balls/kickballs-3.sym +++ b/src/test/ref/complex/nes-balls/kickballs-3.sym @@ -132,7 +132,7 @@ word rand_state#11 rand_state zp[2]:11 129.64705882352942 word rand_state#17 rand_state zp[2]:11 67.33333333333333 volatile byte scroll_y loadstore zp[1]:13 105.0 const to_nomodify byte* sine_table[$100] = { $40, $42, $43, $45, $46, $48, $49, $4b, $4c, $4e, $50, $51, $53, $54, $56, $57, $58, $5a, $5b, $5d, $5e, $60, $61, $62, $64, $65, $66, $67, $69, $6a, $6b, $6c, $6d, $6e, $6f, $70, $71, $72, $73, $74, $75, $76, $77, $78, $78, $79, $7a, $7b, $7b, $7c, $7c, $7d, $7d, $7e, $7e, $7e, $7f, $7f, $7f, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80, $7f, $7f, $7f, $7e, $7e, $7e, $7d, $7d, $7c, $7c, $7b, $7b, $7a, $79, $78, $78, $77, $76, $75, $74, $73, $72, $71, $70, $6f, $6e, $6d, $6c, $6b, $6a, $69, $67, $66, $65, $64, $62, $61, $60, $5e, $5d, $5b, $5a, $58, $57, $56, $54, $53, $51, $50, $4e, $4c, $4b, $49, $48, $46, $45, $43, $42, $40, $3e, $3d, $3b, $3a, $38, $37, $35, $34, $32, $30, $2f, $2d, $2c, $2a, $29, $28, $26, $25, $23, $22, $20, $1f, $1e, $1c, $1b, $1a, $19, $17, $16, $15, $14, $13, $12, $11, $10, $f, $e, $d, $c, $b, $a, 9, 8, 8, 7, 6, 5, 5, 4, 4, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 8, 9, $a, $b, $c, $d, $e, $f, $10, $11, $12, $13, $14, $15, $16, $17, $19, $1a, $1b, $1c, $1e, $1f, $20, $22, $23, $25, $26, $28, $29, $2a, $2c, $2d, $2f, $30, $32, $34, $35, $37, $38, $3a, $3b, $3d, $3e } -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_clobber) void vblank() struct SpriteData* vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer volatile byte vblank_hit loadstore zp[1]:14 9.981981981981983 diff --git a/src/test/ref/complex/polygon/polygon.cfg b/src/test/ref/complex/polygon/polygon.cfg index f47bfbb7c..7f7f6efb0 100644 --- a/src/test/ref/complex/polygon/polygon.cfg +++ b/src/test/ref/complex/polygon/polygon.cfg @@ -21,7 +21,7 @@ __start::@return: scope:[__start] from __start::@1 [7] return to:@return -interrupt(KERNEL_KEYBOARD) void irq_bottom_2() +__interrupt(rom_sys_c64) void irq_bottom_2() irq_bottom_2: scope:[irq_bottom_2] from [8] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [9] call kbhit @@ -50,7 +50,7 @@ irq_bottom_2::@1: scope:[irq_bottom_2] from irq_bottom_2::@4 [20] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_MEMORY) = canvas_show_memory to:irq_bottom_2::@2 -interrupt(KERNEL_MIN) void irq_bottom_1() +__interrupt(rom_min_c64) void irq_bottom_1() irq_bottom_1: scope:[irq_bottom_1] from [21] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = DARK_GREY to:irq_bottom_1::toD0181 diff --git a/src/test/ref/complex/polygon/polygon.log b/src/test/ref/complex/polygon/polygon.log index cdc32d765..1ebb77f36 100644 --- a/src/test/ref/complex/polygon/polygon.log +++ b/src/test/ref/complex/polygon/polygon.log @@ -1,5 +1,5 @@ -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() +Resolved forward reference irq_bottom_1 to __interrupt(rom_min_c64) void irq_bottom_1() +Resolved forward reference irq_bottom_2 to __interrupt(rom_sys_c64) void irq_bottom_2() Fixing struct type size struct printf_buffer_number to 12 Fixing struct type size struct printf_buffer_number to 12 Fixing struct type SIZE_OF struct printf_buffer_number to 12 @@ -458,7 +458,7 @@ setup_irq::@return: scope:[setup_irq] from setup_irq return to:@return -interrupt(KERNEL_MIN) void irq_bottom_1() +__interrupt(rom_min_c64) void irq_bottom_1() irq_bottom_1: scope:[irq_bottom_1] from *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = DARK_GREY irq_bottom_1::toD0181_screen#0 = CONSOLE @@ -493,7 +493,7 @@ irq_bottom_1::@return: scope:[irq_bottom_1] from irq_bottom_1::@1 return to:@return -interrupt(KERNEL_KEYBOARD) void irq_bottom_2() +__interrupt(rom_sys_c64) void irq_bottom_2() irq_bottom_2: scope:[irq_bottom_2] from *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK call kbhit @@ -1256,7 +1256,7 @@ byte gotoxy::y byte gotoxy::y#0 byte gotoxy::y#1 byte gotoxy::y#2 -interrupt(KERNEL_MIN) void irq_bottom_1() +__interrupt(rom_min_c64) void irq_bottom_1() byte~ irq_bottom_1::$0 number~ irq_bottom_1::toD0181_$0 number~ irq_bottom_1::toD0181_$1 @@ -1277,7 +1277,7 @@ byte irq_bottom_1::toD0181_return#3 byte* irq_bottom_1::toD0181_screen byte* irq_bottom_1::toD0181_screen#0 byte* irq_bottom_1::toD0181_screen#1 -interrupt(KERNEL_KEYBOARD) void irq_bottom_2() +__interrupt(rom_sys_c64) void irq_bottom_2() byte~ irq_bottom_2::$0 bool~ irq_bottom_2::$1 byte~ irq_bottom_2::$2 @@ -3182,7 +3182,7 @@ __start::@return: scope:[__start] from __start::@1 [7] return to:@return -interrupt(KERNEL_KEYBOARD) void irq_bottom_2() +__interrupt(rom_sys_c64) void irq_bottom_2() irq_bottom_2: scope:[irq_bottom_2] from [8] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK [9] call kbhit @@ -3211,7 +3211,7 @@ irq_bottom_2::@1: scope:[irq_bottom_2] from irq_bottom_2::@4 [20] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_MEMORY) = canvas_show_memory to:irq_bottom_2::@2 -interrupt(KERNEL_MIN) void irq_bottom_1() +__interrupt(rom_min_c64) void irq_bottom_1() irq_bottom_1: scope:[irq_bottom_1] from [21] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = DARK_GREY to:irq_bottom_1::toD0181 @@ -3658,11 +3658,11 @@ byte eorfill::x#2 27273.0 byte eorfill::y byte eorfill::y#1 2000002.0 byte eorfill::y#2 1250001.25 -interrupt(KERNEL_MIN) void irq_bottom_1() +__interrupt(rom_min_c64) void irq_bottom_1() byte* irq_bottom_1::toD0181_gfx byte irq_bottom_1::toD0181_return byte* irq_bottom_1::toD0181_screen -interrupt(KERNEL_KEYBOARD) void irq_bottom_2() +__interrupt(rom_sys_c64) void irq_bottom_2() byte~ irq_bottom_2::$0 4.0 byte* irq_bottom_2::toD0181_gfx byte irq_bottom_2::toD0181_return @@ -4422,114 +4422,114 @@ Uplift Scope [setup_irq] Uplift Scope [irq_bottom_1] Uplift Scope [__start] -Uplifting [eorfill] best 130779 combination reg byte y [ eorfill::y#2 eorfill::y#1 ] reg byte a [ eorfill::eor#2 eorfill::eor#0 eorfill::eor#1 ] zp[2]:31 [ eorfill::fill_column#2 eorfill::canvas#0 eorfill::fill_column#1 ] reg byte x [ eorfill::x#2 eorfill::x#1 ] zp[2]:29 [ eorfill::line_column#2 eorfill::line_column#1 ] -Uplifting [memset] best 130667 combination zp[2]:19 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:51 [ memset::end#0 ] reg byte x [ memset::c#6 ] zp[2]:14 [ memset::num#4 ] zp[2]:16 [ memset::str#5 ] -Uplifting [abs_u8] best 130630 combination reg byte a [ abs_u8::return#4 abs_u8::return#2 abs_u8::u#2 abs_u8::u#0 abs_u8::u#1 ] reg byte x [ abs_u8::$0 ] reg byte a [ abs_u8::return#0 ] reg byte a [ abs_u8::return#1 ] +Uplifting [eorfill] best 130833 combination reg byte y [ eorfill::y#2 eorfill::y#1 ] reg byte a [ eorfill::eor#2 eorfill::eor#0 eorfill::eor#1 ] zp[2]:31 [ eorfill::fill_column#2 eorfill::canvas#0 eorfill::fill_column#1 ] reg byte x [ eorfill::x#2 eorfill::x#1 ] zp[2]:29 [ eorfill::line_column#2 eorfill::line_column#1 ] +Uplifting [memset] best 130721 combination zp[2]:19 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:51 [ memset::end#0 ] reg byte x [ memset::c#6 ] zp[2]:14 [ memset::num#4 ] zp[2]:16 [ memset::str#5 ] +Uplifting [abs_u8] best 130684 combination reg byte a [ abs_u8::return#4 abs_u8::return#2 abs_u8::u#2 abs_u8::u#0 abs_u8::u#1 ] reg byte x [ abs_u8::$0 ] reg byte a [ abs_u8::return#0 ] reg byte a [ abs_u8::return#1 ] Limited combination testing to 100 combinations of 256 possible. -Uplifting [sgn_u8] best 130603 combination reg byte a [ sgn_u8::$0 ] reg byte a [ sgn_u8::u#2 sgn_u8::u#0 sgn_u8::u#1 ] reg byte a [ sgn_u8::return#0 ] reg byte a [ sgn_u8::return#1 ] zp[1]:37 [ sgn_u8::return#4 ] +Uplifting [sgn_u8] best 130657 combination reg byte a [ sgn_u8::$0 ] reg byte a [ sgn_u8::u#2 sgn_u8::u#0 sgn_u8::u#1 ] reg byte a [ sgn_u8::return#0 ] reg byte a [ sgn_u8::return#1 ] zp[1]:37 [ sgn_u8::return#4 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [main] best 128573 combination reg byte y [ main::x#2 main::x#1 ] reg byte x [ main::c#2 main::c#4 main::c#1 ] zp[1]:2 [ main::y#2 main::y#1 ] zp[2]:5 [ main::screen#5 main::screen#1 ] zp[2]:10 [ main::canvas#10 main::canvas#19 ] zp[2]:3 [ main::cols#5 main::cols#1 ] zp[1]:46 [ main::x2#0 ] zp[1]:47 [ main::y2#0 ] zp[1]:44 [ main::x1#0 ] zp[1]:45 [ main::y1#0 ] zp[1]:9 [ main::p2_idx#2 main::p2_idx#1 ] zp[1]:8 [ main::p1_idx#2 main::p1_idx#1 ] zp[1]:7 [ main::p0_idx#2 main::p0_idx#1 ] zp[2]:48 [ main::canvas#1 ] zp[1]:42 [ main::x0#0 ] zp[1]:43 [ main::y0#0 ] +Uplifting [main] best 128627 combination reg byte y [ main::x#2 main::x#1 ] reg byte x [ main::c#2 main::c#4 main::c#1 ] zp[1]:2 [ main::y#2 main::y#1 ] zp[2]:5 [ main::screen#5 main::screen#1 ] zp[2]:10 [ main::canvas#10 main::canvas#19 ] zp[2]:3 [ main::cols#5 main::cols#1 ] zp[1]:46 [ main::x2#0 ] zp[1]:47 [ main::y2#0 ] zp[1]:44 [ main::x1#0 ] zp[1]:45 [ main::y1#0 ] zp[1]:9 [ main::p2_idx#2 main::p2_idx#1 ] zp[1]:8 [ main::p1_idx#2 main::p1_idx#1 ] zp[1]:7 [ main::p0_idx#2 main::p0_idx#1 ] zp[2]:48 [ main::canvas#1 ] zp[1]:42 [ main::x0#0 ] zp[1]:43 [ main::y0#0 ] Limited combination testing to 100 combinations of 157464 possible. -Uplifting [] best 128573 combination zp[1]:39 [ canvas_show_flag ] zp[1]:38 [ canvas_show_memory ] -Uplifting [kbhit] best 128561 combination reg byte a [ kbhit::return#0 ] reg byte a [ kbhit::return#2 ] -Uplifting [irq_bottom_2] best 128555 combination reg byte a [ irq_bottom_2::$0 ] -Uplifting [MOS6526_CIA] best 128555 combination -Uplifting [MOS6569_VICII] best 128555 combination -Uplifting [MOS6581_SID] best 128555 combination -Uplifting [clock_start] best 128555 combination -Uplifting [RADIX] best 128555 combination -Uplifting [printf_format_number] best 128555 combination -Uplifting [printf_buffer_number] best 128555 combination -Uplifting [printf_format_string] best 128555 combination -Uplifting [setup_irq] best 128555 combination -Uplifting [irq_bottom_1] best 128555 combination -Uplifting [__start] best 128555 combination +Uplifting [] best 128627 combination zp[1]:39 [ canvas_show_flag ] zp[1]:38 [ canvas_show_memory ] +Uplifting [kbhit] best 128615 combination reg byte a [ kbhit::return#0 ] reg byte a [ kbhit::return#2 ] +Uplifting [irq_bottom_2] best 128609 combination reg byte a [ irq_bottom_2::$0 ] +Uplifting [MOS6526_CIA] best 128609 combination +Uplifting [MOS6569_VICII] best 128609 combination +Uplifting [MOS6581_SID] best 128609 combination +Uplifting [clock_start] best 128609 combination +Uplifting [RADIX] best 128609 combination +Uplifting [printf_format_number] best 128609 combination +Uplifting [printf_buffer_number] best 128609 combination +Uplifting [printf_format_string] best 128609 combination +Uplifting [setup_irq] best 128609 combination +Uplifting [irq_bottom_1] best 128609 combination +Uplifting [__start] best 128609 combination Attempting to uplift remaining variables inzp[1]:26 [ line::y#13 line::y#15 line::y#11 line::y#7 line::y#17 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#10 line::y#12 line::y#4 ] -Uplifting [line] best 128555 combination zp[1]:26 [ line::y#13 line::y#15 line::y#11 line::y#7 line::y#17 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#10 line::y#12 line::y#4 ] +Uplifting [line] best 128609 combination zp[1]:26 [ line::y#13 line::y#15 line::y#11 line::y#7 line::y#17 line::y#0 line::y1#0 line::y1#1 line::y1#2 line::y#1 line::y#10 line::y#12 line::y#4 ] Attempting to uplift remaining variables inzp[1]:24 [ line::e1#3 line::e1#0 line::e1#1 line::e1#2 ] -Uplifting [line] best 128555 combination zp[1]:24 [ line::e1#3 line::e1#0 line::e1#1 line::e1#2 ] +Uplifting [line] best 128609 combination zp[1]:24 [ line::e1#3 line::e1#0 line::e1#1 line::e1#2 ] Attempting to uplift remaining variables inzp[1]:25 [ line::x#10 line::x#12 line::x#18 line::x#15 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::x#17 line::x#1 line::x#19 ] -Uplifting [line] best 128555 combination zp[1]:25 [ line::x#10 line::x#12 line::x#18 line::x#15 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::x#17 line::x#1 line::x#19 ] +Uplifting [line] best 128609 combination zp[1]:25 [ line::x#10 line::x#12 line::x#18 line::x#15 line::x#0 line::x1#0 line::x1#1 line::x1#2 line::x#17 line::x#1 line::x#19 ] Attempting to uplift remaining variables inzp[1]:27 [ line::e2#3 line::e2#7 line::e2#0 line::e2#2 line::e2#1 ] -Uplifting [line] best 128555 combination zp[1]:27 [ line::e2#3 line::e2#7 line::e2#0 line::e2#2 line::e2#1 ] +Uplifting [line] best 128609 combination zp[1]:27 [ line::e2#3 line::e2#7 line::e2#0 line::e2#2 line::e2#1 ] Attempting to uplift remaining variables inzp[1]:23 [ line::e#3 line::e#0 line::e#5 line::e#2 line::e#1 ] -Uplifting [line] best 128555 combination zp[1]:23 [ line::e#3 line::e#0 line::e#5 line::e#2 line::e#1 ] +Uplifting [line] best 128609 combination zp[1]:23 [ line::e#3 line::e#0 line::e#5 line::e#2 line::e#1 ] Attempting to uplift remaining variables inzp[1]:62 [ line::plot2_$0 ] -Uplifting [line] best 127955 combination reg byte a [ line::plot2_$0 ] +Uplifting [line] best 128009 combination reg byte a [ line::plot2_$0 ] Attempting to uplift remaining variables inzp[1]:63 [ line::plot2_$2 ] -Uplifting [line] best 127555 combination reg byte a [ line::plot2_$2 ] +Uplifting [line] best 127609 combination reg byte a [ line::plot2_$2 ] Attempting to uplift remaining variables inzp[1]:66 [ line::plot2_$1 ] -Uplifting [line] best 127155 combination reg byte a [ line::plot2_$1 ] +Uplifting [line] best 127209 combination reg byte a [ line::plot2_$1 ] Attempting to uplift remaining variables inzp[1]:77 [ line::plot4_$0 ] -Uplifting [line] best 126555 combination reg byte a [ line::plot4_$0 ] +Uplifting [line] best 126609 combination reg byte a [ line::plot4_$0 ] Attempting to uplift remaining variables inzp[1]:78 [ line::plot4_$2 ] -Uplifting [line] best 126155 combination reg byte a [ line::plot4_$2 ] +Uplifting [line] best 126209 combination reg byte a [ line::plot4_$2 ] Attempting to uplift remaining variables inzp[1]:81 [ line::plot4_$1 ] -Uplifting [line] best 125755 combination reg byte a [ line::plot4_$1 ] +Uplifting [line] best 125809 combination reg byte a [ line::plot4_$1 ] Attempting to uplift remaining variables inzp[1]:82 [ line::plot5_$0 ] -Uplifting [line] best 125155 combination reg byte a [ line::plot5_$0 ] +Uplifting [line] best 125209 combination reg byte a [ line::plot5_$0 ] Attempting to uplift remaining variables inzp[1]:83 [ line::plot5_$2 ] -Uplifting [line] best 124755 combination reg byte a [ line::plot5_$2 ] +Uplifting [line] best 124809 combination reg byte a [ line::plot5_$2 ] Attempting to uplift remaining variables inzp[1]:86 [ line::plot5_$1 ] -Uplifting [line] best 124355 combination reg byte a [ line::plot5_$1 ] +Uplifting [line] best 124409 combination reg byte a [ line::plot5_$1 ] Attempting to uplift remaining variables inzp[1]:61 [ line::plot2_y#0 ] -Uplifting [line] best 124355 combination zp[1]:61 [ line::plot2_y#0 ] +Uplifting [line] best 124409 combination zp[1]:61 [ line::plot2_y#0 ] Attempting to uplift remaining variables inzp[1]:60 [ line::sy#0 ] -Uplifting [line] best 124355 combination zp[1]:60 [ line::sy#0 ] +Uplifting [line] best 124409 combination zp[1]:60 [ line::sy#0 ] Attempting to uplift remaining variables inzp[1]:56 [ line::dy#0 ] -Uplifting [line] best 124355 combination zp[1]:56 [ line::dy#0 ] +Uplifting [line] best 124409 combination zp[1]:56 [ line::dy#0 ] Attempting to uplift remaining variables inzp[1]:54 [ line::dx#0 ] -Uplifting [line] best 124355 combination zp[1]:54 [ line::dx#0 ] +Uplifting [line] best 124409 combination zp[1]:54 [ line::dx#0 ] Attempting to uplift remaining variables inzp[1]:22 [ line::y2#13 line::y2#10 line::y2#0 line::y2#1 line::y2#2 line::y2#3 ] -Uplifting [line] best 124355 combination zp[1]:22 [ line::y2#13 line::y2#10 line::y2#0 line::y2#1 line::y2#2 line::y2#3 ] +Uplifting [line] best 124409 combination zp[1]:22 [ line::y2#13 line::y2#10 line::y2#0 line::y2#1 line::y2#2 line::y2#3 ] Attempting to uplift remaining variables inzp[1]:58 [ line::sx#0 ] -Uplifting [line] best 124355 combination zp[1]:58 [ line::sx#0 ] +Uplifting [line] best 124409 combination zp[1]:58 [ line::sx#0 ] Attempting to uplift remaining variables inzp[1]:21 [ line::x2#15 line::x2#0 line::x2#1 line::x2#2 ] -Uplifting [line] best 124355 combination zp[1]:21 [ line::x2#15 line::x2#0 line::x2#1 line::x2#2 ] +Uplifting [line] best 124409 combination zp[1]:21 [ line::x2#15 line::x2#0 line::x2#1 line::x2#2 ] Attempting to uplift remaining variables inzp[1]:67 [ line::plot3_$0 ] -Uplifting [line] best 124349 combination reg byte a [ line::plot3_$0 ] +Uplifting [line] best 124403 combination reg byte a [ line::plot3_$0 ] Attempting to uplift remaining variables inzp[1]:68 [ line::plot3_$2 ] -Uplifting [line] best 124345 combination reg byte a [ line::plot3_$2 ] +Uplifting [line] best 124399 combination reg byte a [ line::plot3_$2 ] Attempting to uplift remaining variables inzp[1]:71 [ line::plot3_$1 ] -Uplifting [line] best 124341 combination reg byte a [ line::plot3_$1 ] +Uplifting [line] best 124395 combination reg byte a [ line::plot3_$1 ] Attempting to uplift remaining variables inzp[1]:72 [ line::plot1_$0 ] -Uplifting [line] best 124335 combination reg byte a [ line::plot1_$0 ] +Uplifting [line] best 124389 combination reg byte a [ line::plot1_$0 ] Attempting to uplift remaining variables inzp[1]:73 [ line::plot1_$2 ] -Uplifting [line] best 124331 combination reg byte a [ line::plot1_$2 ] +Uplifting [line] best 124385 combination reg byte a [ line::plot1_$2 ] Attempting to uplift remaining variables inzp[1]:76 [ line::plot1_$1 ] -Uplifting [line] best 124327 combination reg byte a [ line::plot1_$1 ] +Uplifting [line] best 124381 combination reg byte a [ line::plot1_$1 ] Attempting to uplift remaining variables inzp[1]:87 [ line::plot6_$0 ] -Uplifting [line] best 124321 combination reg byte a [ line::plot6_$0 ] +Uplifting [line] best 124375 combination reg byte a [ line::plot6_$0 ] Attempting to uplift remaining variables inzp[1]:88 [ line::plot6_$2 ] -Uplifting [line] best 124317 combination reg byte a [ line::plot6_$2 ] +Uplifting [line] best 124371 combination reg byte a [ line::plot6_$2 ] Attempting to uplift remaining variables inzp[1]:91 [ line::plot6_$1 ] -Uplifting [line] best 124313 combination reg byte a [ line::plot6_$1 ] +Uplifting [line] best 124367 combination reg byte a [ line::plot6_$1 ] Attempting to uplift remaining variables inzp[1]:37 [ sgn_u8::return#4 ] -Uplifting [sgn_u8] best 124301 combination reg byte a [ sgn_u8::return#4 ] +Uplifting [sgn_u8] best 124355 combination reg byte a [ sgn_u8::return#4 ] Attempting to uplift remaining variables inzp[1]:2 [ main::y#2 main::y#1 ] -Uplifting [main] best 124301 combination zp[1]:2 [ main::y#2 main::y#1 ] +Uplifting [main] best 124355 combination zp[1]:2 [ main::y#2 main::y#1 ] Attempting to uplift remaining variables inzp[1]:46 [ main::x2#0 ] -Uplifting [main] best 124301 combination zp[1]:46 [ main::x2#0 ] +Uplifting [main] best 124355 combination zp[1]:46 [ main::x2#0 ] Attempting to uplift remaining variables inzp[1]:47 [ main::y2#0 ] -Uplifting [main] best 124301 combination zp[1]:47 [ main::y2#0 ] +Uplifting [main] best 124355 combination zp[1]:47 [ main::y2#0 ] Attempting to uplift remaining variables inzp[1]:44 [ main::x1#0 ] -Uplifting [main] best 124301 combination zp[1]:44 [ main::x1#0 ] +Uplifting [main] best 124355 combination zp[1]:44 [ main::x1#0 ] Attempting to uplift remaining variables inzp[1]:45 [ main::y1#0 ] -Uplifting [main] best 124301 combination zp[1]:45 [ main::y1#0 ] +Uplifting [main] best 124355 combination zp[1]:45 [ main::y1#0 ] Attempting to uplift remaining variables inzp[1]:9 [ main::p2_idx#2 main::p2_idx#1 ] -Uplifting [main] best 124301 combination zp[1]:9 [ main::p2_idx#2 main::p2_idx#1 ] +Uplifting [main] best 124355 combination zp[1]:9 [ main::p2_idx#2 main::p2_idx#1 ] Attempting to uplift remaining variables inzp[1]:8 [ main::p1_idx#2 main::p1_idx#1 ] -Uplifting [main] best 124301 combination zp[1]:8 [ main::p1_idx#2 main::p1_idx#1 ] +Uplifting [main] best 124355 combination zp[1]:8 [ main::p1_idx#2 main::p1_idx#1 ] Attempting to uplift remaining variables inzp[1]:7 [ main::p0_idx#2 main::p0_idx#1 ] -Uplifting [main] best 124301 combination zp[1]:7 [ main::p0_idx#2 main::p0_idx#1 ] +Uplifting [main] best 124355 combination zp[1]:7 [ main::p0_idx#2 main::p0_idx#1 ] Attempting to uplift remaining variables inzp[1]:39 [ canvas_show_flag ] -Uplifting [] best 124301 combination zp[1]:39 [ canvas_show_flag ] +Uplifting [] best 124355 combination zp[1]:39 [ canvas_show_flag ] Attempting to uplift remaining variables inzp[1]:42 [ main::x0#0 ] -Uplifting [main] best 124301 combination zp[1]:42 [ main::x0#0 ] +Uplifting [main] best 124355 combination zp[1]:42 [ main::x0#0 ] Attempting to uplift remaining variables inzp[1]:43 [ main::y0#0 ] -Uplifting [main] best 124301 combination zp[1]:43 [ main::y0#0 ] +Uplifting [main] best 124355 combination zp[1]:43 [ main::y0#0 ] Attempting to uplift remaining variables inzp[1]:38 [ canvas_show_memory ] -Uplifting [] best 124301 combination zp[1]:38 [ canvas_show_memory ] +Uplifting [] best 124355 combination zp[1]:38 [ canvas_show_memory ] Coalescing zero page register [ zp[2]:10 [ main::canvas#10 main::canvas#19 ] ] with [ zp[2]:48 [ main::canvas#1 ] ] - score: 2 Coalescing zero page register [ zp[2]:14 [ memset::num#4 ] ] with [ zp[2]:51 [ memset::end#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:16 [ memset::str#5 ] ] with [ zp[2]:19 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 @@ -4671,7 +4671,7 @@ __start: { // Interrupt Routine 2 irq_bottom_2: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>LINE_BUFFER)/4&$f - // entry interrupt(KERNEL_KEYBOARD) + // interrupt(isr_rom_sys_c64_entry) -- isr_rom_sys_c64_entry // [8] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK -- _deref_pbuc1=vbuc2 // Change border color lda #BLACK @@ -4720,7 +4720,8 @@ irq_bottom_2: { jmp __breturn // irq_bottom_2::@return __breturn: - // [19] return - exit interrupt(KERNEL_KEYBOARD) + // [19] return + // interrupt(isr_rom_sys_c64_exit) -- isr_rom_sys_c64_exit jmp $ea31 // irq_bottom_2::@1 __b1: @@ -4733,7 +4734,7 @@ irq_bottom_2: { // Interrupt Routine 1: Just above last text line. irq_bottom_1: { .const toD0181_return = (>(CONSOLE&$3fff)*4)|(>PETSCII)/4&$f - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // [21] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = DARK_GREY -- _deref_pbuc1=vbuc2 // Change border color lda #DARK_GREY @@ -4766,7 +4767,8 @@ irq_bottom_1: { jmp __breturn // irq_bottom_1::@return __breturn: - // [27] return - exit interrupt(KERNEL_MIN) + // [27] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main @@ -6209,12 +6211,12 @@ byte eorfill::x#2 reg byte x 27273.0 byte eorfill::y byte eorfill::y#1 reg byte y 2000002.0 byte eorfill::y#2 reg byte y 1250001.25 -interrupt(KERNEL_MIN) void irq_bottom_1() +__interrupt(rom_min_c64) void irq_bottom_1() byte* irq_bottom_1::toD0181_gfx byte irq_bottom_1::toD0181_return const byte irq_bottom_1::toD0181_return#0 toD0181_return = >(word)CONSOLE&$3fff*4|>(word)PETSCII/4&$f byte* irq_bottom_1::toD0181_screen -interrupt(KERNEL_KEYBOARD) void irq_bottom_2() +__interrupt(rom_sys_c64) void irq_bottom_2() byte~ irq_bottom_2::$0 reg byte a 4.0 byte* irq_bottom_2::toD0181_gfx byte irq_bottom_2::toD0181_return @@ -6484,7 +6486,7 @@ reg byte a [ sgn_u8::$0 ] FINAL ASSEMBLER -Score: 105477 +Score: 105531 // File Comments // Filling a simple 16x16 2D polygon using EOR-filling @@ -6580,7 +6582,7 @@ __start: { // Interrupt Routine 2 irq_bottom_2: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>LINE_BUFFER)/4&$f - // entry interrupt(KERNEL_KEYBOARD) + // interrupt(isr_rom_sys_c64_entry) -- isr_rom_sys_c64_entry // VICII->BORDER_COLOR = BLACK // [8] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = BLACK -- _deref_pbuc1=vbuc2 // Change border color @@ -6628,7 +6630,8 @@ irq_bottom_2: { sta KERNEL_IRQ+1 // irq_bottom_2::@return // } - // [19] return - exit interrupt(KERNEL_KEYBOARD) + // [19] return + // interrupt(isr_rom_sys_c64_exit) -- isr_rom_sys_c64_exit jmp $ea31 // irq_bottom_2::@1 __b1: @@ -6642,7 +6645,7 @@ irq_bottom_2: { // Interrupt Routine 1: Just above last text line. irq_bottom_1: { .const toD0181_return = (>(CONSOLE&$3fff)*4)|(>PETSCII)/4&$f - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // VICII->BORDER_COLOR = DARK_GREY // [21] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = DARK_GREY -- _deref_pbuc1=vbuc2 // Change border color @@ -6674,7 +6677,8 @@ irq_bottom_1: { sta KERNEL_IRQ+1 // irq_bottom_1::@return // } - // [27] return - exit interrupt(KERNEL_MIN) + // [27] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main diff --git a/src/test/ref/complex/polygon/polygon.sym b/src/test/ref/complex/polygon/polygon.sym index 5994b60eb..d9da4c277 100644 --- a/src/test/ref/complex/polygon/polygon.sym +++ b/src/test/ref/complex/polygon/polygon.sym @@ -75,12 +75,12 @@ byte eorfill::x#2 reg byte x 27273.0 byte eorfill::y byte eorfill::y#1 reg byte y 2000002.0 byte eorfill::y#2 reg byte y 1250001.25 -interrupt(KERNEL_MIN) void irq_bottom_1() +__interrupt(rom_min_c64) void irq_bottom_1() byte* irq_bottom_1::toD0181_gfx byte irq_bottom_1::toD0181_return const byte irq_bottom_1::toD0181_return#0 toD0181_return = >(word)CONSOLE&$3fff*4|>(word)PETSCII/4&$f byte* irq_bottom_1::toD0181_screen -interrupt(KERNEL_KEYBOARD) void irq_bottom_2() +__interrupt(rom_sys_c64) void irq_bottom_2() byte~ irq_bottom_2::$0 reg byte a 4.0 byte* irq_bottom_2::toD0181_gfx byte irq_bottom_2::toD0181_return diff --git a/src/test/ref/complex/spritescroller/spritescroller.cfg b/src/test/ref/complex/spritescroller/spritescroller.cfg index 37e335258..3f3e8199c 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.cfg +++ b/src/test/ref/complex/spritescroller/spritescroller.cfg @@ -24,7 +24,7 @@ __start::@return: scope:[__start] from __start::@1 [10] return to:@return -interrupt(KERNEL_MIN) void plex_irq() +__interrupt(rom_min_c64) void plex_irq() plex_irq: scope:[plex_irq] from asm { sei } to:plex_irq::@3 diff --git a/src/test/ref/complex/spritescroller/spritescroller.log b/src/test/ref/complex/spritescroller/spritescroller.log index eef2e852e..4675d3693 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.log +++ b/src/test/ref/complex/spritescroller/spritescroller.log @@ -1,4 +1,4 @@ -Resolved forward reference plex_irq to interrupt(KERNEL_MIN) void plex_irq() +Resolved forward reference plex_irq to __interrupt(rom_min_c64) void plex_irq() Resolved forward reference frame_done to frame_done Resolved forward reference frame_done to frame_done Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx @@ -444,7 +444,7 @@ plex_move::@return: scope:[plex_move] from plex_move::@6 return to:@return -interrupt(KERNEL_MIN) void plex_irq() +__interrupt(rom_min_c64) void plex_irq() plex_irq: scope:[plex_irq] from asm { sei } plex_irq::rasterY#0 = 0 @@ -1267,7 +1267,7 @@ byte plexSort::s#2 byte plexSort::s#3 byte plexSort::s#4 volatile byte plex_free_next loadstore -interrupt(KERNEL_MIN) void plex_irq() +__interrupt(rom_min_c64) void plex_irq() bool~ plex_irq::$0 byte~ plex_irq::$2 bool~ plex_irq::$3 @@ -2432,7 +2432,7 @@ __start::@return: scope:[__start] from __start::@1 [10] return to:@return -interrupt(KERNEL_MIN) void plex_irq() +__interrupt(rom_min_c64) void plex_irq() plex_irq: scope:[plex_irq] from asm { sei } to:plex_irq::@3 @@ -2971,7 +2971,7 @@ byte plexSort::s#2 200002.0 byte plexSort::s#3 2050002.5 byte plexSort::s#6 200002.0 volatile byte plex_free_next loadstore 42.483870967741936 -interrupt(KERNEL_MIN) void plex_irq() +__interrupt(rom_min_c64) void plex_irq() byte~ plex_irq::$4 11.0 byte plex_irq::plexFreeNextYpos1_return byte plex_irq::plexFreeNextYpos1_return#0 4.800000000000001 @@ -3627,97 +3627,97 @@ Uplift Scope [MOS6569_VICII] Uplift Scope [MOS6581_SID] Uplift Scope [__start] -Uplifting [plexSort] best 252627 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]:40 [ plexSort::m#2 plexSort::m#1 ] zp[1]:88 [ plexSort::nxt_y#0 ] zp[1]:87 [ plexSort::nxt_idx#0 ] +Uplifting [plexSort] best 252654 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]:40 [ plexSort::m#2 plexSort::m#1 ] zp[1]:88 [ plexSort::nxt_y#0 ] zp[1]:87 [ plexSort::nxt_idx#0 ] Limited combination testing to 100 combinations of 972 possible. -Uplifting [font_2x2] best 229627 combination reg byte a [ font_2x2::$1 ] zp[2]:68 [ font_2x2::$5 ] zp[2]:70 [ font_2x2::glyph_bits_2x2#1 ] zp[2]:72 [ font_2x2::$7 ] reg byte y [ font_2x2::b#2 font_2x2::b#1 ] zp[1]:16 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] zp[2]:17 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] reg byte x [ font_2x2::glyph_bit#0 ] zp[2]:14 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] zp[1]:13 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] zp[2]:11 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] zp[1]:74 [ font_2x2::$10 ] zp[1]:76 [ font_2x2::$12 ] zp[1]:77 [ font_2x2::$13 ] zp[1]:79 [ font_2x2::$15 ] zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 ] zp[1]:75 [ font_2x2::$11 ] zp[1]:78 [ font_2x2::$14 ] zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 ] zp[2]:5 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] zp[2]:7 [ font_2x2::next_original#4 font_2x2::next_original#1 ] +Uplifting [font_2x2] best 229654 combination reg byte a [ font_2x2::$1 ] zp[2]:68 [ font_2x2::$5 ] zp[2]:70 [ font_2x2::glyph_bits_2x2#1 ] zp[2]:72 [ font_2x2::$7 ] reg byte y [ font_2x2::b#2 font_2x2::b#1 ] zp[1]:16 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] zp[2]:17 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] reg byte x [ font_2x2::glyph_bit#0 ] zp[2]:14 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] zp[1]:13 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] zp[2]:11 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] zp[1]:74 [ font_2x2::$10 ] zp[1]:76 [ font_2x2::$12 ] zp[1]:77 [ font_2x2::$13 ] zp[1]:79 [ font_2x2::$15 ] zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 ] zp[1]:75 [ font_2x2::$11 ] zp[1]:78 [ font_2x2::$14 ] zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 ] zp[2]:5 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] zp[2]:7 [ font_2x2::next_original#4 font_2x2::next_original#1 ] Limited combination testing to 100 combinations of 11943936 possible. -Uplifting [plex_move] best 228627 combination zp[2]:84 [ plex_move::$7 ] reg byte a [ plex_move::$4 ] zp[1]:36 [ plex_move::s#2 plex_move::s#1 ] zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] zp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] reg byte x [ plex_move::$6 ] -Uplifting [] best 228627 combination zp[2]:38 [ scroll_text_next#13 scroll_text_next#12 scroll_text_next#27 scroll_text_next#14 scroll_text_next#3 ] zp[1]:33 [ y_sin_idx#11 y_sin_idx#13 ] zp[1]:34 [ x_movement_idx#11 x_movement_idx#13 ] zp[1]:47 [ plex_sprite_msb ] zp[1]:45 [ plex_show_idx ] zp[1]:46 [ plex_sprite_idx ] zp[1]:48 [ plex_free_next ] zp[1]:49 [ frame_done ] zp[2]:43 [ PLEX_SCREEN_PTR ] -Uplifting [font_2x2_to_sprites] best 225927 combination zp[2]:30 [ font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 ] zp[2]:27 [ font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 ] reg byte x [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] zp[1]:81 [ font_2x2_to_sprites::sprite_idx#1 ] reg byte y [ font_2x2_to_sprites::sprite_idx#2 ] zp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] zp[1]:80 [ font_2x2_to_sprites::$3 ] zp[2]:24 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] zp[1]:21 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] zp[2]:22 [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] +Uplifting [plex_move] best 228654 combination zp[2]:84 [ plex_move::$7 ] reg byte a [ plex_move::$4 ] zp[1]:36 [ plex_move::s#2 plex_move::s#1 ] zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] zp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] reg byte x [ plex_move::$6 ] +Uplifting [] best 228654 combination zp[2]:38 [ scroll_text_next#13 scroll_text_next#12 scroll_text_next#27 scroll_text_next#14 scroll_text_next#3 ] zp[1]:33 [ y_sin_idx#11 y_sin_idx#13 ] zp[1]:34 [ x_movement_idx#11 x_movement_idx#13 ] zp[1]:47 [ plex_sprite_msb ] zp[1]:45 [ plex_show_idx ] zp[1]:46 [ plex_sprite_idx ] zp[1]:48 [ plex_free_next ] zp[1]:49 [ frame_done ] zp[2]:43 [ PLEX_SCREEN_PTR ] +Uplifting [font_2x2_to_sprites] best 225954 combination zp[2]:30 [ font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 ] zp[2]:27 [ font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 ] reg byte x [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] zp[1]:81 [ font_2x2_to_sprites::sprite_idx#1 ] reg byte y [ font_2x2_to_sprites::sprite_idx#2 ] zp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] zp[1]:80 [ font_2x2_to_sprites::$3 ] zp[2]:24 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] zp[1]:21 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] zp[2]:22 [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] Limited combination testing to 100 combinations of 729 possible. -Uplifting [plexInit] best 225807 combination reg byte x [ plexInit::i#2 plexInit::i#1 ] -Uplifting [plexShowSprite] best 225787 combination reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$1 ] reg byte a [ plexShowSprite::plexFreeAdd1_$2 ] reg byte a [ plexShowSprite::xpos_idx#0 ] zp[1]:62 [ plexShowSprite::$2 ] zp[1]:63 [ plexShowSprite::$3 ] zp[1]:64 [ plexShowSprite::$9 ] zp[1]:65 [ plexShowSprite::$5 ] zp[1]:66 [ plexShowSprite::$6 ] zp[1]:56 [ plexShowSprite::plexFreeAdd1_ypos#0 ] zp[1]:61 [ plexShowSprite::$11 ] zp[1]:55 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplifting [plexInit] best 225834 combination reg byte x [ plexInit::i#2 plexInit::i#1 ] +Uplifting [plexShowSprite] best 225814 combination reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$1 ] reg byte a [ plexShowSprite::plexFreeAdd1_$2 ] reg byte a [ plexShowSprite::xpos_idx#0 ] zp[1]:62 [ plexShowSprite::$2 ] zp[1]:63 [ plexShowSprite::$3 ] zp[1]:64 [ plexShowSprite::$9 ] zp[1]:65 [ plexShowSprite::$5 ] zp[1]:66 [ plexShowSprite::$6 ] zp[1]:56 [ plexShowSprite::plexFreeAdd1_ypos#0 ] zp[1]:61 [ plexShowSprite::$11 ] zp[1]:55 [ plexShowSprite::plex_sprite_idx2#0 ] Limited combination testing to 100 combinations of 1572864 possible. -Uplifting [main] best 225527 combination reg byte x [ main::s1#2 main::s1#1 ] zp[1]:2 [ main::s#2 main::s#1 ] zp[2]:53 [ main::$13 ] reg byte x [ main::x#2 main::x#1 ] reg byte y [ main::$12 ] -Uplifting [plex_irq] best 225464 combination zp[1]:51 [ plex_irq::$4 ] reg byte x [ plex_irq::plexFreeNextYpos1_return#0 ] -Uplifting [MOS6526_CIA] best 225464 combination -Uplifting [MOS6569_VICII] best 225464 combination -Uplifting [MOS6581_SID] best 225464 combination -Uplifting [__start] best 225464 combination +Uplifting [main] best 225554 combination reg byte x [ main::s1#2 main::s1#1 ] zp[1]:2 [ main::s#2 main::s#1 ] zp[2]:53 [ main::$13 ] reg byte x [ main::x#2 main::x#1 ] reg byte y [ main::$12 ] +Uplifting [plex_irq] best 225491 combination zp[1]:51 [ plex_irq::$4 ] reg byte x [ plex_irq::plexFreeNextYpos1_return#0 ] +Uplifting [MOS6526_CIA] best 225491 combination +Uplifting [MOS6569_VICII] best 225491 combination +Uplifting [MOS6581_SID] best 225491 combination +Uplifting [__start] best 225491 combination Attempting to uplift remaining variables inzp[1]:40 [ plexSort::m#2 plexSort::m#1 ] -Uplifting [plexSort] best 225464 combination zp[1]:40 [ plexSort::m#2 plexSort::m#1 ] +Uplifting [plexSort] best 225491 combination zp[1]:40 [ plexSort::m#2 plexSort::m#1 ] Attempting to uplift remaining variables inzp[1]:36 [ plex_move::s#2 plex_move::s#1 ] -Uplifting [plex_move] best 225464 combination zp[1]:36 [ plex_move::s#2 plex_move::s#1 ] +Uplifting [plex_move] best 225491 combination zp[1]:36 [ plex_move::s#2 plex_move::s#1 ] Attempting to uplift remaining variables inzp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] -Uplifting [plex_move] best 225464 combination zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] +Uplifting [plex_move] best 225491 combination zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] Attempting to uplift remaining variables inzp[1]:88 [ plexSort::nxt_y#0 ] -Uplifting [plexSort] best 225464 combination zp[1]:88 [ plexSort::nxt_y#0 ] +Uplifting [plexSort] best 225491 combination zp[1]:88 [ plexSort::nxt_y#0 ] Attempting to uplift remaining variables inzp[1]:16 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] -Uplifting [font_2x2] best 225464 combination zp[1]:16 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] +Uplifting [font_2x2] best 225491 combination zp[1]:16 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] Attempting to uplift remaining variables inzp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] -Uplifting [plex_move] best 225464 combination zp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] +Uplifting [plex_move] best 225491 combination zp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] Attempting to uplift remaining variables inzp[1]:87 [ plexSort::nxt_idx#0 ] -Uplifting [plexSort] best 225464 combination zp[1]:87 [ plexSort::nxt_idx#0 ] +Uplifting [plexSort] best 225491 combination zp[1]:87 [ plexSort::nxt_idx#0 ] Attempting to uplift remaining variables inzp[1]:13 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] -Uplifting [font_2x2] best 225464 combination zp[1]:13 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] +Uplifting [font_2x2] best 225491 combination zp[1]:13 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] Attempting to uplift remaining variables inzp[1]:74 [ font_2x2::$10 ] -Uplifting [font_2x2] best 224864 combination reg byte a [ font_2x2::$10 ] +Uplifting [font_2x2] best 224891 combination reg byte a [ font_2x2::$10 ] Attempting to uplift remaining variables inzp[1]:76 [ font_2x2::$12 ] -Uplifting [font_2x2] best 224264 combination reg byte a [ font_2x2::$12 ] +Uplifting [font_2x2] best 224291 combination reg byte a [ font_2x2::$12 ] Attempting to uplift remaining variables inzp[1]:77 [ font_2x2::$13 ] -Uplifting [font_2x2] best 223664 combination reg byte a [ font_2x2::$13 ] +Uplifting [font_2x2] best 223691 combination reg byte a [ font_2x2::$13 ] Attempting to uplift remaining variables inzp[1]:79 [ font_2x2::$15 ] -Uplifting [font_2x2] best 223064 combination reg byte a [ font_2x2::$15 ] +Uplifting [font_2x2] best 223091 combination reg byte a [ font_2x2::$15 ] Attempting to uplift remaining variables inzp[1]:10 [ font_2x2::l#2 font_2x2::l#1 ] -Uplifting [font_2x2] best 223064 combination zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 ] +Uplifting [font_2x2] best 223091 combination zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 ] Attempting to uplift remaining variables inzp[1]:81 [ font_2x2_to_sprites::sprite_idx#1 ] -Uplifting [font_2x2_to_sprites] best 223064 combination zp[1]:81 [ font_2x2_to_sprites::sprite_idx#1 ] +Uplifting [font_2x2_to_sprites] best 223091 combination zp[1]:81 [ font_2x2_to_sprites::sprite_idx#1 ] Attempting to uplift remaining variables inzp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] -Uplifting [font_2x2_to_sprites] best 223064 combination zp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] +Uplifting [font_2x2_to_sprites] best 223091 combination zp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] Attempting to uplift remaining variables inzp[1]:75 [ font_2x2::$11 ] -Uplifting [font_2x2] best 222464 combination reg byte y [ font_2x2::$11 ] +Uplifting [font_2x2] best 222491 combination reg byte y [ font_2x2::$11 ] Attempting to uplift remaining variables inzp[1]:78 [ font_2x2::$14 ] -Uplifting [font_2x2] best 221864 combination reg byte y [ font_2x2::$14 ] +Uplifting [font_2x2] best 221891 combination reg byte y [ font_2x2::$14 ] Attempting to uplift remaining variables inzp[1]:80 [ font_2x2_to_sprites::$3 ] -Uplifting [font_2x2_to_sprites] best 221864 combination zp[1]:80 [ font_2x2_to_sprites::$3 ] +Uplifting [font_2x2_to_sprites] best 221891 combination zp[1]:80 [ font_2x2_to_sprites::$3 ] Attempting to uplift remaining variables inzp[1]:21 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] -Uplifting [font_2x2_to_sprites] best 221864 combination zp[1]:21 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] +Uplifting [font_2x2_to_sprites] best 221891 combination zp[1]:21 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] Attempting to uplift remaining variables inzp[1]:9 [ font_2x2::c#11 font_2x2::c#1 ] -Uplifting [font_2x2] best 221864 combination zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 ] +Uplifting [font_2x2] best 221891 combination zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 ] Attempting to uplift remaining variables inzp[1]:2 [ main::s#2 main::s#1 ] -Uplifting [main] best 221864 combination zp[1]:2 [ main::s#2 main::s#1 ] +Uplifting [main] best 221891 combination zp[1]:2 [ main::s#2 main::s#1 ] Attempting to uplift remaining variables inzp[1]:62 [ plexShowSprite::$2 ] -Uplifting [plexShowSprite] best 221858 combination reg byte a [ plexShowSprite::$2 ] +Uplifting [plexShowSprite] best 221885 combination reg byte a [ plexShowSprite::$2 ] Attempting to uplift remaining variables inzp[1]:63 [ plexShowSprite::$3 ] -Uplifting [plexShowSprite] best 221852 combination reg byte a [ plexShowSprite::$3 ] +Uplifting [plexShowSprite] best 221879 combination reg byte a [ plexShowSprite::$3 ] Attempting to uplift remaining variables inzp[1]:64 [ plexShowSprite::$9 ] -Uplifting [plexShowSprite] best 221846 combination reg byte a [ plexShowSprite::$9 ] +Uplifting [plexShowSprite] best 221873 combination reg byte a [ plexShowSprite::$9 ] Attempting to uplift remaining variables inzp[1]:65 [ plexShowSprite::$5 ] -Uplifting [plexShowSprite] best 221840 combination reg byte x [ plexShowSprite::$5 ] +Uplifting [plexShowSprite] best 221867 combination reg byte x [ plexShowSprite::$5 ] Attempting to uplift remaining variables inzp[1]:66 [ plexShowSprite::$6 ] -Uplifting [plexShowSprite] best 221836 combination reg byte a [ plexShowSprite::$6 ] +Uplifting [plexShowSprite] best 221863 combination reg byte a [ plexShowSprite::$6 ] Attempting to uplift remaining variables inzp[1]:33 [ y_sin_idx#11 y_sin_idx#13 ] -Uplifting [] best 221836 combination zp[1]:33 [ y_sin_idx#11 y_sin_idx#13 ] +Uplifting [] best 221863 combination zp[1]:33 [ y_sin_idx#11 y_sin_idx#13 ] Attempting to uplift remaining variables inzp[1]:34 [ x_movement_idx#11 x_movement_idx#13 ] -Uplifting [] best 221836 combination zp[1]:34 [ x_movement_idx#11 x_movement_idx#13 ] +Uplifting [] best 221863 combination zp[1]:34 [ x_movement_idx#11 x_movement_idx#13 ] Attempting to uplift remaining variables inzp[1]:56 [ plexShowSprite::plexFreeAdd1_ypos#0 ] -Uplifting [plexShowSprite] best 221827 combination reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] +Uplifting [plexShowSprite] best 221854 combination reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] Attempting to uplift remaining variables inzp[1]:61 [ plexShowSprite::$11 ] -Uplifting [plexShowSprite] best 221820 combination reg byte x [ plexShowSprite::$11 ] +Uplifting [plexShowSprite] best 221847 combination reg byte x [ plexShowSprite::$11 ] Attempting to uplift remaining variables inzp[1]:47 [ plex_sprite_msb ] -Uplifting [] best 221820 combination zp[1]:47 [ plex_sprite_msb ] +Uplifting [] best 221847 combination zp[1]:47 [ plex_sprite_msb ] Attempting to uplift remaining variables inzp[1]:45 [ plex_show_idx ] -Uplifting [] best 221820 combination zp[1]:45 [ plex_show_idx ] +Uplifting [] best 221847 combination zp[1]:45 [ plex_show_idx ] Attempting to uplift remaining variables inzp[1]:46 [ plex_sprite_idx ] -Uplifting [] best 221820 combination zp[1]:46 [ plex_sprite_idx ] +Uplifting [] best 221847 combination zp[1]:46 [ plex_sprite_idx ] Attempting to uplift remaining variables inzp[1]:48 [ plex_free_next ] -Uplifting [] best 221820 combination zp[1]:48 [ plex_free_next ] +Uplifting [] best 221847 combination zp[1]:48 [ plex_free_next ] Attempting to uplift remaining variables inzp[1]:49 [ frame_done ] -Uplifting [] best 221820 combination zp[1]:49 [ frame_done ] +Uplifting [] best 221847 combination zp[1]:49 [ frame_done ] Attempting to uplift remaining variables inzp[1]:55 [ plexShowSprite::plex_sprite_idx2#0 ] -Uplifting [plexShowSprite] best 221820 combination zp[1]:55 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplifting [plexShowSprite] best 221847 combination zp[1]:55 [ plexShowSprite::plex_sprite_idx2#0 ] Attempting to uplift remaining variables inzp[1]:51 [ plex_irq::$4 ] -Uplifting [plex_irq] best 221820 combination zp[1]:51 [ plex_irq::$4 ] +Uplifting [plex_irq] best 221847 combination zp[1]:51 [ plex_irq::$4 ] Coalescing zero page register [ zp[2]:17 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] ] with [ zp[2]:68 [ font_2x2::$5 ] ] - score: 1 Coalescing zero page register [ zp[2]:17 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 ] ] with [ zp[2]:72 [ font_2x2::$7 ] ] - score: 1 Coalescing zero page register [ zp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] ] with [ zp[1]:81 [ font_2x2_to_sprites::sprite_idx#1 ] ] - score: 1 @@ -3876,7 +3876,7 @@ __start: { // Show sprites from the multiplexer, rescheduling the IRQ as many times as needed plex_irq: { .label __4 = $16 - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // asm { sei } sei // [12] phi from plex_irq plex_irq::@7 to plex_irq::@3 [phi:plex_irq/plex_irq::@7->plex_irq::@3] @@ -3942,7 +3942,8 @@ plex_irq: { jmp __breturn // plex_irq::@return __breturn: - // [23] return - exit interrupt(KERNEL_MIN) + // [23] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 // plex_irq::@1 __b1: @@ -5468,7 +5469,7 @@ byte plexSort::s#2 reg byte x 200002.0 byte plexSort::s#3 reg byte x 2050002.5 byte plexSort::s#6 reg byte x 200002.0 volatile byte plex_free_next loadstore zp[1]:20 42.483870967741936 -interrupt(KERNEL_MIN) void plex_irq() +__interrupt(rom_min_c64) void plex_irq() byte~ plex_irq::$4 zp[1]:22 11.0 byte plex_irq::plexFreeNextYpos1_return byte plex_irq::plexFreeNextYpos1_return#0 reg byte x 4.800000000000001 @@ -5560,7 +5561,7 @@ reg byte x [ plexSort::s#2 ] FINAL ASSEMBLER -Score: 159148 +Score: 159175 // File Comments // Put a 2x2 font into sprites and show it on screen @@ -5671,7 +5672,7 @@ __start: { // Show sprites from the multiplexer, rescheduling the IRQ as many times as needed plex_irq: { .label __4 = $16 - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // asm // asm { sei } sei @@ -5733,7 +5734,8 @@ plex_irq: { cli // plex_irq::@return // } - // [23] return - exit interrupt(KERNEL_MIN) + // [23] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 // plex_irq::@1 __b1: diff --git a/src/test/ref/complex/spritescroller/spritescroller.sym b/src/test/ref/complex/spritescroller/spritescroller.sym index e372b36d2..49e408c15 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.sym +++ b/src/test/ref/complex/spritescroller/spritescroller.sym @@ -184,7 +184,7 @@ byte plexSort::s#2 reg byte x 200002.0 byte plexSort::s#3 reg byte x 2050002.5 byte plexSort::s#6 reg byte x 200002.0 volatile byte plex_free_next loadstore zp[1]:20 42.483870967741936 -interrupt(KERNEL_MIN) void plex_irq() +__interrupt(rom_min_c64) void plex_irq() byte~ plex_irq::$4 zp[1]:22 11.0 byte plex_irq::plexFreeNextYpos1_return byte plex_irq::plexFreeNextYpos1_return#0 reg byte x 4.800000000000001 diff --git a/src/test/ref/complex/tetris/test-sprites.asm b/src/test/ref/complex/tetris/test-sprites.asm index 2654bf312..2330c8167 100644 --- a/src/test/ref/complex/tetris/test-sprites.asm +++ b/src/test/ref/complex/tetris/test-sprites.asm @@ -177,9 +177,9 @@ sprites_irq: { sta IRQ_STATUS // } rega: - lda #00 + lda #0 regx: - ldx #00 + ldx #0 rti __b4: // irq_cnt = 0 diff --git a/src/test/ref/complex/tetris/test-sprites.cfg b/src/test/ref/complex/tetris/test-sprites.cfg index 87a6b7a09..43c9508e4 100644 --- a/src/test/ref/complex/tetris/test-sprites.cfg +++ b/src/test/ref/complex/tetris/test-sprites.cfg @@ -23,7 +23,7 @@ __start::@return: scope:[__start] from __start::@1 [9] return to:@return -interrupt(HARDWARE_CLOBBER) void sprites_irq() +__interrupt(hardware_clobber) void sprites_irq() sprites_irq: scope:[sprites_irq] from asm { cld } [11] sprites_irq::ypos#0 = irq_sprite_ypos diff --git a/src/test/ref/complex/tetris/test-sprites.log b/src/test/ref/complex/tetris/test-sprites.log index 776f7487f..6e131cdb6 100644 --- a/src/test/ref/complex/tetris/test-sprites.log +++ b/src/test/ref/complex/tetris/test-sprites.log @@ -1,4 +1,4 @@ -Resolved forward reference sprites_irq to interrupt(HARDWARE_CLOBBER) void sprites_irq() +Resolved forward reference sprites_irq to __interrupt(hardware_clobber) void sprites_irq() Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx Inlined call __init::$0 = call toSpritePtr PLAYFIELD_SPRITES Inlined call sprites_irq::$5 = call toSpritePtr PLAYFIELD_SPRITES @@ -53,7 +53,7 @@ sprites_irq_init::@return: scope:[sprites_irq_init] from sprites_irq_init return to:@return -interrupt(HARDWARE_CLOBBER) void sprites_irq() +__interrupt(hardware_clobber) void sprites_irq() sprites_irq: scope:[sprites_irq] from asm { cld } sprites_irq::ypos#0 = irq_sprite_ypos @@ -562,7 +562,7 @@ byte sprites_init::xpos byte sprites_init::xpos#0 byte sprites_init::xpos#1 byte sprites_init::xpos#2 -interrupt(HARDWARE_CLOBBER) void sprites_irq() +__interrupt(hardware_clobber) void sprites_irq() number~ sprites_irq::$0 bool~ sprites_irq::$1 bool~ sprites_irq::$2 @@ -1123,7 +1123,7 @@ __start::@return: scope:[__start] from __start::@1 [9] return to:@return -interrupt(HARDWARE_CLOBBER) void sprites_irq() +__interrupt(hardware_clobber) void sprites_irq() sprites_irq: scope:[sprites_irq] from asm { cld } [11] sprites_irq::ypos#0 = irq_sprite_ypos @@ -1365,7 +1365,7 @@ byte sprites_init::s2#0 2002.0 byte sprites_init::xpos byte sprites_init::xpos#1 667.3333333333334 byte sprites_init::xpos#2 750.75 -interrupt(HARDWARE_CLOBBER) void sprites_irq() +__interrupt(hardware_clobber) void sprites_irq() byte~ sprites_irq::$0 4.0 byte sprites_irq::ptr byte sprites_irq::ptr#0 2.5 @@ -1614,46 +1614,46 @@ Uplift Scope [MOS6581_SID] Uplift Scope [sprites_irq_init] Uplift Scope [__start] -Uplifting [loop] best 8842 combination zp[1]:8 [ loop::s#2 loop::s#1 ] reg byte a [ loop::$1 ] reg byte x [ loop::idx#2 loop::idx#0 loop::idx#1 ] -Uplifting [sprites_init] best 8672 combination reg byte y [ sprites_init::s#2 sprites_init::s#1 ] reg byte x [ sprites_init::s2#0 ] zp[1]:6 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Uplifting [] best 8672 combination zp[1]:7 [ sin_idx#11 sin_idx#2 ] zp[1]:12 [ irq_sprite_ypos ] zp[1]:14 [ irq_cnt ] zp[1]:13 [ irq_sprite_ptr ] zp[1]:11 [ irq_raster_next ] zp[1]:10 [ render_screen_showing ] -Uplifting [main] best 8392 combination reg byte y [ main::s#2 main::s#1 ] reg byte a [ main::$6 ] reg byte x [ main::s2#0 ] zp[1]:4 [ main::ypos#2 main::ypos#1 ] zp[1]:3 [ main::xpos#2 main::xpos#1 ] +Uplifting [loop] best 8950 combination zp[1]:8 [ loop::s#2 loop::s#1 ] reg byte a [ loop::$1 ] reg byte x [ loop::idx#2 loop::idx#0 loop::idx#1 ] +Uplifting [sprites_init] best 8780 combination reg byte y [ sprites_init::s#2 sprites_init::s#1 ] reg byte x [ sprites_init::s2#0 ] zp[1]:6 [ sprites_init::xpos#2 sprites_init::xpos#1 ] +Uplifting [] best 8780 combination zp[1]:7 [ sin_idx#11 sin_idx#2 ] zp[1]:12 [ irq_sprite_ypos ] zp[1]:14 [ irq_cnt ] zp[1]:13 [ irq_sprite_ptr ] zp[1]:11 [ irq_raster_next ] zp[1]:10 [ render_screen_showing ] +Uplifting [main] best 8500 combination reg byte y [ main::s#2 main::s#1 ] reg byte a [ main::$6 ] reg byte x [ main::s2#0 ] zp[1]:4 [ main::ypos#2 main::ypos#1 ] zp[1]:3 [ main::xpos#2 main::xpos#1 ] Limited combination testing to 100 combinations of 324 possible. -Uplifting [sprites_irq] best 8368 combination zp[1]:17 [ 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]:21 [ sprites_irq::ptr#1 ] zp[1]:15 [ sprites_irq::ypos#0 ] zp[1]:18 [ sprites_irq::ptr#0 ] +Uplifting [sprites_irq] best 8476 combination zp[1]:17 [ 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]:21 [ sprites_irq::ptr#1 ] zp[1]:15 [ sprites_irq::ypos#0 ] zp[1]:18 [ sprites_irq::ptr#0 ] Limited combination testing to 100 combinations of 12288 possible. -Uplifting [MOS6526_CIA] best 8368 combination -Uplifting [MOS6569_VICII] best 8368 combination -Uplifting [MOS6581_SID] best 8368 combination -Uplifting [sprites_irq_init] best 8368 combination -Uplifting [__start] best 8368 combination +Uplifting [MOS6526_CIA] best 8476 combination +Uplifting [MOS6569_VICII] best 8476 combination +Uplifting [MOS6581_SID] best 8476 combination +Uplifting [sprites_irq_init] best 8476 combination +Uplifting [__start] best 8476 combination Attempting to uplift remaining variables inzp[1]:8 [ loop::s#2 loop::s#1 ] -Uplifting [loop] best 8368 combination zp[1]:8 [ loop::s#2 loop::s#1 ] +Uplifting [loop] best 8476 combination zp[1]:8 [ loop::s#2 loop::s#1 ] Attempting to uplift remaining variables inzp[1]:7 [ sin_idx#11 sin_idx#2 ] -Uplifting [] best 8368 combination zp[1]:7 [ sin_idx#11 sin_idx#2 ] +Uplifting [] best 8476 combination zp[1]:7 [ sin_idx#11 sin_idx#2 ] Attempting to uplift remaining variables inzp[1]:6 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Uplifting [sprites_init] best 8368 combination zp[1]:6 [ sprites_init::xpos#2 sprites_init::xpos#1 ] +Uplifting [sprites_init] best 8476 combination zp[1]:6 [ sprites_init::xpos#2 sprites_init::xpos#1 ] Attempting to uplift remaining variables inzp[1]:4 [ main::ypos#2 main::ypos#1 ] -Uplifting [main] best 8368 combination zp[1]:4 [ main::ypos#2 main::ypos#1 ] +Uplifting [main] best 8476 combination zp[1]:4 [ main::ypos#2 main::ypos#1 ] Attempting to uplift remaining variables inzp[1]:3 [ main::xpos#2 main::xpos#1 ] -Uplifting [main] best 8368 combination zp[1]:3 [ main::xpos#2 main::xpos#1 ] +Uplifting [main] best 8476 combination zp[1]:3 [ main::xpos#2 main::xpos#1 ] Attempting to uplift remaining variables inzp[1]:17 [ sprites_irq::raster_sprite_gfx_modify ] -Uplifting [sprites_irq] best 8368 combination zp[1]:17 [ sprites_irq::raster_sprite_gfx_modify ] +Uplifting [sprites_irq] best 8476 combination zp[1]:17 [ sprites_irq::raster_sprite_gfx_modify ] Attempting to uplift remaining variables inzp[1]:21 [ sprites_irq::ptr#1 ] -Uplifting [sprites_irq] best 8356 combination reg byte x [ sprites_irq::ptr#1 ] +Uplifting [sprites_irq] best 8464 combination reg byte x [ sprites_irq::ptr#1 ] Attempting to uplift remaining variables inzp[1]:15 [ sprites_irq::ypos#0 ] -Uplifting [sprites_irq] best 8341 combination reg byte a [ sprites_irq::ypos#0 ] +Uplifting [sprites_irq] best 8449 combination reg byte a [ sprites_irq::ypos#0 ] Attempting to uplift remaining variables inzp[1]:18 [ sprites_irq::ptr#0 ] -Uplifting [sprites_irq] best 8326 combination reg byte x [ sprites_irq::ptr#0 ] +Uplifting [sprites_irq] best 8434 combination reg byte x [ sprites_irq::ptr#0 ] Attempting to uplift remaining variables inzp[1]:12 [ irq_sprite_ypos ] -Uplifting [] best 8326 combination zp[1]:12 [ irq_sprite_ypos ] +Uplifting [] best 8434 combination zp[1]:12 [ irq_sprite_ypos ] Attempting to uplift remaining variables inzp[1]:14 [ irq_cnt ] -Uplifting [] best 8326 combination zp[1]:14 [ irq_cnt ] +Uplifting [] best 8434 combination zp[1]:14 [ irq_cnt ] Attempting to uplift remaining variables inzp[1]:13 [ irq_sprite_ptr ] -Uplifting [] best 8326 combination zp[1]:13 [ irq_sprite_ptr ] +Uplifting [] best 8434 combination zp[1]:13 [ irq_sprite_ptr ] Attempting to uplift remaining variables inzp[1]:11 [ irq_raster_next ] -Uplifting [] best 8326 combination zp[1]:11 [ irq_raster_next ] +Uplifting [] best 8434 combination zp[1]:11 [ irq_raster_next ] Attempting to uplift remaining variables inzp[1]:10 [ render_screen_showing ] -Uplifting [] best 8326 combination zp[1]:10 [ render_screen_showing ] +Uplifting [] best 8434 combination zp[1]:10 [ render_screen_showing ] Coalescing zero page register [ zp[1]:8 [ loop::s#2 loop::s#1 ] ] with [ zp[1]:6 [ sprites_init::xpos#2 sprites_init::xpos#1 ] ] Allocated (was zp[1]:3) zp[1]:2 [ main::xpos#2 main::xpos#1 ] Allocated (was zp[1]:4) zp[1]:3 [ main::ypos#2 main::ypos#1 ] @@ -1666,9 +1666,6 @@ Allocated (was zp[1]:13) zp[1]:9 [ irq_sprite_ptr ] Allocated (was zp[1]:14) zp[1]:10 [ irq_cnt ] Allocated (was zp[1]:17) zp[1]:11 [ sprites_irq::raster_sprite_gfx_modify ] Interrupt procedure sprites_irq clobbers AXcnzvdP -Removing interrupt register storage sty regy+1 in 20 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regy: in 54 [35] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldy #00 in 54 [35] return - exit interrupt(HARDWARE_CLOBBER) ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -1796,7 +1793,7 @@ __start: { sprites_irq: { .const toSpritePtr1_return = $ff&PLAYFIELD_SPRITES/$40 .label raster_sprite_gfx_modify = $b - // entry interrupt(HARDWARE_CLOBBER) + // interrupt(isr_hardware_clobax_entry) -- isr_hardware_clobax_entry sta rega+1 stx regx+1 // asm { cld } @@ -1898,11 +1895,12 @@ sprites_irq: { jmp __breturn // sprites_irq::@return __breturn: - // [35] return - exit interrupt(HARDWARE_CLOBBER) + // [35] return + // interrupt(isr_hardware_clobax_exit) -- isr_hardware_clobax_exit rega: - lda #00 + lda #0 regx: - ldx #00 + ldx #0 rti // sprites_irq::@4 __b4: @@ -2495,7 +2493,7 @@ byte sprites_init::s2#0 reg byte x 2002.0 byte sprites_init::xpos byte sprites_init::xpos#1 xpos zp[1]:5 667.3333333333334 byte sprites_init::xpos#2 xpos zp[1]:5 750.75 -interrupt(HARDWARE_CLOBBER) void sprites_irq() +__interrupt(hardware_clobber) void sprites_irq() byte~ sprites_irq::$0 reg byte x 4.0 byte sprites_irq::ptr byte sprites_irq::ptr#0 reg byte x 2.5 @@ -2538,7 +2536,7 @@ reg byte a [ loop::$1 ] FINAL ASSEMBLER -Score: 6542 +Score: 6632 // File Comments // Tetris Game for the Commodore 64 @@ -2657,7 +2655,7 @@ __start: { sprites_irq: { .const toSpritePtr1_return = $ff&PLAYFIELD_SPRITES/$40 .label raster_sprite_gfx_modify = $b - // entry interrupt(HARDWARE_CLOBBER) + // interrupt(isr_hardware_clobax_entry) -- isr_hardware_clobax_entry sta rega+1 stx regx+1 // asm @@ -2772,11 +2770,12 @@ sprites_irq: { sta IRQ_STATUS // sprites_irq::@return // } - // [35] return - exit interrupt(HARDWARE_CLOBBER) + // [35] return + // interrupt(isr_hardware_clobax_exit) -- isr_hardware_clobax_exit rega: - lda #00 + lda #0 regx: - ldx #00 + ldx #0 rti // sprites_irq::@4 __b4: diff --git a/src/test/ref/complex/tetris/test-sprites.sym b/src/test/ref/complex/tetris/test-sprites.sym index a18e2957c..484c53f7e 100644 --- a/src/test/ref/complex/tetris/test-sprites.sym +++ b/src/test/ref/complex/tetris/test-sprites.sym @@ -109,7 +109,7 @@ byte sprites_init::s2#0 reg byte x 2002.0 byte sprites_init::xpos byte sprites_init::xpos#1 xpos zp[1]:5 667.3333333333334 byte sprites_init::xpos#2 xpos zp[1]:5 750.75 -interrupt(HARDWARE_CLOBBER) void sprites_irq() +__interrupt(hardware_clobber) void sprites_irq() byte~ sprites_irq::$0 reg byte x 4.0 byte sprites_irq::ptr byte sprites_irq::ptr#0 reg byte x 2.5 diff --git a/src/test/ref/complex/tetris/tetris.asm b/src/test/ref/complex/tetris/tetris.asm index 0e6787c8c..e81801af9 100644 --- a/src/test/ref/complex/tetris/tetris.asm +++ b/src/test/ref/complex/tetris/tetris.asm @@ -280,9 +280,9 @@ sprites_irq: { sta IRQ_STATUS // } rega: - lda #00 + lda #0 regx: - ldx #00 + ldx #0 rti __b4: // irq_cnt = 0 diff --git a/src/test/ref/complex/tetris/tetris.cfg b/src/test/ref/complex/tetris/tetris.cfg index 6357ab59f..345a7c1b3 100644 --- a/src/test/ref/complex/tetris/tetris.cfg +++ b/src/test/ref/complex/tetris/tetris.cfg @@ -24,7 +24,7 @@ __start::@return: scope:[__start] from __start::@1 [10] return to:@return -interrupt(HARDWARE_CLOBBER) void sprites_irq() +__interrupt(hardware_clobber) void sprites_irq() sprites_irq: scope:[sprites_irq] from asm { cld } [12] sprites_irq::ypos#0 = irq_sprite_ypos diff --git a/src/test/ref/complex/tetris/tetris.log b/src/test/ref/complex/tetris/tetris.log index d649b1889..28805ffd6 100644 --- a/src/test/ref/complex/tetris/tetris.log +++ b/src/test/ref/complex/tetris/tetris.log @@ -1,6 +1,6 @@ Resolved forward reference next_piece_idx to next_piece_idx Resolved forward reference next_piece_idx to next_piece_idx -Resolved forward reference sprites_irq to interrupt(HARDWARE_CLOBBER) void sprites_irq() +Resolved forward reference sprites_irq to __interrupt(hardware_clobber) void sprites_irq() Resolved forward reference COLLISION_NONE to COLLISION_NONE Resolved forward reference COLLISION_NONE to COLLISION_NONE Resolved forward reference COLLISION_NONE to COLLISION_NONE @@ -932,7 +932,7 @@ sprites_irq_init::@return: scope:[sprites_irq_init] from sprites_irq_init return to:@return -interrupt(HARDWARE_CLOBBER) void sprites_irq() +__interrupt(hardware_clobber) void sprites_irq() sprites_irq: scope:[sprites_irq] from asm { cld } sprites_irq::ypos#0 = irq_sprite_ypos @@ -5828,7 +5828,7 @@ byte sprites_init::xpos byte sprites_init::xpos#0 byte sprites_init::xpos#1 byte sprites_init::xpos#2 -interrupt(HARDWARE_CLOBBER) void sprites_irq() +__interrupt(hardware_clobber) void sprites_irq() number~ sprites_irq::$0 bool~ sprites_irq::$1 bool~ sprites_irq::$2 @@ -8830,7 +8830,7 @@ __start::@return: scope:[__start] from __start::@1 [10] return to:@return -interrupt(HARDWARE_CLOBBER) void sprites_irq() +__interrupt(hardware_clobber) void sprites_irq() sprites_irq: scope:[sprites_irq] from asm { cld } [12] sprites_irq::ypos#0 = irq_sprite_ypos @@ -10603,7 +10603,7 @@ byte sprites_init::s2#0 2002.0 byte sprites_init::xpos byte sprites_init::xpos#1 667.3333333333334 byte sprites_init::xpos#2 750.75 -interrupt(HARDWARE_CLOBBER) void sprites_irq() +__interrupt(hardware_clobber) void sprites_irq() byte~ sprites_irq::$0 4.0 byte sprites_irq::ptr byte sprites_irq::ptr#0 2.5 @@ -12202,256 +12202,256 @@ Uplift Scope [render_screen_swap] Uplift Scope [sprites_irq_init] Uplift Scope [__start] -Uplifting [play_collision] best 4788632 combination zp[1]:67 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] reg byte a [ play_collision::$5 ] zp[1]:68 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] reg byte x [ play_collision::c#2 play_collision::c#1 ] zp[1]:179 [ play_collision::$14 ] zp[1]:182 [ play_collision::i#1 ] zp[1]:65 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] zp[1]:66 [ play_collision::l#6 play_collision::l#1 ] zp[2]:180 [ play_collision::playfield_line#0 ] zp[2]:177 [ play_collision::piece_gfx#0 ] zp[1]:64 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] zp[1]:63 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] zp[1]:140 [ play_collision::return#10 ] zp[1]:191 [ play_collision::return#0 ] zp[1]:196 [ play_collision::return#13 ] zp[1]:198 [ play_collision::return#1 ] zp[1]:201 [ play_collision::return#14 ] zp[1]:70 [ play_collision::return#15 ] +Uplifting [play_collision] best 4788740 combination zp[1]:67 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] reg byte a [ play_collision::$5 ] zp[1]:68 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] reg byte x [ play_collision::c#2 play_collision::c#1 ] zp[1]:179 [ play_collision::$14 ] zp[1]:182 [ play_collision::i#1 ] zp[1]:65 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] zp[1]:66 [ play_collision::l#6 play_collision::l#1 ] zp[2]:180 [ play_collision::playfield_line#0 ] zp[2]:177 [ play_collision::piece_gfx#0 ] zp[1]:64 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] zp[1]:63 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] zp[1]:140 [ play_collision::return#10 ] zp[1]:191 [ play_collision::return#0 ] zp[1]:196 [ play_collision::return#13 ] zp[1]:198 [ play_collision::return#1 ] zp[1]:201 [ play_collision::return#14 ] zp[1]:70 [ play_collision::return#15 ] Limited combination testing to 100 combinations of 429981696 possible. -Uplifting [play_lock_current] best 4694632 combination zp[1]:102 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] zp[1]:103 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] reg byte x [ play_lock_current::c#2 play_lock_current::c#1 ] zp[1]:211 [ play_lock_current::i#1 ] reg byte a [ play_lock_current::$4 ] zp[1]:101 [ play_lock_current::l#6 play_lock_current::l#1 ] zp[2]:209 [ play_lock_current::playfield_line#0 ] zp[1]:100 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] +Uplifting [play_lock_current] best 4694740 combination zp[1]:102 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] zp[1]:103 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] reg byte x [ play_lock_current::c#2 play_lock_current::c#1 ] zp[1]:211 [ play_lock_current::i#1 ] reg byte a [ play_lock_current::$4 ] zp[1]:101 [ play_lock_current::l#6 play_lock_current::l#1 ] zp[2]:209 [ play_lock_current::playfield_line#0 ] zp[1]:100 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] Limited combination testing to 100 combinations of 2916 possible. -Uplifting [play_remove_lines] best 4555632 combination reg byte y [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] reg byte x [ play_remove_lines::w#6 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 play_remove_lines::w#3 ] zp[1]:108 [ play_remove_lines::x#2 play_remove_lines::x#1 ] zp[1]:109 [ play_remove_lines::full#4 play_remove_lines::full#2 ] zp[1]:212 [ play_remove_lines::c#0 ] zp[1]:106 [ play_remove_lines::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#1 ] zp[1]:105 [ play_remove_lines::y#8 play_remove_lines::y#1 ] zp[1]:193 [ play_remove_lines::return#0 ] +Uplifting [play_remove_lines] best 4555740 combination reg byte y [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] reg byte x [ play_remove_lines::w#6 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 play_remove_lines::w#3 ] zp[1]:108 [ play_remove_lines::x#2 play_remove_lines::x#1 ] zp[1]:109 [ play_remove_lines::full#4 play_remove_lines::full#2 ] zp[1]:212 [ play_remove_lines::c#0 ] zp[1]:106 [ play_remove_lines::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#1 ] zp[1]:105 [ play_remove_lines::y#8 play_remove_lines::y#1 ] zp[1]:193 [ play_remove_lines::return#0 ] Limited combination testing to 100 combinations of 20736 possible. -Uplifting [play_increase_level] best 4541626 combination reg byte a [ play_increase_level::$5 ] reg byte x [ play_increase_level::b#2 play_increase_level::b#1 ] reg byte a [ play_increase_level::$1 ] -Uplifting [] best 4541493 combination zp[1]:87 [ next_piece_idx#32 next_piece_idx#18 next_piece_idx#23 play_spawn_current::piece_idx#2 next_piece_idx#17 play_spawn_current::piece_idx#1 ] zp[1]:46 [ keyboard_events_size#11 keyboard_events_size#32 keyboard_events_size#20 keyboard_events_size#17 keyboard_events_size#14 keyboard_events_size#31 keyboard_events_size#0 keyboard_events_size#1 keyboard_events_size#3 ] zp[2]:83 [ current_piece_gfx#37 current_piece_gfx#12 current_piece_gfx#122 current_piece_gfx#19 current_piece_gfx#21 current_piece_gfx#22 current_piece_gfx#116 current_piece_gfx#6 ] zp[1]:81 [ current_piece_char#31 current_piece_char#23 current_piece_char#4 current_piece_char#17 ] zp[1]:78 [ level_bcd#33 level_bcd#10 level_bcd#18 level_bcd#20 level_bcd#63 level_bcd#22 level_bcd#7 ] zp[1]:77 [ current_movedown_slow#39 current_movedown_slow#13 current_movedown_slow#0 current_movedown_slow#22 current_movedown_slow#24 current_movedown_slow#67 current_movedown_slow#9 ] zp[1]:85 [ current_xpos#45 current_xpos#13 current_xpos#100 current_xpos#2 current_xpos#23 current_xpos#27 current_xpos#5 current_xpos#7 ] zp[2]:61 [ current_piece#18 current_piece#98 current_piece#99 current_piece#100 current_piece#101 current_piece#102 ] zp[1]:76 [ level#35 level#25 level#18 level#20 level#22 ] zp[2]:74 [ lines_bcd#28 lines_bcd#20 lines_bcd#16 lines_bcd#18 lines_bcd#31 ] zp[1]:73 [ current_ypos#40 current_ypos#2 current_ypos#10 current_ypos#5 current_ypos#20 ] zp[1]:86 [ game_over#29 game_over#66 game_over#22 game_over#53 game_over#16 ] zp[1]:82 [ current_orientation#39 current_orientation#12 current_orientation#18 current_orientation#21 current_orientation#26 current_orientation#6 ] zp[2]:79 [ current_piece#30 current_piece#23 current_piece#103 current_piece#16 current_piece#95 ] zp[1]:28 [ current_piece_char#70 current_piece_char#99 current_piece_char#100 ] zp[2]:26 [ current_piece_gfx#66 current_piece_gfx#111 current_piece_gfx#112 ] zp[1]:4 [ current_movedown_counter#17 current_movedown_counter#15 current_movedown_counter#13 ] zp[4]:113 [ score_bcd ] reg byte x [ render_screen_render#24 render_screen_render#63 ] zp[1]:25 [ current_xpos#61 current_xpos#118 current_xpos#119 ] zp[1]:24 [ render_screen_render#35 render_screen_render#64 ] zp[1]:34 [ render_screen_render#16 render_screen_render#65 ] zp[1]:23 [ current_ypos#14 current_ypos#97 current_ypos#98 ] zp[1]:112 [ render_screen_showing ] zp[1]:2 [ render_screen_show#17 render_screen_show#14 ] zp[1]:35 [ next_piece_idx#13 next_piece_idx#79 next_piece_idx#80 ] zp[1]:3 [ render_screen_render#19 render_screen_render#12 ] zp[1]:118 [ irq_sprite_ypos ] zp[1]:120 [ irq_cnt ] zp[1]:119 [ irq_sprite_ptr ] zp[1]:117 [ irq_raster_next ] +Uplifting [play_increase_level] best 4541734 combination reg byte a [ play_increase_level::$5 ] reg byte x [ play_increase_level::b#2 play_increase_level::b#1 ] reg byte a [ play_increase_level::$1 ] +Uplifting [] best 4541601 combination zp[1]:87 [ next_piece_idx#32 next_piece_idx#18 next_piece_idx#23 play_spawn_current::piece_idx#2 next_piece_idx#17 play_spawn_current::piece_idx#1 ] zp[1]:46 [ keyboard_events_size#11 keyboard_events_size#32 keyboard_events_size#20 keyboard_events_size#17 keyboard_events_size#14 keyboard_events_size#31 keyboard_events_size#0 keyboard_events_size#1 keyboard_events_size#3 ] zp[2]:83 [ current_piece_gfx#37 current_piece_gfx#12 current_piece_gfx#122 current_piece_gfx#19 current_piece_gfx#21 current_piece_gfx#22 current_piece_gfx#116 current_piece_gfx#6 ] zp[1]:81 [ current_piece_char#31 current_piece_char#23 current_piece_char#4 current_piece_char#17 ] zp[1]:78 [ level_bcd#33 level_bcd#10 level_bcd#18 level_bcd#20 level_bcd#63 level_bcd#22 level_bcd#7 ] zp[1]:77 [ current_movedown_slow#39 current_movedown_slow#13 current_movedown_slow#0 current_movedown_slow#22 current_movedown_slow#24 current_movedown_slow#67 current_movedown_slow#9 ] zp[1]:85 [ current_xpos#45 current_xpos#13 current_xpos#100 current_xpos#2 current_xpos#23 current_xpos#27 current_xpos#5 current_xpos#7 ] zp[2]:61 [ current_piece#18 current_piece#98 current_piece#99 current_piece#100 current_piece#101 current_piece#102 ] zp[1]:76 [ level#35 level#25 level#18 level#20 level#22 ] zp[2]:74 [ lines_bcd#28 lines_bcd#20 lines_bcd#16 lines_bcd#18 lines_bcd#31 ] zp[1]:73 [ current_ypos#40 current_ypos#2 current_ypos#10 current_ypos#5 current_ypos#20 ] zp[1]:86 [ game_over#29 game_over#66 game_over#22 game_over#53 game_over#16 ] zp[1]:82 [ current_orientation#39 current_orientation#12 current_orientation#18 current_orientation#21 current_orientation#26 current_orientation#6 ] zp[2]:79 [ current_piece#30 current_piece#23 current_piece#103 current_piece#16 current_piece#95 ] zp[1]:28 [ current_piece_char#70 current_piece_char#99 current_piece_char#100 ] zp[2]:26 [ current_piece_gfx#66 current_piece_gfx#111 current_piece_gfx#112 ] zp[1]:4 [ current_movedown_counter#17 current_movedown_counter#15 current_movedown_counter#13 ] zp[4]:113 [ score_bcd ] reg byte x [ render_screen_render#24 render_screen_render#63 ] zp[1]:25 [ current_xpos#61 current_xpos#118 current_xpos#119 ] zp[1]:24 [ render_screen_render#35 render_screen_render#64 ] zp[1]:34 [ render_screen_render#16 render_screen_render#65 ] zp[1]:23 [ current_ypos#14 current_ypos#97 current_ypos#98 ] zp[1]:112 [ render_screen_showing ] zp[1]:2 [ render_screen_show#17 render_screen_show#14 ] zp[1]:35 [ next_piece_idx#13 next_piece_idx#79 next_piece_idx#80 ] zp[1]:3 [ render_screen_render#19 render_screen_render#12 ] zp[1]:118 [ irq_sprite_ypos ] zp[1]:120 [ irq_cnt ] zp[1]:119 [ irq_sprite_ptr ] zp[1]:117 [ irq_raster_next ] Limited combination testing to 100 combinations of 1944 possible. -Uplifting [play_spawn_current] best 4535474 combination reg byte a [ play_spawn_current::sid_rnd1_return#0 ] reg byte a [ play_spawn_current::$1 ] reg byte x [ play_spawn_current::current_piece_idx#0 ] zp[1]:139 [ play_spawn_current::$7 ] -Uplifting [keyboard_event_scan] best 4295474 combination reg byte a [ keyboard_event_scan::$15 ] reg byte a [ keyboard_event_scan::$16 ] reg byte a [ keyboard_event_scan::event_type#0 ] reg byte a [ keyboard_event_scan::$23 ] zp[1]:44 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] zp[1]:45 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] zp[1]:43 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] zp[1]:155 [ keyboard_event_scan::row_scan#0 ] zp[1]:157 [ keyboard_event_scan::$0 ] zp[1]:159 [ keyboard_event_scan::$3 ] zp[1]:161 [ keyboard_event_scan::$6 ] zp[1]:163 [ keyboard_event_scan::$9 ] +Uplifting [play_spawn_current] best 4535582 combination reg byte a [ play_spawn_current::sid_rnd1_return#0 ] reg byte a [ play_spawn_current::$1 ] reg byte x [ play_spawn_current::current_piece_idx#0 ] zp[1]:139 [ play_spawn_current::$7 ] +Uplifting [keyboard_event_scan] best 4295582 combination reg byte a [ keyboard_event_scan::$15 ] reg byte a [ keyboard_event_scan::$16 ] reg byte a [ keyboard_event_scan::event_type#0 ] reg byte a [ keyboard_event_scan::$23 ] zp[1]:44 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] zp[1]:45 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] zp[1]:43 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] zp[1]:155 [ keyboard_event_scan::row_scan#0 ] zp[1]:157 [ keyboard_event_scan::$0 ] zp[1]:159 [ keyboard_event_scan::$3 ] zp[1]:161 [ keyboard_event_scan::$6 ] zp[1]:163 [ keyboard_event_scan::$9 ] Limited combination testing to 100 combinations of 524288 possible. -Uplifting [keyboard_matrix_read] best 4283468 combination reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#0 ] reg byte a [ keyboard_matrix_read::return#2 ] -Uplifting [play_update_score] best 4283446 combination reg byte a [ play_update_score::$2 ] reg byte a [ play_update_score::$9 ] reg byte a [ play_update_score::$4 ] reg byte a [ play_update_score::lines_after#0 ] zp[4]:216 [ play_update_score::add_bcd#0 ] zp[1]:195 [ play_update_score::removed#0 ] zp[1]:214 [ play_update_score::lines_before#0 ] +Uplifting [keyboard_matrix_read] best 4283576 combination reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#0 ] reg byte a [ keyboard_matrix_read::return#2 ] +Uplifting [play_update_score] best 4283554 combination reg byte a [ play_update_score::$2 ] reg byte a [ play_update_score::$9 ] reg byte a [ play_update_score::$4 ] reg byte a [ play_update_score::lines_after#0 ] zp[4]:216 [ play_update_score::add_bcd#0 ] zp[1]:195 [ play_update_score::removed#0 ] zp[1]:214 [ play_update_score::lines_before#0 ] Limited combination testing to 100 combinations of 2304 possible. -Uplifting [render_moving] best 4268446 combination zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] reg byte x [ render_moving::c#2 render_moving::c#1 ] zp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] reg byte a [ render_moving::current_cell#0 ] zp[1]:145 [ render_moving::$1 ] zp[1]:146 [ render_moving::$6 ] zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] zp[2]:147 [ render_moving::screen_line#0 ] zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] +Uplifting [render_moving] best 4268554 combination zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] reg byte x [ render_moving::c#2 render_moving::c#1 ] zp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] reg byte a [ render_moving::current_cell#0 ] zp[1]:145 [ render_moving::$1 ] zp[1]:146 [ render_moving::$6 ] zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] zp[2]:147 [ render_moving::screen_line#0 ] zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Limited combination testing to 100 combinations of 15552 possible. -Uplifting [render_next] best 4253442 combination zp[2]:37 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 ] reg byte x [ render_next::c#2 render_next::c#1 ] zp[2]:39 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 ] reg byte a [ render_next::cell#0 ] zp[1]:36 [ render_next::l#7 render_next::l#1 ] zp[1]:151 [ render_next::next_piece_char#0 ] reg byte x [ render_next::$6 ] +Uplifting [render_next] best 4253550 combination zp[2]:37 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 ] reg byte x [ render_next::c#2 render_next::c#1 ] zp[2]:39 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 ] reg byte a [ render_next::cell#0 ] zp[1]:36 [ render_next::l#7 render_next::l#1 ] zp[1]:151 [ render_next::next_piece_char#0 ] reg byte x [ render_next::$6 ] Limited combination testing to 100 combinations of 128 possible. -Uplifting [render_playfield] best 4252442 combination zp[2]:20 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] zp[1]:22 [ render_playfield::c#2 render_playfield::c#1 ] zp[1]:19 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] reg byte a [ render_playfield::$0 ] reg byte a [ render_playfield::$3 ] zp[1]:18 [ render_playfield::l#2 render_playfield::l#1 ] +Uplifting [render_playfield] best 4252550 combination zp[2]:20 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] zp[1]:22 [ render_playfield::c#2 render_playfield::c#1 ] zp[1]:19 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] reg byte a [ render_playfield::$0 ] reg byte a [ render_playfield::$3 ] zp[1]:18 [ render_playfield::l#2 render_playfield::l#1 ] Limited combination testing to 100 combinations of 128 possible. -Uplifting [keyboard_event_pressed] best 4252413 combination reg byte y [ keyboard_event_pressed::$0 ] reg byte x [ keyboard_event_pressed::$1 ] reg byte y [ keyboard_event_pressed::row_bits#0 ] reg byte x [ keyboard_event_pressed::keycode#5 ] zp[1]:189 [ keyboard_event_pressed::return#12 ] zp[1]:188 [ keyboard_event_pressed::return#11 ] zp[1]:156 [ keyboard_event_pressed::return#0 ] zp[1]:158 [ keyboard_event_pressed::return#1 ] zp[1]:160 [ keyboard_event_pressed::return#2 ] zp[1]:162 [ keyboard_event_pressed::return#10 ] +Uplifting [keyboard_event_pressed] best 4252521 combination reg byte y [ keyboard_event_pressed::$0 ] reg byte x [ keyboard_event_pressed::$1 ] reg byte y [ keyboard_event_pressed::row_bits#0 ] reg byte x [ keyboard_event_pressed::keycode#5 ] zp[1]:189 [ keyboard_event_pressed::return#12 ] zp[1]:188 [ keyboard_event_pressed::return#11 ] zp[1]:156 [ keyboard_event_pressed::return#0 ] zp[1]:158 [ keyboard_event_pressed::return#1 ] zp[1]:160 [ keyboard_event_pressed::return#2 ] zp[1]:162 [ keyboard_event_pressed::return#10 ] Limited combination testing to 100 combinations of 589824 possible. -Uplifting [render_screen_original] best 4250313 combination zp[2]:56 [ render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ] reg byte x [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ] zp[2]:58 [ render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ] zp[2]:52 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] zp[2]:54 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] zp[1]:51 [ render_screen_original::y#6 render_screen_original::y#1 ] -Uplifting [play_move_down] best 4250295 combination zp[1]:72 [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ] reg byte a [ play_move_down::$2 ] reg byte a [ play_move_down::$12 ] reg byte a [ play_move_down::removed#0 ] zp[1]:168 [ play_move_down::key_event#0 ] zp[1]:169 [ play_move_down::return#0 ] zp[1]:88 [ play_move_down::return#3 ] +Uplifting [render_screen_original] best 4250421 combination zp[2]:56 [ render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ] reg byte x [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ] zp[2]:58 [ render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ] zp[2]:52 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] zp[2]:54 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] zp[1]:51 [ render_screen_original::y#6 render_screen_original::y#1 ] +Uplifting [play_move_down] best 4250403 combination zp[1]:72 [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ] reg byte a [ play_move_down::$2 ] reg byte a [ play_move_down::$12 ] reg byte a [ play_move_down::removed#0 ] zp[1]:168 [ play_move_down::key_event#0 ] zp[1]:169 [ play_move_down::return#0 ] zp[1]:88 [ play_move_down::return#3 ] Limited combination testing to 100 combinations of 12288 possible. -Uplifting [play_move_rotate] best 4250279 combination zp[1]:91 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] reg byte x [ play_move_rotate::$5 ] reg byte a [ play_move_rotate::$2 ] reg byte a [ play_move_rotate::$7 ] zp[1]:174 [ play_move_rotate::key_event#0 ] zp[1]:175 [ play_move_rotate::return#0 ] zp[1]:90 [ play_move_rotate::return#2 ] +Uplifting [play_move_rotate] best 4250387 combination zp[1]:91 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] reg byte x [ play_move_rotate::$5 ] reg byte a [ play_move_rotate::$2 ] reg byte a [ play_move_rotate::$7 ] zp[1]:174 [ play_move_rotate::key_event#0 ] zp[1]:175 [ play_move_rotate::return#0 ] zp[1]:90 [ play_move_rotate::return#2 ] Limited combination testing to 100 combinations of 12288 possible. -Uplifting [play_move_leftright] best 4250252 combination reg byte a [ play_move_leftright::$4 ] reg byte a [ play_move_leftright::$8 ] reg byte a [ play_move_leftright::key_event#0 ] reg byte a [ play_move_leftright::return#0 ] zp[1]:89 [ play_move_leftright::return#2 ] +Uplifting [play_move_leftright] best 4250360 combination reg byte a [ play_move_leftright::$4 ] reg byte a [ play_move_leftright::$8 ] reg byte a [ play_move_leftright::key_event#0 ] reg byte a [ play_move_leftright::return#0 ] zp[1]:89 [ play_move_leftright::return#2 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [render_bcd] best 4250232 combination zp[2]:98 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] zp[2]:92 [ render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ] reg byte a [ render_bcd::$5 ] reg byte a [ render_bcd::$6 ] reg byte a [ render_bcd::$3 ] reg byte a [ render_bcd::$4 ] zp[1]:97 [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ] zp[2]:94 [ render_bcd::offset#6 ] zp[1]:96 [ render_bcd::only_low#6 ] +Uplifting [render_bcd] best 4250340 combination zp[2]:98 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] zp[2]:92 [ render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ] reg byte a [ render_bcd::$5 ] reg byte a [ render_bcd::$6 ] reg byte a [ render_bcd::$3 ] reg byte a [ render_bcd::$4 ] zp[1]:97 [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ] zp[2]:94 [ render_bcd::offset#6 ] zp[1]:96 [ render_bcd::only_low#6 ] Limited combination testing to 100 combinations of 1536 possible. -Uplifting [play_movement] best 4250220 combination zp[1]:48 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] reg byte a [ play_movement::$3 ] reg byte a [ play_movement::$4 ] zp[1]:173 [ play_movement::render#2 ] zp[1]:131 [ play_movement::key_event#0 ] zp[1]:132 [ play_movement::return#3 ] +Uplifting [play_movement] best 4250328 combination zp[1]:48 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] reg byte a [ play_movement::$3 ] reg byte a [ play_movement::$4 ] zp[1]:173 [ play_movement::render#2 ] zp[1]:131 [ play_movement::key_event#0 ] zp[1]:132 [ play_movement::return#3 ] Limited combination testing to 100 combinations of 576 possible. -Uplifting [keyboard_event_get] best 4249314 combination reg byte a [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] reg byte a [ keyboard_event_get::return#3 ] -Uplifting [play_init] best 4249104 combination reg byte a [ play_init::$3 ] zp[1]:16 [ play_init::b#2 play_init::b#1 ] reg byte y [ play_init::j#2 play_init::j#1 ] reg byte x [ play_init::$2 ] zp[1]:15 [ play_init::idx#2 play_init::idx#1 ] zp[2]:13 [ play_init::pli#2 play_init::pli#1 ] +Uplifting [keyboard_event_get] best 4249422 combination reg byte a [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] reg byte a [ keyboard_event_get::return#3 ] +Uplifting [play_init] best 4249212 combination reg byte a [ play_init::$3 ] zp[1]:16 [ play_init::b#2 play_init::b#1 ] reg byte y [ play_init::j#2 play_init::j#1 ] reg byte x [ play_init::$2 ] zp[1]:15 [ play_init::idx#2 play_init::idx#1 ] zp[2]:13 [ play_init::pli#2 play_init::pli#1 ] Limited combination testing to 100 combinations of 432 possible. -Uplifting [render_show] best 4249095 combination reg byte a [ render_show::d018val#3 ] -Uplifting [render_init] best 4248925 combination reg byte y [ render_init::i#2 render_init::i#1 ] reg byte x [ render_init::$5 ] zp[2]:8 [ render_init::li_2#2 render_init::li_2#1 ] zp[2]:6 [ render_init::li_1#2 render_init::li_1#1 ] -Uplifting [sprites_init] best 4248755 combination reg byte y [ sprites_init::s#2 sprites_init::s#1 ] reg byte x [ sprites_init::s2#0 ] zp[1]:11 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Uplifting [main] best 4247755 combination reg byte a [ main::render#1 ] reg byte x [ main::key_event#0 ] -Uplifting [render_score] best 4247755 combination zp[2]:49 [ render_score::screen#3 ] -Uplifting [sprites_irq] best 4247731 combination zp[1]:123 [ 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]:127 [ sprites_irq::ptr#1 ] zp[1]:121 [ sprites_irq::ypos#0 ] zp[1]:124 [ sprites_irq::ptr#0 ] +Uplifting [render_show] best 4249203 combination reg byte a [ render_show::d018val#3 ] +Uplifting [render_init] best 4249033 combination reg byte y [ render_init::i#2 render_init::i#1 ] reg byte x [ render_init::$5 ] zp[2]:8 [ render_init::li_2#2 render_init::li_2#1 ] zp[2]:6 [ render_init::li_1#2 render_init::li_1#1 ] +Uplifting [sprites_init] best 4248863 combination reg byte y [ sprites_init::s#2 sprites_init::s#1 ] reg byte x [ sprites_init::s2#0 ] zp[1]:11 [ sprites_init::xpos#2 sprites_init::xpos#1 ] +Uplifting [main] best 4247863 combination reg byte a [ main::render#1 ] reg byte x [ main::key_event#0 ] +Uplifting [render_score] best 4247863 combination zp[2]:49 [ render_score::screen#3 ] +Uplifting [sprites_irq] best 4247839 combination zp[1]:123 [ 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]:127 [ sprites_irq::ptr#1 ] zp[1]:121 [ sprites_irq::ypos#0 ] zp[1]:124 [ sprites_irq::ptr#0 ] Limited combination testing to 100 combinations of 12288 possible. -Uplifting [MOS6526_CIA] best 4247731 combination -Uplifting [MOS6569_VICII] best 4247731 combination -Uplifting [MOS6581_SID] best 4247731 combination -Uplifting [render_screen_swap] best 4247731 combination -Uplifting [sprites_irq_init] best 4247731 combination -Uplifting [__start] best 4247731 combination +Uplifting [MOS6526_CIA] best 4247839 combination +Uplifting [MOS6569_VICII] best 4247839 combination +Uplifting [MOS6581_SID] best 4247839 combination +Uplifting [render_screen_swap] best 4247839 combination +Uplifting [sprites_irq_init] best 4247839 combination +Uplifting [__start] best 4247839 combination Attempting to uplift remaining variables inzp[1]:67 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] -Uplifting [play_collision] best 4247731 combination zp[1]:67 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] +Uplifting [play_collision] best 4247839 combination zp[1]:67 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] Attempting to uplift remaining variables inzp[1]:68 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] -Uplifting [play_collision] best 4247731 combination zp[1]:68 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] +Uplifting [play_collision] best 4247839 combination zp[1]:68 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] Attempting to uplift remaining variables inzp[1]:102 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] -Uplifting [play_lock_current] best 4247731 combination zp[1]:102 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] +Uplifting [play_lock_current] best 4247839 combination zp[1]:102 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] Attempting to uplift remaining variables inzp[1]:179 [ play_collision::$14 ] -Uplifting [play_collision] best 4243731 combination reg byte a [ play_collision::$14 ] +Uplifting [play_collision] best 4243839 combination reg byte a [ play_collision::$14 ] Attempting to uplift remaining variables inzp[1]:108 [ play_remove_lines::x#2 play_remove_lines::x#1 ] -Uplifting [play_remove_lines] best 4243731 combination zp[1]:108 [ play_remove_lines::x#2 play_remove_lines::x#1 ] +Uplifting [play_remove_lines] best 4243839 combination zp[1]:108 [ play_remove_lines::x#2 play_remove_lines::x#1 ] Attempting to uplift remaining variables inzp[1]:182 [ play_collision::i#1 ] -Uplifting [play_collision] best 4243731 combination zp[1]:182 [ play_collision::i#1 ] +Uplifting [play_collision] best 4243839 combination zp[1]:182 [ play_collision::i#1 ] Attempting to uplift remaining variables inzp[1]:103 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] -Uplifting [play_lock_current] best 4243731 combination zp[1]:103 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] +Uplifting [play_lock_current] best 4243839 combination zp[1]:103 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] Attempting to uplift remaining variables inzp[1]:65 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] -Uplifting [play_collision] best 4243731 combination zp[1]:65 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] +Uplifting [play_collision] best 4243839 combination zp[1]:65 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] Attempting to uplift remaining variables inzp[1]:66 [ play_collision::l#6 play_collision::l#1 ] -Uplifting [play_collision] best 4243731 combination zp[1]:66 [ play_collision::l#6 play_collision::l#1 ] +Uplifting [play_collision] best 4243839 combination zp[1]:66 [ play_collision::l#6 play_collision::l#1 ] Attempting to uplift remaining variables inzp[1]:109 [ play_remove_lines::full#4 play_remove_lines::full#2 ] -Uplifting [play_remove_lines] best 4243731 combination zp[1]:109 [ play_remove_lines::full#4 play_remove_lines::full#2 ] +Uplifting [play_remove_lines] best 4243839 combination zp[1]:109 [ play_remove_lines::full#4 play_remove_lines::full#2 ] Attempting to uplift remaining variables inzp[1]:212 [ play_remove_lines::c#0 ] -Uplifting [play_remove_lines] best 4243731 combination zp[1]:212 [ play_remove_lines::c#0 ] +Uplifting [play_remove_lines] best 4243839 combination zp[1]:212 [ play_remove_lines::c#0 ] Attempting to uplift remaining variables inzp[1]:106 [ play_remove_lines::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#1 ] -Uplifting [play_remove_lines] best 4243731 combination zp[1]:106 [ play_remove_lines::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#1 ] +Uplifting [play_remove_lines] best 4243839 combination zp[1]:106 [ play_remove_lines::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#1 ] Attempting to uplift remaining variables inzp[1]:211 [ play_lock_current::i#1 ] -Uplifting [play_lock_current] best 4243731 combination zp[1]:211 [ play_lock_current::i#1 ] +Uplifting [play_lock_current] best 4243839 combination zp[1]:211 [ play_lock_current::i#1 ] Attempting to uplift remaining variables inzp[1]:87 [ next_piece_idx#32 next_piece_idx#18 next_piece_idx#23 play_spawn_current::piece_idx#2 next_piece_idx#17 play_spawn_current::piece_idx#1 ] -Uplifting [] best 4243731 combination zp[1]:87 [ next_piece_idx#32 next_piece_idx#18 next_piece_idx#23 play_spawn_current::piece_idx#2 next_piece_idx#17 play_spawn_current::piece_idx#1 ] +Uplifting [] best 4243839 combination zp[1]:87 [ next_piece_idx#32 next_piece_idx#18 next_piece_idx#23 play_spawn_current::piece_idx#2 next_piece_idx#17 play_spawn_current::piece_idx#1 ] Attempting to uplift remaining variables inzp[1]:105 [ play_remove_lines::y#8 play_remove_lines::y#1 ] -Uplifting [play_remove_lines] best 4243731 combination zp[1]:105 [ play_remove_lines::y#8 play_remove_lines::y#1 ] +Uplifting [play_remove_lines] best 4243839 combination zp[1]:105 [ play_remove_lines::y#8 play_remove_lines::y#1 ] Attempting to uplift remaining variables inzp[1]:101 [ play_lock_current::l#6 play_lock_current::l#1 ] -Uplifting [play_lock_current] best 4243731 combination zp[1]:101 [ play_lock_current::l#6 play_lock_current::l#1 ] +Uplifting [play_lock_current] best 4243839 combination zp[1]:101 [ play_lock_current::l#6 play_lock_current::l#1 ] Attempting to uplift remaining variables inzp[1]:100 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] -Uplifting [play_lock_current] best 4243731 combination zp[1]:100 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] +Uplifting [play_lock_current] best 4243839 combination zp[1]:100 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] Attempting to uplift remaining variables inzp[1]:46 [ keyboard_events_size#11 keyboard_events_size#32 keyboard_events_size#20 keyboard_events_size#17 keyboard_events_size#14 keyboard_events_size#31 keyboard_events_size#0 keyboard_events_size#1 keyboard_events_size#3 ] -Uplifting [] best 4243731 combination zp[1]:46 [ keyboard_events_size#11 keyboard_events_size#32 keyboard_events_size#20 keyboard_events_size#17 keyboard_events_size#14 keyboard_events_size#31 keyboard_events_size#0 keyboard_events_size#1 keyboard_events_size#3 ] +Uplifting [] best 4243839 combination zp[1]:46 [ keyboard_events_size#11 keyboard_events_size#32 keyboard_events_size#20 keyboard_events_size#17 keyboard_events_size#14 keyboard_events_size#31 keyboard_events_size#0 keyboard_events_size#1 keyboard_events_size#3 ] Attempting to uplift remaining variables inzp[1]:64 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] -Uplifting [play_collision] best 4243731 combination zp[1]:64 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] +Uplifting [play_collision] best 4243839 combination zp[1]:64 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] Attempting to uplift remaining variables inzp[1]:81 [ current_piece_char#31 current_piece_char#23 current_piece_char#4 current_piece_char#17 ] -Uplifting [] best 4243731 combination zp[1]:81 [ current_piece_char#31 current_piece_char#23 current_piece_char#4 current_piece_char#17 ] +Uplifting [] best 4243839 combination zp[1]:81 [ current_piece_char#31 current_piece_char#23 current_piece_char#4 current_piece_char#17 ] Attempting to uplift remaining variables inzp[1]:44 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] -Uplifting [keyboard_event_scan] best 4093731 combination reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] +Uplifting [keyboard_event_scan] best 4093839 combination reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] Attempting to uplift remaining variables inzp[1]:45 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] -Uplifting [keyboard_event_scan] best 4093731 combination zp[1]:45 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] +Uplifting [keyboard_event_scan] best 4093839 combination zp[1]:45 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] Attempting to uplift remaining variables inzp[1]:78 [ level_bcd#33 level_bcd#10 level_bcd#18 level_bcd#20 level_bcd#63 level_bcd#22 level_bcd#7 ] -Uplifting [] best 4093731 combination zp[1]:78 [ level_bcd#33 level_bcd#10 level_bcd#18 level_bcd#20 level_bcd#63 level_bcd#22 level_bcd#7 ] +Uplifting [] best 4093839 combination zp[1]:78 [ level_bcd#33 level_bcd#10 level_bcd#18 level_bcd#20 level_bcd#63 level_bcd#22 level_bcd#7 ] Attempting to uplift remaining variables inzp[1]:77 [ current_movedown_slow#39 current_movedown_slow#13 current_movedown_slow#0 current_movedown_slow#22 current_movedown_slow#24 current_movedown_slow#67 current_movedown_slow#9 ] -Uplifting [] best 4093731 combination zp[1]:77 [ current_movedown_slow#39 current_movedown_slow#13 current_movedown_slow#0 current_movedown_slow#22 current_movedown_slow#24 current_movedown_slow#67 current_movedown_slow#9 ] +Uplifting [] best 4093839 combination zp[1]:77 [ current_movedown_slow#39 current_movedown_slow#13 current_movedown_slow#0 current_movedown_slow#22 current_movedown_slow#24 current_movedown_slow#67 current_movedown_slow#9 ] Attempting to uplift remaining variables inzp[1]:43 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] -Uplifting [keyboard_event_scan] best 4093731 combination zp[1]:43 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] +Uplifting [keyboard_event_scan] best 4093839 combination zp[1]:43 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] Attempting to uplift remaining variables inzp[1]:85 [ current_xpos#45 current_xpos#13 current_xpos#100 current_xpos#2 current_xpos#23 current_xpos#27 current_xpos#5 current_xpos#7 ] -Uplifting [] best 4093731 combination zp[1]:85 [ current_xpos#45 current_xpos#13 current_xpos#100 current_xpos#2 current_xpos#23 current_xpos#27 current_xpos#5 current_xpos#7 ] +Uplifting [] best 4093839 combination zp[1]:85 [ current_xpos#45 current_xpos#13 current_xpos#100 current_xpos#2 current_xpos#23 current_xpos#27 current_xpos#5 current_xpos#7 ] Attempting to uplift remaining variables inzp[1]:155 [ keyboard_event_scan::row_scan#0 ] -Uplifting [keyboard_event_scan] best 4093731 combination zp[1]:155 [ keyboard_event_scan::row_scan#0 ] +Uplifting [keyboard_event_scan] best 4093839 combination zp[1]:155 [ keyboard_event_scan::row_scan#0 ] Attempting to uplift remaining variables inzp[1]:63 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] -Uplifting [play_collision] best 4093715 combination reg byte x [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] +Uplifting [play_collision] best 4093823 combination reg byte x [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] Attempting to uplift remaining variables inzp[1]:76 [ level#35 level#25 level#18 level#20 level#22 ] -Uplifting [] best 4093715 combination zp[1]:76 [ level#35 level#25 level#18 level#20 level#22 ] +Uplifting [] best 4093823 combination zp[1]:76 [ level#35 level#25 level#18 level#20 level#22 ] Attempting to uplift remaining variables inzp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] -Uplifting [render_moving] best 4093715 combination zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] +Uplifting [render_moving] best 4093823 combination zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] Attempting to uplift remaining variables inzp[1]:22 [ render_playfield::c#2 render_playfield::c#1 ] -Uplifting [render_playfield] best 4093715 combination zp[1]:22 [ render_playfield::c#2 render_playfield::c#1 ] +Uplifting [render_playfield] best 4093823 combination zp[1]:22 [ render_playfield::c#2 render_playfield::c#1 ] Attempting to uplift remaining variables inzp[1]:140 [ play_collision::return#10 ] -Uplifting [play_collision] best 4093709 combination reg byte a [ play_collision::return#10 ] +Uplifting [play_collision] best 4093817 combination reg byte a [ play_collision::return#10 ] Attempting to uplift remaining variables inzp[1]:19 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] -Uplifting [render_playfield] best 4093709 combination zp[1]:19 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] +Uplifting [render_playfield] best 4093817 combination zp[1]:19 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] Attempting to uplift remaining variables inzp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] -Uplifting [render_moving] best 4093709 combination zp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] +Uplifting [render_moving] best 4093817 combination zp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] Attempting to uplift remaining variables inzp[1]:72 [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ] -Uplifting [play_move_down] best 4093709 combination zp[1]:72 [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ] +Uplifting [play_move_down] best 4093817 combination zp[1]:72 [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ] Attempting to uplift remaining variables inzp[1]:73 [ current_ypos#40 current_ypos#2 current_ypos#10 current_ypos#5 current_ypos#20 ] -Uplifting [] best 4093709 combination zp[1]:73 [ current_ypos#40 current_ypos#2 current_ypos#10 current_ypos#5 current_ypos#20 ] +Uplifting [] best 4093817 combination zp[1]:73 [ current_ypos#40 current_ypos#2 current_ypos#10 current_ypos#5 current_ypos#20 ] Attempting to uplift remaining variables inzp[1]:91 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] -Uplifting [play_move_rotate] best 4093709 combination zp[1]:91 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] +Uplifting [play_move_rotate] best 4093817 combination zp[1]:91 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] Attempting to uplift remaining variables inzp[1]:195 [ play_update_score::removed#0 ] -Uplifting [play_update_score] best 4093703 combination reg byte x [ play_update_score::removed#0 ] +Uplifting [play_update_score] best 4093811 combination reg byte x [ play_update_score::removed#0 ] Attempting to uplift remaining variables inzp[1]:86 [ game_over#29 game_over#66 game_over#22 game_over#53 game_over#16 ] -Uplifting [] best 4093703 combination zp[1]:86 [ game_over#29 game_over#66 game_over#22 game_over#53 game_over#16 ] +Uplifting [] best 4093811 combination zp[1]:86 [ game_over#29 game_over#66 game_over#22 game_over#53 game_over#16 ] Attempting to uplift remaining variables inzp[1]:82 [ current_orientation#39 current_orientation#12 current_orientation#18 current_orientation#21 current_orientation#26 current_orientation#6 ] -Uplifting [] best 4093703 combination zp[1]:82 [ current_orientation#39 current_orientation#12 current_orientation#18 current_orientation#21 current_orientation#26 current_orientation#6 ] +Uplifting [] best 4093811 combination zp[1]:82 [ current_orientation#39 current_orientation#12 current_orientation#18 current_orientation#21 current_orientation#26 current_orientation#6 ] Attempting to uplift remaining variables inzp[1]:214 [ play_update_score::lines_before#0 ] -Uplifting [play_update_score] best 4093703 combination zp[1]:214 [ play_update_score::lines_before#0 ] +Uplifting [play_update_score] best 4093811 combination zp[1]:214 [ play_update_score::lines_before#0 ] Attempting to uplift remaining variables inzp[1]:145 [ render_moving::$1 ] -Uplifting [render_moving] best 4093103 combination reg byte a [ render_moving::$1 ] +Uplifting [render_moving] best 4093211 combination reg byte a [ render_moving::$1 ] Attempting to uplift remaining variables inzp[1]:146 [ render_moving::$6 ] -Uplifting [render_moving] best 4092703 combination reg byte a [ render_moving::$6 ] +Uplifting [render_moving] best 4092811 combination reg byte a [ render_moving::$6 ] Attempting to uplift remaining variables inzp[1]:189 [ keyboard_event_pressed::return#12 ] -Uplifting [keyboard_event_pressed] best 4092697 combination reg byte a [ keyboard_event_pressed::return#12 ] +Uplifting [keyboard_event_pressed] best 4092805 combination reg byte a [ keyboard_event_pressed::return#12 ] Attempting to uplift remaining variables inzp[1]:191 [ play_collision::return#0 ] -Uplifting [play_collision] best 4092691 combination reg byte a [ play_collision::return#0 ] +Uplifting [play_collision] best 4092799 combination reg byte a [ play_collision::return#0 ] Attempting to uplift remaining variables inzp[1]:193 [ play_remove_lines::return#0 ] -Uplifting [play_remove_lines] best 4092685 combination reg byte a [ play_remove_lines::return#0 ] +Uplifting [play_remove_lines] best 4092793 combination reg byte a [ play_remove_lines::return#0 ] Attempting to uplift remaining variables inzp[1]:196 [ play_collision::return#13 ] -Uplifting [play_collision] best 4092679 combination reg byte a [ play_collision::return#13 ] +Uplifting [play_collision] best 4092787 combination reg byte a [ play_collision::return#13 ] Attempting to uplift remaining variables inzp[1]:198 [ play_collision::return#1 ] -Uplifting [play_collision] best 4092673 combination reg byte a [ play_collision::return#1 ] +Uplifting [play_collision] best 4092781 combination reg byte a [ play_collision::return#1 ] Attempting to uplift remaining variables inzp[1]:201 [ play_collision::return#14 ] -Uplifting [play_collision] best 4092667 combination reg byte a [ play_collision::return#14 ] +Uplifting [play_collision] best 4092775 combination reg byte a [ play_collision::return#14 ] Attempting to uplift remaining variables inzp[1]:70 [ play_collision::return#15 ] -Uplifting [play_collision] best 4092637 combination reg byte a [ play_collision::return#15 ] +Uplifting [play_collision] best 4092745 combination reg byte a [ play_collision::return#15 ] Attempting to uplift remaining variables inzp[1]:18 [ render_playfield::l#2 render_playfield::l#1 ] -Uplifting [render_playfield] best 4092637 combination zp[1]:18 [ render_playfield::l#2 render_playfield::l#1 ] +Uplifting [render_playfield] best 4092745 combination zp[1]:18 [ render_playfield::l#2 render_playfield::l#1 ] Attempting to uplift remaining variables inzp[1]:36 [ render_next::l#7 render_next::l#1 ] -Uplifting [render_next] best 4092637 combination zp[1]:36 [ render_next::l#7 render_next::l#1 ] +Uplifting [render_next] best 4092745 combination zp[1]:36 [ render_next::l#7 render_next::l#1 ] Attempting to uplift remaining variables inzp[1]:188 [ keyboard_event_pressed::return#11 ] -Uplifting [keyboard_event_pressed] best 4092619 combination reg byte a [ keyboard_event_pressed::return#11 ] +Uplifting [keyboard_event_pressed] best 4092727 combination reg byte a [ keyboard_event_pressed::return#11 ] Attempting to uplift remaining variables inzp[1]:30 [ render_moving::l#4 render_moving::l#1 ] -Uplifting [render_moving] best 4092619 combination zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] +Uplifting [render_moving] best 4092727 combination zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] Attempting to uplift remaining variables inzp[1]:174 [ play_move_rotate::key_event#0 ] -Uplifting [play_move_rotate] best 4092610 combination reg byte a [ play_move_rotate::key_event#0 ] +Uplifting [play_move_rotate] best 4092718 combination reg byte a [ play_move_rotate::key_event#0 ] Attempting to uplift remaining variables inzp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] -Uplifting [render_moving] best 4092610 combination zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] +Uplifting [render_moving] best 4092718 combination zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Attempting to uplift remaining variables inzp[1]:151 [ render_next::next_piece_char#0 ] -Uplifting [render_next] best 4092610 combination zp[1]:151 [ render_next::next_piece_char#0 ] +Uplifting [render_next] best 4092718 combination zp[1]:151 [ render_next::next_piece_char#0 ] Attempting to uplift remaining variables inzp[1]:168 [ play_move_down::key_event#0 ] -Uplifting [play_move_down] best 4092604 combination reg byte a [ play_move_down::key_event#0 ] +Uplifting [play_move_down] best 4092712 combination reg byte a [ play_move_down::key_event#0 ] Attempting to uplift remaining variables inzp[1]:28 [ current_piece_char#70 current_piece_char#99 current_piece_char#100 ] -Uplifting [] best 4092604 combination zp[1]:28 [ current_piece_char#70 current_piece_char#99 current_piece_char#100 ] +Uplifting [] best 4092712 combination zp[1]:28 [ current_piece_char#70 current_piece_char#99 current_piece_char#100 ] Attempting to uplift remaining variables inzp[1]:4 [ current_movedown_counter#17 current_movedown_counter#15 current_movedown_counter#13 ] -Uplifting [] best 4092604 combination zp[1]:4 [ current_movedown_counter#17 current_movedown_counter#15 current_movedown_counter#13 ] +Uplifting [] best 4092712 combination zp[1]:4 [ current_movedown_counter#17 current_movedown_counter#15 current_movedown_counter#13 ] Attempting to uplift remaining variables inzp[1]:139 [ play_spawn_current::$7 ] -Uplifting [play_spawn_current] best 4092604 combination zp[1]:139 [ play_spawn_current::$7 ] +Uplifting [play_spawn_current] best 4092712 combination zp[1]:139 [ play_spawn_current::$7 ] Attempting to uplift remaining variables inzp[1]:48 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] -Uplifting [play_movement] best 4092604 combination zp[1]:48 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] +Uplifting [play_movement] best 4092712 combination zp[1]:48 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] Attempting to uplift remaining variables inzp[1]:156 [ keyboard_event_pressed::return#0 ] -Uplifting [keyboard_event_pressed] best 4092598 combination reg byte a [ keyboard_event_pressed::return#0 ] +Uplifting [keyboard_event_pressed] best 4092706 combination reg byte a [ keyboard_event_pressed::return#0 ] Attempting to uplift remaining variables inzp[1]:157 [ keyboard_event_scan::$0 ] -Uplifting [keyboard_event_scan] best 4092592 combination reg byte a [ keyboard_event_scan::$0 ] +Uplifting [keyboard_event_scan] best 4092700 combination reg byte a [ keyboard_event_scan::$0 ] Attempting to uplift remaining variables inzp[1]:158 [ keyboard_event_pressed::return#1 ] -Uplifting [keyboard_event_pressed] best 4092586 combination reg byte a [ keyboard_event_pressed::return#1 ] +Uplifting [keyboard_event_pressed] best 4092694 combination reg byte a [ keyboard_event_pressed::return#1 ] Attempting to uplift remaining variables inzp[1]:159 [ keyboard_event_scan::$3 ] -Uplifting [keyboard_event_scan] best 4092580 combination reg byte a [ keyboard_event_scan::$3 ] +Uplifting [keyboard_event_scan] best 4092688 combination reg byte a [ keyboard_event_scan::$3 ] Attempting to uplift remaining variables inzp[1]:160 [ keyboard_event_pressed::return#2 ] -Uplifting [keyboard_event_pressed] best 4092574 combination reg byte a [ keyboard_event_pressed::return#2 ] +Uplifting [keyboard_event_pressed] best 4092682 combination reg byte a [ keyboard_event_pressed::return#2 ] Attempting to uplift remaining variables inzp[1]:161 [ keyboard_event_scan::$6 ] -Uplifting [keyboard_event_scan] best 4092568 combination reg byte a [ keyboard_event_scan::$6 ] +Uplifting [keyboard_event_scan] best 4092676 combination reg byte a [ keyboard_event_scan::$6 ] Attempting to uplift remaining variables inzp[1]:162 [ keyboard_event_pressed::return#10 ] -Uplifting [keyboard_event_pressed] best 4092562 combination reg byte a [ keyboard_event_pressed::return#10 ] +Uplifting [keyboard_event_pressed] best 4092670 combination reg byte a [ keyboard_event_pressed::return#10 ] Attempting to uplift remaining variables inzp[1]:163 [ keyboard_event_scan::$9 ] -Uplifting [keyboard_event_scan] best 4092556 combination reg byte a [ keyboard_event_scan::$9 ] +Uplifting [keyboard_event_scan] best 4092664 combination reg byte a [ keyboard_event_scan::$9 ] Attempting to uplift remaining variables inzp[1]:169 [ play_move_down::return#0 ] -Uplifting [play_move_down] best 4092550 combination reg byte a [ play_move_down::return#0 ] +Uplifting [play_move_down] best 4092658 combination reg byte a [ play_move_down::return#0 ] Attempting to uplift remaining variables inzp[1]:175 [ play_move_rotate::return#0 ] -Uplifting [play_move_rotate] best 4092544 combination reg byte a [ play_move_rotate::return#0 ] +Uplifting [play_move_rotate] best 4092652 combination reg byte a [ play_move_rotate::return#0 ] Attempting to uplift remaining variables inzp[1]:51 [ render_screen_original::y#6 render_screen_original::y#1 ] -Uplifting [render_screen_original] best 4092544 combination zp[1]:51 [ render_screen_original::y#6 render_screen_original::y#1 ] +Uplifting [render_screen_original] best 4092652 combination zp[1]:51 [ render_screen_original::y#6 render_screen_original::y#1 ] Attempting to uplift remaining variables inzp[1]:97 [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ] -Uplifting [render_bcd] best 4092524 combination reg byte x [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ] +Uplifting [render_bcd] best 4092632 combination reg byte x [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ] Attempting to uplift remaining variables inzp[1]:96 [ render_bcd::only_low#6 ] -Uplifting [render_bcd] best 4092503 combination reg byte y [ render_bcd::only_low#6 ] +Uplifting [render_bcd] best 4092611 combination reg byte y [ render_bcd::only_low#6 ] Attempting to uplift remaining variables inzp[1]:25 [ current_xpos#61 current_xpos#118 current_xpos#119 ] -Uplifting [] best 4092503 combination zp[1]:25 [ current_xpos#61 current_xpos#118 current_xpos#119 ] +Uplifting [] best 4092611 combination zp[1]:25 [ current_xpos#61 current_xpos#118 current_xpos#119 ] Attempting to uplift remaining variables inzp[1]:24 [ render_screen_render#35 render_screen_render#64 ] -Uplifting [] best 4092503 combination zp[1]:24 [ render_screen_render#35 render_screen_render#64 ] +Uplifting [] best 4092611 combination zp[1]:24 [ render_screen_render#35 render_screen_render#64 ] Attempting to uplift remaining variables inzp[1]:173 [ play_movement::render#2 ] -Uplifting [play_movement] best 4092503 combination zp[1]:173 [ play_movement::render#2 ] +Uplifting [play_movement] best 4092611 combination zp[1]:173 [ play_movement::render#2 ] Attempting to uplift remaining variables inzp[1]:88 [ play_move_down::return#3 ] -Uplifting [play_move_down] best 4092496 combination reg byte x [ play_move_down::return#3 ] +Uplifting [play_move_down] best 4092604 combination reg byte x [ play_move_down::return#3 ] Attempting to uplift remaining variables inzp[1]:89 [ play_move_leftright::return#2 ] -Uplifting [play_move_leftright] best 4092487 combination reg byte a [ play_move_leftright::return#2 ] +Uplifting [play_move_leftright] best 4092595 combination reg byte a [ play_move_leftright::return#2 ] Attempting to uplift remaining variables inzp[1]:90 [ play_move_rotate::return#2 ] -Uplifting [play_move_rotate] best 4092478 combination reg byte a [ play_move_rotate::return#2 ] +Uplifting [play_move_rotate] best 4092586 combination reg byte a [ play_move_rotate::return#2 ] Attempting to uplift remaining variables inzp[1]:131 [ play_movement::key_event#0 ] -Uplifting [play_movement] best 4092478 combination zp[1]:131 [ play_movement::key_event#0 ] +Uplifting [play_movement] best 4092586 combination zp[1]:131 [ play_movement::key_event#0 ] Attempting to uplift remaining variables inzp[1]:16 [ play_init::b#2 play_init::b#1 ] -Uplifting [play_init] best 4092378 combination reg byte x [ play_init::b#2 play_init::b#1 ] +Uplifting [play_init] best 4092486 combination reg byte x [ play_init::b#2 play_init::b#1 ] Attempting to uplift remaining variables inzp[1]:132 [ play_movement::return#3 ] -Uplifting [play_movement] best 4091778 combination reg byte a [ play_movement::return#3 ] +Uplifting [play_movement] best 4091886 combination reg byte a [ play_movement::return#3 ] Attempting to uplift remaining variables inzp[1]:11 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Uplifting [sprites_init] best 4091778 combination zp[1]:11 [ sprites_init::xpos#2 sprites_init::xpos#1 ] +Uplifting [sprites_init] best 4091886 combination zp[1]:11 [ sprites_init::xpos#2 sprites_init::xpos#1 ] Attempting to uplift remaining variables inzp[1]:15 [ play_init::idx#2 play_init::idx#1 ] -Uplifting [play_init] best 4091778 combination zp[1]:15 [ play_init::idx#2 play_init::idx#1 ] +Uplifting [play_init] best 4091886 combination zp[1]:15 [ play_init::idx#2 play_init::idx#1 ] Attempting to uplift remaining variables inzp[1]:34 [ render_screen_render#16 render_screen_render#65 ] -Uplifting [] best 4091742 combination reg byte x [ render_screen_render#16 render_screen_render#65 ] +Uplifting [] best 4091850 combination reg byte x [ render_screen_render#16 render_screen_render#65 ] Attempting to uplift remaining variables inzp[1]:23 [ current_ypos#14 current_ypos#97 current_ypos#98 ] -Uplifting [] best 4091706 combination reg byte x [ current_ypos#14 current_ypos#97 current_ypos#98 ] +Uplifting [] best 4091814 combination reg byte x [ current_ypos#14 current_ypos#97 current_ypos#98 ] Attempting to uplift remaining variables inzp[1]:112 [ render_screen_showing ] -Uplifting [] best 4091706 combination zp[1]:112 [ render_screen_showing ] +Uplifting [] best 4091814 combination zp[1]:112 [ render_screen_showing ] Attempting to uplift remaining variables inzp[1]:2 [ render_screen_show#17 render_screen_show#14 ] -Uplifting [] best 4091706 combination zp[1]:2 [ render_screen_show#17 render_screen_show#14 ] +Uplifting [] best 4091814 combination zp[1]:2 [ render_screen_show#17 render_screen_show#14 ] Attempting to uplift remaining variables inzp[1]:35 [ next_piece_idx#13 next_piece_idx#79 next_piece_idx#80 ] -Uplifting [] best 4091669 combination reg byte y [ next_piece_idx#13 next_piece_idx#79 next_piece_idx#80 ] +Uplifting [] best 4091777 combination reg byte y [ next_piece_idx#13 next_piece_idx#79 next_piece_idx#80 ] Attempting to uplift remaining variables inzp[1]:3 [ render_screen_render#19 render_screen_render#12 ] -Uplifting [] best 4091669 combination zp[1]:3 [ render_screen_render#19 render_screen_render#12 ] +Uplifting [] best 4091777 combination zp[1]:3 [ render_screen_render#19 render_screen_render#12 ] Attempting to uplift remaining variables inzp[1]:123 [ sprites_irq::raster_sprite_gfx_modify ] -Uplifting [sprites_irq] best 4091669 combination zp[1]:123 [ sprites_irq::raster_sprite_gfx_modify ] +Uplifting [sprites_irq] best 4091777 combination zp[1]:123 [ sprites_irq::raster_sprite_gfx_modify ] Attempting to uplift remaining variables inzp[1]:127 [ sprites_irq::ptr#1 ] -Uplifting [sprites_irq] best 4091657 combination reg byte x [ sprites_irq::ptr#1 ] +Uplifting [sprites_irq] best 4091765 combination reg byte x [ sprites_irq::ptr#1 ] Attempting to uplift remaining variables inzp[1]:121 [ sprites_irq::ypos#0 ] -Uplifting [sprites_irq] best 4091642 combination reg byte a [ sprites_irq::ypos#0 ] +Uplifting [sprites_irq] best 4091750 combination reg byte a [ sprites_irq::ypos#0 ] Attempting to uplift remaining variables inzp[1]:124 [ sprites_irq::ptr#0 ] -Uplifting [sprites_irq] best 4091627 combination reg byte x [ sprites_irq::ptr#0 ] +Uplifting [sprites_irq] best 4091735 combination reg byte x [ sprites_irq::ptr#0 ] Attempting to uplift remaining variables inzp[1]:118 [ irq_sprite_ypos ] -Uplifting [] best 4091627 combination zp[1]:118 [ irq_sprite_ypos ] +Uplifting [] best 4091735 combination zp[1]:118 [ irq_sprite_ypos ] Attempting to uplift remaining variables inzp[1]:120 [ irq_cnt ] -Uplifting [] best 4091627 combination zp[1]:120 [ irq_cnt ] +Uplifting [] best 4091735 combination zp[1]:120 [ irq_cnt ] Attempting to uplift remaining variables inzp[1]:119 [ irq_sprite_ptr ] -Uplifting [] best 4091627 combination zp[1]:119 [ irq_sprite_ptr ] +Uplifting [] best 4091735 combination zp[1]:119 [ irq_sprite_ptr ] Attempting to uplift remaining variables inzp[1]:117 [ irq_raster_next ] -Uplifting [] best 4091627 combination zp[1]:117 [ irq_raster_next ] +Uplifting [] best 4091735 combination zp[1]:117 [ irq_raster_next ] Coalescing zero page register [ zp[2]:49 [ render_score::screen#3 ] ] with [ zp[2]:92 [ render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ] ] - score: 6 Coalescing zero page register [ zp[1]:48 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] ] with [ zp[1]:173 [ play_movement::render#2 ] ] - score: 2 Coalescing zero page register [ zp[2]:94 [ render_bcd::offset#6 ] ] with [ zp[2]:98 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] ] - score: 1 @@ -12535,9 +12535,6 @@ Allocated (was zp[1]:211) zp[1]:56 [ play_lock_current::i#1 play_collision::i#1 Allocated (was zp[1]:214) zp[1]:57 [ play_update_score::lines_before#0 play_remove_lines::c#0 play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] Allocated (was zp[4]:216) zp[4]:58 [ play_update_score::add_bcd#0 ] Interrupt procedure sprites_irq clobbers AXcnzvdP -Removing interrupt register storage sty regy+1 in 21 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regy: in 55 [36] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldy #00 in 55 [36] return - exit interrupt(HARDWARE_CLOBBER) ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -12770,7 +12767,7 @@ __start: { sprites_irq: { .const toSpritePtr1_return = $ff&PLAYFIELD_SPRITES/$40 .label raster_sprite_gfx_modify = $2d - // entry interrupt(HARDWARE_CLOBBER) + // interrupt(isr_hardware_clobax_entry) -- isr_hardware_clobax_entry sta rega+1 stx regx+1 // asm { cld } @@ -12872,11 +12869,12 @@ sprites_irq: { jmp __breturn // sprites_irq::@return __breturn: - // [36] return - exit interrupt(HARDWARE_CLOBBER) + // [36] return + // interrupt(isr_hardware_clobax_exit) -- isr_hardware_clobax_exit rega: - lda #00 + lda #0 regx: - ldx #00 + ldx #0 rti // sprites_irq::@4 __b4: @@ -17419,7 +17417,7 @@ byte sprites_init::s2#0 reg byte x 2002.0 byte sprites_init::xpos byte sprites_init::xpos#1 xpos zp[1]:34 667.3333333333334 byte sprites_init::xpos#2 xpos zp[1]:34 750.75 -interrupt(HARDWARE_CLOBBER) void sprites_irq() +__interrupt(hardware_clobber) void sprites_irq() byte~ sprites_irq::$0 reg byte x 4.0 byte sprites_irq::ptr byte sprites_irq::ptr#0 reg byte x 2.5 @@ -17590,7 +17588,7 @@ reg byte a [ play_increase_level::$5 ] FINAL ASSEMBLER -Score: 3343802 +Score: 3343892 // File Comments // Tetris Game for the Commodore 64 @@ -17813,7 +17811,7 @@ __start: { sprites_irq: { .const toSpritePtr1_return = $ff&PLAYFIELD_SPRITES/$40 .label raster_sprite_gfx_modify = $2d - // entry interrupt(HARDWARE_CLOBBER) + // interrupt(isr_hardware_clobax_entry) -- isr_hardware_clobax_entry sta rega+1 stx regx+1 // asm @@ -17928,11 +17926,12 @@ sprites_irq: { sta IRQ_STATUS // sprites_irq::@return // } - // [36] return - exit interrupt(HARDWARE_CLOBBER) + // [36] return + // interrupt(isr_hardware_clobax_exit) -- isr_hardware_clobax_exit rega: - lda #00 + lda #0 regx: - ldx #00 + ldx #0 rti // sprites_irq::@4 __b4: diff --git a/src/test/ref/complex/tetris/tetris.sym b/src/test/ref/complex/tetris/tetris.sym index bea33ab49..4a5a23913 100644 --- a/src/test/ref/complex/tetris/tetris.sym +++ b/src/test/ref/complex/tetris/tetris.sym @@ -700,7 +700,7 @@ byte sprites_init::s2#0 reg byte x 2002.0 byte sprites_init::xpos byte sprites_init::xpos#1 xpos zp[1]:34 667.3333333333334 byte sprites_init::xpos#2 xpos zp[1]:34 750.75 -interrupt(HARDWARE_CLOBBER) void sprites_irq() +__interrupt(hardware_clobber) void sprites_irq() byte~ sprites_irq::$0 reg byte x 4.0 byte sprites_irq::ptr byte sprites_irq::ptr#0 reg byte x 2.5 diff --git a/src/test/ref/const-volatile-problem.cfg b/src/test/ref/const-volatile-problem.cfg index c89943a58..fb4711ff9 100644 --- a/src/test/ref/const-volatile-problem.cfg +++ b/src/test/ref/const-volatile-problem.cfg @@ -14,7 +14,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() irq: scope:[irq] from [5] PLEX_SCREEN_PTR1#6 = phi( ) [6] PLEX_SCREEN_PTR1#6[idx] = ++ PLEX_SCREEN_PTR1#6[idx] diff --git a/src/test/ref/const-volatile-problem.log b/src/test/ref/const-volatile-problem.log index 443347c89..429eaf408 100644 --- a/src/test/ref/const-volatile-problem.log +++ b/src/test/ref/const-volatile-problem.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(KERNEL_KEYBOARD) void irq() +Resolved forward reference irq to __interrupt(rom_sys_c64) void irq() Inlined call call __init CONTROL FLOW GRAPH SSA @@ -14,7 +14,7 @@ main::@return: scope:[main] from main return to:@return -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() irq: scope:[irq] from PLEX_SCREEN_PTR1#6 = phi( ) PLEX_SCREEN_PTR1#6[idx] = ++ PLEX_SCREEN_PTR1#6[idx] @@ -62,7 +62,7 @@ byte* PLEX_SCREEN_PTR1#9 const byte* PLEX_SCREEN_PTR2 = (byte*)$500 void __start() volatile byte idx loadstore -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() void main() Inlining cast PLEX_SCREEN_PTR1#0 = (byte*)$400 @@ -113,7 +113,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() irq: scope:[irq] from [5] PLEX_SCREEN_PTR1#6 = phi( ) [6] PLEX_SCREEN_PTR1#6[idx] = ++ PLEX_SCREEN_PTR1#6[idx] @@ -138,7 +138,7 @@ byte* PLEX_SCREEN_PTR1 byte* PLEX_SCREEN_PTR1#6 4.0 void __start() volatile byte idx loadstore 4.666666666666666 -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() void main() Initial phi equivalence classes @@ -163,12 +163,12 @@ Uplift Scope [main] Uplift Scope [irq] Uplift Scope [__start] -Uplifting [] best 113 combination zp[1]:4 [ idx ] zp[2]:2 [ PLEX_SCREEN_PTR1#6 ] -Uplifting [main] best 113 combination -Uplifting [irq] best 113 combination -Uplifting [__start] best 113 combination +Uplifting [] best 140 combination zp[1]:4 [ idx ] zp[2]:2 [ PLEX_SCREEN_PTR1#6 ] +Uplifting [main] best 140 combination +Uplifting [irq] best 140 combination +Uplifting [__start] best 140 combination Attempting to uplift remaining variables inzp[1]:4 [ idx ] -Uplifting [] best 113 combination zp[1]:4 [ idx ] +Uplifting [] best 140 combination zp[1]:4 [ idx ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -211,7 +211,7 @@ __start: { // irq // Interrupt Routine irq: { - // entry interrupt(KERNEL_KEYBOARD) + // interrupt(isr_rom_sys_c64_entry) -- isr_rom_sys_c64_entry // [6] PLEX_SCREEN_PTR1#6[idx] = ++ PLEX_SCREEN_PTR1#6[idx] -- pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 ldy.z idx lda (PLEX_SCREEN_PTR1),y @@ -226,7 +226,8 @@ irq: { jmp __breturn // irq::@return __breturn: - // [9] return - exit interrupt(KERNEL_KEYBOARD) + // [9] return + // interrupt(isr_rom_sys_c64_exit) -- isr_rom_sys_c64_exit jmp $ea31 } // main @@ -267,7 +268,7 @@ byte* PLEX_SCREEN_PTR1#6 PLEX_SCREEN_PTR1 zp[2]:2 4.0 const byte* PLEX_SCREEN_PTR2 = (byte*) 1280 void __start() volatile byte idx loadstore zp[1]:4 4.666666666666666 -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() void main() zp[2]:2 [ PLEX_SCREEN_PTR1#6 ] @@ -275,7 +276,7 @@ zp[1]:4 [ idx ] FINAL ASSEMBLER -Score: 71 +Score: 98 // File Comments // Demonstrates problem where a pointer with constant value is never assigned - because it is only used in an IRQ @@ -311,7 +312,7 @@ __start: { // irq // Interrupt Routine irq: { - // entry interrupt(KERNEL_KEYBOARD) + // interrupt(isr_rom_sys_c64_entry) -- isr_rom_sys_c64_entry // PLEX_SCREEN_PTR1[idx]++; // [6] PLEX_SCREEN_PTR1#6[idx] = ++ PLEX_SCREEN_PTR1#6[idx] -- pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 ldy.z idx @@ -328,7 +329,8 @@ irq: { inc.z idx // irq::@return // } - // [9] return - exit interrupt(KERNEL_KEYBOARD) + // [9] return + // interrupt(isr_rom_sys_c64_exit) -- isr_rom_sys_c64_exit jmp $ea31 } // main diff --git a/src/test/ref/const-volatile-problem.sym b/src/test/ref/const-volatile-problem.sym index e89658520..f59959530 100644 --- a/src/test/ref/const-volatile-problem.sym +++ b/src/test/ref/const-volatile-problem.sym @@ -4,7 +4,7 @@ byte* PLEX_SCREEN_PTR1#6 PLEX_SCREEN_PTR1 zp[2]:2 4.0 const byte* PLEX_SCREEN_PTR2 = (byte*) 1280 void __start() volatile byte idx loadstore zp[1]:4 4.666666666666666 -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() void main() zp[2]:2 [ PLEX_SCREEN_PTR1#6 ] diff --git a/src/test/ref/cpu-65ce02-eightqueens.asm b/src/test/ref/cpu-65ce02-eightqueens.asm index d4103b774..81edbf41d 100644 --- a/src/test/ref/cpu-65ce02-eightqueens.asm +++ b/src/test/ref/cpu-65ce02-eightqueens.asm @@ -406,11 +406,12 @@ cputc: { cmp #'\n' beq __b1 // conio_line_text[conio_cursor_x] = c - ldy.z conio_cursor_x - sta (conio_line_text),y + ldz conio_cursor_x + sta.z (conio_line_text),z // conio_line_color[conio_cursor_x] = conio_textcolor lda #LIGHT_BLUE - sta (conio_line_color),y + ldz conio_cursor_x + sta.z (conio_line_color),z // if(++conio_cursor_x==CONIO_WIDTH) inc.z conio_cursor_x lda #$28 diff --git a/src/test/ref/cpu-65ce02-eightqueens.log b/src/test/ref/cpu-65ce02-eightqueens.log index d7d1b5543..a853564d7 100644 --- a/src/test/ref/cpu-65ce02-eightqueens.log +++ b/src/test/ref/cpu-65ce02-eightqueens.log @@ -6635,17 +6635,25 @@ Statement [81] if(board[queens::row#10]==8+1) goto queens::@3 [ conio_cursor_x c Statement [92] board[queens::row#10] = 0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color count#10 printf_buffer queens::row#10 ] ( main:7::queens:25 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color count#10 printf_buffer queens::row#10 ] { } ) always clobbers reg byte a Statement [97] *((byte*)&printf_buffer) = 0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_ulong::uvalue#2 ] ( main:7::printf_ulong:29 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_ulong::uvalue#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 ultoa::value#1 } } main:7::queens:25::print:91::printf_ulong:195 [ queens::row#10 count#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_ulong::uvalue#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 ultoa::value#1 } } ) always clobbers reg byte a Statement [98] ultoa::value#1 = printf_ulong::uvalue#2 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer ultoa::value#1 ] ( main:7::printf_ulong:29 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer ultoa::value#1 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 ultoa::value#1 } } main:7::queens:25::print:91::printf_ulong:195 [ queens::row#10 count#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer ultoa::value#1 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 ultoa::value#1 } } ) always clobbers reg byte a -Statement [106] conio_line_color[conio_cursor_x] = LIGHT_BLUE [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:19::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } ) always clobbers reg byte a reg byte y +Statement [105] conio_line_text[conio_cursor_x] = cputc::c#3 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:19::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } ) always clobbers reg byte z +Removing always clobbered register reg byte z as potential for zp[1]:29 [ printf_number_buffer::format_justify_left#10 ] +Removing always clobbered register reg byte z as potential for zp[1]:30 [ printf_number_buffer::format_zero_padding#10 ] +Removing always clobbered register reg byte z as potential for zp[1]:34 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] +Removing always clobbered register reg byte z as potential for zp[1]:12 [ queens::row#10 queens::row#1 queens::row#2 ] +Removing always clobbered register reg byte z as potential for zp[1]:40 [ print::i1#2 print::i1#1 ] +Removing always clobbered register reg byte z as potential for zp[1]:39 [ print::i#2 print::i#1 ] +Removing always clobbered register reg byte z as potential for zp[1]:41 [ print::j#2 print::j#1 ] +Removing always clobbered register reg byte z as potential for zp[1]:32 [ printf_number_buffer::format_upper_case#10 ] +Removing always clobbered register reg byte z as potential for zp[1]:31 [ 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 z as potential for zp[1]:57 [ printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] +Removing always clobbered register reg byte z as potential for zp[1]:58 [ printf_padding::pad#5 ] +Removing always clobbered register reg byte z as potential for zp[1]:59 [ printf_padding::i#2 printf_padding::i#1 ] +Statement [106] conio_line_color[conio_cursor_x] = LIGHT_BLUE [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:19::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } ) always clobbers reg byte a reg byte z Removing always clobbered register reg byte a as potential for zp[1]:32 [ printf_number_buffer::format_upper_case#10 ] -Removing always clobbered register reg byte y as potential for zp[1]:32 [ printf_number_buffer::format_upper_case#10 ] Removing always clobbered register reg byte a as potential for zp[1]:31 [ 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]:31 [ 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]:57 [ 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]:57 [ 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]:58 [ printf_padding::pad#5 ] -Removing always clobbered register reg byte y as potential for zp[1]:58 [ printf_padding::pad#5 ] Removing always clobbered register reg byte a as potential for zp[1]:59 [ printf_padding::i#2 printf_padding::i#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:59 [ printf_padding::i#2 printf_padding::i#1 ] Statement [108] if(conio_cursor_x!=$28) goto cputc::@return [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:19::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } ) always clobbers reg byte a Statement [117] utoa::$11 = (byte)utoa::value#2 [ printf_buffer utoa::buffer#11 utoa::$11 ] ( main:7::printf_uint:23::utoa:74 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::buffer#11 utoa::$11 ] { } ) always clobbers reg byte a Statement [118] *utoa::buffer#11 = DIGITS[utoa::$11] [ printf_buffer utoa::buffer#11 ] ( main:7::printf_uint:23::utoa:74 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::buffer#11 ] { } ) always clobbers reg byte a reg byte y @@ -6700,6 +6708,8 @@ Removing always clobbered register reg byte y as potential for zp[1]:22 [ utoa:: Statement [252] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:7::printf_uint:23::utoa:74::utoa_append:131 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 [255] if(0!=*strlen::str#2) goto strlen::@2 [ printf_buffer strlen::len#2 strlen::str#2 ] ( main:7::printf_uint:23::printf_number_buffer:76::strlen:138 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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_sign#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:7::printf_ulong:29::printf_number_buffer:101::strlen:138 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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_sign#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::strlen:138 [ queens::row#10 count#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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_sign#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::strlen:138 [ queens::row#10 count#2 print::i1#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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_sign#10 printf_number_buffer::format_upper_case#10 printf_buffer 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::return#2 = strlen::len#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::strlen:138 [ queens::row#10 count#2 print::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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_sign#10 printf_number_buffer::format_upper_case#10 printf_buffer 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::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]:28 [ printf_number_buffer::format_min_length#3 ] +Removing always clobbered register reg byte y as potential for zp[1]:31 [ 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]:32 [ printf_number_buffer::format_upper_case#10 ] Statement [268] if(0!=*strupr::src#2) goto strupr::@2 [ strupr::src#2 ] ( main:7::printf_uint:23::printf_number_buffer:76::strupr:163 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:7::printf_ulong:29::printf_number_buffer:101::strupr:163 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::strupr:163 [ queens::row#10 count#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::strupr:163 [ queens::row#10 count#2 print::i1#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::strupr:163 [ queens::row#10 count#2 print::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 } } ) always clobbers reg byte a reg byte y Statement [270] toupper::ch#0 = *strupr::src#2 [ strupr::src#2 toupper::ch#0 ] ( main:7::printf_uint:23::printf_number_buffer:76::strupr:163 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } main:7::printf_ulong:29::printf_number_buffer:101::strupr:163 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::strupr:163 [ queens::row#10 count#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::strupr:163 [ queens::row#10 count#2 print::i1#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 } { toupper::return#2 = toupper::return#3 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::strupr:163 [ queens::row#10 count#2 print::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a reg byte y Statement [274] *strupr::src#2 = strupr::$0 [ strupr::src#2 ] ( main:7::printf_uint:23::printf_number_buffer:76::strupr:163 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:7::printf_ulong:29::printf_number_buffer:101::strupr:163 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::strupr:163 [ queens::row#10 count#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::strupr:163 [ queens::row#10 count#2 print::i1#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::strupr:163 [ queens::row#10 count#2 print::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 } } ) always clobbers reg byte y @@ -6726,6 +6736,9 @@ Statement [329] memcpy::src#4 = (byte*)memcpy::source#2 [ memcpy::destination#2 Statement [330] memcpy::dst#4 = (byte*)memcpy::destination#2 [ memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] ( main:7::cputs:19::cputc:71::cputln:110::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:110::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:110::cscroll:244::memcpy:292 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:110::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:292 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:292 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::cputs:19::cputc:71::cputln:113::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:113::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:113::cscroll:244::memcpy:292 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:113::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:292 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:292 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::cputs:19::cputc:71::cputln:110::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:110::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:110::cscroll:244::memcpy:294 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:110::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:294 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:294 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::cputs:19::cputc:71::cputln:113::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:113::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:113::cscroll:244::memcpy:294 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:113::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:294 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:294 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#4 memcpy::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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } ) always clobbers reg byte a Statement [332] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2 [ memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] ( main:7::cputs:19::cputc:71::cputln:110::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:110::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:110::cscroll:244::memcpy:292 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:110::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:292 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:292 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::cputs:19::cputc:71::cputln:113::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:113::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:113::cscroll:244::memcpy:292 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:113::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:292 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:292 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::cputs:19::cputc:71::cputln:110::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:110::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:110::cscroll:244::memcpy:294 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:110::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:294 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:294 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::cputs:19::cputc:71::cputln:113::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:113::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:113::cscroll:244::memcpy:294 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:113::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:294 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:294 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } ) always clobbers reg byte a Statement [334] *memcpy::dst#2 = *memcpy::src#2 [ memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] ( main:7::cputs:19::cputc:71::cputln:110::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:110::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:110::cscroll:244::memcpy:292 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:110::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:292 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:292 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:292 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::cputs:19::cputc:71::cputln:113::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:113::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:113::cscroll:244::memcpy:292 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:113::cscroll:244::memcpy:292 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:292 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:292 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:292 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:292 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::cputs:19::cputc:71::cputln:110::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:110::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:110::cscroll:244::memcpy:294 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:110::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:294 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:294 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:294 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::cputs:19::cputc:71::cputln:113::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:113::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:113::cscroll:244::memcpy:294 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:113::cscroll:244::memcpy:294 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:294 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:294 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:294 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 memcpy::src#2 memcpy::dst#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memcpy:294 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memcpy::src_end#0 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:57 [ 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]:58 [ printf_padding::pad#5 ] +Removing always clobbered register reg byte y as potential for zp[1]:59 [ printf_padding::i#2 printf_padding::i#1 ] Statement [338] memset::end#0 = (byte*)memset::str#3 + $28 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:7::cputs:19::cputc:71::cputln:110::cscroll:244::memset:296 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:110::cscroll:244::memset:296 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:110::cscroll:244::memset:296 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:110::cscroll:244::memset:296 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:110::cscroll:244::memset:296 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memset:296 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:110::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:296 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:296 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::cputs:19::cputc:71::cputln:113::cscroll:244::memset:296 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:113::cscroll:244::memset:296 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:113::cscroll:244::memset:296 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:113::cscroll:244::memset:296 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:113::cscroll:244::memset:296 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memset:296 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:113::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:296 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:296 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::cputs:19::cputc:71::cputln:110::cscroll:244::memset:298 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:110::cscroll:244::memset:298 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:110::cscroll:244::memset:298 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:110::cscroll:244::memset:298 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:110::cscroll:244::memset:298 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memset:298 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:110::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:298 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:298 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::cputs:19::cputc:71::cputln:113::cscroll:244::memset:298 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:113::cscroll:244::memset:298 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:113::cscroll:244::memset:298 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:113::cscroll:244::memset:298 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:113::cscroll:244::memset:298 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memset:298 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:113::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:298 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:298 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::str#3 memset::c#4 memset::end#0 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:84 [ memset::c#4 ] Statement [339] memset::dst#4 = (byte*)memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:7::cputs:19::cputc:71::cputln:110::cscroll:244::memset:296 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:110::cscroll:244::memset:296 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:110::cscroll:244::memset:296 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:110::cscroll:244::memset:296 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:110::cscroll:244::memset:296 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memset:296 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:110::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:296 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:296 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::cputs:19::cputc:71::cputln:113::cscroll:244::memset:296 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:113::cscroll:244::memset:296 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:113::cscroll:244::memset:296 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:113::cscroll:244::memset:296 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:113::cscroll:244::memset:296 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memset:296 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:113::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:296 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:296 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:296 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:296 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::cputs:19::cputc:71::cputln:110::cscroll:244::memset:298 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:110::cscroll:244::memset:298 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:110::cscroll:244::memset:298 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:110::cscroll:244::memset:298 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:110::cscroll:244::memset:298 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memset:298 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:110::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:298 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:298 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:110::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::cputs:19::cputc:71::cputln:113::cscroll:244::memset:298 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71::cputln:113::cscroll:244::memset:298 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71::cputln:113::cscroll:244::memset:298 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71::cputln:113::cscroll:244::memset:298 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71::cputln:113::cscroll:244::memset:298 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memset:298 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156::cputln:113::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:298 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:298 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:298 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color memset::c#4 memset::end#0 memset::dst#4 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264::cputln:113::cscroll:244::memset:298 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } ) always clobbers reg byte a @@ -6767,7 +6780,8 @@ Statement [81] if(board[queens::row#10]==8+1) goto queens::@3 [ conio_cursor_x c Statement [92] board[queens::row#10] = 0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color count#10 printf_buffer queens::row#10 ] ( main:7::queens:25 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color count#10 printf_buffer queens::row#10 ] { } ) always clobbers reg byte a Statement [97] *((byte*)&printf_buffer) = 0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_ulong::uvalue#2 ] ( main:7::printf_ulong:29 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_ulong::uvalue#2 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 ultoa::value#1 } } main:7::queens:25::print:91::printf_ulong:195 [ queens::row#10 count#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer printf_ulong::uvalue#2 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 ultoa::value#1 } } ) always clobbers reg byte a Statement [98] ultoa::value#1 = printf_ulong::uvalue#2 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer ultoa::value#1 ] ( main:7::printf_ulong:29 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer ultoa::value#1 ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 ultoa::value#1 } } main:7::queens:25::print:91::printf_ulong:195 [ queens::row#10 count#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer ultoa::value#1 ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 ultoa::value#1 } } ) always clobbers reg byte a -Statement [106] conio_line_color[conio_cursor_x] = LIGHT_BLUE [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:19::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } ) always clobbers reg byte a reg byte y +Statement [105] conio_line_text[conio_cursor_x] = cputc::c#3 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:19::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } ) always clobbers reg byte z +Statement [106] conio_line_color[conio_cursor_x] = LIGHT_BLUE [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:19::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } ) always clobbers reg byte a reg byte z Statement [108] if(conio_cursor_x!=$28) goto cputc::@return [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:19::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:21::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:27::cputc:71 [ count#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::cputs:31::cputc:71 [ cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputs:165::cputc:71 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputs:165::cputc:71 [ printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputs:165::cputc:71 [ queens::row#10 count#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputs:165::cputc:71 [ queens::row#10 count#2 print::i1#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputs:165::cputc:71 [ queens::row#10 count#2 print::i#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::padding#10 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:193::cputc:71 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:197::cputc:71 [ queens::row#10 count#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:204::cputc:71 [ queens::row#10 count#2 print::i1#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:212::cputc:71 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::queens:25::print:91::cputs:215::cputc:71 [ queens::row#10 count#2 print::i1#2 print::j#2 cputs::s#0 printf_buffer conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputc::c#3 cputs::c#1 } } main:7::printf_uint:23::printf_number_buffer:76::cputc:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 } } main:7::printf_ulong:29::printf_number_buffer:101::cputc:156 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::cputc:156 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::cputc:156 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#1 = printf_uchar::uvalue#2 print::i1#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::cputc:156 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_uchar::uvalue#0 = printf_uchar::uvalue#2 print::i#2 } { cputc::c#2 = cputc::c#3 printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#2 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:153::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:153::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:153::cputc:264 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:153::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:153::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:160::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:160::cputc:264 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:160::cputc:264 [ queens::row#10 count#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:160::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:160::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#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 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_uint:23::printf_number_buffer:76::printf_padding:170::cputc:264 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::printf_ulong:29::printf_number_buffer:101::printf_padding:170::cputc:264 [ printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#0 = printf_ulong::uvalue#2 count#10 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_ulong:195::printf_number_buffer:101::printf_padding:170::cputc:264 [ queens::row#10 count#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { printf_ulong::uvalue#1 = printf_ulong::uvalue#2 count#2 } { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#4 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:206::printf_number_buffer:281::printf_padding:170::cputc:264 [ queens::row#10 count#2 print::i1#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } main:7::queens:25::print:91::printf_uchar:217::printf_number_buffer:281::printf_padding:170::cputc:264 [ queens::row#10 count#2 print::i#2 printf_buffer printf_padding::length#4 printf_padding::pad#5 printf_padding::i#2 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { 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 } { cputc::c#1 = cputc::c#3 printf_padding::pad#5 } } ) always clobbers reg byte a Statement [117] utoa::$11 = (byte)utoa::value#2 [ printf_buffer utoa::buffer#11 utoa::$11 ] ( main:7::printf_uint:23::utoa:74 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::buffer#11 utoa::$11 ] { } ) always clobbers reg byte a Statement [118] *utoa::buffer#11 = DIGITS[utoa::$11] [ printf_buffer utoa::buffer#11 ] ( main:7::printf_uint:23::utoa:74 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color printf_buffer utoa::buffer#11 ] { } ) always clobbers reg byte a reg byte y @@ -6843,7 +6857,7 @@ Potential registers zp[2]:5 [ clrscr::line_text#5 clrscr::line_text#1 ] : zp[2]: Potential registers zp[2]:7 [ clrscr::line_cols#5 clrscr::line_cols#1 ] : zp[2]:7 , Potential registers zp[1]:9 [ clrscr::c#2 clrscr::c#1 ] : zp[1]:9 , reg byte x , reg byte y , reg byte z , Potential registers zp[2]:10 [ cputs::s#11 cputs::s#12 cputs::s#0 ] : zp[2]:10 , -Potential registers zp[1]:12 [ queens::row#10 queens::row#1 queens::row#2 ] : zp[1]:12 , reg byte x , reg byte z , +Potential registers zp[1]:12 [ queens::row#10 queens::row#1 queens::row#2 ] : zp[1]:12 , reg byte x , Potential registers zp[4]:13 [ count#10 count#2 ] : zp[4]:13 , Potential registers zp[4]:17 [ printf_ulong::uvalue#2 printf_ulong::uvalue#0 printf_ulong::uvalue#1 ] : zp[4]:17 , Potential registers zp[1]:21 [ cputc::c#3 cputc::c#0 cputc::c#2 cputc::c#1 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y , reg byte z , @@ -6852,19 +6866,19 @@ Potential registers zp[2]:23 [ utoa::value#2 utoa::value#6 utoa::value#0 ] : zp[ Potential registers zp[1]:25 [ utoa::started#2 utoa::started#4 ] : zp[1]:25 , reg byte x , reg byte y , reg byte z , Potential registers zp[2]:26 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 ] : zp[2]:26 , Potential registers zp[1]:28 [ printf_number_buffer::format_min_length#3 ] : zp[1]:28 , reg byte x , reg byte z , -Potential registers zp[1]:29 [ printf_number_buffer::format_justify_left#10 ] : zp[1]:29 , reg byte x , reg byte z , -Potential registers zp[1]:30 [ printf_number_buffer::format_zero_padding#10 ] : zp[1]:30 , reg byte x , reg byte z , -Potential registers zp[1]:31 [ 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]:31 , reg byte x , reg byte z , -Potential registers zp[1]:32 [ printf_number_buffer::format_upper_case#10 ] : zp[1]:32 , reg byte x , reg byte z , +Potential registers zp[1]:29 [ printf_number_buffer::format_justify_left#10 ] : zp[1]:29 , reg byte x , +Potential registers zp[1]:30 [ printf_number_buffer::format_zero_padding#10 ] : zp[1]:30 , reg byte x , +Potential registers zp[1]:31 [ 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]:31 , reg byte x , +Potential registers zp[1]:32 [ printf_number_buffer::format_upper_case#10 ] : zp[1]:32 , reg byte x , Potential registers zp[1]:33 [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:34 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] : zp[1]:34 , reg byte x , reg byte z , +Potential registers zp[1]:34 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] : zp[1]:34 , reg byte x , Potential registers zp[1]:35 [ legal::i#10 legal::i#1 ] : zp[1]:35 , reg byte x , reg byte y , reg byte z , Potential registers zp[1]:36 [ legal::return#4 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , reg byte z , Potential registers zp[1]:37 [ legal::diff1_return#2 legal::diff1_return#0 legal::diff1_return#1 ] : zp[1]:37 , reg byte x , reg byte y , reg byte z , Potential registers zp[1]:38 [ legal::diff2_return#2 legal::diff2_return#0 legal::diff2_return#1 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , reg byte z , -Potential registers zp[1]:39 [ print::i#2 print::i#1 ] : zp[1]:39 , reg byte x , reg byte z , -Potential registers zp[1]:40 [ print::i1#2 print::i1#1 ] : zp[1]:40 , reg byte x , reg byte z , -Potential registers zp[1]:41 [ print::j#2 print::j#1 ] : zp[1]:41 , reg byte x , reg byte z , +Potential registers zp[1]:39 [ print::i#2 print::i#1 ] : zp[1]:39 , reg byte x , +Potential registers zp[1]:40 [ print::i1#2 print::i1#1 ] : zp[1]:40 , reg byte x , +Potential registers zp[1]:41 [ print::j#2 print::j#1 ] : zp[1]:41 , reg byte x , Potential registers zp[1]:42 [ ultoa::digit#2 ultoa::digit#1 ] : zp[1]:42 , reg byte x , reg byte z , Potential registers zp[4]:43 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ] : zp[4]:43 , Potential registers zp[1]:47 [ ultoa::started#2 ultoa::started#4 ] : zp[1]:47 , reg byte x , reg byte y , reg byte z , @@ -6873,9 +6887,9 @@ Potential registers zp[2]:50 [ utoa_append::value#2 utoa_append::value#0 utoa_ap Potential registers zp[1]:52 [ utoa_append::digit#2 utoa_append::digit#1 ] : zp[1]:52 , reg byte x , reg byte y , reg byte z , Potential registers zp[2]:53 [ strlen::str#2 strlen::str#0 ] : zp[2]:53 , Potential registers zp[2]:55 [ strlen::len#2 strlen::len#1 ] : zp[2]:55 , -Potential registers zp[1]:57 [ printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] : zp[1]:57 , reg byte x , reg byte z , -Potential registers zp[1]:58 [ printf_padding::pad#5 ] : zp[1]:58 , reg byte x , reg byte z , -Potential registers zp[1]:59 [ printf_padding::i#2 printf_padding::i#1 ] : zp[1]:59 , reg byte x , reg byte z , +Potential registers zp[1]:57 [ printf_padding::length#4 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] : zp[1]:57 , reg byte x , +Potential registers zp[1]:58 [ printf_padding::pad#5 ] : zp[1]:58 , reg byte x , +Potential registers zp[1]:59 [ printf_padding::i#2 printf_padding::i#1 ] : zp[1]:59 , reg byte x , Potential registers zp[2]:60 [ strupr::src#2 strupr::src#1 ] : zp[2]:60 , Potential registers zp[1]:62 [ printf_uchar::uvalue#2 printf_uchar::uvalue#1 printf_uchar::uvalue#0 ] : zp[1]:62 , reg byte x , reg byte y , reg byte z , Potential registers zp[4]:63 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] : zp[4]:63 , @@ -6993,7 +7007,7 @@ Uplifting [cputs] best 1603589 combination zp[2]:10 [ cputs::s#11 cputs::s#12 cp Uplifting [ultoa] best 1601289 combination zp[2]:48 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] zp[4]:43 [ ultoa::value#2 ultoa::value#6 ultoa::value#1 ultoa::value#0 ] reg byte x [ ultoa::digit#2 ultoa::digit#1 ] reg byte a [ ultoa::$10 ] reg byte z [ ultoa::started#2 ultoa::started#4 ] zp[4]:134 [ ultoa::digit_value#0 ] zp[1]:130 [ ultoa::$11 ] zp[2]:131 [ ultoa::buffer#3 ] Limited combination testing to 100 combinations of 300 possible. Uplifting [printf_number_buffer] best 1601272 combination reg byte x [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] zp[1]:34 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] zp[2]:126 [ printf_number_buffer::$19 ] zp[1]:31 [ 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 z [ printf_number_buffer::format_min_length#3 ] zp[1]:30 [ printf_number_buffer::format_zero_padding#10 ] zp[1]:29 [ printf_number_buffer::format_justify_left#10 ] zp[1]:32 [ printf_number_buffer::format_upper_case#10 ] -Limited combination testing to 100 combinations of 3645 possible. +Limited combination testing to 100 combinations of 480 possible. Uplifting [utoa_append] best 1600572 combination zp[2]:50 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] reg byte z [ utoa_append::digit#2 utoa_append::digit#1 ] zp[2]:120 [ utoa_append::sub#0 ] zp[2]:122 [ utoa_append::return#0 ] zp[2]:118 [ utoa_append::buffer#0 ] Uplifting [print] best 1596572 combination reg byte x [ print::j#2 print::j#1 ] zp[1]:39 [ print::i#2 print::i#1 ] zp[1]:40 [ print::i1#2 print::i1#1 ] Uplifting [legal] best 1594472 combination reg byte a [ legal::diff2_return#2 legal::diff2_return#0 legal::diff2_return#1 ] zp[1]:37 [ legal::diff1_return#2 legal::diff1_return#0 legal::diff1_return#1 ] reg byte y [ legal::i#10 legal::i#1 ] zp[1]:128 [ legal::$0 ] zp[1]:129 [ legal::diff1_a#0 ] zp[1]:109 [ legal::column#0 ] zp[1]:108 [ legal::row#0 ] zp[1]:110 [ legal::return#0 ] zp[1]:36 [ legal::return#4 ] @@ -7803,12 +7817,12 @@ cputc: { // cputc::@2 __b2: // [105] conio_line_text[conio_cursor_x] = cputc::c#3 -- pbuz1_derefidx_vbuz2=vbuaa - ldy.z conio_cursor_x - sta (conio_line_text),y + ldz conio_cursor_x + sta.z (conio_line_text),z // [106] conio_line_color[conio_cursor_x] = LIGHT_BLUE -- pbuz1_derefidx_vbuz2=vbuc1 lda #LIGHT_BLUE - ldy.z conio_cursor_x - sta (conio_line_color),y + ldz conio_cursor_x + sta.z (conio_line_color),z // [107] conio_cursor_x = ++ conio_cursor_x -- vbuz1=_inc_vbuz1 inc.z conio_cursor_x // [108] if(conio_cursor_x!=$28) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1 @@ -9544,7 +9558,6 @@ Removing instruction lda #0 Removing instruction lda #>0 Removing instruction lda #0 Removing instruction lda #0 -Removing instruction ldy.z conio_cursor_x Replacing instruction lda #0 with TYA Removing instruction ldy #0 Removing instruction lda.z padding @@ -10269,7 +10282,7 @@ mem[12] [ printf_buffer ] FINAL ASSEMBLER -Score: 1297300 +Score: 1297303 // File Comments // N Queens Problem in C Using Backtracking @@ -10889,12 +10902,13 @@ cputc: { // cputc::@2 // conio_line_text[conio_cursor_x] = c // [105] conio_line_text[conio_cursor_x] = cputc::c#3 -- pbuz1_derefidx_vbuz2=vbuaa - ldy.z conio_cursor_x - sta (conio_line_text),y + ldz conio_cursor_x + sta.z (conio_line_text),z // conio_line_color[conio_cursor_x] = conio_textcolor // [106] conio_line_color[conio_cursor_x] = LIGHT_BLUE -- pbuz1_derefidx_vbuz2=vbuc1 lda #LIGHT_BLUE - sta (conio_line_color),y + ldz conio_cursor_x + sta.z (conio_line_color),z // if(++conio_cursor_x==CONIO_WIDTH) // [107] conio_cursor_x = ++ conio_cursor_x -- vbuz1=_inc_vbuz1 inc.z conio_cursor_x diff --git a/src/test/ref/examples/cx16/rasterbars.asm b/src/test/ref/examples/cx16/rasterbars.asm index 0d0c82e59..95cf26ba3 100644 --- a/src/test/ref/examples/cx16/rasterbars.asm +++ b/src/test/ref/examples/cx16/rasterbars.asm @@ -156,14 +156,8 @@ irq_line: { // Reset the LINE interrupt lda #VERA_LINE sta VERA_ISR - // asm - // Exit CX16 KERNAL IRQ - ply - plx - pla - rti // } - rts + jmp $e049 __b14: // bar = BARS + SIN[idx] ldy.z idx diff --git a/src/test/ref/examples/cx16/rasterbars.cfg b/src/test/ref/examples/cx16/rasterbars.cfg index e5acf56fd..98d16ebcc 100644 --- a/src/test/ref/examples/cx16/rasterbars.cfg +++ b/src/test/ref/examples/cx16/rasterbars.cfg @@ -19,7 +19,7 @@ __start::@return: scope:[__start] from __start::@1 [9] return to:@return -void irq_line() +__interrupt(rom_min_cx16) void irq_line() irq_line: scope:[irq_line] from [10] *VERA_CTRL = *VERA_CTRL | VERA_DCSEL [11] *VERA_DC_HSTART = hstart @@ -61,82 +61,81 @@ irq_line::@13: scope:[irq_line] from irq_line::@18 irq_line::@19 to:irq_line::@15 irq_line::@15: scope:[irq_line] from irq_line::@13 [32] *VERA_ISR = VERA_LINE - asm { ply plx pla rti } to:irq_line::@return irq_line::@return: scope:[irq_line] from irq_line::@15 - [34] return + [33] return to:@return irq_line::@14: scope:[irq_line] from irq_line::@13 - [35] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] + [34] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] to:irq_line::@16 irq_line::@16: scope:[irq_line] from irq_line::@14 irq_line::@17 - [36] irq_line::i2#2 = phi( irq_line::@14/0, irq_line::@17/irq_line::i2#1 ) - [37] if(irq_line::i2#2<$20*SIZEOF_BYTE) goto irq_line::@17 + [35] irq_line::i2#2 = phi( irq_line::@14/0, irq_line::@17/irq_line::i2#1 ) + [36] if(irq_line::i2#2<$20*SIZEOF_BYTE) goto irq_line::@17 to:irq_line::@18 irq_line::@18: scope:[irq_line] from irq_line::@16 - [38] irq_line::idx#1 = irq_line::idx#2 + $d - [39] irq_line::b#1 = ++ irq_line::b#2 + [37] irq_line::idx#1 = irq_line::idx#2 + $d + [38] irq_line::b#1 = ++ irq_line::b#2 to:irq_line::@13 irq_line::@17: scope:[irq_line] from irq_line::@16 - [40] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] - [41] irq_line::i2#1 = ++ irq_line::i2#2 + [39] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] + [40] irq_line::i2#1 = ++ irq_line::i2#2 to:irq_line::@16 irq_line::@3: scope:[irq_line] from irq_line::@2 - [42] *VERA_DC_BORDER = BARS[irq_line::l#2] + [41] *VERA_DC_BORDER = BARS[irq_line::l#2] to:irq_line::@5 irq_line::@5: scope:[irq_line] from irq_line::@3 irq_line::@6 - [43] irq_line::i#2 = phi( irq_line::@3/0, irq_line::@6/irq_line::i#1 ) - [44] if(irq_line::i#2<$18) goto irq_line::@6 + [42] irq_line::i#2 = phi( irq_line::@3/0, irq_line::@6/irq_line::i#1 ) + [43] if(irq_line::i#2<$18) goto irq_line::@6 to:irq_line::@7 irq_line::@7: scope:[irq_line] from irq_line::@5 - [45] *VERA_DC_BORDER = 0 + [44] *VERA_DC_BORDER = 0 to:irq_line::@8 irq_line::@8: scope:[irq_line] from irq_line::@7 irq_line::@9 - [46] irq_line::i1#2 = phi( irq_line::@7/0, irq_line::@9/irq_line::i1#1 ) - [47] if(irq_line::i1#2<$17) goto irq_line::@9 + [45] irq_line::i1#2 = phi( irq_line::@7/0, irq_line::@9/irq_line::i1#1 ) + [46] if(irq_line::i1#2<$17) goto irq_line::@9 to:irq_line::@10 irq_line::@10: scope:[irq_line] from irq_line::@8 asm { nop nop } - [49] irq_line::l#1 = ++ irq_line::l#2 + [48] irq_line::l#1 = ++ irq_line::l#2 to:irq_line::@2 irq_line::@9: scope:[irq_line] from irq_line::@8 - [50] irq_line::i1#1 = ++ irq_line::i1#2 + [49] irq_line::i1#1 = ++ irq_line::i1#2 to:irq_line::@8 irq_line::@6: scope:[irq_line] from irq_line::@5 - [51] irq_line::i#1 = ++ irq_line::i#2 + [50] irq_line::i#1 = ++ irq_line::i#2 to:irq_line::@5 void main() main: scope:[main] from __start::@1 - [52] phi() + [51] phi() to:main::SEI1 main::SEI1: scope:[main] from main asm { sei } to:main::@2 main::@2: scope:[main] from main::SEI1 - [54] *KERNEL_IRQ = &irq_line - [55] *VERA_IEN = VERA_LINE - [56] *VERA_IRQLINE_L = 5 + [53] *KERNEL_IRQ = &irq_line + [54] *VERA_IEN = VERA_LINE + [55] *VERA_IRQLINE_L = 5 to:main::CLI1 main::CLI1: scope:[main] from main::@2 asm { cli } to:main::@1 main::@1: scope:[main] from main::@1 main::CLI1 - [58] phi() + [57] phi() to:main::@1 void* memset(void* memset::str , byte memset::c , word memset::num) memset: scope:[memset] from irq_line::@1 - [59] phi() + [58] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [60] memset::dst#2 = phi( memset/(byte*)memset::str#0, memset::@2/memset::dst#1 ) - [61] if(memset::dst#2!=memset::end#0) goto memset::@2 + [59] memset::dst#2 = phi( memset/(byte*)memset::str#0, memset::@2/memset::dst#1 ) + [60] if(memset::dst#2!=memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [62] return + [61] return to:@return memset::@2: scope:[memset] from memset::@1 - [63] *memset::dst#2 = memset::c#0 - [64] memset::dst#1 = ++ memset::dst#2 + [62] *memset::dst#2 = memset::c#0 + [63] memset::dst#1 = ++ memset::dst#2 to:memset::@1 diff --git a/src/test/ref/examples/cx16/rasterbars.log b/src/test/ref/examples/cx16/rasterbars.log index 02669aeba..496f23fd9 100644 --- a/src/test/ref/examples/cx16/rasterbars.log +++ b/src/test/ref/examples/cx16/rasterbars.log @@ -1,4 +1,4 @@ -Resolved forward reference irq_line to void irq_line() +Resolved forward reference irq_line to __interrupt(rom_min_cx16) void irq_line() Inlined call call SEI Inlined call call CLI Inlined call call __init @@ -69,7 +69,7 @@ main::@return: scope:[main] from return to:@return -void irq_line() +__interrupt(rom_min_cx16) void irq_line() irq_line: scope:[irq_line] from *VERA_CTRL = *VERA_CTRL | VERA_DCSEL *VERA_DC_HSTART = hstart @@ -167,7 +167,6 @@ irq_line::@14: scope:[irq_line] from irq_line::@13 to:irq_line::@16 irq_line::@15: scope:[irq_line] from irq_line::@13 *VERA_ISR = VERA_LINE - asm { ply plx pla rti } to:irq_line::@return irq_line::@16: scope:[irq_line] from irq_line::@14 irq_line::@17 irq_line::b#4 = phi( irq_line::@14/irq_line::b#5, irq_line::@17/irq_line::b#6 ) @@ -237,7 +236,7 @@ void __start() volatile byte cnt loadstore volatile byte hstart loadstore volatile byte hstop loadstore -void irq_line() +__interrupt(rom_min_cx16) void irq_line() bool~ irq_line::$0 bool~ irq_line::$1 byte*~ irq_line::$10 @@ -440,10 +439,10 @@ Simple Condition irq_line::$5 [36] if(irq_line::i#2<$18) goto irq_line::@6 Simple Condition irq_line::$6 [42] if(irq_line::i1#2<$17) goto irq_line::@9 Simple Condition irq_line::$8 [56] if(hstart>(byte)$140/4) goto irq_line::@1 Simple Condition irq_line::$9 [63] if(irq_line::b#2<8) goto irq_line::@14 -Simple Condition irq_line::$12 [71] if(irq_line::i2#2(byte)$140/4) goto irq_line::@1 -Simplifying constant evaluating to zero (byte)0/4 in [77] hstart = (byte)0/4 -Simplifying constant evaluating to zero (byte)0/2 in [79] vstart = (byte)0/2 +Simplifying constant evaluating to zero (byte)0/4 in [76] hstart = (byte)0/4 +Simplifying constant evaluating to zero (byte)0/2 in [78] vstart = (byte)0/2 Successful SSA optimization PassNSimplifyConstantZero Eliminating unused constant memset::return#2 Successful SSA optimization PassNEliminateUnusedVars @@ -534,13 +533,13 @@ Calls in [irq_line] to memset:28 Created 7 initial phi equivalence classes Coalesced [31] irq_line::idx#8 = irq_line::idx#0 -Coalesced [42] irq_line::b#7 = irq_line::b#1 -Coalesced [43] irq_line::idx#7 = irq_line::idx#1 -Coalesced [46] irq_line::i2#4 = irq_line::i2#1 -Coalesced [55] irq_line::l#10 = irq_line::l#1 -Coalesced [57] irq_line::i1#4 = irq_line::i1#1 -Coalesced [59] irq_line::i#4 = irq_line::i#1 -Coalesced [75] memset::dst#4 = memset::dst#1 +Coalesced [41] irq_line::b#7 = irq_line::b#1 +Coalesced [42] irq_line::idx#7 = irq_line::idx#1 +Coalesced [45] irq_line::i2#4 = irq_line::i2#1 +Coalesced [54] irq_line::l#10 = irq_line::l#1 +Coalesced [56] irq_line::i1#4 = irq_line::i1#1 +Coalesced [58] irq_line::i#4 = irq_line::i#1 +Coalesced [74] memset::dst#4 = memset::dst#1 Coalesced down to 7 phi equivalence classes Culled Empty Block label __start::@2 Culled Empty Block label memset::@2 @@ -576,7 +575,7 @@ __start::@return: scope:[__start] from __start::@1 [9] return to:@return -void irq_line() +__interrupt(rom_min_cx16) void irq_line() irq_line: scope:[irq_line] from [10] *VERA_CTRL = *VERA_CTRL | VERA_DCSEL [11] *VERA_DC_HSTART = hstart @@ -618,84 +617,83 @@ irq_line::@13: scope:[irq_line] from irq_line::@18 irq_line::@19 to:irq_line::@15 irq_line::@15: scope:[irq_line] from irq_line::@13 [32] *VERA_ISR = VERA_LINE - asm { ply plx pla rti } to:irq_line::@return irq_line::@return: scope:[irq_line] from irq_line::@15 - [34] return + [33] return to:@return irq_line::@14: scope:[irq_line] from irq_line::@13 - [35] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] + [34] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] to:irq_line::@16 irq_line::@16: scope:[irq_line] from irq_line::@14 irq_line::@17 - [36] irq_line::i2#2 = phi( irq_line::@14/0, irq_line::@17/irq_line::i2#1 ) - [37] if(irq_line::i2#2<$20*SIZEOF_BYTE) goto irq_line::@17 + [35] irq_line::i2#2 = phi( irq_line::@14/0, irq_line::@17/irq_line::i2#1 ) + [36] if(irq_line::i2#2<$20*SIZEOF_BYTE) goto irq_line::@17 to:irq_line::@18 irq_line::@18: scope:[irq_line] from irq_line::@16 - [38] irq_line::idx#1 = irq_line::idx#2 + $d - [39] irq_line::b#1 = ++ irq_line::b#2 + [37] irq_line::idx#1 = irq_line::idx#2 + $d + [38] irq_line::b#1 = ++ irq_line::b#2 to:irq_line::@13 irq_line::@17: scope:[irq_line] from irq_line::@16 - [40] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] - [41] irq_line::i2#1 = ++ irq_line::i2#2 + [39] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] + [40] irq_line::i2#1 = ++ irq_line::i2#2 to:irq_line::@16 irq_line::@3: scope:[irq_line] from irq_line::@2 - [42] *VERA_DC_BORDER = BARS[irq_line::l#2] + [41] *VERA_DC_BORDER = BARS[irq_line::l#2] to:irq_line::@5 irq_line::@5: scope:[irq_line] from irq_line::@3 irq_line::@6 - [43] irq_line::i#2 = phi( irq_line::@3/0, irq_line::@6/irq_line::i#1 ) - [44] if(irq_line::i#2<$18) goto irq_line::@6 + [42] irq_line::i#2 = phi( irq_line::@3/0, irq_line::@6/irq_line::i#1 ) + [43] if(irq_line::i#2<$18) goto irq_line::@6 to:irq_line::@7 irq_line::@7: scope:[irq_line] from irq_line::@5 - [45] *VERA_DC_BORDER = 0 + [44] *VERA_DC_BORDER = 0 to:irq_line::@8 irq_line::@8: scope:[irq_line] from irq_line::@7 irq_line::@9 - [46] irq_line::i1#2 = phi( irq_line::@7/0, irq_line::@9/irq_line::i1#1 ) - [47] if(irq_line::i1#2<$17) goto irq_line::@9 + [45] irq_line::i1#2 = phi( irq_line::@7/0, irq_line::@9/irq_line::i1#1 ) + [46] if(irq_line::i1#2<$17) goto irq_line::@9 to:irq_line::@10 irq_line::@10: scope:[irq_line] from irq_line::@8 asm { nop nop } - [49] irq_line::l#1 = ++ irq_line::l#2 + [48] irq_line::l#1 = ++ irq_line::l#2 to:irq_line::@2 irq_line::@9: scope:[irq_line] from irq_line::@8 - [50] irq_line::i1#1 = ++ irq_line::i1#2 + [49] irq_line::i1#1 = ++ irq_line::i1#2 to:irq_line::@8 irq_line::@6: scope:[irq_line] from irq_line::@5 - [51] irq_line::i#1 = ++ irq_line::i#2 + [50] irq_line::i#1 = ++ irq_line::i#2 to:irq_line::@5 void main() main: scope:[main] from __start::@1 - [52] phi() + [51] phi() to:main::SEI1 main::SEI1: scope:[main] from main asm { sei } to:main::@2 main::@2: scope:[main] from main::SEI1 - [54] *KERNEL_IRQ = &irq_line - [55] *VERA_IEN = VERA_LINE - [56] *VERA_IRQLINE_L = 5 + [53] *KERNEL_IRQ = &irq_line + [54] *VERA_IEN = VERA_LINE + [55] *VERA_IRQLINE_L = 5 to:main::CLI1 main::CLI1: scope:[main] from main::@2 asm { cli } to:main::@1 main::@1: scope:[main] from main::@1 main::CLI1 - [58] phi() + [57] phi() to:main::@1 void* memset(void* memset::str , byte memset::c , word memset::num) memset: scope:[memset] from irq_line::@1 - [59] phi() + [58] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [60] memset::dst#2 = phi( memset/(byte*)memset::str#0, memset::@2/memset::dst#1 ) - [61] if(memset::dst#2!=memset::end#0) goto memset::@2 + [59] memset::dst#2 = phi( memset/(byte*)memset::str#0, memset::@2/memset::dst#1 ) + [60] if(memset::dst#2!=memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [62] return + [61] return to:@return memset::@2: scope:[memset] from memset::@1 - [63] *memset::dst#2 = memset::c#0 - [64] memset::dst#1 = ++ memset::dst#2 + [62] *memset::dst#2 = memset::c#0 + [63] memset::dst#1 = ++ memset::dst#2 to:memset::@1 @@ -704,7 +702,7 @@ void __start() volatile byte cnt loadstore 0.5263157894736842 volatile byte hstart loadstore 0.4545454545454546 volatile byte hstop loadstore 0.34782608695652173 -void irq_line() +__interrupt(rom_min_cx16) void irq_line() byte irq_line::b byte irq_line::b#1 22.0 byte irq_line::b#2 4.125 @@ -801,21 +799,20 @@ Statement [19] if(cnt!=0) goto irq_line::@1 [ hstart hstop vstart vstop sin_idx Statement [20] cnt = 2 [ hstart hstop vstart vstop sin_idx ] ( [ hstart hstop vstart vstop sin_idx ] { } ) always clobbers reg byte a Statement [21] if(hstart>=(byte)$140/4+1) goto irq_line::@1 [ hstart hstop vstart vstop sin_idx ] ( [ hstart hstop vstart vstop sin_idx ] { } ) always clobbers reg byte a Statement [32] *VERA_ISR = VERA_LINE [ ] ( [ ] { } ) always clobbers reg byte a -Statement asm { ply plx pla rti } always clobbers reg byte a reg byte x reg byte y -Statement [35] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] [ irq_line::b#2 irq_line::idx#2 irq_line::bar#0 ] ( [ irq_line::b#2 irq_line::idx#2 irq_line::bar#0 ] { } ) always clobbers reg byte a +Statement [34] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] [ irq_line::b#2 irq_line::idx#2 irq_line::bar#0 ] ( [ irq_line::b#2 irq_line::idx#2 irq_line::bar#0 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:3 [ irq_line::b#2 irq_line::b#1 ] Removing always clobbered register reg byte a as potential for zp[1]:4 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] -Statement [38] irq_line::idx#1 = irq_line::idx#2 + $d [ irq_line::b#2 irq_line::idx#1 ] ( [ irq_line::b#2 irq_line::idx#1 ] { } ) always clobbers reg byte a -Statement [40] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] [ irq_line::b#2 irq_line::idx#2 irq_line::bar#0 irq_line::i2#2 ] ( [ irq_line::b#2 irq_line::idx#2 irq_line::bar#0 irq_line::i2#2 ] { } ) always clobbers reg byte a +Statement [37] irq_line::idx#1 = irq_line::idx#2 + $d [ irq_line::b#2 irq_line::idx#1 ] ( [ irq_line::b#2 irq_line::idx#1 ] { } ) always clobbers reg byte a +Statement [39] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] [ irq_line::b#2 irq_line::idx#2 irq_line::bar#0 irq_line::i2#2 ] ( [ irq_line::b#2 irq_line::idx#2 irq_line::bar#0 irq_line::i2#2 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:5 [ irq_line::i2#2 irq_line::i2#1 ] -Statement [42] *VERA_DC_BORDER = BARS[irq_line::l#2] [ hstart hstop vstart vstop cnt sin_idx irq_line::l#2 ] ( [ hstart hstop vstart vstop cnt sin_idx irq_line::l#2 ] { } ) always clobbers reg byte a +Statement [41] *VERA_DC_BORDER = BARS[irq_line::l#2] [ hstart hstop vstart vstop cnt sin_idx irq_line::l#2 ] ( [ hstart hstop vstart vstop cnt sin_idx irq_line::l#2 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:2 [ irq_line::l#2 irq_line::l#1 ] -Statement [45] *VERA_DC_BORDER = 0 [ hstart hstop vstart vstop cnt sin_idx irq_line::l#2 ] ( [ hstart hstop vstart vstop cnt sin_idx irq_line::l#2 ] { } ) always clobbers reg byte a -Statement [54] *KERNEL_IRQ = &irq_line [ ] ( main:8 [ ] { } ) always clobbers reg byte a -Statement [55] *VERA_IEN = VERA_LINE [ ] ( main:8 [ ] { } ) always clobbers reg byte a -Statement [56] *VERA_IRQLINE_L = 5 [ ] ( main:8 [ ] { } ) always clobbers reg byte a -Statement [61] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( memset:27 [ sin_idx memset::dst#2 ] { } ) always clobbers reg byte a -Statement [63] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( memset:27 [ sin_idx memset::dst#2 ] { } ) always clobbers reg byte a reg byte y +Statement [44] *VERA_DC_BORDER = 0 [ hstart hstop vstart vstop cnt sin_idx irq_line::l#2 ] ( [ hstart hstop vstart vstop cnt sin_idx irq_line::l#2 ] { } ) always clobbers reg byte a +Statement [53] *KERNEL_IRQ = &irq_line [ ] ( main:8 [ ] { } ) always clobbers reg byte a +Statement [54] *VERA_IEN = VERA_LINE [ ] ( main:8 [ ] { } ) always clobbers reg byte a +Statement [55] *VERA_IRQLINE_L = 5 [ ] ( main:8 [ ] { } ) always clobbers reg byte a +Statement [60] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( memset:27 [ sin_idx memset::dst#2 ] { } ) always clobbers reg byte a +Statement [62] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( memset:27 [ sin_idx memset::dst#2 ] { } ) always clobbers reg byte a reg byte y Statement [1] hstart = 0 [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] hstop = (byte)$280/4 [ ] ( [ ] { } ) always clobbers reg byte a Statement [3] vstart = 0 [ ] ( [ ] { } ) always clobbers reg byte a @@ -832,17 +829,16 @@ Statement [19] if(cnt!=0) goto irq_line::@1 [ hstart hstop vstart vstop sin_idx Statement [20] cnt = 2 [ hstart hstop vstart vstop sin_idx ] ( [ hstart hstop vstart vstop sin_idx ] { } ) always clobbers reg byte a Statement [21] if(hstart>=(byte)$140/4+1) goto irq_line::@1 [ hstart hstop vstart vstop sin_idx ] ( [ hstart hstop vstart vstop sin_idx ] { } ) always clobbers reg byte a Statement [32] *VERA_ISR = VERA_LINE [ ] ( [ ] { } ) always clobbers reg byte a -Statement asm { ply plx pla rti } always clobbers reg byte a reg byte x reg byte y -Statement [35] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] [ irq_line::b#2 irq_line::idx#2 irq_line::bar#0 ] ( [ irq_line::b#2 irq_line::idx#2 irq_line::bar#0 ] { } ) always clobbers reg byte a -Statement [38] irq_line::idx#1 = irq_line::idx#2 + $d [ irq_line::b#2 irq_line::idx#1 ] ( [ irq_line::b#2 irq_line::idx#1 ] { } ) always clobbers reg byte a -Statement [40] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] [ irq_line::b#2 irq_line::idx#2 irq_line::bar#0 irq_line::i2#2 ] ( [ irq_line::b#2 irq_line::idx#2 irq_line::bar#0 irq_line::i2#2 ] { } ) always clobbers reg byte a -Statement [42] *VERA_DC_BORDER = BARS[irq_line::l#2] [ hstart hstop vstart vstop cnt sin_idx irq_line::l#2 ] ( [ hstart hstop vstart vstop cnt sin_idx irq_line::l#2 ] { } ) always clobbers reg byte a -Statement [45] *VERA_DC_BORDER = 0 [ hstart hstop vstart vstop cnt sin_idx irq_line::l#2 ] ( [ hstart hstop vstart vstop cnt sin_idx irq_line::l#2 ] { } ) always clobbers reg byte a -Statement [54] *KERNEL_IRQ = &irq_line [ ] ( main:8 [ ] { } ) always clobbers reg byte a -Statement [55] *VERA_IEN = VERA_LINE [ ] ( main:8 [ ] { } ) always clobbers reg byte a -Statement [56] *VERA_IRQLINE_L = 5 [ ] ( main:8 [ ] { } ) always clobbers reg byte a -Statement [61] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( memset:27 [ sin_idx memset::dst#2 ] { } ) always clobbers reg byte a -Statement [63] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( memset:27 [ sin_idx memset::dst#2 ] { } ) always clobbers reg byte a reg byte y +Statement [34] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] [ irq_line::b#2 irq_line::idx#2 irq_line::bar#0 ] ( [ irq_line::b#2 irq_line::idx#2 irq_line::bar#0 ] { } ) always clobbers reg byte a +Statement [37] irq_line::idx#1 = irq_line::idx#2 + $d [ irq_line::b#2 irq_line::idx#1 ] ( [ irq_line::b#2 irq_line::idx#1 ] { } ) always clobbers reg byte a +Statement [39] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] [ irq_line::b#2 irq_line::idx#2 irq_line::bar#0 irq_line::i2#2 ] ( [ irq_line::b#2 irq_line::idx#2 irq_line::bar#0 irq_line::i2#2 ] { } ) always clobbers reg byte a +Statement [41] *VERA_DC_BORDER = BARS[irq_line::l#2] [ hstart hstop vstart vstop cnt sin_idx irq_line::l#2 ] ( [ hstart hstop vstart vstop cnt sin_idx irq_line::l#2 ] { } ) always clobbers reg byte a +Statement [44] *VERA_DC_BORDER = 0 [ hstart hstop vstart vstop cnt sin_idx irq_line::l#2 ] ( [ hstart hstop vstart vstop cnt sin_idx irq_line::l#2 ] { } ) always clobbers reg byte a +Statement [53] *KERNEL_IRQ = &irq_line [ ] ( main:8 [ ] { } ) always clobbers reg byte a +Statement [54] *VERA_IEN = VERA_LINE [ ] ( main:8 [ ] { } ) always clobbers reg byte a +Statement [55] *VERA_IRQLINE_L = 5 [ ] ( main:8 [ ] { } ) always clobbers reg byte a +Statement [60] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( memset:27 [ sin_idx memset::dst#2 ] { } ) always clobbers reg byte a +Statement [62] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( memset:27 [ sin_idx memset::dst#2 ] { } ) always clobbers reg byte a reg byte y Potential registers zp[1]:2 [ irq_line::l#2 irq_line::l#1 ] : zp[1]:2 , reg byte x , reg byte y , Potential registers zp[1]:3 [ irq_line::b#2 irq_line::b#1 ] : zp[1]:3 , reg byte x , reg byte y , Potential registers zp[1]:4 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] : zp[1]:4 , reg byte x , reg byte y , @@ -867,30 +863,30 @@ Uplift Scope [MOS6522_VIA] Uplift Scope [main] Uplift Scope [__start] -Uplifting [irq_line] best 8197 combination reg byte y [ irq_line::i2#2 irq_line::i2#1 ] reg byte a [ irq_line::i#2 irq_line::i#1 ] reg byte a [ irq_line::i1#2 irq_line::i1#1 ] reg byte x [ irq_line::b#2 irq_line::b#1 ] zp[1]:2 [ irq_line::l#2 irq_line::l#1 ] zp[2]:16 [ irq_line::bar#0 ] zp[1]:4 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] +Uplifting [irq_line] best 8203 combination reg byte y [ irq_line::i2#2 irq_line::i2#1 ] reg byte a [ irq_line::i#2 irq_line::i#1 ] reg byte a [ irq_line::i1#2 irq_line::i1#1 ] reg byte x [ irq_line::b#2 irq_line::b#1 ] zp[1]:2 [ irq_line::l#2 irq_line::l#1 ] zp[2]:16 [ irq_line::bar#0 ] zp[1]:4 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] Limited combination testing to 100 combinations of 1296 possible. -Uplifting [memset] best 8197 combination zp[2]:8 [ memset::dst#2 memset::dst#1 ] -Uplifting [] best 8197 combination zp[1]:14 [ cnt ] zp[1]:10 [ hstart ] zp[1]:11 [ hstop ] zp[1]:12 [ vstart ] zp[1]:13 [ vstop ] zp[1]:15 [ sin_idx ] -Uplifting [VERA_SPRITE] best 8197 combination -Uplifting [MOS6522_VIA] best 8197 combination -Uplifting [main] best 8197 combination -Uplifting [__start] best 8197 combination +Uplifting [memset] best 8203 combination zp[2]:8 [ memset::dst#2 memset::dst#1 ] +Uplifting [] best 8203 combination zp[1]:14 [ cnt ] zp[1]:10 [ hstart ] zp[1]:11 [ hstop ] zp[1]:12 [ vstart ] zp[1]:13 [ vstop ] zp[1]:15 [ sin_idx ] +Uplifting [VERA_SPRITE] best 8203 combination +Uplifting [MOS6522_VIA] best 8203 combination +Uplifting [main] best 8203 combination +Uplifting [__start] best 8203 combination Attempting to uplift remaining variables inzp[1]:2 [ irq_line::l#2 irq_line::l#1 ] -Uplifting [irq_line] best 8077 combination reg byte x [ irq_line::l#2 irq_line::l#1 ] +Uplifting [irq_line] best 8083 combination reg byte x [ irq_line::l#2 irq_line::l#1 ] Attempting to uplift remaining variables inzp[1]:4 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] -Uplifting [irq_line] best 8077 combination zp[1]:4 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] +Uplifting [irq_line] best 8083 combination zp[1]:4 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] Attempting to uplift remaining variables inzp[1]:14 [ cnt ] -Uplifting [] best 8077 combination zp[1]:14 [ cnt ] +Uplifting [] best 8083 combination zp[1]:14 [ cnt ] Attempting to uplift remaining variables inzp[1]:10 [ hstart ] -Uplifting [] best 8077 combination zp[1]:10 [ hstart ] +Uplifting [] best 8083 combination zp[1]:10 [ hstart ] Attempting to uplift remaining variables inzp[1]:11 [ hstop ] -Uplifting [] best 8077 combination zp[1]:11 [ hstop ] +Uplifting [] best 8083 combination zp[1]:11 [ hstop ] Attempting to uplift remaining variables inzp[1]:12 [ vstart ] -Uplifting [] best 8077 combination zp[1]:12 [ vstart ] +Uplifting [] best 8083 combination zp[1]:12 [ vstart ] Attempting to uplift remaining variables inzp[1]:13 [ vstop ] -Uplifting [] best 8077 combination zp[1]:13 [ vstop ] +Uplifting [] best 8083 combination zp[1]:13 [ vstop ] Attempting to uplift remaining variables inzp[1]:15 [ sin_idx ] -Uplifting [] best 8077 combination zp[1]:15 [ sin_idx ] +Uplifting [] best 8083 combination zp[1]:15 [ sin_idx ] Coalescing zero page register [ zp[2]:16 [ irq_line::bar#0 ] ] with [ zp[2]:8 [ memset::dst#2 memset::dst#1 ] ] Allocated (was zp[1]:4) zp[1]:2 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] Allocated (was zp[1]:10) zp[1]:3 [ hstart ] @@ -1002,7 +998,7 @@ __start: { // __start::@1 __b1: // [8] call main - // [52] phi from __start::@1 to main [phi:__start::@1->main] + // [51] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1016,6 +1012,7 @@ __start: { irq_line: { .label idx = 2 .label bar = 9 + // interrupt(isr_rom_min_cx16_entry) -- isr_rom_min_cx16_entry // [10] *VERA_CTRL = *VERA_CTRL | VERA_DCSEL -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Update the border lda #VERA_DCSEL @@ -1087,7 +1084,7 @@ irq_line: { __b1: // [27] call memset // Animate the bars - // [59] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] + // [58] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] memset_from___b1: jsr memset jmp __b19 @@ -1116,20 +1113,15 @@ irq_line: { // Reset the LINE interrupt lda #VERA_LINE sta VERA_ISR - // asm { ply plx pla rti } - // Exit CX16 KERNAL IRQ - ply - plx - pla - rti jmp __breturn // irq_line::@return __breturn: - // [34] return - rts + // [33] return + // interrupt(isr_rom_min_cx16_exit) -- isr_rom_min_cx16_exit + jmp $e049 // irq_line::@14 __b14: - // [35] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] -- pbuz1=pbuc1_plus_pbuc2_derefidx_vbuz2 + // [34] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] -- pbuz1=pbuc1_plus_pbuc2_derefidx_vbuz2 ldy.z idx lda SIN,y clc @@ -1138,25 +1130,25 @@ irq_line: { lda #>BARS adc #0 sta.z bar+1 - // [36] phi from irq_line::@14 to irq_line::@16 [phi:irq_line::@14->irq_line::@16] + // [35] phi from irq_line::@14 to irq_line::@16 [phi:irq_line::@14->irq_line::@16] __b16_from___b14: - // [36] phi irq_line::i2#2 = 0 [phi:irq_line::@14->irq_line::@16#0] -- vbuyy=vbuc1 + // [35] phi irq_line::i2#2 = 0 [phi:irq_line::@14->irq_line::@16#0] -- vbuyy=vbuc1 ldy #0 jmp __b16 // irq_line::@16 __b16: - // [37] if(irq_line::i2#2<$20*SIZEOF_BYTE) goto irq_line::@17 -- vbuyy_lt_vbuc1_then_la1 + // [36] if(irq_line::i2#2<$20*SIZEOF_BYTE) goto irq_line::@17 -- vbuyy_lt_vbuc1_then_la1 cpy #$20*SIZEOF_BYTE bcc __b17 jmp __b18 // irq_line::@18 __b18: - // [38] irq_line::idx#1 = irq_line::idx#2 + $d -- vbuz1=vbuz1_plus_vbuc1 + // [37] irq_line::idx#1 = irq_line::idx#2 + $d -- vbuz1=vbuz1_plus_vbuc1 lda #$d clc adc.z idx sta.z idx - // [39] irq_line::b#1 = ++ irq_line::b#2 -- vbuxx=_inc_vbuxx + // [38] irq_line::b#1 = ++ irq_line::b#2 -- vbuxx=_inc_vbuxx inx // [30] phi from irq_line::@18 to irq_line::@13 [phi:irq_line::@18->irq_line::@13] __b13_from___b18: @@ -1165,45 +1157,45 @@ irq_line: { jmp __b13 // irq_line::@17 __b17: - // [40] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuyy + // [39] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuyy lda BAR,y sta (bar),y - // [41] irq_line::i2#1 = ++ irq_line::i2#2 -- vbuyy=_inc_vbuyy + // [40] irq_line::i2#1 = ++ irq_line::i2#2 -- vbuyy=_inc_vbuyy iny - // [36] phi from irq_line::@17 to irq_line::@16 [phi:irq_line::@17->irq_line::@16] + // [35] phi from irq_line::@17 to irq_line::@16 [phi:irq_line::@17->irq_line::@16] __b16_from___b17: - // [36] phi irq_line::i2#2 = irq_line::i2#1 [phi:irq_line::@17->irq_line::@16#0] -- register_copy + // [35] phi irq_line::i2#2 = irq_line::i2#1 [phi:irq_line::@17->irq_line::@16#0] -- register_copy jmp __b16 // irq_line::@3 __b3: - // [42] *VERA_DC_BORDER = BARS[irq_line::l#2] -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // [41] *VERA_DC_BORDER = BARS[irq_line::l#2] -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda BARS,x sta VERA_DC_BORDER - // [43] phi from irq_line::@3 to irq_line::@5 [phi:irq_line::@3->irq_line::@5] + // [42] phi from irq_line::@3 to irq_line::@5 [phi:irq_line::@3->irq_line::@5] __b5_from___b3: - // [43] phi irq_line::i#2 = 0 [phi:irq_line::@3->irq_line::@5#0] -- vbuaa=vbuc1 + // [42] phi irq_line::i#2 = 0 [phi:irq_line::@3->irq_line::@5#0] -- vbuaa=vbuc1 lda #0 jmp __b5 // irq_line::@5 __b5: - // [44] if(irq_line::i#2<$18) goto irq_line::@6 -- vbuaa_lt_vbuc1_then_la1 + // [43] if(irq_line::i#2<$18) goto irq_line::@6 -- vbuaa_lt_vbuc1_then_la1 cmp #$18 bcc __b6 jmp __b7 // irq_line::@7 __b7: - // [45] *VERA_DC_BORDER = 0 -- _deref_pbuc1=vbuc2 + // [44] *VERA_DC_BORDER = 0 -- _deref_pbuc1=vbuc2 // Wait exactly long enought to go to the next raster line lda #0 sta VERA_DC_BORDER - // [46] phi from irq_line::@7 to irq_line::@8 [phi:irq_line::@7->irq_line::@8] + // [45] phi from irq_line::@7 to irq_line::@8 [phi:irq_line::@7->irq_line::@8] __b8_from___b7: - // [46] phi irq_line::i1#2 = 0 [phi:irq_line::@7->irq_line::@8#0] -- vbuaa=vbuc1 + // [45] phi irq_line::i1#2 = 0 [phi:irq_line::@7->irq_line::@8#0] -- vbuaa=vbuc1 lda #0 jmp __b8 // irq_line::@8 __b8: - // [47] if(irq_line::i1#2<$17) goto irq_line::@9 -- vbuaa_lt_vbuc1_then_la1 + // [46] if(irq_line::i1#2<$17) goto irq_line::@9 -- vbuaa_lt_vbuc1_then_la1 cmp #$17 bcc __b9 jmp __b10 @@ -1213,7 +1205,7 @@ irq_line: { // Wait exactly long enought to go to the next raster line nop nop - // [49] irq_line::l#1 = ++ irq_line::l#2 -- vbuxx=_inc_vbuxx + // [48] irq_line::l#1 = ++ irq_line::l#2 -- vbuxx=_inc_vbuxx inx // [16] phi from irq_line::@10 to irq_line::@2 [phi:irq_line::@10->irq_line::@2] __b2_from___b10: @@ -1221,19 +1213,19 @@ irq_line: { jmp __b2 // irq_line::@9 __b9: - // [50] irq_line::i1#1 = ++ irq_line::i1#2 -- vbuaa=_inc_vbuaa + // [49] irq_line::i1#1 = ++ irq_line::i1#2 -- vbuaa=_inc_vbuaa inc - // [46] phi from irq_line::@9 to irq_line::@8 [phi:irq_line::@9->irq_line::@8] + // [45] phi from irq_line::@9 to irq_line::@8 [phi:irq_line::@9->irq_line::@8] __b8_from___b9: - // [46] phi irq_line::i1#2 = irq_line::i1#1 [phi:irq_line::@9->irq_line::@8#0] -- register_copy + // [45] phi irq_line::i1#2 = irq_line::i1#1 [phi:irq_line::@9->irq_line::@8#0] -- register_copy jmp __b8 // irq_line::@6 __b6: - // [51] irq_line::i#1 = ++ irq_line::i#2 -- vbuaa=_inc_vbuaa + // [50] irq_line::i#1 = ++ irq_line::i#2 -- vbuaa=_inc_vbuaa inc - // [43] phi from irq_line::@6 to irq_line::@5 [phi:irq_line::@6->irq_line::@5] + // [42] phi from irq_line::@6 to irq_line::@5 [phi:irq_line::@6->irq_line::@5] __b5_from___b6: - // [43] phi irq_line::i#2 = irq_line::i#1 [phi:irq_line::@6->irq_line::@5#0] -- register_copy + // [42] phi irq_line::i#2 = irq_line::i#1 [phi:irq_line::@6->irq_line::@5#0] -- register_copy jmp __b5 } // main @@ -1246,15 +1238,15 @@ main: { jmp __b2 // main::@2 __b2: - // [54] *KERNEL_IRQ = &irq_line -- _deref_qprc1=pprc2 + // [53] *KERNEL_IRQ = &irq_line -- _deref_qprc1=pprc2 lda #irq_line sta KERNEL_IRQ+1 - // [55] *VERA_IEN = VERA_LINE -- _deref_pbuc1=vbuc2 + // [54] *VERA_IEN = VERA_LINE -- _deref_pbuc1=vbuc2 lda #VERA_LINE sta VERA_IEN - // [56] *VERA_IRQLINE_L = 5 -- _deref_pbuc1=vbuc2 + // [55] *VERA_IRQLINE_L = 5 -- _deref_pbuc1=vbuc2 lda #5 sta VERA_IRQLINE_L jmp CLI1 @@ -1262,7 +1254,7 @@ main: { CLI1: // asm { cli } cli - // [58] phi from main::@1 main::CLI1 to main::@1 [phi:main::@1/main::CLI1->main::@1] + // [57] phi from main::@1 main::CLI1 to main::@1 [phi:main::@1/main::CLI1->main::@1] __b1_from___b1: __b1_from_CLI1: jmp __b1 @@ -1278,9 +1270,9 @@ memset: { .label str = BARS .label end = str+num .label dst = 9 - // [60] phi from memset to memset::@1 [phi:memset->memset::@1] + // [59] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: - // [60] phi memset::dst#2 = (byte*)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [59] phi memset::dst#2 = (byte*)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -1288,7 +1280,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [61] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [60] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -1298,22 +1290,22 @@ memset: { jmp __breturn // memset::@return __breturn: - // [62] return + // [61] return rts // memset::@2 __b2: - // [63] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1 + // [62] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [64] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 + // [63] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [60] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [59] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] __b1_from___b2: - // [60] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [59] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data @@ -1419,7 +1411,7 @@ void __start() volatile byte cnt loadstore zp[1]:7 0.5263157894736842 volatile byte hstart loadstore zp[1]:3 0.4545454545454546 volatile byte hstop loadstore zp[1]:4 0.34782608695652173 -void irq_line() +__interrupt(rom_min_cx16) void irq_line() byte irq_line::b byte irq_line::b#1 reg byte x 22.0 byte irq_line::b#2 reg byte x 4.125 @@ -1475,7 +1467,7 @@ zp[2]:9 [ irq_line::bar#0 memset::dst#2 memset::dst#1 ] FINAL ASSEMBLER -Score: 5780 +Score: 5786 // File Comments // Example program for the Commander X16 @@ -1578,7 +1570,7 @@ __start: { // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [8] call main - // [52] phi from __start::@1 to main [phi:__start::@1->main] + // [51] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [9] return @@ -1589,6 +1581,7 @@ __start: { irq_line: { .label idx = 2 .label bar = 9 + // interrupt(isr_rom_min_cx16_entry) -- isr_rom_min_cx16_entry // *VERA_CTRL |= VERA_DCSEL // [10] *VERA_CTRL = *VERA_CTRL | VERA_DCSEL -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Update the border @@ -1663,7 +1656,7 @@ irq_line: { // memset(BARS, 0, sizeof(BARS)) // [27] call memset // Animate the bars - // [59] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] + // [58] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] jsr memset // irq_line::@19 // idx = sin_idx-- @@ -1688,21 +1681,15 @@ irq_line: { // Reset the LINE interrupt lda #VERA_LINE sta VERA_ISR - // asm - // asm { ply plx pla rti } - // Exit CX16 KERNAL IRQ - ply - plx - pla - rti // irq_line::@return // } - // [34] return - rts + // [33] return + // interrupt(isr_rom_min_cx16_exit) -- isr_rom_min_cx16_exit + jmp $e049 // irq_line::@14 __b14: // bar = BARS + SIN[idx] - // [35] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] -- pbuz1=pbuc1_plus_pbuc2_derefidx_vbuz2 + // [34] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] -- pbuz1=pbuc1_plus_pbuc2_derefidx_vbuz2 ldy.z idx lda SIN,y clc @@ -1711,24 +1698,24 @@ irq_line: { lda #>BARS adc #0 sta.z bar+1 - // [36] phi from irq_line::@14 to irq_line::@16 [phi:irq_line::@14->irq_line::@16] - // [36] phi irq_line::i2#2 = 0 [phi:irq_line::@14->irq_line::@16#0] -- vbuyy=vbuc1 + // [35] phi from irq_line::@14 to irq_line::@16 [phi:irq_line::@14->irq_line::@16] + // [35] phi irq_line::i2#2 = 0 [phi:irq_line::@14->irq_line::@16#0] -- vbuyy=vbuc1 ldy #0 // irq_line::@16 __b16: // for(char i=0;iirq_line::@13] // [30] phi irq_line::idx#2 = irq_line::idx#1 [phi:irq_line::@18->irq_line::@13#0] -- register_copy @@ -1737,42 +1724,42 @@ irq_line: { // irq_line::@17 __b17: // bar[i] = BAR[i] - // [40] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuyy + // [39] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuyy lda BAR,y sta (bar),y // for(char i=0;iirq_line::@16] - // [36] phi irq_line::i2#2 = irq_line::i2#1 [phi:irq_line::@17->irq_line::@16#0] -- register_copy + // [35] phi from irq_line::@17 to irq_line::@16 [phi:irq_line::@17->irq_line::@16] + // [35] phi irq_line::i2#2 = irq_line::i2#1 [phi:irq_line::@17->irq_line::@16#0] -- register_copy jmp __b16 // irq_line::@3 __b3: // *VERA_DC_BORDER = BARS[l] - // [42] *VERA_DC_BORDER = BARS[irq_line::l#2] -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // [41] *VERA_DC_BORDER = BARS[irq_line::l#2] -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda BARS,x sta VERA_DC_BORDER - // [43] phi from irq_line::@3 to irq_line::@5 [phi:irq_line::@3->irq_line::@5] - // [43] phi irq_line::i#2 = 0 [phi:irq_line::@3->irq_line::@5#0] -- vbuaa=vbuc1 + // [42] phi from irq_line::@3 to irq_line::@5 [phi:irq_line::@3->irq_line::@5] + // [42] phi irq_line::i#2 = 0 [phi:irq_line::@3->irq_line::@5#0] -- vbuaa=vbuc1 lda #0 // irq_line::@5 __b5: // for(char i=0;i<24;i++) - // [44] if(irq_line::i#2<$18) goto irq_line::@6 -- vbuaa_lt_vbuc1_then_la1 + // [43] if(irq_line::i#2<$18) goto irq_line::@6 -- vbuaa_lt_vbuc1_then_la1 cmp #$18 bcc __b6 // irq_line::@7 // *VERA_DC_BORDER = 0 - // [45] *VERA_DC_BORDER = 0 -- _deref_pbuc1=vbuc2 + // [44] *VERA_DC_BORDER = 0 -- _deref_pbuc1=vbuc2 // Wait exactly long enought to go to the next raster line lda #0 sta VERA_DC_BORDER - // [46] phi from irq_line::@7 to irq_line::@8 [phi:irq_line::@7->irq_line::@8] - // [46] phi irq_line::i1#2 = 0 [phi:irq_line::@7->irq_line::@8#0] -- vbuaa=vbuc1 + // [45] phi from irq_line::@7 to irq_line::@8 [phi:irq_line::@7->irq_line::@8] + // [45] phi irq_line::i1#2 = 0 [phi:irq_line::@7->irq_line::@8#0] -- vbuaa=vbuc1 // irq_line::@8 __b8: // for(char i=0;i<23;i++) - // [47] if(irq_line::i1#2<$17) goto irq_line::@9 -- vbuaa_lt_vbuc1_then_la1 + // [46] if(irq_line::i1#2<$17) goto irq_line::@9 -- vbuaa_lt_vbuc1_then_la1 cmp #$17 bcc __b9 // irq_line::@10 @@ -1782,7 +1769,7 @@ irq_line: { nop nop // for(char l=0;l!=230;l++) - // [49] irq_line::l#1 = ++ irq_line::l#2 -- vbuxx=_inc_vbuxx + // [48] irq_line::l#1 = ++ irq_line::l#2 -- vbuxx=_inc_vbuxx inx // [16] phi from irq_line::@10 to irq_line::@2 [phi:irq_line::@10->irq_line::@2] // [16] phi irq_line::l#2 = irq_line::l#1 [phi:irq_line::@10->irq_line::@2#0] -- register_copy @@ -1790,18 +1777,18 @@ irq_line: { // irq_line::@9 __b9: // for(char i=0;i<23;i++) - // [50] irq_line::i1#1 = ++ irq_line::i1#2 -- vbuaa=_inc_vbuaa + // [49] irq_line::i1#1 = ++ irq_line::i1#2 -- vbuaa=_inc_vbuaa inc - // [46] phi from irq_line::@9 to irq_line::@8 [phi:irq_line::@9->irq_line::@8] - // [46] phi irq_line::i1#2 = irq_line::i1#1 [phi:irq_line::@9->irq_line::@8#0] -- register_copy + // [45] phi from irq_line::@9 to irq_line::@8 [phi:irq_line::@9->irq_line::@8] + // [45] phi irq_line::i1#2 = irq_line::i1#1 [phi:irq_line::@9->irq_line::@8#0] -- register_copy jmp __b8 // irq_line::@6 __b6: // for(char i=0;i<24;i++) - // [51] irq_line::i#1 = ++ irq_line::i#2 -- vbuaa=_inc_vbuaa + // [50] irq_line::i#1 = ++ irq_line::i#2 -- vbuaa=_inc_vbuaa inc - // [43] phi from irq_line::@6 to irq_line::@5 [phi:irq_line::@6->irq_line::@5] - // [43] phi irq_line::i#2 = irq_line::i#1 [phi:irq_line::@6->irq_line::@5#0] -- register_copy + // [42] phi from irq_line::@6 to irq_line::@5 [phi:irq_line::@6->irq_line::@5] + // [42] phi irq_line::i#2 = irq_line::i#1 [phi:irq_line::@6->irq_line::@5#0] -- register_copy jmp __b5 } // main @@ -1812,24 +1799,24 @@ main: { sei // main::@2 // *KERNEL_IRQ = &irq_line - // [54] *KERNEL_IRQ = &irq_line -- _deref_qprc1=pprc2 + // [53] *KERNEL_IRQ = &irq_line -- _deref_qprc1=pprc2 lda #irq_line sta KERNEL_IRQ+1 // *VERA_IEN = VERA_LINE - // [55] *VERA_IEN = VERA_LINE -- _deref_pbuc1=vbuc2 + // [54] *VERA_IEN = VERA_LINE -- _deref_pbuc1=vbuc2 lda #VERA_LINE sta VERA_IEN // *VERA_IRQLINE_L = 5 - // [56] *VERA_IRQLINE_L = 5 -- _deref_pbuc1=vbuc2 + // [55] *VERA_IRQLINE_L = 5 -- _deref_pbuc1=vbuc2 lda #5 sta VERA_IRQLINE_L // main::CLI1 // asm // asm { cli } cli - // [58] phi from main::@1 main::CLI1 to main::@1 [phi:main::@1/main::CLI1->main::@1] + // [57] phi from main::@1 main::CLI1 to main::@1 [phi:main::@1/main::CLI1->main::@1] // main::@1 __b1: jmp __b1 @@ -1842,8 +1829,8 @@ memset: { .label str = BARS .label end = str+num .label dst = 9 - // [60] phi from memset to memset::@1 [phi:memset->memset::@1] - // [60] phi memset::dst#2 = (byte*)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [59] phi from memset to memset::@1 [phi:memset->memset::@1] + // [59] phi memset::dst#2 = (byte*)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -1851,7 +1838,7 @@ memset: { // memset::@1 __b1: // for(char* dst = str; dst!=end; dst++) - // [61] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [60] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -1860,23 +1847,23 @@ memset: { bne __b2 // memset::@return // } - // [62] return + // [61] return rts // memset::@2 __b2: // *dst = c - // [63] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1 + // [62] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [64] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 + // [63] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [60] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [60] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [59] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [59] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data diff --git a/src/test/ref/examples/cx16/rasterbars.sym b/src/test/ref/examples/cx16/rasterbars.sym index e907961e8..82f036365 100644 --- a/src/test/ref/examples/cx16/rasterbars.sym +++ b/src/test/ref/examples/cx16/rasterbars.sym @@ -19,7 +19,7 @@ void __start() volatile byte cnt loadstore zp[1]:7 0.5263157894736842 volatile byte hstart loadstore zp[1]:3 0.4545454545454546 volatile byte hstop loadstore zp[1]:4 0.34782608695652173 -void irq_line() +__interrupt(rom_min_cx16) void irq_line() byte irq_line::b byte irq_line::b#1 reg byte x 22.0 byte irq_line::b#2 reg byte x 4.125 diff --git a/src/test/ref/examples/cx16/sprites.asm b/src/test/ref/examples/cx16/sprites.asm index 68611d737..2a6cbac9a 100644 --- a/src/test/ref/examples/cx16/sprites.asm +++ b/src/test/ref/examples/cx16/sprites.asm @@ -466,7 +466,7 @@ memcpy_to_vram: { jmp __b1 } .segment Data - // A 64*64 8bpp TUT sprite + // A 64*64 8bpp TUT sprite and palette .align $1000 SPRITE_PIXELS: .var pic = LoadPicture("tut.png") @@ -476,8 +476,10 @@ SPRITE_PIXELS: .var palList = List() // Next palette index .var nxt_idx = 0; + // Extract palette while outputting pixels as palete index values .for (var y=0; y<64; y++) { .for (var x=0;x<64; x++) { + // Find palette index (add if not known) .var rgb = pic.getPixel(x,y); .var idx = palette.get(rgb) .if(idx==null) { @@ -485,11 +487,12 @@ SPRITE_PIXELS: .eval palette.put(rgb,idx); .eval palList.add(rgb) } - // Output pixel index + // Output pixel as palette index .byte idx } } - // Output sprite palette (offset 64*64 bytes) + .if(nxt_idx>256) .error "Image has too many colours "+nxt_idx + // Output sprite palette (at offset 64*64 bytes) .for(var i=0;i<256;i++) { .var rgb = palList.get(i) .var red = floor(rgb / [256*256]) @@ -501,7 +504,6 @@ SPRITE_PIXELS: .byte red/16 } - .align $100 SINX: .fillword 256, 288+288*sin(i*2*PI/SINX_LEN) diff --git a/src/test/ref/examples/cx16/sprites.cfg b/src/test/ref/examples/cx16/sprites.cfg index 51ac72381..dea836c69 100644 --- a/src/test/ref/examples/cx16/sprites.cfg +++ b/src/test/ref/examples/cx16/sprites.cfg @@ -15,7 +15,7 @@ __start::@return: scope:[__start] from __start::@1 [5] return to:@return -void irq_vsync() +__interrupt(rom_sys_cx16) void irq_vsync() irq_vsync: scope:[irq_vsync] from [6] sin_idx_x = ++ sin_idx_x [7] if(sin_idx_x!=SINX_LEN) goto irq_vsync::@1 diff --git a/src/test/ref/examples/cx16/sprites.log b/src/test/ref/examples/cx16/sprites.log index cb2697697..83c1658b4 100644 --- a/src/test/ref/examples/cx16/sprites.log +++ b/src/test/ref/examples/cx16/sprites.log @@ -1,4 +1,4 @@ -Resolved forward reference irq_vsync to void irq_vsync() +Resolved forward reference irq_vsync to __interrupt(rom_sys_cx16) void irq_vsync() Setting struct to load/store in variable affected by address-of main::$6 = call memcpy_to_vram (byte)>VERA_SPRITE_ATTR main::vram_sprite_attr &SPRITE_ATTR main::$5 Setting struct to load/store in variable affected by address-of irq_vsync::$5 = call memcpy_to_vram irq_vsync::vram_sprite_attr_bank irq_vsync::vram_sprite_pos &SPRITE_ATTR+2 4 Resolving sizeof() main::$5 = sizeof SPRITE_ATTR @@ -106,7 +106,7 @@ main::@return: scope:[main] from main::CLI1 return to:@return -void irq_vsync() +__interrupt(rom_sys_cx16) void irq_vsync() irq_vsync: scope:[irq_vsync] from sin_idx_x = ++ sin_idx_x irq_vsync::$0 = sin_idx_x == SINX_LEN @@ -241,8 +241,10 @@ const byte* SPRITE_PIXELS[$40*$40+$200] = kickasm {{ .var pic = LoadPicture("tu .var palList = List() // Next palette index .var nxt_idx = 0; + // Extract palette while outputting pixels as palete index values .for (var y=0; y<64; y++) { .for (var x=0;x<64; x++) { + // Find palette index (add if not known) .var rgb = pic.getPixel(x,y); .var idx = palette.get(rgb) .if(idx==null) { @@ -250,11 +252,12 @@ const byte* SPRITE_PIXELS[$40*$40+$200] = kickasm {{ .var pic = LoadPicture("tu .eval palette.put(rgb,idx); .eval palList.add(rgb) } - // Output pixel index + // Output pixel as palette index .byte idx } } - // Output sprite palette (offset 64*64 bytes) + .if(nxt_idx>256) .error "Image has too many colours "+nxt_idx + // Output sprite palette (at offset 64*64 bytes) .for(var i=0;i<256;i++) { .var rgb = palList.get(i) .var red = floor(rgb / [256*256]) @@ -265,7 +268,6 @@ const byte* SPRITE_PIXELS[$40*$40+$200] = kickasm {{ .var pic = LoadPicture("tu // bits bits 0-3 red .byte red/16 } - }} const nomodify dword SPRITE_PIXELS_VRAM = $8000 const nomodify byte VERA_ADDRSEL = 1 @@ -285,7 +287,7 @@ const nomodify word VERA_SPRITE_8BPP = $8000 const nomodify dword VERA_SPRITE_ATTR = $1fc00 const nomodify byte VERA_VSYNC = 1 void __start() -void irq_vsync() +__interrupt(rom_sys_cx16) void irq_vsync() bool~ irq_vsync::$0 bool~ irq_vsync::$1 bool~ irq_vsync::$10 @@ -653,7 +655,7 @@ __start::@return: scope:[__start] from __start::@1 [5] return to:@return -void irq_vsync() +__interrupt(rom_sys_cx16) void irq_vsync() irq_vsync: scope:[irq_vsync] from [6] sin_idx_x = ++ sin_idx_x [7] if(sin_idx_x!=SINX_LEN) goto irq_vsync::@1 @@ -791,7 +793,7 @@ memcpy_to_vram::@2: scope:[memcpy_to_vram] from memcpy_to_vram::@1 VARIABLE REGISTER WEIGHTS struct VERA_SPRITE SPRITE_ATTR loadstore = { ADDR: 256) .error "Image has too many colours "+nxt_idx + // Output sprite palette (at offset 64*64 bytes) .for(var i=0;i<256;i++) { .var rgb = palList.get(i) .var red = floor(rgb / [256*256]) @@ -1707,7 +1714,6 @@ SPRITE_PIXELS: .byte red/16 } - .align $100 SINX: .fillword 256, 288+288*sin(i*2*PI/SINX_LEN) @@ -1789,7 +1795,7 @@ Removing instruction __b6: Removing instruction __b1_from___b6: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination -Removing unreachable instruction rts +Removing unreachable instruction jmp $e034 Succesful ASM optimization Pass5UnreachableCodeElimination FINAL SYMBOL TABLE @@ -1811,8 +1817,10 @@ const byte* SPRITE_PIXELS[$40*$40+$200] = kickasm {{ .var pic = LoadPicture("tu .var palList = List() // Next palette index .var nxt_idx = 0; + // Extract palette while outputting pixels as palete index values .for (var y=0; y<64; y++) { .for (var x=0;x<64; x++) { + // Find palette index (add if not known) .var rgb = pic.getPixel(x,y); .var idx = palette.get(rgb) .if(idx==null) { @@ -1820,11 +1828,12 @@ const byte* SPRITE_PIXELS[$40*$40+$200] = kickasm {{ .var pic = LoadPicture("tu .eval palette.put(rgb,idx); .eval palList.add(rgb) } - // Output pixel index + // Output pixel as palette index .byte idx } } - // Output sprite palette (offset 64*64 bytes) + .if(nxt_idx>256) .error "Image has too many colours "+nxt_idx + // Output sprite palette (at offset 64*64 bytes) .for(var i=0;i<256;i++) { .var rgb = palList.get(i) .var red = floor(rgb / [256*256]) @@ -1835,7 +1844,6 @@ const byte* SPRITE_PIXELS[$40*$40+$200] = kickasm {{ .var pic = LoadPicture("tu // bits bits 0-3 red .byte red/16 } - }} const nomodify dword SPRITE_PIXELS_VRAM = $8000 const nomodify byte VERA_ADDRSEL = 1 @@ -1855,7 +1863,7 @@ const nomodify word VERA_SPRITE_8BPP = $8000 const nomodify dword VERA_SPRITE_ATTR = $1fc00 const nomodify byte VERA_VSYNC = 1 void __start() -void irq_vsync() +__interrupt(rom_sys_cx16) void irq_vsync() word~ irq_vsync::$11 zp[2]:22 22.0 word~ irq_vsync::$12 zp[2]:24 22.0 word*~ irq_vsync::$13 zp[2]:22 22.0 @@ -2057,6 +2065,7 @@ irq_vsync: { .label s = 2 .label __13 = $16 .label __14 = $18 + // interrupt(isr_rom_sys_cx16_entry) -- isr_rom_sys_cx16_entry // if(++sin_idx_x==SINX_LEN) // [6] sin_idx_x = ++ sin_idx_x -- vwuz1=_inc_vwuz1 inc.z sin_idx_x @@ -2144,6 +2153,7 @@ irq_vsync: { // irq_vsync::@return // } // [18] return + // interrupt(isr_rom_sys_cx16_exit) -- isr_rom_sys_cx16_exit // irq_vsync::@6 __b6: // SPRITE_ATTR.X = SINX[i_x] @@ -2542,7 +2552,7 @@ memcpy_to_vram: { } // File Data .segment Data - // A 64*64 8bpp TUT sprite + // A 64*64 8bpp TUT sprite and palette .align $1000 SPRITE_PIXELS: .var pic = LoadPicture("tut.png") @@ -2552,8 +2562,10 @@ SPRITE_PIXELS: .var palList = List() // Next palette index .var nxt_idx = 0; + // Extract palette while outputting pixels as palete index values .for (var y=0; y<64; y++) { .for (var x=0;x<64; x++) { + // Find palette index (add if not known) .var rgb = pic.getPixel(x,y); .var idx = palette.get(rgb) .if(idx==null) { @@ -2561,11 +2573,12 @@ SPRITE_PIXELS: .eval palette.put(rgb,idx); .eval palList.add(rgb) } - // Output pixel index + // Output pixel as palette index .byte idx } } - // Output sprite palette (offset 64*64 bytes) + .if(nxt_idx>256) .error "Image has too many colours "+nxt_idx + // Output sprite palette (at offset 64*64 bytes) .for(var i=0;i<256;i++) { .var rgb = palList.get(i) .var red = floor(rgb / [256*256]) @@ -2577,7 +2590,6 @@ SPRITE_PIXELS: .byte red/16 } - .align $100 SINX: .fillword 256, 288+288*sin(i*2*PI/SINX_LEN) diff --git a/src/test/ref/examples/cx16/sprites.sym b/src/test/ref/examples/cx16/sprites.sym index ffcf6e5c0..62cf323d9 100644 --- a/src/test/ref/examples/cx16/sprites.sym +++ b/src/test/ref/examples/cx16/sprites.sym @@ -16,8 +16,10 @@ const byte* SPRITE_PIXELS[$40*$40+$200] = kickasm {{ .var pic = LoadPicture("tu .var palList = List() // Next palette index .var nxt_idx = 0; + // Extract palette while outputting pixels as palete index values .for (var y=0; y<64; y++) { .for (var x=0;x<64; x++) { + // Find palette index (add if not known) .var rgb = pic.getPixel(x,y); .var idx = palette.get(rgb) .if(idx==null) { @@ -25,11 +27,12 @@ const byte* SPRITE_PIXELS[$40*$40+$200] = kickasm {{ .var pic = LoadPicture("tu .eval palette.put(rgb,idx); .eval palList.add(rgb) } - // Output pixel index + // Output pixel as palette index .byte idx } } - // Output sprite palette (offset 64*64 bytes) + .if(nxt_idx>256) .error "Image has too many colours "+nxt_idx + // Output sprite palette (at offset 64*64 bytes) .for(var i=0;i<256;i++) { .var rgb = palList.get(i) .var red = floor(rgb / [256*256]) @@ -40,7 +43,6 @@ const byte* SPRITE_PIXELS[$40*$40+$200] = kickasm {{ .var pic = LoadPicture("tu // bits bits 0-3 red .byte red/16 } - }} const nomodify dword SPRITE_PIXELS_VRAM = $8000 const nomodify byte VERA_ADDRSEL = 1 @@ -60,7 +62,7 @@ const nomodify word VERA_SPRITE_8BPP = $8000 const nomodify dword VERA_SPRITE_ATTR = $1fc00 const nomodify byte VERA_VSYNC = 1 void __start() -void irq_vsync() +__interrupt(rom_sys_cx16) void irq_vsync() word~ irq_vsync::$11 zp[2]:22 22.0 word~ irq_vsync::$12 zp[2]:24 22.0 word*~ irq_vsync::$13 zp[2]:22 22.0 diff --git a/src/test/ref/examples/irq/irq-hyperscreen.asm b/src/test/ref/examples/irq/irq-hyperscreen.asm index d469460e9..e28599afb 100644 --- a/src/test/ref/examples/irq/irq-hyperscreen.asm +++ b/src/test/ref/examples/irq/irq-hyperscreen.asm @@ -35,10 +35,6 @@ .label GHOST_BYTE = $3fff // Interrupt Routine 2 irq_bottom_2: { - pha - txa - pha - tya pha // VICII->BORDER_COLOR = WHITE lda #WHITE @@ -66,18 +62,10 @@ irq_bottom_2: { sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // } pla - tay - pla - tax - pla rti } // Interrupt Routine 1 irq_bottom_1: { - pha - txa - pha - tya pha // VICII->BORDER_COLOR = WHITE lda #WHITE @@ -105,10 +93,6 @@ irq_bottom_1: { sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // } pla - tay - pla - tax - pla rti } main: { diff --git a/src/test/ref/examples/irq/irq-hyperscreen.cfg b/src/test/ref/examples/irq/irq-hyperscreen.cfg index 97301d95d..9c931811c 100644 --- a/src/test/ref/examples/irq/irq-hyperscreen.cfg +++ b/src/test/ref/examples/irq/irq-hyperscreen.cfg @@ -1,5 +1,5 @@ -interrupt(HARDWARE_STACK) void irq_bottom_2() +__interrupt(hardware_clobber) void irq_bottom_2() irq_bottom_2: scope:[irq_bottom_2] from [0] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = WHITE [1] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) | VIC_RSEL @@ -12,7 +12,7 @@ irq_bottom_2::@return: scope:[irq_bottom_2] from irq_bottom_2 [6] return to:@return -interrupt(HARDWARE_STACK) void irq_bottom_1() +__interrupt(hardware_clobber) void irq_bottom_1() irq_bottom_1: scope:[irq_bottom_1] from [7] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = WHITE [8] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & $ff^VIC_RSEL diff --git a/src/test/ref/examples/irq/irq-hyperscreen.log b/src/test/ref/examples/irq/irq-hyperscreen.log index 653854569..c337ee6b5 100644 --- a/src/test/ref/examples/irq/irq-hyperscreen.log +++ b/src/test/ref/examples/irq/irq-hyperscreen.log @@ -1,5 +1,5 @@ -Resolved forward reference irq_bottom_1 to interrupt(HARDWARE_STACK) void irq_bottom_1() -Resolved forward reference irq_bottom_2 to interrupt(HARDWARE_STACK) void irq_bottom_2() +Resolved forward reference irq_bottom_1 to __interrupt(hardware_clobber) void irq_bottom_1() +Resolved forward reference irq_bottom_2 to __interrupt(hardware_clobber) void irq_bottom_2() Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -23,7 +23,7 @@ main::@return: scope:[main] from return to:@return -interrupt(HARDWARE_STACK) void irq_bottom_1() +__interrupt(hardware_clobber) void irq_bottom_1() irq_bottom_1: scope:[irq_bottom_1] from *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = WHITE *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & $ff^VIC_RSEL @@ -36,7 +36,7 @@ irq_bottom_1::@return: scope:[irq_bottom_1] from irq_bottom_1 return to:@return -interrupt(HARDWARE_STACK) void irq_bottom_2() +__interrupt(hardware_clobber) void irq_bottom_2() irq_bottom_2: scope:[irq_bottom_2] from *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = WHITE *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) | VIC_RSEL @@ -80,8 +80,8 @@ const nomodify struct MOS6569_VICII* VICII = (struct MOS6569_VICII*)$d000 const nomodify byte VIC_RSEL = 8 const nomodify byte WHITE = 1 void __start() -interrupt(HARDWARE_STACK) void irq_bottom_1() -interrupt(HARDWARE_STACK) void irq_bottom_2() +__interrupt(hardware_clobber) void irq_bottom_1() +__interrupt(hardware_clobber) void irq_bottom_2() void main() Adding number conversion cast (unumber) 0 in *GHOST_BYTE = 0 @@ -134,7 +134,7 @@ Adding NOP phi() at start of main::@1 FINAL CONTROL FLOW GRAPH -interrupt(HARDWARE_STACK) void irq_bottom_2() +__interrupt(hardware_clobber) void irq_bottom_2() irq_bottom_2: scope:[irq_bottom_2] from [0] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = WHITE [1] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) | VIC_RSEL @@ -147,7 +147,7 @@ irq_bottom_2::@return: scope:[irq_bottom_2] from irq_bottom_2 [6] return to:@return -interrupt(HARDWARE_STACK) void irq_bottom_1() +__interrupt(hardware_clobber) void irq_bottom_1() irq_bottom_1: scope:[irq_bottom_1] from [7] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = WHITE [8] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) = *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_CONTROL1) & $ff^VIC_RSEL @@ -179,8 +179,8 @@ main::@1: scope:[main] from main main::@1 VARIABLE REGISTER WEIGHTS -interrupt(HARDWARE_STACK) void irq_bottom_1() -interrupt(HARDWARE_STACK) void irq_bottom_2() +__interrupt(hardware_clobber) void irq_bottom_1() +__interrupt(hardware_clobber) void irq_bottom_2() void main() Initial phi equivalence classes @@ -218,13 +218,15 @@ Uplift Scope [irq_bottom_1] Uplift Scope [irq_bottom_2] Uplift Scope [] -Uplifting [MOS6526_CIA] best 524 combination -Uplifting [MOS6569_VICII] best 524 combination -Uplifting [MOS6581_SID] best 524 combination -Uplifting [main] best 524 combination -Uplifting [irq_bottom_1] best 524 combination -Uplifting [irq_bottom_2] best 524 combination -Uplifting [] best 524 combination +Uplifting [MOS6526_CIA] best 700 combination +Uplifting [MOS6569_VICII] best 700 combination +Uplifting [MOS6581_SID] best 700 combination +Uplifting [main] best 700 combination +Uplifting [irq_bottom_1] best 700 combination +Uplifting [irq_bottom_2] best 700 combination +Uplifting [] best 700 combination +Interrupt procedure irq_bottom_1 clobbers AnzP +Interrupt procedure irq_bottom_2 clobbers AnzP ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -268,11 +270,7 @@ ASSEMBLER BEFORE OPTIMIZATION // irq_bottom_2 // Interrupt Routine 2 irq_bottom_2: { - // entry interrupt(HARDWARE_STACK) - pha - txa - pha - tya + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry pha // [0] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE @@ -301,22 +299,15 @@ irq_bottom_2: { jmp __breturn // irq_bottom_2::@return __breturn: - // [6] return - exit interrupt(HARDWARE_STACK) - pla - tay - pla - tax + // [6] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit pla rti } // irq_bottom_1 // Interrupt Routine 1 irq_bottom_1: { - // entry interrupt(HARDWARE_STACK) - pha - txa - pha - tya + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry pha // [7] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE @@ -345,11 +336,8 @@ irq_bottom_1: { jmp __breturn // irq_bottom_1::@return __breturn: - // [13] return - exit interrupt(HARDWARE_STACK) - pla - tay - pla - tax + // [13] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit pla rti } @@ -434,14 +422,14 @@ const nomodify byte RED = 2 const nomodify struct MOS6569_VICII* VICII = (struct MOS6569_VICII*) 53248 const nomodify byte VIC_RSEL = 8 const nomodify byte WHITE = 1 -interrupt(HARDWARE_STACK) void irq_bottom_1() -interrupt(HARDWARE_STACK) void irq_bottom_2() +__interrupt(hardware_clobber) void irq_bottom_1() +__interrupt(hardware_clobber) void irq_bottom_2() void main() FINAL ASSEMBLER -Score: 488 +Score: 444 // File Comments // A raster IRQ that opens the top/bottom border. @@ -484,11 +472,7 @@ Score: 488 // irq_bottom_2 // Interrupt Routine 2 irq_bottom_2: { - // entry interrupt(HARDWARE_STACK) - pha - txa - pha - tya + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry pha // VICII->BORDER_COLOR = WHITE // [0] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = WHITE -- _deref_pbuc1=vbuc2 @@ -522,22 +506,15 @@ irq_bottom_2: { sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // irq_bottom_2::@return // } - // [6] return - exit interrupt(HARDWARE_STACK) - pla - tay - pla - tax + // [6] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit pla rti } // irq_bottom_1 // Interrupt Routine 1 irq_bottom_1: { - // entry interrupt(HARDWARE_STACK) - pha - txa - pha - tya + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry pha // VICII->BORDER_COLOR = WHITE // [7] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = WHITE -- _deref_pbuc1=vbuc2 @@ -571,11 +548,8 @@ irq_bottom_1: { sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // irq_bottom_1::@return // } - // [13] return - exit interrupt(HARDWARE_STACK) - pla - tay - pla - tax + // [13] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit pla rti } diff --git a/src/test/ref/examples/irq/irq-hyperscreen.sym b/src/test/ref/examples/irq/irq-hyperscreen.sym index 6b16af963..29507bb1a 100644 --- a/src/test/ref/examples/irq/irq-hyperscreen.sym +++ b/src/test/ref/examples/irq/irq-hyperscreen.sym @@ -17,7 +17,7 @@ const nomodify byte RED = 2 const nomodify struct MOS6569_VICII* VICII = (struct MOS6569_VICII*) 53248 const nomodify byte VIC_RSEL = 8 const nomodify byte WHITE = 1 -interrupt(HARDWARE_STACK) void irq_bottom_1() -interrupt(HARDWARE_STACK) void irq_bottom_2() +__interrupt(hardware_clobber) void irq_bottom_1() +__interrupt(hardware_clobber) void irq_bottom_2() void main() diff --git a/src/test/ref/examples/mega65/banked-music.asm b/src/test/ref/examples/mega65/banked-music.asm index 2af05a4f8..fdbcdd838 100644 --- a/src/test/ref/examples/mega65/banked-music.asm +++ b/src/test/ref/examples/mega65/banked-music.asm @@ -73,10 +73,9 @@ // Raster IRQ routine irq: { pha - txa - pha - tya - pha + phx + phy + phz // VICII->IRQ_STATUS = IRQ_RASTER // Acknowledge the IRQ lda #IRQ_RASTER @@ -108,10 +107,9 @@ irq: { // (VICII->BORDER_COLOR)--; dec VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // } - pla - tay - pla - tax + plz + ply + plx pla rti } diff --git a/src/test/ref/examples/mega65/banked-music.cfg b/src/test/ref/examples/mega65/banked-music.cfg index 9aacbbeff..dcb5aa143 100644 --- a/src/test/ref/examples/mega65/banked-music.cfg +++ b/src/test/ref/examples/mega65/banked-music.cfg @@ -1,5 +1,5 @@ -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from [0] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER [1] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) diff --git a/src/test/ref/examples/mega65/banked-music.log b/src/test/ref/examples/mega65/banked-music.log index 9d7494b44..57c242c37 100644 --- a/src/test/ref/examples/mega65/banked-music.log +++ b/src/test/ref/examples/mega65/banked-music.log @@ -29,7 +29,7 @@ Resolved forward reference MUSIC_END to MUSIC_END Resolved forward reference MUSIC to MUSIC Resolved forward reference upperCodeData to upperCodeData Resolved forward reference musicInit to musicInit -Resolved forward reference irq to interrupt(HARDWARE_STACK) void irq() +Resolved forward reference irq to __interrupt(hardware_clobber) void irq() Resolved forward reference MUSIC to MUSIC Resolved forward reference MUSIC to MUSIC Resolved forward reference MUSIC to MUSIC @@ -189,7 +189,7 @@ main::@return: scope:[main] from return to:@return -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) @@ -273,7 +273,7 @@ const nomodify struct MOS6569_VICII* VICII = (struct MOS6569_VICII*)$d000 const nomodify struct MOS4569_VICIII* VICIII = (struct MOS4569_VICIII*)$d000 const nomodify struct MEGA65_VICIV* VICIV = (struct MEGA65_VICIV*)$d000 void __start() -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_clobber) void irq() bool~ irq::$5 byte irq::raster byte irq::raster#0 @@ -665,7 +665,7 @@ Adding NOP phi() at start of memoryRemapBlock FINAL CONTROL FLOW GRAPH -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from [0] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER [1] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) @@ -789,7 +789,7 @@ memcpy_dma4::@return: scope:[memcpy_dma4] from memcpy_dma4 VARIABLE REGISTER WEIGHTS -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_clobber) void irq() byte irq::raster byte irq::raster#0 6.5 void main() @@ -891,7 +891,7 @@ Allocated mem[12] [ memcpy_dma_command4 ] REGISTER UPLIFT POTENTIAL REGISTERS Statement [0] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a Statement [3] call *musicPlay [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z -Statement [8] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [8] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z Statement [11] *((byte*)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $47 [ memcpy_dma_command4 ] ( [ memcpy_dma_command4 ] { } ) always clobbers reg byte a Statement [12] *((byte*)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $53 [ memcpy_dma_command4 ] ( [ memcpy_dma_command4 ] { } ) always clobbers reg byte a Statement [13] *((byte*)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) = *((byte*)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | $40 [ memcpy_dma_command4 ] ( [ memcpy_dma_command4 ] { } ) always clobbers reg byte a @@ -930,7 +930,7 @@ Statement [66] *((byte*)DMA+OFFSET_STRUCT_F018_DMAGIC_ADDRMSB) = >&memcpy_dma_co Statement [67] *((byte*)DMA) = <&memcpy_dma_command4 [ memcpy_dma4::dmaMode#0 ] ( memcpy_dma4:18 [ memcpy_dma4::dmaMode#0 ] { } ) always clobbers reg byte a Statement [0] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a Statement [3] call *musicPlay [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z -Statement [8] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [8] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z Statement [11] *((byte*)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $47 [ memcpy_dma_command4 ] ( [ memcpy_dma_command4 ] { } ) always clobbers reg byte a Statement [12] *((byte*)VICIII+OFFSET_STRUCT_MOS4569_VICIII_KEY) = $53 [ memcpy_dma_command4 ] ( [ memcpy_dma_command4 ] { } ) always clobbers reg byte a Statement [13] *((byte*)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) = *((byte*)VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLB) | $40 [ memcpy_dma_command4 ] ( [ memcpy_dma_command4 ] { } ) always clobbers reg byte a @@ -996,41 +996,42 @@ Uplift Scope [DMA_LIST_F018A] Uplift Scope [DMA_LIST_F018B] Uplift Scope [] 0: mem[12] [ memcpy_dma_command4 ] -Uplifting [memoryRemap] best 4664 combination reg byte a [ memoryRemap::$0 ] reg byte a [ memoryRemap::$2 ] reg byte a [ memoryRemap::$3 ] zp[1]:14 [ memoryRemap::$4 ] zp[1]:15 [ memoryRemap::$5 ] zp[1]:17 [ memoryRemap::$7 ] zp[1]:18 [ memoryRemap::$8 ] zp[1]:19 [ memoryRemap::$9 ] zp[1]:11 [ memoryRemap::$1 ] zp[1]:16 [ memoryRemap::$6 ] zp[2]:4 [ memoryRemap::lowerPageOffset#4 ] zp[1]:6 [ memoryRemap::remapBlocks#4 ] zp[2]:7 [ memoryRemap::upperPageOffset#4 ] +Uplifting [memoryRemap] best 4842 combination reg byte a [ memoryRemap::$0 ] reg byte a [ memoryRemap::$2 ] reg byte a [ memoryRemap::$3 ] zp[1]:14 [ memoryRemap::$4 ] zp[1]:15 [ memoryRemap::$5 ] zp[1]:17 [ memoryRemap::$7 ] zp[1]:18 [ memoryRemap::$8 ] zp[1]:19 [ memoryRemap::$9 ] zp[1]:11 [ memoryRemap::$1 ] zp[1]:16 [ memoryRemap::$6 ] zp[2]:4 [ memoryRemap::lowerPageOffset#4 ] zp[1]:6 [ memoryRemap::remapBlocks#4 ] zp[2]:7 [ memoryRemap::upperPageOffset#4 ] Limited combination testing to 100 combinations of 25000000 possible. -Uplifting [main] best 3374 combination reg byte y [ main::i#2 main::i#1 ] reg byte x [ main::mem_destroy_i#2 main::mem_destroy_i#1 ] -Uplifting [irq] best 3341 combination reg byte a [ irq::raster#0 ] -Uplifting [memcpy_dma4] best 3335 combination reg byte x [ memcpy_dma4::dmaMode#0 ] -Uplifting [MOS6526_CIA] best 3335 combination -Uplifting [MOS6569_VICII] best 3335 combination -Uplifting [MOS6581_SID] best 3335 combination -Uplifting [MOS4569_VICIII] best 3335 combination -Uplifting [MEGA65_VICIV] best 3335 combination -Uplifting [memoryRemapBlock] best 3335 combination -Uplifting [F018_DMAGIC] best 3335 combination -Uplifting [DMA_LIST_F018A] best 3335 combination -Uplifting [DMA_LIST_F018B] best 3335 combination -Uplifting [] best 3335 combination mem[12] [ memcpy_dma_command4 ] +Uplifting [main] best 3552 combination reg byte y [ main::i#2 main::i#1 ] reg byte x [ main::mem_destroy_i#2 main::mem_destroy_i#1 ] +Uplifting [irq] best 3519 combination reg byte a [ irq::raster#0 ] +Uplifting [memcpy_dma4] best 3513 combination reg byte x [ memcpy_dma4::dmaMode#0 ] +Uplifting [MOS6526_CIA] best 3513 combination +Uplifting [MOS6569_VICII] best 3513 combination +Uplifting [MOS6581_SID] best 3513 combination +Uplifting [MOS4569_VICIII] best 3513 combination +Uplifting [MEGA65_VICIV] best 3513 combination +Uplifting [memoryRemapBlock] best 3513 combination +Uplifting [F018_DMAGIC] best 3513 combination +Uplifting [DMA_LIST_F018A] best 3513 combination +Uplifting [DMA_LIST_F018B] best 3513 combination +Uplifting [] best 3513 combination mem[12] [ memcpy_dma_command4 ] Attempting to uplift remaining variables inzp[1]:14 [ memoryRemap::$4 ] -Uplifting [memoryRemap] best 3329 combination reg byte a [ memoryRemap::$4 ] +Uplifting [memoryRemap] best 3507 combination reg byte a [ memoryRemap::$4 ] Attempting to uplift remaining variables inzp[1]:15 [ memoryRemap::$5 ] -Uplifting [memoryRemap] best 3323 combination reg byte a [ memoryRemap::$5 ] +Uplifting [memoryRemap] best 3501 combination reg byte a [ memoryRemap::$5 ] Attempting to uplift remaining variables inzp[1]:17 [ memoryRemap::$7 ] -Uplifting [memoryRemap] best 3317 combination reg byte a [ memoryRemap::$7 ] +Uplifting [memoryRemap] best 3495 combination reg byte a [ memoryRemap::$7 ] Attempting to uplift remaining variables inzp[1]:18 [ memoryRemap::$8 ] -Uplifting [memoryRemap] best 3311 combination reg byte a [ memoryRemap::$8 ] +Uplifting [memoryRemap] best 3489 combination reg byte a [ memoryRemap::$8 ] Attempting to uplift remaining variables inzp[1]:19 [ memoryRemap::$9 ] -Uplifting [memoryRemap] best 3305 combination reg byte a [ memoryRemap::$9 ] +Uplifting [memoryRemap] best 3483 combination reg byte a [ memoryRemap::$9 ] Attempting to uplift remaining variables inzp[1]:11 [ memoryRemap::$1 ] -Uplifting [memoryRemap] best 3305 combination zp[1]:11 [ memoryRemap::$1 ] +Uplifting [memoryRemap] best 3483 combination zp[1]:11 [ memoryRemap::$1 ] Attempting to uplift remaining variables inzp[1]:16 [ memoryRemap::$6 ] -Uplifting [memoryRemap] best 3305 combination zp[1]:16 [ memoryRemap::$6 ] +Uplifting [memoryRemap] best 3483 combination zp[1]:16 [ memoryRemap::$6 ] Attempting to uplift remaining variables inzp[1]:6 [ memoryRemap::remapBlocks#4 ] -Uplifting [memoryRemap] best 3289 combination reg byte z [ memoryRemap::remapBlocks#4 ] +Uplifting [memoryRemap] best 3467 combination reg byte z [ memoryRemap::remapBlocks#4 ] Allocated (was zp[2]:4) zp[2]:2 [ memoryRemap::lowerPageOffset#4 ] Allocated (was zp[2]:7) zp[2]:4 [ memoryRemap::upperPageOffset#4 ] Allocated (was zp[1]:11) zp[1]:6 [ memoryRemap::$1 ] Allocated (was zp[1]:16) zp[1]:7 [ memoryRemap::$6 ] +Interrupt procedure irq clobbers AXYZcnzvidePSB ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -1111,12 +1112,11 @@ ASSEMBLER BEFORE OPTIMIZATION // irq // Raster IRQ routine irq: { - // entry interrupt(HARDWARE_STACK) - pha - txa - pha - tya + // interrupt(isr_hardware_all_entry) -- isr_hardware_all_entry pha + phx + phy + phz // [0] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ lda #IRQ_RASTER @@ -1171,11 +1171,11 @@ irq: { jmp __breturn // irq::@return __breturn: - // [8] return - exit interrupt(HARDWARE_STACK) - pla - tay - pla - tax + // [8] return + // interrupt(isr_hardware_all_exit) -- isr_hardware_all_exit + plz + ply + plx pla rti } @@ -1628,7 +1628,7 @@ const nomodify byte PROCPORT_RAM_IO = 5 const nomodify struct MOS6569_VICII* VICII = (struct MOS6569_VICII*) 53248 const nomodify struct MOS4569_VICIII* VICIII = (struct MOS4569_VICIII*) 53248 const nomodify struct MEGA65_VICIV* VICIV = (struct MEGA65_VICIV*) 53248 -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_clobber) void irq() byte irq::raster byte irq::raster#0 reg byte a 6.5 void main() @@ -1708,7 +1708,7 @@ mem[12] [ memcpy_dma_command4 ] FINAL ASSEMBLER -Score: 2876 +Score: 3054 // File Comments // SID music located in another bank being played in a raster IRQ using memory mapping on the MEGA65 @@ -1788,12 +1788,11 @@ Score: 2876 // irq // Raster IRQ routine irq: { - // entry interrupt(HARDWARE_STACK) - pha - txa - pha - tya + // interrupt(isr_hardware_all_entry) -- isr_hardware_all_entry pha + phx + phy + phz // VICII->IRQ_STATUS = IRQ_RASTER // [0] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ @@ -1843,11 +1842,11 @@ irq: { dec VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // irq::@return // } - // [8] return - exit interrupt(HARDWARE_STACK) - pla - tay - pla - tax + // [8] return + // interrupt(isr_hardware_all_exit) -- isr_hardware_all_exit + plz + ply + plx pla rti } diff --git a/src/test/ref/examples/mega65/banked-music.sym b/src/test/ref/examples/mega65/banked-music.sym index 3ac7d9051..a21b8560c 100644 --- a/src/test/ref/examples/mega65/banked-music.sym +++ b/src/test/ref/examples/mega65/banked-music.sym @@ -35,7 +35,7 @@ const nomodify byte PROCPORT_RAM_IO = 5 const nomodify struct MOS6569_VICII* VICII = (struct MOS6569_VICII*) 53248 const nomodify struct MOS4569_VICIII* VICIII = (struct MOS4569_VICIII*) 53248 const nomodify struct MEGA65_VICIV* VICIV = (struct MEGA65_VICIV*) 53248 -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_clobber) void irq() byte irq::raster byte irq::raster#0 reg byte a 6.5 void main() diff --git a/src/test/ref/examples/mega65/helloworld-mega65.asm b/src/test/ref/examples/mega65/helloworld-mega65.asm index 45159c282..5c4d448b5 100644 --- a/src/test/ref/examples/mega65/helloworld-mega65.asm +++ b/src/test/ref/examples/mega65/helloworld-mega65.asm @@ -207,11 +207,12 @@ cputc: { cmp #'\n' beq __b1 // conio_line_text[conio_cursor_x] = c - ldy.z conio_cursor_x - sta (conio_line_text),y + ldz conio_cursor_x + sta.z (conio_line_text),z // conio_line_color[conio_cursor_x] = conio_textcolor lda #LIGHT_BLUE - sta (conio_line_color),y + ldz conio_cursor_x + sta.z (conio_line_color),z // if(++conio_cursor_x==CONIO_WIDTH) inc.z conio_cursor_x lda #$50 diff --git a/src/test/ref/examples/mega65/helloworld-mega65.log b/src/test/ref/examples/mega65/helloworld-mega65.log index 387c8df12..e623653d4 100644 --- a/src/test/ref/examples/mega65/helloworld-mega65.log +++ b/src/test/ref/examples/mega65/helloworld-mega65.log @@ -1257,7 +1257,8 @@ Statement [34] conio_line_text = gotoxy::$5 [ conio_cursor_x conio_cursor_y coni Statement [35] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] ( gotoxy:19 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] { { gotoxy::y#2 = conio_mega65_init::line#2 } } conio_mega65_init:5::gotoxy:19 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] { { gotoxy::y#2 = conio_mega65_init::line#2 } } ) always clobbers reg byte a Statement [36] conio_line_color = gotoxy::$6 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( gotoxy:19 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { gotoxy::y#2 = conio_mega65_init::line#2 } } conio_mega65_init:5::gotoxy:19 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { gotoxy::y#2 = conio_mega65_init::line#2 } } ) always clobbers reg byte a Statement [40] cputs::c#1 = *cputs::s#2 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#2 cputs::c#1 ] ( main:7::cputs:22 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#2 cputs::c#1 ] { } ) always clobbers reg byte a reg byte y -Statement [48] conio_line_color[conio_cursor_x] = LIGHT_BLUE [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:22::cputc:45 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a reg byte y +Statement [47] conio_line_text[conio_cursor_x] = cputc::c#0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:22::cputc:45 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte z +Statement [48] conio_line_color[conio_cursor_x] = LIGHT_BLUE [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:22::cputc:45 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a reg byte z Statement [50] if(conio_cursor_x!=$50) goto cputc::@return [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:22::cputc:45 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a Statement [56] conio_line_text = conio_line_text + $50 [ conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:22::cputc:45::cputln:52 [ cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } main:7::cputs:22::cputc:45::cputln:55 [ cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a Statement [57] conio_line_color = conio_line_color + $50 [ conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:22::cputc:45::cputln:52 [ cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } main:7::cputs:22::cputc:45::cputln:55 [ cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a @@ -1294,7 +1295,8 @@ Statement [34] conio_line_text = gotoxy::$5 [ conio_cursor_x conio_cursor_y coni Statement [35] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] ( gotoxy:19 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] { { gotoxy::y#2 = conio_mega65_init::line#2 } } conio_mega65_init:5::gotoxy:19 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] { { gotoxy::y#2 = conio_mega65_init::line#2 } } ) always clobbers reg byte a Statement [36] conio_line_color = gotoxy::$6 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( gotoxy:19 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { gotoxy::y#2 = conio_mega65_init::line#2 } } conio_mega65_init:5::gotoxy:19 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { gotoxy::y#2 = conio_mega65_init::line#2 } } ) always clobbers reg byte a Statement [40] cputs::c#1 = *cputs::s#2 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#2 cputs::c#1 ] ( main:7::cputs:22 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#2 cputs::c#1 ] { } ) always clobbers reg byte a reg byte y -Statement [48] conio_line_color[conio_cursor_x] = LIGHT_BLUE [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:22::cputc:45 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a reg byte y +Statement [47] conio_line_text[conio_cursor_x] = cputc::c#0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:22::cputc:45 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte z +Statement [48] conio_line_color[conio_cursor_x] = LIGHT_BLUE [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:22::cputc:45 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a reg byte z Statement [50] if(conio_cursor_x!=$50) goto cputc::@return [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:22::cputc:45 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a Statement [56] conio_line_text = conio_line_text + $50 [ conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:22::cputc:45::cputln:52 [ cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } main:7::cputs:22::cputc:45::cputln:55 [ cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a Statement [57] conio_line_color = conio_line_color + $50 [ conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:22::cputc:45::cputln:52 [ cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } main:7::cputs:22::cputc:45::cputln:55 [ cputs::s#0 conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a @@ -1707,12 +1709,12 @@ cputc: { // cputc::@2 __b2: // [47] conio_line_text[conio_cursor_x] = cputc::c#0 -- pbuz1_derefidx_vbuz2=vbuaa - ldy.z conio_cursor_x - sta (conio_line_text),y + ldz conio_cursor_x + sta.z (conio_line_text),z // [48] conio_line_color[conio_cursor_x] = LIGHT_BLUE -- pbuz1_derefidx_vbuz2=vbuc1 lda #LIGHT_BLUE - ldy.z conio_cursor_x - sta (conio_line_color),y + ldz conio_cursor_x + sta.z (conio_line_color),z // [49] conio_cursor_x = ++ conio_cursor_x -- vbuz1=_inc_vbuz1 inc.z conio_cursor_x // [50] if(conio_cursor_x!=$50) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1 @@ -2011,7 +2013,6 @@ Removing instruction jmp __b2 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #0 -Removing instruction ldy.z conio_cursor_x Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label __b2_from_conio_mega65_init with __b1 @@ -2171,7 +2172,7 @@ zp[2]:20 [ memset::end#0 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcp FINAL ASSEMBLER -Score: 8699 +Score: 8702 // File Comments // Hello World for MEGA 65 - using stdio.h and conio.h @@ -2462,12 +2463,13 @@ cputc: { // cputc::@2 // conio_line_text[conio_cursor_x] = c // [47] conio_line_text[conio_cursor_x] = cputc::c#0 -- pbuz1_derefidx_vbuz2=vbuaa - ldy.z conio_cursor_x - sta (conio_line_text),y + ldz conio_cursor_x + sta.z (conio_line_text),z // conio_line_color[conio_cursor_x] = conio_textcolor // [48] conio_line_color[conio_cursor_x] = LIGHT_BLUE -- pbuz1_derefidx_vbuz2=vbuc1 lda #LIGHT_BLUE - sta (conio_line_color),y + ldz conio_cursor_x + sta.z (conio_line_color),z // if(++conio_cursor_x==CONIO_WIDTH) // [49] conio_cursor_x = ++ conio_cursor_x -- vbuz1=_inc_vbuz1 inc.z conio_cursor_x diff --git a/src/test/ref/examples/mega65/raster65.asm b/src/test/ref/examples/mega65/raster65.asm index b42391300..b6fd3a7e3 100644 --- a/src/test/ref/examples/mega65/raster65.asm +++ b/src/test/ref/examples/mega65/raster65.asm @@ -121,10 +121,9 @@ irq: { .label sin_bar = 3 .label barcnt = 2 pha - txa - pha - tya - pha + phx + phy + phz // VICIV->RASLINE0 |= 0x80 // force NTSC every frame (hehe) lda #$80 @@ -235,10 +234,9 @@ irq: { sta DEFAULT_SCREEN+SCROLL_ROW*$28+$27 __breturn: // } - pla - tay - pla - tax + plz + ply + plx pla rti __b36: diff --git a/src/test/ref/examples/mega65/raster65.cfg b/src/test/ref/examples/mega65/raster65.cfg index cf11b5e7b..a0c4f4c80 100644 --- a/src/test/ref/examples/mega65/raster65.cfg +++ b/src/test/ref/examples/mega65/raster65.cfg @@ -18,7 +18,7 @@ __start::@return: scope:[__start] from __start::@1 [8] return to:@return -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from [9] *((byte*)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((byte*)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80 [10] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER diff --git a/src/test/ref/examples/mega65/raster65.log b/src/test/ref/examples/mega65/raster65.log index 50a859efe..292f8b381 100644 --- a/src/test/ref/examples/mega65/raster65.log +++ b/src/test/ref/examples/mega65/raster65.log @@ -4,7 +4,7 @@ Resolved forward reference MEGA_LOGO to MEGA_LOGO Resolved forward reference PAL_RED to PAL_RED Resolved forward reference PAL_GREEN to PAL_GREEN Resolved forward reference PAL_BLUE to PAL_BLUE -Resolved forward reference irq to interrupt(HARDWARE_STACK) void irq() +Resolved forward reference irq to __interrupt(hardware_clobber) void irq() Resolved forward reference GREET_COUNT to GREET_COUNT Resolved forward reference PAL_GREEN to PAL_GREEN Resolved forward reference GREETING to GREETING @@ -132,7 +132,7 @@ main::@return: scope:[main] from return to:@return -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from *((byte*)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((byte*)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80 *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER @@ -496,7 +496,7 @@ const nomodify struct MEGA65_VICIV* VICIV = (struct MEGA65_VICIV*)$d000 void __start() volatile byte greet_idx loadstore volatile byte greet_zoomx loadstore -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_clobber) void irq() number~ irq::$1 number~ irq::$10 bool~ irq::$11 @@ -1325,7 +1325,7 @@ __start::@return: scope:[__start] from __start::@1 [8] return to:@return -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from [9] *((byte*)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((byte*)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80 [10] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS) = IRQ_RASTER @@ -1589,7 +1589,7 @@ VARIABLE REGISTER WEIGHTS void __start() volatile byte greet_idx loadstore 0.6153846153846154 volatile byte greet_zoomx loadstore 1.3939393939393938 -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_clobber) void irq() byte~ irq::$10 22.0 byte~ irq::$26 22.0 byte~ irq::$27 22.0 @@ -1811,7 +1811,7 @@ Statement [35] irq::nxt#0 = *scroll_ptr [ scroll_ptr irq::nxt#0 ] ( [ scroll_pt Statement [38] scroll_ptr = SCROLL_TEXT [ scroll_ptr ] ( [ scroll_ptr ] { } ) always clobbers reg byte a Statement [39] irq::nxt#1 = *scroll_ptr [ irq::nxt#1 ] ( [ irq::nxt#1 ] { } ) always clobbers reg byte a reg byte y Statement [41] irq::$33 = irq::nxt#2 & $bf [ irq::$33 ] ( [ irq::$33 ] { } ) always clobbers reg byte a -Statement [43] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [43] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z Statement [44] (DEFAULT_SCREEN+SCROLL_ROW*$28)[irq::i5#2] = (DEFAULT_SCREEN+SCROLL_ROW*$28+1)[irq::i5#2] [ scroll_ptr irq::i5#2 ] ( [ scroll_ptr irq::i5#2 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:12 [ irq::i5#2 irq::i5#1 ] Statement [46] irq::$29 = GREETING[irq::greet_offset#2] & $bf [ scroll_soft scroll_ptr irq::i4#2 irq::greet_offset#2 irq::$29 ] ( [ scroll_soft scroll_ptr irq::i4#2 irq::greet_offset#2 irq::$29 ] { } ) always clobbers reg byte a @@ -1882,7 +1882,7 @@ Statement [35] irq::nxt#0 = *scroll_ptr [ scroll_ptr irq::nxt#0 ] ( [ scroll_pt Statement [38] scroll_ptr = SCROLL_TEXT [ scroll_ptr ] ( [ scroll_ptr ] { } ) always clobbers reg byte a Statement [39] irq::nxt#1 = *scroll_ptr [ irq::nxt#1 ] ( [ irq::nxt#1 ] { } ) always clobbers reg byte a reg byte y Statement [41] irq::$33 = irq::nxt#2 & $bf [ irq::$33 ] ( [ irq::$33 ] { } ) always clobbers reg byte a -Statement [43] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [43] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y reg byte z Statement [44] (DEFAULT_SCREEN+SCROLL_ROW*$28)[irq::i5#2] = (DEFAULT_SCREEN+SCROLL_ROW*$28+1)[irq::i5#2] [ scroll_ptr irq::i5#2 ] ( [ scroll_ptr irq::i5#2 ] { } ) always clobbers reg byte a Statement [46] irq::$29 = GREETING[irq::greet_offset#2] & $bf [ scroll_soft scroll_ptr irq::i4#2 irq::greet_offset#2 irq::$29 ] ( [ scroll_soft scroll_ptr irq::i4#2 irq::greet_offset#2 irq::$29 ] { } ) always clobbers reg byte a Statement [50] irq::$26 = (rasters+SCROLL_Y)[irq::i3#2] >> 1 [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$26 ] ( [ scroll_soft scroll_ptr greet_idx irq::i3#2 irq::$26 ] { } ) always clobbers reg byte a @@ -1973,78 +1973,78 @@ Uplift Scope [DMA_LIST_F018A] Uplift Scope [DMA_LIST_F018B] Uplift Scope [__start] -Uplifting [memset] best 18980 combination zp[2]:21 [ memset::dst#2 memset::dst#1 ] -Uplifting [main] best 18560 combination reg byte x [ main::i1#2 main::i1#1 ] reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::i2#2 main::i2#1 ] -Uplifting [] best 18560 combination zp[1]:27 [ greet_zoomx ] zp[1]:28 [ greet_idx ] zp[1]:24 [ scroll_soft ] zp[1]:23 [ sin_idx ] zp[2]:25 [ scroll_ptr ] -Uplifting [MOS6526_CIA] best 18560 combination -Uplifting [MOS6569_VICII] best 18560 combination -Uplifting [MOS6581_SID] best 18560 combination -Uplifting [MOS4569_VICIII] best 18560 combination -Uplifting [MEGA65_VICIV] best 18560 combination -Uplifting [F018_DMAGIC] best 18560 combination -Uplifting [DMA_LIST_F018A] best 18560 combination -Uplifting [DMA_LIST_F018B] best 18560 combination -Uplifting [__start] best 18560 combination +Uplifting [memset] best 19158 combination zp[2]:21 [ memset::dst#2 memset::dst#1 ] +Uplifting [main] best 18738 combination reg byte x [ main::i1#2 main::i1#1 ] reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::i2#2 main::i2#1 ] +Uplifting [] best 18738 combination zp[1]:27 [ greet_zoomx ] zp[1]:28 [ greet_idx ] zp[1]:24 [ scroll_soft ] zp[1]:23 [ sin_idx ] zp[2]:25 [ scroll_ptr ] +Uplifting [MOS6526_CIA] best 18738 combination +Uplifting [MOS6569_VICII] best 18738 combination +Uplifting [MOS6581_SID] best 18738 combination +Uplifting [MOS4569_VICIII] best 18738 combination +Uplifting [MEGA65_VICIV] best 18738 combination +Uplifting [F018_DMAGIC] best 18738 combination +Uplifting [DMA_LIST_F018A] best 18738 combination +Uplifting [DMA_LIST_F018B] best 18738 combination +Uplifting [__start] best 18738 combination Attempting to uplift remaining variables inzp[1]:16 [ irq::barcol#4 irq::barcol#3 irq::barcol#0 irq::barcol#1 irq::barcol#2 ] -Uplifting [irq] best 17340 combination reg byte z [ irq::barcol#4 irq::barcol#3 irq::barcol#0 irq::barcol#1 irq::barcol#2 ] +Uplifting [irq] best 17518 combination reg byte z [ irq::barcol#4 irq::barcol#3 irq::barcol#0 irq::barcol#1 irq::barcol#2 ] Attempting to uplift remaining variables inzp[1]:17 [ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ] -Uplifting [irq] best 16110 combination reg byte x [ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ] +Uplifting [irq] best 16288 combination reg byte x [ irq::idx#4 irq::idx#3 irq::idx#0 irq::idx#1 irq::idx#2 ] Attempting to uplift remaining variables inzp[1]:14 [ irq::i1#2 irq::i1#1 ] -Uplifting [irq] best 15210 combination reg byte y [ irq::i1#2 irq::i1#1 ] +Uplifting [irq] best 15388 combination reg byte y [ irq::i1#2 irq::i1#1 ] Attempting to uplift remaining variables inzp[1]:15 [ irq::i2#2 irq::i2#1 ] -Uplifting [irq] best 14310 combination reg byte y [ irq::i2#2 irq::i2#1 ] +Uplifting [irq] best 14488 combination reg byte y [ irq::i2#2 irq::i2#1 ] Attempting to uplift remaining variables inzp[1]:38 [ irq::raster#0 ] -Uplifting [irq] best 13980 combination reg byte a [ irq::raster#0 ] +Uplifting [irq] best 14158 combination reg byte a [ irq::raster#0 ] Attempting to uplift remaining variables inzp[1]:3 [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ] -Uplifting [irq] best 13917 combination reg byte x [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ] +Uplifting [irq] best 14095 combination reg byte x [ irq::wobble_idx#10 irq::wobble_idx#0 irq::wobble_idx#7 irq::wobble_idx#1 ] Attempting to uplift remaining variables inzp[1]:12 [ irq::i5#2 irq::i5#1 ] -Uplifting [irq] best 13797 combination reg byte x [ irq::i5#2 irq::i5#1 ] +Uplifting [irq] best 13975 combination reg byte x [ irq::i5#2 irq::i5#1 ] Attempting to uplift remaining variables inzp[1]:6 [ irq::l#2 irq::l#1 ] -Uplifting [irq] best 13677 combination reg byte x [ irq::l#2 irq::l#1 ] +Uplifting [irq] best 13855 combination reg byte x [ irq::l#2 irq::l#1 ] Attempting to uplift remaining variables inzp[1]:9 [ irq::i3#2 irq::i3#1 ] -Uplifting [irq] best 13527 combination reg byte x [ irq::i3#2 irq::i3#1 ] +Uplifting [irq] best 13705 combination reg byte x [ irq::i3#2 irq::i3#1 ] Attempting to uplift remaining variables inzp[1]:4 [ irq::i#2 irq::i#1 ] -Uplifting [irq] best 13197 combination reg byte x [ irq::i#2 irq::i#1 ] +Uplifting [irq] best 13375 combination reg byte x [ irq::i#2 irq::i#1 ] Attempting to uplift remaining variables inzp[1]:10 [ irq::i4#2 irq::i4#1 ] -Uplifting [irq] best 13077 combination reg byte x [ irq::i4#2 irq::i4#1 ] +Uplifting [irq] best 13255 combination reg byte x [ irq::i4#2 irq::i4#1 ] Attempting to uplift remaining variables inzp[1]:2 [ irq::line#10 irq::line#1 ] -Uplifting [irq] best 12857 combination reg byte z [ irq::line#10 irq::line#1 ] +Uplifting [irq] best 13035 combination reg byte z [ irq::line#10 irq::line#1 ] Attempting to uplift remaining variables inzp[1]:7 [ irq::barcnt#2 irq::barcnt#1 ] -Uplifting [irq] best 12857 combination zp[1]:7 [ irq::barcnt#2 irq::barcnt#1 ] +Uplifting [irq] best 13035 combination zp[1]:7 [ irq::barcnt#2 irq::barcnt#1 ] Attempting to uplift remaining variables inzp[1]:11 [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ] -Uplifting [irq] best 12796 combination reg byte y [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ] +Uplifting [irq] best 12974 combination reg byte y [ irq::greet_offset#2 irq::greet_offset#0 irq::greet_offset#1 ] Attempting to uplift remaining variables inzp[1]:30 [ irq::$29 ] -Uplifting [irq] best 12736 combination reg byte a [ irq::$29 ] +Uplifting [irq] best 12914 combination reg byte a [ irq::$29 ] Attempting to uplift remaining variables inzp[1]:31 [ irq::$26 ] -Uplifting [irq] best 12676 combination reg byte a [ irq::$26 ] +Uplifting [irq] best 12854 combination reg byte a [ irq::$26 ] Attempting to uplift remaining variables inzp[1]:32 [ irq::$27 ] -Uplifting [irq] best 12616 combination reg byte a [ irq::$27 ] +Uplifting [irq] best 12794 combination reg byte a [ irq::$27 ] Attempting to uplift remaining variables inzp[1]:37 [ irq::$10 ] -Uplifting [irq] best 12556 combination reg byte a [ irq::$10 ] +Uplifting [irq] best 12734 combination reg byte a [ irq::$10 ] Attempting to uplift remaining variables inzp[1]:5 [ irq::sin_col#2 irq::sin_col#1 irq::sin_col#0 ] -Uplifting [irq] best 12463 combination reg byte y [ irq::sin_col#2 irq::sin_col#1 irq::sin_col#0 ] +Uplifting [irq] best 12641 combination reg byte y [ irq::sin_col#2 irq::sin_col#1 irq::sin_col#0 ] Attempting to uplift remaining variables inzp[1]:8 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ] -Uplifting [irq] best 12463 combination zp[1]:8 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ] +Uplifting [irq] best 12641 combination zp[1]:8 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ] Attempting to uplift remaining variables inzp[1]:33 [ irq::col1#0 ] -Uplifting [irq] best 12373 combination reg byte a [ irq::col1#0 ] +Uplifting [irq] best 12551 combination reg byte a [ irq::col1#0 ] Attempting to uplift remaining variables inzp[1]:35 [ irq::col#0 ] -Uplifting [irq] best 12283 combination reg byte a [ irq::col#0 ] +Uplifting [irq] best 12461 combination reg byte a [ irq::col#0 ] Attempting to uplift remaining variables inzp[1]:34 [ irq::col1#1 ] -Uplifting [irq] best 12073 combination reg byte a [ irq::col1#1 ] +Uplifting [irq] best 12251 combination reg byte a [ irq::col1#1 ] Attempting to uplift remaining variables inzp[1]:13 [ irq::nxt#2 irq::nxt#0 irq::nxt#1 ] -Uplifting [irq] best 12061 combination reg byte a [ irq::nxt#2 irq::nxt#0 irq::nxt#1 ] +Uplifting [irq] best 12239 combination reg byte a [ irq::nxt#2 irq::nxt#0 irq::nxt#1 ] Attempting to uplift remaining variables inzp[1]:36 [ irq::zoomval#0 ] -Uplifting [irq] best 11971 combination reg byte a [ irq::zoomval#0 ] +Uplifting [irq] best 12149 combination reg byte a [ irq::zoomval#0 ] Attempting to uplift remaining variables inzp[1]:29 [ irq::$33 ] -Uplifting [irq] best 11965 combination reg byte a [ irq::$33 ] +Uplifting [irq] best 12143 combination reg byte a [ irq::$33 ] Attempting to uplift remaining variables inzp[1]:27 [ greet_zoomx ] -Uplifting [] best 11965 combination zp[1]:27 [ greet_zoomx ] +Uplifting [] best 12143 combination zp[1]:27 [ greet_zoomx ] Attempting to uplift remaining variables inzp[1]:28 [ greet_idx ] -Uplifting [] best 11965 combination zp[1]:28 [ greet_idx ] +Uplifting [] best 12143 combination zp[1]:28 [ greet_idx ] Attempting to uplift remaining variables inzp[1]:24 [ scroll_soft ] -Uplifting [] best 11965 combination zp[1]:24 [ scroll_soft ] +Uplifting [] best 12143 combination zp[1]:24 [ scroll_soft ] Attempting to uplift remaining variables inzp[1]:23 [ sin_idx ] -Uplifting [] best 11965 combination zp[1]:23 [ sin_idx ] +Uplifting [] best 12143 combination zp[1]:23 [ sin_idx ] Allocated (was zp[1]:7) zp[1]:2 [ irq::barcnt#2 irq::barcnt#1 ] Allocated (was zp[1]:8) zp[1]:3 [ irq::sin_bar#2 irq::sin_bar#0 irq::sin_bar#1 ] Allocated (was zp[2]:21) zp[2]:4 [ memset::dst#2 memset::dst#1 ] @@ -2053,6 +2053,7 @@ Allocated (was zp[1]:24) zp[1]:7 [ scroll_soft ] Allocated (was zp[2]:25) zp[2]:8 [ scroll_ptr ] Allocated (was zp[1]:27) zp[1]:10 [ greet_zoomx ] Allocated (was zp[1]:28) zp[1]:11 [ greet_idx ] +Interrupt procedure irq clobbers AXYZcnzvidePSB ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -2196,12 +2197,11 @@ __start: { irq: { .label sin_bar = 3 .label barcnt = 2 - // entry interrupt(HARDWARE_STACK) - pha - txa - pha - tya + // interrupt(isr_hardware_all_entry) -- isr_hardware_all_entry pha + phx + phy + phz // [9] *((byte*)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((byte*)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // force NTSC every frame (hehe) lda #$80 @@ -2377,11 +2377,11 @@ irq: { jmp __breturn // irq::@return __breturn: - // [43] return - exit interrupt(HARDWARE_STACK) - pla - tay - pla - tax + // [43] return + // interrupt(isr_hardware_all_exit) -- isr_hardware_all_exit + plz + ply + plx pla rti // irq::@36 @@ -3024,9 +3024,9 @@ Removing instruction jmp __b5 Succesful ASM optimization Pass5NextJumpElimination Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [138] bne __b2 to beq -Fixing long branch [148] bcc __b17 to bcs -Fixing long branch [155] bne __b19 to beq +Fixing long branch [137] bne __b2 to beq +Fixing long branch [147] bcc __b17 to bcs +Fixing long branch [154] bne __b19 to beq FINAL SYMBOL TABLE const nomodify struct MOS6526_CIA* CIA1 = (struct MOS6526_CIA*) 56320 @@ -3082,7 +3082,7 @@ const nomodify struct MEGA65_VICIV* VICIV = (struct MEGA65_VICIV*) 53248 void __start() volatile byte greet_idx loadstore zp[1]:11 0.6153846153846154 volatile byte greet_zoomx loadstore zp[1]:10 1.3939393939393938 -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_clobber) void irq() byte~ irq::$10 reg byte a 22.0 byte~ irq::$26 reg byte a 22.0 byte~ irq::$27 reg byte a 22.0 @@ -3225,7 +3225,7 @@ reg byte a [ irq::raster#0 ] FINAL ASSEMBLER -Score: 9963 +Score: 10141 // File Comments // Raster65 Demo re-implementation in C by Jesper Gravgaard @@ -3365,12 +3365,11 @@ __start: { irq: { .label sin_bar = 3 .label barcnt = 2 - // entry interrupt(HARDWARE_STACK) - pha - txa - pha - tya + // interrupt(isr_hardware_all_entry) -- isr_hardware_all_entry pha + phx + phy + phz // VICIV->RASLINE0 |= 0x80 // [9] *((byte*)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) = *((byte*)VICIV+OFFSET_STRUCT_MEGA65_VICIV_RASLINE0) | $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // force NTSC every frame (hehe) @@ -3543,11 +3542,11 @@ irq: { // irq::@return __breturn: // } - // [43] return - exit interrupt(HARDWARE_STACK) - pla - tay - pla - tax + // [43] return + // interrupt(isr_hardware_all_exit) -- isr_hardware_all_exit + plz + ply + plx pla rti // irq::@36 diff --git a/src/test/ref/examples/mega65/raster65.sym b/src/test/ref/examples/mega65/raster65.sym index f9d41a848..dfdc952bc 100644 --- a/src/test/ref/examples/mega65/raster65.sym +++ b/src/test/ref/examples/mega65/raster65.sym @@ -51,7 +51,7 @@ const nomodify struct MEGA65_VICIV* VICIV = (struct MEGA65_VICIV*) 53248 void __start() volatile byte greet_idx loadstore zp[1]:11 0.6153846153846154 volatile byte greet_zoomx loadstore zp[1]:10 1.3939393939393938 -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_clobber) void irq() byte~ irq::$10 reg byte a 22.0 byte~ irq::$26 reg byte a 22.0 byte~ irq::$27 reg byte a 22.0 diff --git a/src/test/ref/examples/music/music_irq.cfg b/src/test/ref/examples/music/music_irq.cfg index 923e45e02..c98528365 100644 --- a/src/test/ref/examples/music/music_irq.cfg +++ b/src/test/ref/examples/music/music_irq.cfg @@ -1,5 +1,5 @@ -interrupt(KERNEL_KEYBOARD) void irq_play() +__interrupt(rom_sys_c64) void irq_play() irq_play: scope:[irq_play] from [0] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) [1] call *musicPlay diff --git a/src/test/ref/examples/music/music_irq.log b/src/test/ref/examples/music/music_irq.log index 2f3be4b88..d1833d25d 100644 --- a/src/test/ref/examples/music/music_irq.log +++ b/src/test/ref/examples/music/music_irq.log @@ -1,4 +1,4 @@ -Resolved forward reference irq_play to interrupt(KERNEL_KEYBOARD) void irq_play() +Resolved forward reference irq_play to __interrupt(rom_sys_c64) void irq_play() Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx Inlined call call __init @@ -19,7 +19,7 @@ main::@return: scope:[main] from main return to:@return -interrupt(KERNEL_KEYBOARD) void irq_play() +__interrupt(rom_sys_c64) void irq_play() irq_play: scope:[irq_play] from *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) call *musicPlay @@ -60,7 +60,7 @@ const byte OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS = $19 const byte OFFSET_STRUCT_MOS6569_VICII_RASTER = $12 const nomodify struct MOS6569_VICII* VICII = (struct MOS6569_VICII*)$d000 void __start() -interrupt(KERNEL_KEYBOARD) void irq_play() +__interrupt(rom_sys_c64) void irq_play() void main() const void()* musicInit = (void()*)MUSIC const void()* musicPlay = (void()*)MUSIC+3 @@ -98,7 +98,7 @@ Coalesced down to 0 phi equivalence classes FINAL CONTROL FLOW GRAPH -interrupt(KERNEL_KEYBOARD) void irq_play() +__interrupt(rom_sys_c64) void irq_play() irq_play: scope:[irq_play] from [0] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) [1] call *musicPlay @@ -126,7 +126,7 @@ main::@return: scope:[main] from main VARIABLE REGISTER WEIGHTS -interrupt(KERNEL_KEYBOARD) void irq_play() +__interrupt(rom_sys_c64) void irq_play() void main() Initial phi equivalence classes @@ -149,12 +149,12 @@ Uplift Scope [main] Uplift Scope [irq_play] Uplift Scope [] -Uplifting [MOS6526_CIA] best 89 combination -Uplifting [MOS6569_VICII] best 89 combination -Uplifting [MOS6581_SID] best 89 combination -Uplifting [main] best 89 combination -Uplifting [irq_play] best 89 combination -Uplifting [] best 89 combination +Uplifting [MOS6526_CIA] best 116 combination +Uplifting [MOS6569_VICII] best 116 combination +Uplifting [MOS6581_SID] best 116 combination +Uplifting [main] best 116 combination +Uplifting [irq_play] best 116 combination +Uplifting [] best 116 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -190,7 +190,7 @@ ASSEMBLER BEFORE OPTIMIZATION // irq_play // Raster IRQ Routine playing music irq_play: { - // entry interrupt(KERNEL_KEYBOARD) + // interrupt(isr_rom_sys_c64_entry) -- isr_rom_sys_c64_entry // [0] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // [1] call *musicPlay @@ -205,7 +205,8 @@ irq_play: { jmp __breturn // irq_play::@return __breturn: - // [4] return - exit interrupt(KERNEL_KEYBOARD) + // [4] return + // interrupt(isr_rom_sys_c64_exit) -- isr_rom_sys_c64_exit jmp $ea31 } // main @@ -276,7 +277,7 @@ const byte OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE = $1a const byte OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS = $19 const byte OFFSET_STRUCT_MOS6569_VICII_RASTER = $12 const nomodify struct MOS6569_VICII* VICII = (struct MOS6569_VICII*) 53248 -interrupt(KERNEL_KEYBOARD) void irq_play() +__interrupt(rom_sys_c64) void irq_play() void main() const void()* musicInit = (void()*)MUSIC const void()* musicPlay = (void()*)MUSIC+3 @@ -284,7 +285,7 @@ const void()* musicPlay = (void()*)MUSIC+3 FINAL ASSEMBLER -Score: 83 +Score: 110 // File Comments // A simple SID music player using RASTER IRQ @@ -319,7 +320,7 @@ Score: 83 // irq_play // Raster IRQ Routine playing music irq_play: { - // entry interrupt(KERNEL_KEYBOARD) + // interrupt(isr_rom_sys_c64_entry) -- isr_rom_sys_c64_entry // (VICII->BORDER_COLOR)++; // [0] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR @@ -337,7 +338,8 @@ irq_play: { dec VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // irq_play::@return // } - // [4] return - exit interrupt(KERNEL_KEYBOARD) + // [4] return + // interrupt(isr_rom_sys_c64_exit) -- isr_rom_sys_c64_exit jmp $ea31 } // main diff --git a/src/test/ref/examples/music/music_irq.sym b/src/test/ref/examples/music/music_irq.sym index 7e7cf278c..e7d6bc45c 100644 --- a/src/test/ref/examples/music/music_irq.sym +++ b/src/test/ref/examples/music/music_irq.sym @@ -12,7 +12,7 @@ const byte OFFSET_STRUCT_MOS6569_VICII_IRQ_ENABLE = $1a const byte OFFSET_STRUCT_MOS6569_VICII_IRQ_STATUS = $19 const byte OFFSET_STRUCT_MOS6569_VICII_RASTER = $12 const nomodify struct MOS6569_VICII* VICII = (struct MOS6569_VICII*) 53248 -interrupt(KERNEL_KEYBOARD) void irq_play() +__interrupt(rom_sys_c64) void irq_play() void main() const void()* musicInit = (void()*)MUSIC const void()* musicPlay = (void()*)MUSIC+3 diff --git a/src/test/ref/examples/nes/nes-conio.asm b/src/test/ref/examples/nes/nes-conio.asm index b79ae1f02..33ef337b2 100644 --- a/src/test/ref/examples/nes/nes-conio.asm +++ b/src/test/ref/examples/nes/nes-conio.asm @@ -8,6 +8,7 @@ // https://wiki.nesdev.com/w/index.php/PPU_registers // http://nesdev.com/2C02%20technical%20reference.TXT // Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018. +.cpu _6502 // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html // https://forums.nesdev.com/viewtopic.php?f=2&t=9896 diff --git a/src/test/ref/examples/nes/nes-conio.cfg b/src/test/ref/examples/nes/nes-conio.cfg index 4acd9b21a..1815dd1ab 100644 --- a/src/test/ref/examples/nes/nes-conio.cfg +++ b/src/test/ref/examples/nes/nes-conio.cfg @@ -18,7 +18,7 @@ __start::@return: scope:[__start] from __start::@1 [8] return to:@return -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() vblank: scope:[vblank] from [9] phi() [10] call readJoy1 diff --git a/src/test/ref/examples/nes/nes-conio.log b/src/test/ref/examples/nes/nes-conio.log index fe38713da..5e26f1d95 100644 --- a/src/test/ref/examples/nes/nes-conio.log +++ b/src/test/ref/examples/nes/nes-conio.log @@ -951,7 +951,7 @@ main::@return: scope:[main] from main::@7 return to:@return -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() vblank: scope:[vblank] from call readJoy1 readJoy1::return#2 = readJoy1::return#1 @@ -1646,7 +1646,7 @@ byte uctoa_append::value#2 byte uctoa_append::value#3 byte uctoa_append::value#4 byte uctoa_append::value#5 -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() byte~ vblank::$0 byte~ vblank::$1 bool~ vblank::$10 @@ -2860,7 +2860,7 @@ __start::@return: scope:[__start] from __start::@1 [8] return to:@return -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() vblank: scope:[vblank] from [9] phi() [10] call readJoy1 @@ -3593,7 +3593,7 @@ byte uctoa_append::value byte uctoa_append::value#0 366667.3333333334 byte uctoa_append::value#1 2.000000002E9 byte uctoa_append::value#2 5.0018333416666675E8 -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() byte~ vblank::$1 4.0 byte~ vblank::$3 4.0 byte~ vblank::$5 4.0 @@ -4090,65 +4090,65 @@ Uplift Scope [printf_buffer_number] Uplift Scope [printf_format_string] Uplift Scope [__start] -Uplifting [ppuDataFetch] best 1044896 combination zp[2]:45 [ ppuDataFetch::i#2 ppuDataFetch::i#1 ] reg byte a [ ppuDataFetch::ppuDataRead1_return#0 ] zp[2]:47 [ ppuDataFetch::cpuDst#2 ppuDataFetch::cpuDst#1 ] reg byte a [ ppuDataFetch::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFetch::ppuDataPrepare1_$1 ] zp[2]:91 [ ppuDataFetch::ppuData#0 ] -Uplifting [ppuDataTransfer] best 1044284 combination zp[2]:14 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] zp[2]:16 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] zp[2]:12 [ ppuDataTransfer::size#3 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$0 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$1 ] zp[2]:8 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuData#0 ] zp[2]:10 [ ppuDataTransfer::cpuData#2 ] -Uplifting [cscroll] best 1035284 combination reg byte x [ cscroll::y#2 cscroll::y#1 ] zp[2]:41 [ cscroll::line2#2 cscroll::line2#1 ] zp[2]:43 [ cscroll::line1#2 cscroll::line1#1 ] -Uplifting [ppuDataFill] best 1034960 combination zp[2]:23 [ ppuDataFill::i#2 ppuDataFill::i#1 ] zp[2]:20 [ ppuDataFill::size#5 ] reg byte x [ ppuDataFill::val#10 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] zp[2]:18 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] -Uplifting [uctoa_append] best 1022757 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]:77 [ uctoa_append::sub#0 ] reg byte x [ uctoa_append::return#0 ] zp[2]:75 [ uctoa_append::buffer#0 ] -Uplifting [ppuDataSet] best 1022739 combination reg byte x [ ppuDataSet::ppuDataPrepare1_$0 ] reg byte x [ ppuDataSet::ppuDataPrepare1_$1 ] reg byte a [ ppuDataSet::val#0 ] zp[2]:86 [ ppuDataSet::ppuData#0 ] -Uplifting [] best 1022739 combination zp[1]:50 [ conio_cursor_y ] zp[2]:51 [ conio_line_text ] zp[1]:49 [ conio_cursor_x ] zp[1]:54 [ y_scroll ] zp[1]:53 [ x_scroll ] -Uplifting [cputc] best 1022432 combination reg byte x [ cputc::c#2 cputc::c#1 cputc::c#0 ] -Uplifting [cputs] best 1021732 combination zp[2]:37 [ cputs::s#2 cputs::s#0 ] reg byte a [ cputs::c#1 ] -Uplifting [uctoa] best 1020819 combination zp[2]:28 [ 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]:25 [ uctoa::digit#2 uctoa::digit#1 ] zp[1]:27 [ uctoa::started#2 uctoa::started#4 ] zp[1]:74 [ uctoa::digit_value#0 ] zp[2]:72 [ uctoa::buffer#3 ] -Uplifting [gotoxy] best 1020786 combination reg byte x [ gotoxy::x#5 gotoxy::x#4 gotoxy::x#2 gotoxy::x#3 ] zp[2]:79 [ gotoxy::$6 ] zp[2]:81 [ gotoxy::line_offset#0 ] zp[2]:83 [ gotoxy::$5 ] reg byte a [ gotoxy::y#5 gotoxy::y#4 gotoxy::y#2 gotoxy::y#3 ] -Uplifting [cputcxy] best 1020637 combination reg byte x [ cputcxy::x#4 cputcxy::x#0 cputcxy::x#1 ] reg byte a [ cputcxy::y#4 cputcxy::y#3 cputcxy::y#2 ] reg byte y [ cputcxy::c#4 ] -Uplifting [main] best 1020247 combination zp[1]:5 [ main::i#2 main::i#1 ] zp[1]:3 [ main::x#10 main::x#1 ] zp[1]:4 [ main::y#10 main::y#1 ] reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] reg byte a [ main::initNES1_waitForVBlank1_$0 ] zp[1]:62 [ main::initNES1_waitForVBlank2_$0 ] +Uplifting [ppuDataFetch] best 1045094 combination zp[2]:45 [ ppuDataFetch::i#2 ppuDataFetch::i#1 ] reg byte a [ ppuDataFetch::ppuDataRead1_return#0 ] zp[2]:47 [ ppuDataFetch::cpuDst#2 ppuDataFetch::cpuDst#1 ] reg byte a [ ppuDataFetch::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFetch::ppuDataPrepare1_$1 ] zp[2]:91 [ ppuDataFetch::ppuData#0 ] +Uplifting [ppuDataTransfer] best 1044482 combination zp[2]:14 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] zp[2]:16 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] zp[2]:12 [ ppuDataTransfer::size#3 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$0 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$1 ] zp[2]:8 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuData#0 ] zp[2]:10 [ ppuDataTransfer::cpuData#2 ] +Uplifting [cscroll] best 1035482 combination reg byte x [ cscroll::y#2 cscroll::y#1 ] zp[2]:41 [ cscroll::line2#2 cscroll::line2#1 ] zp[2]:43 [ cscroll::line1#2 cscroll::line1#1 ] +Uplifting [ppuDataFill] best 1035158 combination zp[2]:23 [ ppuDataFill::i#2 ppuDataFill::i#1 ] zp[2]:20 [ ppuDataFill::size#5 ] reg byte x [ ppuDataFill::val#10 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] zp[2]:18 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] +Uplifting [uctoa_append] best 1022955 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]:77 [ uctoa_append::sub#0 ] reg byte x [ uctoa_append::return#0 ] zp[2]:75 [ uctoa_append::buffer#0 ] +Uplifting [ppuDataSet] best 1022937 combination reg byte x [ ppuDataSet::ppuDataPrepare1_$0 ] reg byte x [ ppuDataSet::ppuDataPrepare1_$1 ] reg byte a [ ppuDataSet::val#0 ] zp[2]:86 [ ppuDataSet::ppuData#0 ] +Uplifting [] best 1022937 combination zp[1]:50 [ conio_cursor_y ] zp[2]:51 [ conio_line_text ] zp[1]:49 [ conio_cursor_x ] zp[1]:54 [ y_scroll ] zp[1]:53 [ x_scroll ] +Uplifting [cputc] best 1022630 combination reg byte x [ cputc::c#2 cputc::c#1 cputc::c#0 ] +Uplifting [cputs] best 1021930 combination zp[2]:37 [ cputs::s#2 cputs::s#0 ] reg byte a [ cputs::c#1 ] +Uplifting [uctoa] best 1021017 combination zp[2]:28 [ 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]:25 [ uctoa::digit#2 uctoa::digit#1 ] zp[1]:27 [ uctoa::started#2 uctoa::started#4 ] zp[1]:74 [ uctoa::digit_value#0 ] zp[2]:72 [ uctoa::buffer#3 ] +Uplifting [gotoxy] best 1020984 combination reg byte x [ gotoxy::x#5 gotoxy::x#4 gotoxy::x#2 gotoxy::x#3 ] zp[2]:79 [ gotoxy::$6 ] zp[2]:81 [ gotoxy::line_offset#0 ] zp[2]:83 [ gotoxy::$5 ] reg byte a [ gotoxy::y#5 gotoxy::y#4 gotoxy::y#2 gotoxy::y#3 ] +Uplifting [cputcxy] best 1020835 combination reg byte x [ cputcxy::x#4 cputcxy::x#0 cputcxy::x#1 ] reg byte a [ cputcxy::y#4 cputcxy::y#3 cputcxy::y#2 ] reg byte y [ cputcxy::c#4 ] +Uplifting [main] best 1020445 combination zp[1]:5 [ main::i#2 main::i#1 ] zp[1]:3 [ main::x#10 main::x#1 ] zp[1]:4 [ main::y#10 main::y#1 ] reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] reg byte a [ main::initNES1_waitForVBlank1_$0 ] zp[1]:62 [ main::initNES1_waitForVBlank2_$0 ] Limited combination testing to 100 combinations of 384 possible. -Uplifting [cputsxy] best 1020181 combination reg byte x [ cputsxy::x#0 ] reg byte a [ cputsxy::y#0 ] -Uplifting [readJoy1] best 1019938 combination reg byte x [ readJoy1::i#2 readJoy1::i#1 ] reg byte a [ readJoy1::$2 ] reg byte a [ readJoy1::joy#2 readJoy1::joy#1 ] zp[1]:65 [ readJoy1::$1 ] zp[1]:55 [ readJoy1::return#2 ] +Uplifting [cputsxy] best 1020379 combination reg byte x [ cputsxy::x#0 ] reg byte a [ cputsxy::y#0 ] +Uplifting [readJoy1] best 1020136 combination reg byte x [ readJoy1::i#2 readJoy1::i#1 ] reg byte a [ readJoy1::$2 ] reg byte a [ readJoy1::joy#2 readJoy1::joy#1 ] zp[1]:65 [ readJoy1::$1 ] zp[1]:55 [ readJoy1::return#2 ] Limited combination testing to 100 combinations of 576 possible. -Uplifting [vblank] best 1019914 combination reg byte a [ vblank::$1 ] reg byte a [ vblank::$3 ] reg byte a [ vblank::$5 ] reg byte a [ vblank::$7 ] zp[1]:56 [ vblank::joy#0 ] +Uplifting [vblank] best 1020112 combination reg byte a [ vblank::$1 ] reg byte a [ vblank::$3 ] reg byte a [ vblank::$5 ] reg byte a [ vblank::$7 ] zp[1]:56 [ vblank::joy#0 ] Limited combination testing to 100 combinations of 768 possible. -Uplifting [RICOH_2C02] best 1019914 combination -Uplifting [RICOH_2A03] best 1019914 combination -Uplifting [SpriteData] best 1019914 combination -Uplifting [clrscr] best 1019914 combination -Uplifting [cputln] best 1019914 combination -Uplifting [RADIX] best 1019914 combination -Uplifting [printf_format_number] best 1019914 combination -Uplifting [printf_buffer_number] best 1019914 combination -Uplifting [printf_format_string] best 1019914 combination -Uplifting [__start] best 1019914 combination +Uplifting [RICOH_2C02] best 1020112 combination +Uplifting [RICOH_2A03] best 1020112 combination +Uplifting [SpriteData] best 1020112 combination +Uplifting [clrscr] best 1020112 combination +Uplifting [cputln] best 1020112 combination +Uplifting [RADIX] best 1020112 combination +Uplifting [printf_format_number] best 1020112 combination +Uplifting [printf_buffer_number] best 1020112 combination +Uplifting [printf_format_string] best 1020112 combination +Uplifting [__start] best 1020112 combination Attempting to uplift remaining variables inzp[1]:77 [ uctoa_append::sub#0 ] -Uplifting [uctoa_append] best 1019914 combination zp[1]:77 [ uctoa_append::sub#0 ] +Uplifting [uctoa_append] best 1020112 combination zp[1]:77 [ uctoa_append::sub#0 ] Attempting to uplift remaining variables inzp[1]:50 [ conio_cursor_y ] -Uplifting [] best 1019914 combination zp[1]:50 [ conio_cursor_y ] +Uplifting [] best 1020112 combination zp[1]:50 [ conio_cursor_y ] Attempting to uplift remaining variables inzp[1]:49 [ conio_cursor_x ] -Uplifting [] best 1019914 combination zp[1]:49 [ conio_cursor_x ] +Uplifting [] best 1020112 combination zp[1]:49 [ conio_cursor_x ] Attempting to uplift remaining variables inzp[1]:25 [ uctoa::digit#2 uctoa::digit#1 ] -Uplifting [uctoa] best 1019914 combination zp[1]:25 [ uctoa::digit#2 uctoa::digit#1 ] +Uplifting [uctoa] best 1020112 combination zp[1]:25 [ uctoa::digit#2 uctoa::digit#1 ] Attempting to uplift remaining variables inzp[1]:27 [ uctoa::started#2 uctoa::started#4 ] -Uplifting [uctoa] best 1019914 combination zp[1]:27 [ uctoa::started#2 uctoa::started#4 ] +Uplifting [uctoa] best 1020112 combination zp[1]:27 [ uctoa::started#2 uctoa::started#4 ] Attempting to uplift remaining variables inzp[1]:74 [ uctoa::digit_value#0 ] -Uplifting [uctoa] best 1019914 combination zp[1]:74 [ uctoa::digit_value#0 ] +Uplifting [uctoa] best 1020112 combination zp[1]:74 [ uctoa::digit_value#0 ] Attempting to uplift remaining variables inzp[1]:5 [ main::i#2 main::i#1 ] -Uplifting [main] best 1019914 combination zp[1]:5 [ main::i#2 main::i#1 ] +Uplifting [main] best 1020112 combination zp[1]:5 [ main::i#2 main::i#1 ] Attempting to uplift remaining variables inzp[1]:3 [ main::x#10 main::x#1 ] -Uplifting [main] best 1019914 combination zp[1]:3 [ main::x#10 main::x#1 ] +Uplifting [main] best 1020112 combination zp[1]:3 [ main::x#10 main::x#1 ] Attempting to uplift remaining variables inzp[1]:4 [ main::y#10 main::y#1 ] -Uplifting [main] best 1019914 combination zp[1]:4 [ main::y#10 main::y#1 ] +Uplifting [main] best 1020112 combination zp[1]:4 [ main::y#10 main::y#1 ] Attempting to uplift remaining variables inzp[1]:62 [ main::initNES1_waitForVBlank2_$0 ] -Uplifting [main] best 1019854 combination reg byte a [ main::initNES1_waitForVBlank2_$0 ] +Uplifting [main] best 1020052 combination reg byte a [ main::initNES1_waitForVBlank2_$0 ] Attempting to uplift remaining variables inzp[1]:65 [ readJoy1::$1 ] -Uplifting [readJoy1] best 1019854 combination zp[1]:65 [ readJoy1::$1 ] +Uplifting [readJoy1] best 1020052 combination zp[1]:65 [ readJoy1::$1 ] Attempting to uplift remaining variables inzp[1]:55 [ readJoy1::return#2 ] -Uplifting [readJoy1] best 1019848 combination reg byte a [ readJoy1::return#2 ] +Uplifting [readJoy1] best 1020046 combination reg byte a [ readJoy1::return#2 ] Attempting to uplift remaining variables inzp[1]:54 [ y_scroll ] -Uplifting [] best 1019848 combination zp[1]:54 [ y_scroll ] +Uplifting [] best 1020046 combination zp[1]:54 [ y_scroll ] Attempting to uplift remaining variables inzp[1]:53 [ x_scroll ] -Uplifting [] best 1019848 combination zp[1]:53 [ x_scroll ] +Uplifting [] best 1020046 combination zp[1]:53 [ x_scroll ] Attempting to uplift remaining variables inzp[1]:56 [ vblank::joy#0 ] -Uplifting [vblank] best 1019843 combination reg byte x [ vblank::joy#0 ] +Uplifting [vblank] best 1020041 combination reg byte x [ vblank::joy#0 ] Coalescing zero page register [ zp[2]:10 [ ppuDataTransfer::cpuData#2 ] ] with [ zp[2]:16 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] ] - score: 1 Coalescing zero page register [ zp[2]:28 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 ] ] with [ zp[2]:72 [ uctoa::buffer#3 ] ] - score: 1 Coalescing zero page register [ zp[2]:28 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 ] ] with [ zp[2]:75 [ uctoa_append::buffer#0 ] ] - score: 1 @@ -4197,6 +4197,7 @@ ASSEMBLER BEFORE OPTIMIZATION // http://nesdev.com/2C02%20technical%20reference.TXT // Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018. // Upstart +.cpu _6502 // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html // https://forums.nesdev.com/viewtopic.php?f=2&t=9896 @@ -4323,7 +4324,7 @@ __start: { // vblank // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) vblank: { - // entry interrupt(HARDWARE_STACK) + // interrupt(isr_hardware_all_entry) -- isr_hardware_all_entry pha txa pha @@ -4422,7 +4423,8 @@ vblank: { jmp __breturn // vblank::@return __breturn: - // [31] return - exit interrupt(HARDWARE_STACK) + // [31] return + // interrupt(isr_hardware_all_exit) -- isr_hardware_all_exit pla tay pla @@ -6268,7 +6270,7 @@ byte uctoa_append::value byte uctoa_append::value#0 reg byte x 366667.3333333334 byte uctoa_append::value#1 reg byte x 2.000000002E9 byte uctoa_append::value#2 reg byte x 5.0018333416666675E8 -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() byte~ vblank::$1 reg byte a 4.0 byte~ vblank::$3 reg byte a 4.0 byte~ vblank::$5 reg byte a 4.0 @@ -6338,7 +6340,7 @@ reg byte a [ ppuDataFetch::ppuDataRead1_return#0 ] FINAL ASSEMBLER -Score: 893091 +Score: 893289 // File Comments // NES conio printing @@ -6352,6 +6354,7 @@ Score: 893091 // http://nesdev.com/2C02%20technical%20reference.TXT // Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018. // Upstart +.cpu _6502 // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html // https://forums.nesdev.com/viewtopic.php?f=2&t=9896 @@ -6473,7 +6476,7 @@ __start: { // vblank // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) vblank: { - // entry interrupt(HARDWARE_STACK) + // interrupt(isr_hardware_all_entry) -- isr_hardware_all_entry pha txa pha @@ -6571,7 +6574,8 @@ vblank: { sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL // vblank::@return // } - // [31] return - exit interrupt(HARDWARE_STACK) + // [31] return + // interrupt(isr_hardware_all_exit) -- isr_hardware_all_exit pla tay pla diff --git a/src/test/ref/examples/nes/nes-conio.sym b/src/test/ref/examples/nes/nes-conio.sym index d8a4ddd95..579f09f4f 100644 --- a/src/test/ref/examples/nes/nes-conio.sym +++ b/src/test/ref/examples/nes/nes-conio.sym @@ -231,7 +231,7 @@ byte uctoa_append::value byte uctoa_append::value#0 reg byte x 366667.3333333334 byte uctoa_append::value#1 reg byte x 2.000000002E9 byte uctoa_append::value#2 reg byte x 5.0018333416666675E8 -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() byte~ vblank::$1 reg byte a 4.0 byte~ vblank::$3 reg byte a 4.0 byte~ vblank::$5 reg byte a 4.0 diff --git a/src/test/ref/examples/nes/nes-demo.asm b/src/test/ref/examples/nes/nes-demo.asm index 483eda8e6..a4900bcf1 100644 --- a/src/test/ref/examples/nes/nes-demo.asm +++ b/src/test/ref/examples/nes/nes-demo.asm @@ -9,6 +9,7 @@ // https://wiki.nesdev.com/w/index.php/PPU_registers // http://nesdev.com/2C02%20technical%20reference.TXT // Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018. +.cpu _6502 // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html // https://forums.nesdev.com/viewtopic.php?f=2&t=9896 diff --git a/src/test/ref/examples/nes/nes-demo.cfg b/src/test/ref/examples/nes/nes-demo.cfg index d2ef88e85..c5136966e 100644 --- a/src/test/ref/examples/nes/nes-demo.cfg +++ b/src/test/ref/examples/nes/nes-demo.cfg @@ -1,5 +1,5 @@ -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() vblank: scope:[vblank] from [0] phi() [1] call readJoy1 diff --git a/src/test/ref/examples/nes/nes-demo.log b/src/test/ref/examples/nes/nes-demo.log index 1fb359e12..6fd147ab4 100644 --- a/src/test/ref/examples/nes/nes-demo.log +++ b/src/test/ref/examples/nes/nes-demo.log @@ -495,7 +495,7 @@ main::@return: scope:[main] from main::@4 return to:@return -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() vblank: scope:[vblank] from call readJoy1 readJoy1::return#2 = readJoy1::return#1 @@ -938,7 +938,7 @@ byte readJoy1::return#1 byte readJoy1::return#2 byte readJoy1::return#3 byte readJoy1::return#4 -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() byte~ vblank::$0 byte~ vblank::$1 byte*~ vblank::$100 @@ -1928,7 +1928,7 @@ Adding NOP phi() at start of memcpy FINAL CONTROL FLOW GRAPH -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() vblank: scope:[vblank] from [0] phi() [1] call readJoy1 @@ -2297,7 +2297,7 @@ byte readJoy1::joy#1 101.0 byte readJoy1::joy#2 51.0 byte readJoy1::return byte readJoy1::return#2 4.0 -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() byte~ vblank::$1 4.0 byte~ vblank::$3 4.0 byte~ vblank::$5 4.0 @@ -2561,34 +2561,34 @@ Uplift Scope [RICOH_2A03] Uplift Scope [SpriteData] Uplift Scope [] -Uplifting [ppuDataPutTile] best 6002 combination reg byte a [ ppuDataPutTile::ppuDataPrepare1_$0 ] reg byte a [ ppuDataPutTile::ppuDataPrepare1_$1 ] reg byte a [ ppuDataPutTile::ppuDataPut1_val#0 ] reg byte a [ ppuDataPutTile::ppuDataPut2_val#0 ] zp[1]:46 [ ppuDataPutTile::ppuDataPrepare2_$0 ] zp[1]:47 [ ppuDataPutTile::ppuDataPrepare2_$1 ] zp[1]:48 [ ppuDataPutTile::ppuDataPut3_val#0 ] zp[1]:49 [ ppuDataPutTile::ppuDataPut4_val#0 ] zp[2]:17 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::ppuData#9 ] zp[2]:44 [ ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] zp[2]:19 [ ppuDataPutTile::tile#10 ] zp[2]:33 [ ppuDataPutTile::ppuData#0 ] +Uplifting [ppuDataPutTile] best 6200 combination reg byte a [ ppuDataPutTile::ppuDataPrepare1_$0 ] reg byte a [ ppuDataPutTile::ppuDataPrepare1_$1 ] reg byte a [ ppuDataPutTile::ppuDataPut1_val#0 ] reg byte a [ ppuDataPutTile::ppuDataPut2_val#0 ] zp[1]:46 [ ppuDataPutTile::ppuDataPrepare2_$0 ] zp[1]:47 [ ppuDataPutTile::ppuDataPrepare2_$1 ] zp[1]:48 [ ppuDataPutTile::ppuDataPut3_val#0 ] zp[1]:49 [ ppuDataPutTile::ppuDataPut4_val#0 ] zp[2]:17 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::ppuData#9 ] zp[2]:44 [ ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] zp[2]:19 [ ppuDataPutTile::tile#10 ] zp[2]:33 [ ppuDataPutTile::ppuData#0 ] Limited combination testing to 100 combinations of 65536 possible. -Uplifting [readJoy1] best 5759 combination reg byte x [ readJoy1::i#2 readJoy1::i#1 ] reg byte a [ readJoy1::$2 ] reg byte a [ readJoy1::joy#2 readJoy1::joy#1 ] zp[1]:35 [ readJoy1::$1 ] zp[1]:25 [ readJoy1::return#2 ] +Uplifting [readJoy1] best 5957 combination reg byte x [ readJoy1::i#2 readJoy1::i#1 ] reg byte a [ readJoy1::$2 ] reg byte a [ readJoy1::joy#2 readJoy1::joy#1 ] zp[1]:35 [ readJoy1::$1 ] zp[1]:25 [ readJoy1::return#2 ] Limited combination testing to 100 combinations of 576 possible. -Uplifting [ppuDataTransfer] best 5699 combination zp[2]:6 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] zp[2]:8 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#1 ] -Uplifting [memcpy] best 5699 combination zp[2]:21 [ memcpy::src#2 memcpy::src#1 ] zp[2]:23 [ memcpy::dst#2 memcpy::dst#1 ] -Uplifting [ppuDataFill] best 5651 combination zp[2]:15 [ ppuDataFill::i#2 ppuDataFill::i#1 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] zp[2]:12 [ ppuDataFill::size#3 ] reg byte x [ ppuDataFill::val#4 ] zp[2]:10 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] -Uplifting [main] best 5071 combination reg byte x [ main::x#2 main::x#1 ] reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] reg byte a [ main::initNES1_waitForVBlank1_$0 ] reg byte a [ main::initNES1_waitForVBlank2_$0 ] -Uplifting [vblank] best 5047 combination reg byte a [ vblank::$1 ] reg byte a [ vblank::$3 ] reg byte a [ vblank::$5 ] reg byte a [ vblank::$7 ] zp[1]:26 [ vblank::joy#0 ] +Uplifting [ppuDataTransfer] best 5897 combination zp[2]:6 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] zp[2]:8 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#1 ] +Uplifting [memcpy] best 5897 combination zp[2]:21 [ memcpy::src#2 memcpy::src#1 ] zp[2]:23 [ memcpy::dst#2 memcpy::dst#1 ] +Uplifting [ppuDataFill] best 5849 combination zp[2]:15 [ ppuDataFill::i#2 ppuDataFill::i#1 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] zp[2]:12 [ ppuDataFill::size#3 ] reg byte x [ ppuDataFill::val#4 ] zp[2]:10 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] +Uplifting [main] best 5269 combination reg byte x [ main::x#2 main::x#1 ] reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] reg byte a [ main::initNES1_waitForVBlank1_$0 ] reg byte a [ main::initNES1_waitForVBlank2_$0 ] +Uplifting [vblank] best 5245 combination reg byte a [ vblank::$1 ] reg byte a [ vblank::$3 ] reg byte a [ vblank::$5 ] reg byte a [ vblank::$7 ] zp[1]:26 [ vblank::joy#0 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [RICOH_2C02] best 5047 combination -Uplifting [RICOH_2A03] best 5047 combination -Uplifting [SpriteData] best 5047 combination -Uplifting [] best 5047 combination +Uplifting [RICOH_2C02] best 5245 combination +Uplifting [RICOH_2A03] best 5245 combination +Uplifting [SpriteData] best 5245 combination +Uplifting [] best 5245 combination Attempting to uplift remaining variables inzp[1]:46 [ ppuDataPutTile::ppuDataPrepare2_$0 ] -Uplifting [ppuDataPutTile] best 5041 combination reg byte a [ ppuDataPutTile::ppuDataPrepare2_$0 ] +Uplifting [ppuDataPutTile] best 5239 combination reg byte a [ ppuDataPutTile::ppuDataPrepare2_$0 ] Attempting to uplift remaining variables inzp[1]:47 [ ppuDataPutTile::ppuDataPrepare2_$1 ] -Uplifting [ppuDataPutTile] best 5035 combination reg byte a [ ppuDataPutTile::ppuDataPrepare2_$1 ] +Uplifting [ppuDataPutTile] best 5233 combination reg byte a [ ppuDataPutTile::ppuDataPrepare2_$1 ] Attempting to uplift remaining variables inzp[1]:48 [ ppuDataPutTile::ppuDataPut3_val#0 ] -Uplifting [ppuDataPutTile] best 5029 combination reg byte a [ ppuDataPutTile::ppuDataPut3_val#0 ] +Uplifting [ppuDataPutTile] best 5227 combination reg byte a [ ppuDataPutTile::ppuDataPut3_val#0 ] Attempting to uplift remaining variables inzp[1]:49 [ ppuDataPutTile::ppuDataPut4_val#0 ] -Uplifting [ppuDataPutTile] best 5023 combination reg byte a [ ppuDataPutTile::ppuDataPut4_val#0 ] +Uplifting [ppuDataPutTile] best 5221 combination reg byte a [ ppuDataPutTile::ppuDataPut4_val#0 ] Attempting to uplift remaining variables inzp[1]:35 [ readJoy1::$1 ] -Uplifting [readJoy1] best 5023 combination zp[1]:35 [ readJoy1::$1 ] +Uplifting [readJoy1] best 5221 combination zp[1]:35 [ readJoy1::$1 ] Attempting to uplift remaining variables inzp[1]:25 [ readJoy1::return#2 ] -Uplifting [readJoy1] best 5017 combination reg byte a [ readJoy1::return#2 ] +Uplifting [readJoy1] best 5215 combination reg byte a [ readJoy1::return#2 ] Attempting to uplift remaining variables inzp[1]:26 [ vblank::joy#0 ] -Uplifting [vblank] best 5012 combination reg byte x [ vblank::joy#0 ] +Uplifting [vblank] best 5210 combination reg byte x [ vblank::joy#0 ] Coalescing zero page register [ zp[2]:17 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::ppuData#9 ] ] with [ zp[2]:33 [ ppuDataPutTile::ppuData#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:17 [ ppuDataPutTile::ppuData#2 ppuDataPutTile::ppuData#9 ppuDataPutTile::ppuData#0 ] ] with [ zp[2]:44 [ ppuDataPutTile::ppuDataPrepare2_ppuData#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:10 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] ] with [ zp[2]:6 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] ] @@ -2616,6 +2616,7 @@ ASSEMBLER BEFORE OPTIMIZATION // http://nesdev.com/2C02%20technical%20reference.TXT // Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018. // Upstart +.cpu _6502 // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html // https://forums.nesdev.com/viewtopic.php?f=2&t=9896 @@ -2697,7 +2698,7 @@ ASSEMBLER BEFORE OPTIMIZATION // vblank // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) vblank: { - // entry interrupt(HARDWARE_STACK) + // interrupt(isr_hardware_all_entry) -- isr_hardware_all_entry pha txa pha @@ -2810,7 +2811,8 @@ vblank: { jmp __breturn // vblank::@return __breturn: - // [32] return - exit interrupt(HARDWARE_STACK) + // [32] return + // interrupt(isr_hardware_all_exit) -- isr_hardware_all_exit pla tay pla @@ -3709,7 +3711,7 @@ byte readJoy1::joy#1 reg byte a 101.0 byte readJoy1::joy#2 reg byte a 51.0 byte readJoy1::return byte readJoy1::return#2 reg byte a 4.0 -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() byte~ vblank::$1 reg byte a 4.0 byte~ vblank::$3 reg byte a 4.0 byte~ vblank::$5 reg byte a 4.0 @@ -3750,7 +3752,7 @@ reg byte a [ ppuDataPutTile::ppuDataPut4_val#0 ] FINAL ASSEMBLER -Score: 3905 +Score: 4103 // File Comments // A minimal NES demo @@ -3765,6 +3767,7 @@ Score: 3905 // http://nesdev.com/2C02%20technical%20reference.TXT // Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018. // Upstart +.cpu _6502 // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html // https://forums.nesdev.com/viewtopic.php?f=2&t=9896 @@ -3846,7 +3849,7 @@ Score: 3905 // vblank // NMI Called when the PPU refreshes the screen (also known as the V-Blank period) vblank: { - // entry interrupt(HARDWARE_STACK) + // interrupt(isr_hardware_all_entry) -- isr_hardware_all_entry pha txa pha @@ -3972,7 +3975,8 @@ vblank: { sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL // vblank::@return // } - // [32] return - exit interrupt(HARDWARE_STACK) + // [32] return + // interrupt(isr_hardware_all_exit) -- isr_hardware_all_exit pla tay pla diff --git a/src/test/ref/examples/nes/nes-demo.sym b/src/test/ref/examples/nes/nes-demo.sym index 6f7b5ce34..8972a0b57 100644 --- a/src/test/ref/examples/nes/nes-demo.sym +++ b/src/test/ref/examples/nes/nes-demo.sym @@ -118,7 +118,7 @@ byte readJoy1::joy#1 reg byte a 101.0 byte readJoy1::joy#2 reg byte a 51.0 byte readJoy1::return byte readJoy1::return#2 reg byte a 4.0 -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() byte~ vblank::$1 reg byte a 4.0 byte~ vblank::$3 reg byte a 4.0 byte~ vblank::$5 reg byte a 4.0 diff --git a/src/test/ref/examples/nes/nes-dxycp.asm b/src/test/ref/examples/nes/nes-dxycp.asm index 2bb533ba7..5c0066cd5 100644 --- a/src/test/ref/examples/nes/nes-dxycp.asm +++ b/src/test/ref/examples/nes/nes-dxycp.asm @@ -8,6 +8,7 @@ // https://wiki.nesdev.com/w/index.php/PPU_registers // http://nesdev.com/2C02%20technical%20reference.TXT // Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018. +.cpu _6502 // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html // https://forums.nesdev.com/viewtopic.php?f=2&t=9896 diff --git a/src/test/ref/examples/nes/nes-dxycp.cfg b/src/test/ref/examples/nes/nes-dxycp.cfg index e26b61c18..0add5293e 100644 --- a/src/test/ref/examples/nes/nes-dxycp.cfg +++ b/src/test/ref/examples/nes/nes-dxycp.cfg @@ -16,7 +16,7 @@ __start::@return: scope:[__start] from __start::@1 [6] return to:@return -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() vblank: scope:[vblank] from [7] *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) = 0 [8] *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) = 0 diff --git a/src/test/ref/examples/nes/nes-dxycp.log b/src/test/ref/examples/nes/nes-dxycp.log index 7028d9b66..23da6003e 100644 --- a/src/test/ref/examples/nes/nes-dxycp.log +++ b/src/test/ref/examples/nes/nes-dxycp.log @@ -306,7 +306,7 @@ main::@return: scope:[main] from main::@3 return to:@return -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() vblank: scope:[vblank] from vblank::$31 = (byte*)PPU vblank::$29 = vblank::$31 + OFFSET_STRUCT_RICOH_2C02_PPUSCROLL @@ -672,7 +672,7 @@ byte readJoy1::return#1 byte readJoy1::return#2 byte readJoy1::return#3 byte readJoy1::return#4 -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() byte~ vblank::$1 number~ vblank::$10 number~ vblank::$11 @@ -1459,7 +1459,7 @@ __start::@return: scope:[__start] from __start::@1 [6] return to:@return -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() vblank: scope:[vblank] from [7] *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) = 0 [8] *((byte*)PPU+OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) = 0 @@ -1742,7 +1742,7 @@ byte readJoy1::joy#1 101.0 byte readJoy1::joy#2 51.0 byte readJoy1::return byte readJoy1::return#2 4.0 -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() byte~ vblank::$10 4.0 byte~ vblank::$12 4.0 byte~ vblank::$14 22.0 @@ -2028,47 +2028,47 @@ Uplift Scope [RICOH_2A03] Uplift Scope [SpriteData] Uplift Scope [__start] -Uplifting [ppuDataTransfer] best 6639 combination zp[2]:12 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] zp[2]:14 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#1 ] -Uplifting [ppuDataFill] best 6591 combination zp[2]:21 [ ppuDataFill::i#2 ppuDataFill::i#1 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] zp[2]:18 [ ppuDataFill::size#3 ] reg byte x [ ppuDataFill::val#4 ] zp[2]:16 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] -Uplifting [main] best 6011 combination reg byte x [ main::s#2 main::s#1 ] reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] reg byte a [ main::initNES1_waitForVBlank1_$0 ] reg byte a [ main::initNES1_waitForVBlank2_$0 ] zp[1]:32 [ main::$7 ] +Uplifting [ppuDataTransfer] best 6837 combination zp[2]:12 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] zp[2]:14 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#1 ] +Uplifting [ppuDataFill] best 6789 combination zp[2]:21 [ ppuDataFill::i#2 ppuDataFill::i#1 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] zp[2]:18 [ ppuDataFill::size#3 ] reg byte x [ ppuDataFill::val#4 ] zp[2]:16 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] +Uplifting [main] best 6209 combination reg byte x [ main::s#2 main::s#1 ] reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] reg byte a [ main::initNES1_waitForVBlank1_$0 ] reg byte a [ main::initNES1_waitForVBlank2_$0 ] zp[1]:32 [ main::$7 ] Limited combination testing to 100 combinations of 432 possible. -Uplifting [readJoy1] best 5768 combination reg byte x [ readJoy1::i#2 readJoy1::i#1 ] reg byte a [ readJoy1::$2 ] reg byte a [ readJoy1::joy#2 readJoy1::joy#1 ] zp[1]:33 [ readJoy1::$1 ] zp[1]:26 [ readJoy1::return#2 ] +Uplifting [readJoy1] best 5966 combination reg byte x [ readJoy1::i#2 readJoy1::i#1 ] reg byte a [ readJoy1::$2 ] reg byte a [ readJoy1::joy#2 readJoy1::joy#1 ] zp[1]:33 [ readJoy1::$1 ] zp[1]:26 [ readJoy1::return#2 ] Limited combination testing to 100 combinations of 576 possible. -Uplifting [vblank] best 5708 combination zp[1]:7 [ vblank::x_idx_2#2 vblank::x_idx_2#1 vblank::x_idx_2#0 vblank::$25 vblank::$23 ] zp[1]:6 [ vblank::x_idx#2 vblank::x_idx#1 vblank::x_idx#0 vblank::$19 vblank::$17 ] zp[1]:4 [ vblank::s#2 vblank::s#1 ] reg byte a [ vblank::$14 ] zp[1]:5 [ vblank::y_idx#2 vblank::y_idx#1 vblank::y_idx#0 ] zp[1]:28 [ vblank::$28 ] zp[1]:2 [ vblank::$7 vblank::$5 ] zp[1]:3 [ vblank::$12 vblank::$10 ] zp[1]:27 [ vblank::joy#0 ] +Uplifting [vblank] best 5906 combination zp[1]:7 [ vblank::x_idx_2#2 vblank::x_idx_2#1 vblank::x_idx_2#0 vblank::$25 vblank::$23 ] zp[1]:6 [ vblank::x_idx#2 vblank::x_idx#1 vblank::x_idx#0 vblank::$19 vblank::$17 ] zp[1]:4 [ vblank::s#2 vblank::s#1 ] reg byte a [ vblank::$14 ] zp[1]:5 [ vblank::y_idx#2 vblank::y_idx#1 vblank::y_idx#0 ] zp[1]:28 [ vblank::$28 ] zp[1]:2 [ vblank::$7 vblank::$5 ] zp[1]:3 [ vblank::$12 vblank::$10 ] zp[1]:27 [ vblank::joy#0 ] Limited combination testing to 100 combinations of 62208 possible. -Uplifting [] best 5708 combination zp[1]:23 [ y_sin_idx ] zp[1]:24 [ x_sin_idx ] zp[1]:25 [ x_sin_idx_2 ] -Uplifting [RICOH_2C02] best 5708 combination -Uplifting [RICOH_2A03] best 5708 combination -Uplifting [SpriteData] best 5708 combination -Uplifting [__start] best 5708 combination +Uplifting [] best 5906 combination zp[1]:23 [ y_sin_idx ] zp[1]:24 [ x_sin_idx ] zp[1]:25 [ x_sin_idx_2 ] +Uplifting [RICOH_2C02] best 5906 combination +Uplifting [RICOH_2A03] best 5906 combination +Uplifting [SpriteData] best 5906 combination +Uplifting [__start] best 5906 combination Attempting to uplift remaining variables inzp[1]:32 [ main::$7 ] -Uplifting [main] best 5578 combination reg byte y [ main::$7 ] +Uplifting [main] best 5776 combination reg byte y [ main::$7 ] Attempting to uplift remaining variables inzp[1]:33 [ readJoy1::$1 ] -Uplifting [readJoy1] best 5578 combination zp[1]:33 [ readJoy1::$1 ] +Uplifting [readJoy1] best 5776 combination zp[1]:33 [ readJoy1::$1 ] Attempting to uplift remaining variables inzp[1]:7 [ vblank::x_idx_2#2 vblank::x_idx_2#1 vblank::x_idx_2#0 vblank::$25 vblank::$23 ] -Uplifting [vblank] best 5578 combination zp[1]:7 [ vblank::x_idx_2#2 vblank::x_idx_2#1 vblank::x_idx_2#0 vblank::$25 vblank::$23 ] +Uplifting [vblank] best 5776 combination zp[1]:7 [ vblank::x_idx_2#2 vblank::x_idx_2#1 vblank::x_idx_2#0 vblank::$25 vblank::$23 ] Attempting to uplift remaining variables inzp[1]:6 [ vblank::x_idx#2 vblank::x_idx#1 vblank::x_idx#0 vblank::$19 vblank::$17 ] -Uplifting [vblank] best 5578 combination zp[1]:6 [ vblank::x_idx#2 vblank::x_idx#1 vblank::x_idx#0 vblank::$19 vblank::$17 ] +Uplifting [vblank] best 5776 combination zp[1]:6 [ vblank::x_idx#2 vblank::x_idx#1 vblank::x_idx#0 vblank::$19 vblank::$17 ] Attempting to uplift remaining variables inzp[1]:4 [ vblank::s#2 vblank::s#1 ] -Uplifting [vblank] best 5578 combination zp[1]:4 [ vblank::s#2 vblank::s#1 ] +Uplifting [vblank] best 5776 combination zp[1]:4 [ vblank::s#2 vblank::s#1 ] Attempting to uplift remaining variables inzp[1]:5 [ vblank::y_idx#2 vblank::y_idx#1 vblank::y_idx#0 ] -Uplifting [vblank] best 5578 combination zp[1]:5 [ vblank::y_idx#2 vblank::y_idx#1 vblank::y_idx#0 ] +Uplifting [vblank] best 5776 combination zp[1]:5 [ vblank::y_idx#2 vblank::y_idx#1 vblank::y_idx#0 ] Attempting to uplift remaining variables inzp[1]:28 [ vblank::$28 ] -Uplifting [vblank] best 5578 combination zp[1]:28 [ vblank::$28 ] +Uplifting [vblank] best 5776 combination zp[1]:28 [ vblank::$28 ] Attempting to uplift remaining variables inzp[1]:2 [ vblank::$7 vblank::$5 ] -Uplifting [vblank] best 5569 combination reg byte x [ vblank::$7 vblank::$5 ] +Uplifting [vblank] best 5767 combination reg byte x [ vblank::$7 vblank::$5 ] Attempting to uplift remaining variables inzp[1]:3 [ vblank::$12 vblank::$10 ] -Uplifting [vblank] best 5560 combination reg byte x [ vblank::$12 vblank::$10 ] +Uplifting [vblank] best 5758 combination reg byte x [ vblank::$12 vblank::$10 ] Attempting to uplift remaining variables inzp[1]:26 [ readJoy1::return#2 ] -Uplifting [readJoy1] best 5554 combination reg byte a [ readJoy1::return#2 ] +Uplifting [readJoy1] best 5752 combination reg byte a [ readJoy1::return#2 ] Attempting to uplift remaining variables inzp[1]:27 [ vblank::joy#0 ] -Uplifting [vblank] best 5548 combination reg byte a [ vblank::joy#0 ] +Uplifting [vblank] best 5746 combination reg byte a [ vblank::joy#0 ] Attempting to uplift remaining variables inzp[1]:23 [ y_sin_idx ] -Uplifting [] best 5548 combination zp[1]:23 [ y_sin_idx ] +Uplifting [] best 5746 combination zp[1]:23 [ y_sin_idx ] Attempting to uplift remaining variables inzp[1]:24 [ x_sin_idx ] -Uplifting [] best 5548 combination zp[1]:24 [ x_sin_idx ] +Uplifting [] best 5746 combination zp[1]:24 [ x_sin_idx ] Attempting to uplift remaining variables inzp[1]:25 [ x_sin_idx_2 ] -Uplifting [] best 5548 combination zp[1]:25 [ x_sin_idx_2 ] +Uplifting [] best 5746 combination zp[1]:25 [ x_sin_idx_2 ] Coalescing zero page register [ zp[2]:16 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] ] with [ zp[2]:12 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] ] Coalescing zero page register [ zp[2]:18 [ ppuDataFill::size#3 ] ] with [ zp[2]:14 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#1 ] ] Allocated (was zp[1]:4) zp[1]:2 [ vblank::s#2 vblank::s#1 ] @@ -2097,6 +2097,7 @@ ASSEMBLER BEFORE OPTIMIZATION // http://nesdev.com/2C02%20technical%20reference.TXT // Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018. // Upstart +.cpu _6502 // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html // https://forums.nesdev.com/viewtopic.php?f=2&t=9896 @@ -2215,7 +2216,7 @@ vblank: { .label x_idx = 4 .label x_idx_2 = 5 .label s = 2 - // entry interrupt(HARDWARE_STACK) + // interrupt(isr_hardware_all_entry) -- isr_hardware_all_entry pha txa pha @@ -2255,7 +2256,8 @@ vblank: { jmp __breturn // vblank::@return __breturn: - // [16] return - exit interrupt(HARDWARE_STACK) + // [16] return + // interrupt(isr_hardware_all_exit) -- isr_hardware_all_exit pla tay pla @@ -3096,7 +3098,7 @@ byte readJoy1::joy#1 reg byte a 101.0 byte readJoy1::joy#2 reg byte a 51.0 byte readJoy1::return byte readJoy1::return#2 reg byte a 4.0 -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() byte~ vblank::$10 reg byte x 4.0 byte~ vblank::$12 reg byte x 4.0 byte~ vblank::$14 reg byte a 22.0 @@ -3161,7 +3163,7 @@ reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] FINAL ASSEMBLER -Score: 4504 +Score: 4702 // File Comments // NES DXYCP using sprites @@ -3175,6 +3177,7 @@ Score: 4504 // http://nesdev.com/2C02%20technical%20reference.TXT // Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018. // Upstart +.cpu _6502 // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html // https://forums.nesdev.com/viewtopic.php?f=2&t=9896 @@ -3288,7 +3291,7 @@ vblank: { .label x_idx = 4 .label x_idx_2 = 5 .label s = 2 - // entry interrupt(HARDWARE_STACK) + // interrupt(isr_hardware_all_entry) -- isr_hardware_all_entry pha txa pha @@ -3325,7 +3328,8 @@ vblank: { // vblank::@return __breturn: // } - // [16] return - exit interrupt(HARDWARE_STACK) + // [16] return + // interrupt(isr_hardware_all_exit) -- isr_hardware_all_exit pla tay pla diff --git a/src/test/ref/examples/nes/nes-dxycp.sym b/src/test/ref/examples/nes/nes-dxycp.sym index c67773d7c..ee8ec3f29 100644 --- a/src/test/ref/examples/nes/nes-dxycp.sym +++ b/src/test/ref/examples/nes/nes-dxycp.sym @@ -89,7 +89,7 @@ byte readJoy1::joy#1 reg byte a 101.0 byte readJoy1::joy#2 reg byte a 51.0 byte readJoy1::return byte readJoy1::return#2 reg byte a 4.0 -interrupt(HARDWARE_STACK) void vblank() +__interrupt(hardware_all) void vblank() byte~ vblank::$10 reg byte x 4.0 byte~ vblank::$12 reg byte x 4.0 byte~ vblank::$14 reg byte a 22.0 diff --git a/src/test/ref/examples/nmisamples/nmisamples.asm b/src/test/ref/examples/nmisamples/nmisamples.asm index 361bced13..02fc03fc7 100644 --- a/src/test/ref/examples/nmisamples/nmisamples.asm +++ b/src/test/ref/examples/nmisamples/nmisamples.asm @@ -34,7 +34,6 @@ __start: { } nmi2: { sta rega+1 - stx regx+1 sty regy+1 // (VICII->BORDER_COLOR)++; inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR @@ -74,16 +73,13 @@ nmi2: { dec VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // } rega: - lda #00 - regx: - ldx #00 + lda #0 regy: - ldy #00 + ldy #0 rti } nmi: { sta rega+1 - stx regx+1 sty regy+1 // (VICII->BORDER_COLOR)++; inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR @@ -104,11 +100,9 @@ nmi: { dec VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // } rega: - lda #00 - regx: - ldx #00 + lda #0 regy: - ldy #00 + ldy #0 rti } main: { diff --git a/src/test/ref/examples/nmisamples/nmisamples.cfg b/src/test/ref/examples/nmisamples/nmisamples.cfg index 40bdb0a21..07f90c003 100644 --- a/src/test/ref/examples/nmisamples/nmisamples.cfg +++ b/src/test/ref/examples/nmisamples/nmisamples.cfg @@ -14,7 +14,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(HARDWARE_ALL) void nmi2() +__interrupt(hardware_clobber) void nmi2() nmi2: scope:[nmi2] from [5] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) asm { ldaCIA2_INTERRUPT } @@ -35,7 +35,7 @@ nmi2::@return: scope:[nmi2] from nmi2::@1 [15] return to:@return -interrupt(HARDWARE_ALL) void nmi() +__interrupt(hardware_clobber) void nmi() nmi: scope:[nmi] from [16] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) asm { ldaCIA2_INTERRUPT } diff --git a/src/test/ref/examples/nmisamples/nmisamples.log b/src/test/ref/examples/nmisamples/nmisamples.log index 7d41cd6d4..b87af990d 100644 --- a/src/test/ref/examples/nmisamples/nmisamples.log +++ b/src/test/ref/examples/nmisamples/nmisamples.log @@ -1,5 +1,5 @@ -Resolved forward reference nmi to interrupt(HARDWARE_ALL) void nmi() -Resolved forward reference nmi2 to interrupt(HARDWARE_ALL) void nmi2() +Resolved forward reference nmi to __interrupt(hardware_clobber) void nmi() +Resolved forward reference nmi2 to __interrupt(hardware_clobber) void nmi2() Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx Inlined call call __init @@ -20,7 +20,7 @@ main::@return: scope:[main] from main return to:@return -interrupt(HARDWARE_ALL) void nmi() +__interrupt(hardware_clobber) void nmi() nmi: scope:[nmi] from *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) asm { ldaCIA2_INTERRUPT } @@ -33,7 +33,7 @@ nmi::@return: scope:[nmi] from nmi return to:@return -interrupt(HARDWARE_ALL) void nmi2() +__interrupt(hardware_clobber) void nmi2() nmi2: scope:[nmi2] from *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) asm { ldaCIA2_INTERRUPT } @@ -87,9 +87,9 @@ const nomodify struct MOS6581_SID* SID = (struct MOS6581_SID*)$d400 const nomodify struct MOS6569_VICII* VICII = (struct MOS6569_VICII*)$d000 void __start() void main() -interrupt(HARDWARE_ALL) void nmi() +__interrupt(hardware_clobber) void nmi() number~ nmi::$1 -interrupt(HARDWARE_ALL) void nmi2() +__interrupt(hardware_clobber) void nmi2() byte~ nmi2::$1 byte~ nmi2::$2 bool~ nmi2::$3 @@ -161,7 +161,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(HARDWARE_ALL) void nmi2() +__interrupt(hardware_clobber) void nmi2() nmi2: scope:[nmi2] from [5] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) asm { ldaCIA2_INTERRUPT } @@ -182,7 +182,7 @@ nmi2::@return: scope:[nmi2] from nmi2::@1 [15] return to:@return -interrupt(HARDWARE_ALL) void nmi() +__interrupt(hardware_clobber) void nmi() nmi: scope:[nmi] from [16] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) asm { ldaCIA2_INTERRUPT } @@ -214,9 +214,9 @@ main::@return: scope:[main] from main VARIABLE REGISTER WEIGHTS void __start() void main() -interrupt(HARDWARE_ALL) void nmi() +__interrupt(hardware_clobber) void nmi() byte~ nmi::$1 4.0 -interrupt(HARDWARE_ALL) void nmi2() +__interrupt(hardware_clobber) void nmi2() byte~ nmi2::$1 4.0 byte~ nmi2::$2 4.0 volatile byte* sample loadstore 1.9999999999999996 @@ -267,14 +267,16 @@ Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [__start] -Uplifting [nmi2] best 540 combination reg byte a [ nmi2::$1 ] reg byte a [ nmi2::$2 ] -Uplifting [nmi] best 534 combination reg byte a [ nmi::$1 ] -Uplifting [] best 534 combination zp[2]:2 [ sample ] -Uplifting [MOS6526_CIA] best 534 combination -Uplifting [MOS6569_VICII] best 534 combination -Uplifting [MOS6581_SID] best 534 combination -Uplifting [main] best 534 combination -Uplifting [__start] best 534 combination +Uplifting [nmi2] best 756 combination reg byte a [ nmi2::$1 ] reg byte a [ nmi2::$2 ] +Uplifting [nmi] best 750 combination reg byte a [ nmi::$1 ] +Uplifting [] best 750 combination zp[2]:2 [ sample ] +Uplifting [MOS6526_CIA] best 750 combination +Uplifting [MOS6569_VICII] best 750 combination +Uplifting [MOS6581_SID] best 750 combination +Uplifting [main] best 750 combination +Uplifting [__start] best 750 combination +Interrupt procedure nmi clobbers AYnzP +Interrupt procedure nmi2 clobbers AYcnzP ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -330,9 +332,8 @@ __start: { } // nmi2 nmi2: { - // entry interrupt(HARDWARE_ALL) + // interrupt(isr_hardware_clobay_entry) -- isr_hardware_clobay_entry sta rega+1 - stx regx+1 sty regy+1 // [5] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR @@ -378,20 +379,18 @@ nmi2: { jmp __breturn // nmi2::@return __breturn: - // [15] return - exit interrupt(HARDWARE_ALL) + // [15] return + // interrupt(isr_hardware_clobay_exit) -- isr_hardware_clobay_exit rega: - lda #00 - regx: - ldx #00 + lda #0 regy: - ldy #00 + ldy #0 rti } // nmi nmi: { - // entry interrupt(HARDWARE_ALL) + // interrupt(isr_hardware_clobay_entry) -- isr_hardware_clobay_entry sta rega+1 - stx regx+1 sty regy+1 // [16] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR @@ -413,13 +412,12 @@ nmi: { jmp __breturn // nmi::@return __breturn: - // [22] return - exit interrupt(HARDWARE_ALL) + // [22] return + // interrupt(isr_hardware_clobay_exit) -- isr_hardware_clobay_exit rega: - lda #00 - regx: - ldx #00 + lda #0 regy: - ldy #00 + ldy #0 rti } // main @@ -506,9 +504,9 @@ const nomodify struct MOS6581_SID* SID = (struct MOS6581_SID*) 54272 const nomodify struct MOS6569_VICII* VICII = (struct MOS6569_VICII*) 53248 void __start() void main() -interrupt(HARDWARE_ALL) void nmi() +__interrupt(hardware_clobber) void nmi() byte~ nmi::$1 reg byte a 4.0 -interrupt(HARDWARE_ALL) void nmi2() +__interrupt(hardware_clobber) void nmi2() byte~ nmi2::$1 reg byte a 4.0 byte~ nmi2::$2 reg byte a 4.0 volatile byte* sample loadstore zp[2]:2 1.9999999999999996 @@ -520,7 +518,7 @@ reg byte a [ nmi::$1 ] FINAL ASSEMBLER -Score: 483 +Score: 579 // File Comments // NMI Sample Player using the SID volume register @@ -569,9 +567,8 @@ __start: { } // nmi2 nmi2: { - // entry interrupt(HARDWARE_ALL) + // interrupt(isr_hardware_clobay_entry) -- isr_hardware_clobay_entry sta rega+1 - stx regx+1 sty regy+1 // (VICII->BORDER_COLOR)++; // [5] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 @@ -623,20 +620,18 @@ nmi2: { dec VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // nmi2::@return // } - // [15] return - exit interrupt(HARDWARE_ALL) + // [15] return + // interrupt(isr_hardware_clobay_exit) -- isr_hardware_clobay_exit rega: - lda #00 - regx: - ldx #00 + lda #0 regy: - ldy #00 + ldy #0 rti } // nmi nmi: { - // entry interrupt(HARDWARE_ALL) + // interrupt(isr_hardware_clobay_entry) -- isr_hardware_clobay_entry sta rega+1 - stx regx+1 sty regy+1 // (VICII->BORDER_COLOR)++; // [16] *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((byte*)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 @@ -663,13 +658,12 @@ nmi: { dec VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // nmi::@return // } - // [22] return - exit interrupt(HARDWARE_ALL) + // [22] return + // interrupt(isr_hardware_clobay_exit) -- isr_hardware_clobay_exit rega: - lda #00 - regx: - ldx #00 + lda #0 regy: - ldy #00 + ldy #0 rti } // main diff --git a/src/test/ref/examples/nmisamples/nmisamples.sym b/src/test/ref/examples/nmisamples/nmisamples.sym index 1c37abcc4..1afd8bbd4 100644 --- a/src/test/ref/examples/nmisamples/nmisamples.sym +++ b/src/test/ref/examples/nmisamples/nmisamples.sym @@ -13,9 +13,9 @@ const nomodify struct MOS6581_SID* SID = (struct MOS6581_SID*) 54272 const nomodify struct MOS6569_VICII* VICII = (struct MOS6569_VICII*) 53248 void __start() void main() -interrupt(HARDWARE_ALL) void nmi() +__interrupt(hardware_clobber) void nmi() byte~ nmi::$1 reg byte a 4.0 -interrupt(HARDWARE_ALL) void nmi2() +__interrupt(hardware_clobber) void nmi2() byte~ nmi2::$1 reg byte a 4.0 byte~ nmi2::$2 reg byte a 4.0 volatile byte* sample loadstore zp[2]:2 1.9999999999999996 diff --git a/src/test/ref/interrupt-volatile-reuse-problem1.cfg b/src/test/ref/interrupt-volatile-reuse-problem1.cfg index fac67beb8..71eceb1d7 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem1.cfg +++ b/src/test/ref/interrupt-volatile-reuse-problem1.cfg @@ -15,7 +15,7 @@ __start::@return: scope:[__start] from __start::@1 [5] return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from [6] *(SCREEN+$28) = col1 [7] col1 = ++ col1 diff --git a/src/test/ref/interrupt-volatile-reuse-problem1.log b/src/test/ref/interrupt-volatile-reuse-problem1.log index 08d71cc09..bfff1b22b 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem1.log +++ b/src/test/ref/interrupt-volatile-reuse-problem1.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(KERNEL_MIN) void irq() +Resolved forward reference irq to __interrupt(rom_min_c64) void irq() Inlined call call __init CONTROL FLOW GRAPH SSA @@ -11,7 +11,7 @@ main::@return: scope:[main] from main return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from SCREEN[$28] = col1 col1 = ++ col1 @@ -44,7 +44,7 @@ const nomodify byte* SCREEN = (byte*)$400 void __start() volatile byte col1 loadstore volatile byte col2 loadstore -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() Adding number conversion cast (unumber) $28 in SCREEN[$28] = col1 @@ -91,7 +91,7 @@ __start::@return: scope:[__start] from __start::@1 [5] return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from [6] *(SCREEN+$28) = col1 [7] col1 = ++ col1 @@ -115,7 +115,7 @@ VARIABLE REGISTER WEIGHTS void __start() volatile byte col1 loadstore 8.0 volatile byte col2 loadstore 2.6666666666666665 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() Initial phi equivalence classes @@ -141,14 +141,14 @@ Uplift Scope [main] Uplift Scope [irq] Uplift Scope [__start] -Uplifting [] best 109 combination zp[1]:2 [ col1 ] zp[1]:3 [ col2 ] -Uplifting [main] best 109 combination -Uplifting [irq] best 109 combination -Uplifting [__start] best 109 combination +Uplifting [] best 136 combination zp[1]:2 [ col1 ] zp[1]:3 [ col2 ] +Uplifting [main] best 136 combination +Uplifting [irq] best 136 combination +Uplifting [__start] best 136 combination Attempting to uplift remaining variables inzp[1]:2 [ col1 ] -Uplifting [] best 109 combination zp[1]:2 [ col1 ] +Uplifting [] best 136 combination zp[1]:2 [ col1 ] Attempting to uplift remaining variables inzp[1]:3 [ col2 ] -Uplifting [] best 109 combination zp[1]:3 [ col2 ] +Uplifting [] best 136 combination zp[1]:3 [ col2 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -188,7 +188,7 @@ __start: { } // irq irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // [6] *(SCREEN+$28) = col1 -- _deref_pbuc1=vbuz1 lda.z col1 sta SCREEN+$28 @@ -202,7 +202,8 @@ irq: { jmp __breturn // irq::@return __breturn: - // [10] return - exit interrupt(KERNEL_MIN) + // [10] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main @@ -242,7 +243,7 @@ const nomodify byte* SCREEN = (byte*) 1024 void __start() volatile byte col1 loadstore zp[1]:2 8.0 volatile byte col2 loadstore zp[1]:3 2.6666666666666665 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() zp[1]:2 [ col1 ] @@ -250,7 +251,7 @@ zp[1]:3 [ col2 ] FINAL ASSEMBLER -Score: 67 +Score: 94 // File Comments // Illustrates problem where volatiles reuse the same ZP addresses for multiple overlapping volatiles @@ -284,7 +285,7 @@ __start: { } // irq irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // SCREEN[40] = col1++ // [6] *(SCREEN+$28) = col1 -- _deref_pbuc1=vbuz1 lda.z col1 @@ -301,7 +302,8 @@ irq: { inc.z col2 // irq::@return // } - // [10] return - exit interrupt(KERNEL_MIN) + // [10] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main diff --git a/src/test/ref/interrupt-volatile-reuse-problem1.sym b/src/test/ref/interrupt-volatile-reuse-problem1.sym index 312314fc8..10c9e0fcc 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem1.sym +++ b/src/test/ref/interrupt-volatile-reuse-problem1.sym @@ -3,7 +3,7 @@ const nomodify byte* SCREEN = (byte*) 1024 void __start() volatile byte col1 loadstore zp[1]:2 8.0 volatile byte col2 loadstore zp[1]:3 2.6666666666666665 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() zp[1]:2 [ col1 ] diff --git a/src/test/ref/interrupt-volatile-reuse-problem2.cfg b/src/test/ref/interrupt-volatile-reuse-problem2.cfg index 93cb7d467..e0ed83f68 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem2.cfg +++ b/src/test/ref/interrupt-volatile-reuse-problem2.cfg @@ -14,7 +14,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from [5] *IRQ_STATUS = 1 asm { lda$dc0d } diff --git a/src/test/ref/interrupt-volatile-reuse-problem2.log b/src/test/ref/interrupt-volatile-reuse-problem2.log index 814f0e6e4..09627796c 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem2.log +++ b/src/test/ref/interrupt-volatile-reuse-problem2.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(KERNEL_MIN) void irq() +Resolved forward reference irq to __interrupt(rom_min_c64) void irq() Inlined call call __init CONTROL FLOW GRAPH SSA @@ -49,7 +49,7 @@ main::@return: scope:[main] from main::@1 return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from *IRQ_STATUS = 1 asm { lda$dc0d } @@ -81,7 +81,7 @@ const nomodify void()** KERNEL_IRQ = (void()**)$314 const nomodify byte* SCREEN = (byte*)$400 void __start() volatile byte col1 loadstore -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() byte~ main::$0 bool~ main::$1 @@ -215,7 +215,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from [5] *IRQ_STATUS = 1 asm { lda$dc0d } @@ -259,7 +259,7 @@ main::@6: scope:[main] from main::@5 VARIABLE REGISTER WEIGHTS void __start() volatile byte col1 loadstore 2.6666666666666665 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() byte~ main::$0 200002.0 byte main::a @@ -317,15 +317,15 @@ Uplift Scope [] 2.67: zp[1]:5 [ col1 ] Uplift Scope [irq] Uplift Scope [__start] -Uplifting [main] best 323373 combination reg byte y [ main::a#2 main::a#1 ] reg byte a [ main::$0 ] zp[1]:3 [ main::y#4 main::y#1 ] reg byte x [ main::x#6 main::x#1 ] +Uplifting [main] best 323400 combination reg byte y [ main::a#2 main::a#1 ] reg byte a [ main::$0 ] zp[1]:3 [ main::y#4 main::y#1 ] reg byte x [ main::x#6 main::x#1 ] Limited combination testing to 100 combinations of 108 possible. -Uplifting [] best 323373 combination zp[1]:5 [ col1 ] -Uplifting [irq] best 323373 combination -Uplifting [__start] best 323373 combination +Uplifting [] best 323400 combination zp[1]:5 [ col1 ] +Uplifting [irq] best 323400 combination +Uplifting [__start] best 323400 combination Attempting to uplift remaining variables inzp[1]:3 [ main::y#4 main::y#1 ] -Uplifting [main] best 323373 combination zp[1]:3 [ main::y#4 main::y#1 ] +Uplifting [main] best 323400 combination zp[1]:3 [ main::y#4 main::y#1 ] Attempting to uplift remaining variables inzp[1]:5 [ col1 ] -Uplifting [] best 323373 combination zp[1]:5 [ col1 ] +Uplifting [] best 323400 combination zp[1]:5 [ col1 ] Allocated (was zp[1]:3) zp[1]:2 [ main::y#4 main::y#1 ] Allocated (was zp[1]:5) zp[1]:3 [ col1 ] @@ -364,7 +364,7 @@ __start: { } // irq irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // [5] *IRQ_STATUS = 1 -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ lda #1 @@ -379,7 +379,8 @@ irq: { jmp __breturn // irq::@return __breturn: - // [9] return - exit interrupt(KERNEL_MIN) + // [9] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main @@ -511,7 +512,7 @@ const nomodify void()** KERNEL_IRQ = (void()**) 788 const nomodify byte* SCREEN = (byte*) 1024 void __start() volatile byte col1 loadstore zp[1]:3 2.6666666666666665 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() byte~ main::$0 reg byte a 200002.0 byte main::a @@ -532,7 +533,7 @@ reg byte a [ main::$0 ] FINAL ASSEMBLER -Score: 223704 +Score: 223731 // File Comments // Illustrates problem where volatiles reuse ZP addresses of other variables @@ -562,7 +563,7 @@ __start: { } // irq irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // *IRQ_STATUS = 1 // [5] *IRQ_STATUS = 1 -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ @@ -580,7 +581,8 @@ irq: { inc.z col1 // irq::@return // } - // [9] return - exit interrupt(KERNEL_MIN) + // [9] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main diff --git a/src/test/ref/interrupt-volatile-reuse-problem2.sym b/src/test/ref/interrupt-volatile-reuse-problem2.sym index b0df291b5..92bd39403 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem2.sym +++ b/src/test/ref/interrupt-volatile-reuse-problem2.sym @@ -3,7 +3,7 @@ const nomodify void()** KERNEL_IRQ = (void()**) 788 const nomodify byte* SCREEN = (byte*) 1024 void __start() volatile byte col1 loadstore zp[1]:3 2.6666666666666665 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() byte~ main::$0 reg byte a 200002.0 byte main::a diff --git a/src/test/ref/irq-hardware-clobber-jsr.asm b/src/test/ref/irq-hardware-clobber-jsr.asm index 873f2cc81..1c1d5f8f4 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.asm +++ b/src/test/ref/irq-hardware-clobber-jsr.asm @@ -35,12 +35,11 @@ .label HARDWARE_IRQ = $fffe // Interrupt Routine irq: { - sta rega+1 + pha // do_irq() jsr do_irq // } - rega: - lda #00 + pla rti } main: { diff --git a/src/test/ref/irq-hardware-clobber-jsr.cfg b/src/test/ref/irq-hardware-clobber-jsr.cfg index 2bbd2db0b..2cdf0fb5b 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.cfg +++ b/src/test/ref/irq-hardware-clobber-jsr.cfg @@ -1,5 +1,5 @@ -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from [0] phi() [1] call do_irq diff --git a/src/test/ref/irq-hardware-clobber-jsr.log b/src/test/ref/irq-hardware-clobber-jsr.log index 3c70d6d4c..792393781 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.log +++ b/src/test/ref/irq-hardware-clobber-jsr.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(HARDWARE_CLOBBER) void irq() +Resolved forward reference irq to __interrupt(hardware_clobber) void irq() Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -25,7 +25,7 @@ main::@return: scope:[main] from main::@1 return to:@return -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from call do_irq to:irq::@1 @@ -75,7 +75,7 @@ const nomodify byte* VIC_CONTROL = (byte*)$d011 const nomodify byte WHITE = 1 void __start() void do_irq() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() void main() Adding number conversion cast (unumber) $80 in *VIC_CONTROL = *VIC_CONTROL | $80 @@ -123,7 +123,7 @@ Adding NOP phi() at start of irq FINAL CONTROL FLOW GRAPH -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from [0] phi() [1] call do_irq @@ -161,7 +161,7 @@ do_irq::@return: scope:[do_irq] from do_irq VARIABLE REGISTER WEIGHTS void do_irq() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() void main() Initial phi equivalence classes @@ -188,20 +188,14 @@ Uplift Scope [irq] Uplift Scope [do_irq] Uplift Scope [] -Uplifting [MOS6526_CIA] best 317 combination -Uplifting [MOS6569_VICII] best 317 combination -Uplifting [MOS6581_SID] best 317 combination -Uplifting [main] best 317 combination -Uplifting [irq] best 317 combination -Uplifting [do_irq] best 317 combination -Uplifting [] best 317 combination +Uplifting [MOS6526_CIA] best 425 combination +Uplifting [MOS6569_VICII] best 425 combination +Uplifting [MOS6581_SID] best 425 combination +Uplifting [main] best 425 combination +Uplifting [irq] best 425 combination +Uplifting [do_irq] best 425 combination +Uplifting [] best 425 combination Interrupt procedure irq clobbers AnzPS -Removing interrupt register storage stx regx+1 in 4 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage sty regy+1 in 4 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regx: in 7 [2] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldx #00 in 7 [2] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regy: in 7 [2] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldy #00 in 7 [2] return - exit interrupt(HARDWARE_CLOBBER) ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -245,16 +239,16 @@ ASSEMBLER BEFORE OPTIMIZATION // irq // Interrupt Routine irq: { - // entry interrupt(HARDWARE_CLOBBER) - sta rega+1 + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry + pha // [1] call do_irq jsr do_irq jmp __breturn // irq::@return __breturn: - // [2] return - exit interrupt(HARDWARE_CLOBBER) - rega: - lda #00 + // [2] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit + pla rti } // main @@ -325,7 +319,6 @@ Removing instruction jmp __b1 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction __breturn: -Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination @@ -348,13 +341,13 @@ const nomodify byte* RASTER = (byte*) 53266 const nomodify byte* VIC_CONTROL = (byte*) 53265 const nomodify byte WHITE = 1 void do_irq() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() void main() FINAL ASSEMBLER -Score: 224 +Score: 306 // File Comments // A minimal working raster hardware IRQ with clobber-based register savings @@ -397,16 +390,16 @@ Score: 224 // irq // Interrupt Routine irq: { - // entry interrupt(HARDWARE_CLOBBER) - sta rega+1 + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry + pha // do_irq() // [1] call do_irq jsr do_irq // irq::@return // } - // [2] return - exit interrupt(HARDWARE_CLOBBER) - rega: - lda #00 + // [2] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit + pla rti } // main diff --git a/src/test/ref/irq-hardware-clobber-jsr.sym b/src/test/ref/irq-hardware-clobber-jsr.sym index 3b34e6489..eeb135922 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.sym +++ b/src/test/ref/irq-hardware-clobber-jsr.sym @@ -16,6 +16,6 @@ const nomodify byte* RASTER = (byte*) 53266 const nomodify byte* VIC_CONTROL = (byte*) 53265 const nomodify byte WHITE = 1 void do_irq() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() void main() diff --git a/src/test/ref/irq-hardware-clobber.asm b/src/test/ref/irq-hardware-clobber.asm index 95fae1229..267ad898f 100644 --- a/src/test/ref/irq-hardware-clobber.asm +++ b/src/test/ref/irq-hardware-clobber.asm @@ -24,7 +24,7 @@ .label PROCPORT = 1 // Interrupt Routine irq: { - sta rega+1 + pha // *BG_COLOR = WHITE lda #WHITE sta BG_COLOR @@ -36,8 +36,7 @@ irq: { lda #IRQ_RASTER sta IRQ_STATUS // } - rega: - lda #00 + pla rti } // RAM in $A000, $E000 CHAR ROM in $D000 diff --git a/src/test/ref/irq-hardware-clobber.cfg b/src/test/ref/irq-hardware-clobber.cfg index 914277208..db1ffb84f 100644 --- a/src/test/ref/irq-hardware-clobber.cfg +++ b/src/test/ref/irq-hardware-clobber.cfg @@ -1,5 +1,5 @@ -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from [0] *BG_COLOR = WHITE [1] *BG_COLOR = BLACK diff --git a/src/test/ref/irq-hardware-clobber.log b/src/test/ref/irq-hardware-clobber.log index 9ad001c5b..f192b8db0 100644 --- a/src/test/ref/irq-hardware-clobber.log +++ b/src/test/ref/irq-hardware-clobber.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(HARDWARE_CLOBBER) void irq() +Resolved forward reference irq to __interrupt(hardware_clobber) void irq() CONTROL FLOW GRAPH SSA @@ -24,7 +24,7 @@ main::@return: scope:[main] from main::@1 return to:@return -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from *BG_COLOR = WHITE *BG_COLOR = BLACK @@ -62,7 +62,7 @@ const nomodify byte* RASTER = (byte*)$d012 const nomodify byte* VIC_CONTROL = (byte*)$d011 const nomodify byte WHITE = 1 void __start() -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() void main() Adding number conversion cast (unumber) $80 in *VIC_CONTROL = *VIC_CONTROL | $80 @@ -105,7 +105,7 @@ Renumbering block main::@2 to main::@1 FINAL CONTROL FLOW GRAPH -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() irq: scope:[irq] from [0] *BG_COLOR = WHITE [1] *BG_COLOR = BLACK @@ -133,7 +133,7 @@ main::@1: scope:[main] from main main::@1 VARIABLE REGISTER WEIGHTS -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() void main() Initial phi equivalence classes @@ -156,16 +156,10 @@ Uplift Scope [main] Uplift Scope [irq] Uplift Scope [] -Uplifting [main] best 302 combination -Uplifting [irq] best 302 combination -Uplifting [] best 302 combination +Uplifting [main] best 410 combination +Uplifting [irq] best 410 combination +Uplifting [] best 410 combination Interrupt procedure irq clobbers AnzP -Removing interrupt register storage stx regx+1 in 4 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage sty regy+1 in 4 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regx: in 9 [3] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldx #00 in 9 [3] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regy: in 9 [3] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldy #00 in 9 [3] return - exit interrupt(HARDWARE_CLOBBER) ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -198,8 +192,8 @@ ASSEMBLER BEFORE OPTIMIZATION // irq // Interrupt Routine irq: { - // entry interrupt(HARDWARE_CLOBBER) - sta rega+1 + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry + pha // [0] *BG_COLOR = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE sta BG_COLOR @@ -213,9 +207,9 @@ irq: { jmp __breturn // irq::@return __breturn: - // [3] return - exit interrupt(HARDWARE_CLOBBER) - rega: - lda #00 + // [3] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit + pla rti } // main @@ -268,7 +262,7 @@ Removing instruction jmp __breturn Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination Removing instruction __breturn: -Succesful ASM optimization Pass5RedundantLabelElimination +Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE const nomodify byte* BG_COLOR = (byte*) 53280 @@ -287,13 +281,13 @@ const nomodify byte PROCPORT_RAM_IO = $35 const nomodify byte* RASTER = (byte*) 53266 const nomodify byte* VIC_CONTROL = (byte*) 53265 const nomodify byte WHITE = 1 -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() void main() FINAL ASSEMBLER -Score: 212 +Score: 294 // File Comments // A minimal working raster hardware IRQ with clobber-based register savings @@ -325,8 +319,8 @@ Score: 212 // irq // Interrupt Routine irq: { - // entry interrupt(HARDWARE_CLOBBER) - sta rega+1 + // interrupt(isr_hardware_cloba_entry) -- isr_hardware_cloba_entry + pha // *BG_COLOR = WHITE // [0] *BG_COLOR = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE @@ -342,9 +336,9 @@ irq: { sta IRQ_STATUS // irq::@return // } - // [3] return - exit interrupt(HARDWARE_CLOBBER) - rega: - lda #00 + // [3] return + // interrupt(isr_hardware_cloba_exit) -- isr_hardware_cloba_exit + pla rti } // main diff --git a/src/test/ref/irq-hardware-clobber.sym b/src/test/ref/irq-hardware-clobber.sym index 41d6e1352..56d6320fc 100644 --- a/src/test/ref/irq-hardware-clobber.sym +++ b/src/test/ref/irq-hardware-clobber.sym @@ -14,6 +14,6 @@ const nomodify byte PROCPORT_RAM_IO = $35 const nomodify byte* RASTER = (byte*) 53266 const nomodify byte* VIC_CONTROL = (byte*) 53265 const nomodify byte WHITE = 1 -interrupt(HARDWARE_CLOBBER) void irq() +__interrupt(hardware_clobber) void irq() void main() diff --git a/src/test/ref/irq-hardware-stack.asm b/src/test/ref/irq-hardware-stack.asm index c39e873ce..ef61d4c35 100644 --- a/src/test/ref/irq-hardware-stack.asm +++ b/src/test/ref/irq-hardware-stack.asm @@ -1,4 +1,5 @@ // A minimal working raster IRQ +.cpu _6502 .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" diff --git a/src/test/ref/irq-hardware-stack.cfg b/src/test/ref/irq-hardware-stack.cfg index 9d5544913..a8578eac9 100644 --- a/src/test/ref/irq-hardware-stack.cfg +++ b/src/test/ref/irq-hardware-stack.cfg @@ -1,5 +1,5 @@ -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_all) void irq() irq: scope:[irq] from [0] *BG_COLOR = WHITE [1] *BG_COLOR = BLACK diff --git a/src/test/ref/irq-hardware-stack.log b/src/test/ref/irq-hardware-stack.log index f6877f7c7..02af81576 100644 --- a/src/test/ref/irq-hardware-stack.log +++ b/src/test/ref/irq-hardware-stack.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(HARDWARE_STACK) void irq() +Resolved forward reference irq to __interrupt(hardware_all) void irq() CONTROL FLOW GRAPH SSA @@ -24,7 +24,7 @@ main::@return: scope:[main] from main::@1 return to:@return -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_all) void irq() irq: scope:[irq] from *BG_COLOR = WHITE *BG_COLOR = BLACK @@ -62,7 +62,7 @@ const nomodify byte* RASTER = (byte*)$d012 const nomodify byte* VIC_CONTROL = (byte*)$d011 const nomodify byte WHITE = 1 void __start() -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_all) void irq() void main() Adding number conversion cast (unumber) $80 in *VIC_CONTROL = *VIC_CONTROL | $80 @@ -105,7 +105,7 @@ Renumbering block main::@2 to main::@1 FINAL CONTROL FLOW GRAPH -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_all) void irq() irq: scope:[irq] from [0] *BG_COLOR = WHITE [1] *BG_COLOR = BLACK @@ -133,7 +133,7 @@ main::@1: scope:[main] from main main::@1 VARIABLE REGISTER WEIGHTS -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_all) void irq() void main() Initial phi equivalence classes @@ -156,14 +156,15 @@ Uplift Scope [main] Uplift Scope [irq] Uplift Scope [] -Uplifting [main] best 322 combination -Uplifting [irq] best 322 combination -Uplifting [] best 322 combination +Uplifting [main] best 520 combination +Uplifting [irq] best 520 combination +Uplifting [] best 520 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // A minimal working raster IRQ // Upstart +.cpu _6502 .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" @@ -191,7 +192,7 @@ ASSEMBLER BEFORE OPTIMIZATION // irq // Interrupt Routine irq: { - // entry interrupt(HARDWARE_STACK) + // interrupt(isr_hardware_all_entry) -- isr_hardware_all_entry pha txa pha @@ -210,7 +211,8 @@ irq: { jmp __breturn // irq::@return __breturn: - // [3] return - exit interrupt(HARDWARE_STACK) + // [3] return + // interrupt(isr_hardware_all_exit) -- isr_hardware_all_exit pla tay pla @@ -287,17 +289,18 @@ const nomodify byte PROCPORT_RAM_IO = $35 const nomodify byte* RASTER = (byte*) 53266 const nomodify byte* VIC_CONTROL = (byte*) 53265 const nomodify byte WHITE = 1 -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_all) void irq() void main() FINAL ASSEMBLER -Score: 316 +Score: 514 // File Comments // A minimal working raster IRQ // Upstart +.cpu _6502 .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" @@ -325,7 +328,7 @@ Score: 316 // irq // Interrupt Routine irq: { - // entry interrupt(HARDWARE_STACK) + // interrupt(isr_hardware_all_entry) -- isr_hardware_all_entry pha txa pha @@ -346,7 +349,8 @@ irq: { sta IRQ_STATUS // irq::@return // } - // [3] return - exit interrupt(HARDWARE_STACK) + // [3] return + // interrupt(isr_hardware_all_exit) -- isr_hardware_all_exit pla tay pla diff --git a/src/test/ref/irq-hardware-stack.sym b/src/test/ref/irq-hardware-stack.sym index 6205c9a2f..ce59ba768 100644 --- a/src/test/ref/irq-hardware-stack.sym +++ b/src/test/ref/irq-hardware-stack.sym @@ -14,6 +14,6 @@ const nomodify byte PROCPORT_RAM_IO = $35 const nomodify byte* RASTER = (byte*) 53266 const nomodify byte* VIC_CONTROL = (byte*) 53265 const nomodify byte WHITE = 1 -interrupt(HARDWARE_STACK) void irq() +__interrupt(hardware_all) void irq() void main() diff --git a/src/test/ref/irq-hardware.asm b/src/test/ref/irq-hardware.asm index 13b3aa67e..7f7460d43 100644 --- a/src/test/ref/irq-hardware.asm +++ b/src/test/ref/irq-hardware.asm @@ -39,11 +39,11 @@ irq: { sta IRQ_STATUS // } rega: - lda #00 + lda #0 regx: - ldx #00 + ldx #0 regy: - ldy #00 + ldy #0 rti } // RAM in $A000, $E000 CHAR ROM in $D000 diff --git a/src/test/ref/irq-hardware.cfg b/src/test/ref/irq-hardware.cfg index 8cd974ab5..a8578eac9 100644 --- a/src/test/ref/irq-hardware.cfg +++ b/src/test/ref/irq-hardware.cfg @@ -1,5 +1,5 @@ -interrupt(HARDWARE_ALL) void irq() +__interrupt(hardware_all) void irq() irq: scope:[irq] from [0] *BG_COLOR = WHITE [1] *BG_COLOR = BLACK diff --git a/src/test/ref/irq-hardware.log b/src/test/ref/irq-hardware.log index cb40b9dee..155423c75 100644 --- a/src/test/ref/irq-hardware.log +++ b/src/test/ref/irq-hardware.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(HARDWARE_ALL) void irq() +Resolved forward reference irq to __interrupt(hardware_all) void irq() CONTROL FLOW GRAPH SSA @@ -24,7 +24,7 @@ main::@return: scope:[main] from main::@1 return to:@return -interrupt(HARDWARE_ALL) void irq() +__interrupt(hardware_all) void irq() irq: scope:[irq] from *BG_COLOR = WHITE *BG_COLOR = BLACK @@ -62,7 +62,7 @@ const nomodify byte* RASTER = (byte*)$d012 const nomodify byte* VIC_CONTROL = (byte*)$d011 const nomodify byte WHITE = 1 void __start() -interrupt(HARDWARE_ALL) void irq() +__interrupt(hardware_all) void irq() void main() Adding number conversion cast (unumber) $80 in *VIC_CONTROL = *VIC_CONTROL | $80 @@ -105,7 +105,7 @@ Renumbering block main::@2 to main::@1 FINAL CONTROL FLOW GRAPH -interrupt(HARDWARE_ALL) void irq() +__interrupt(hardware_all) void irq() irq: scope:[irq] from [0] *BG_COLOR = WHITE [1] *BG_COLOR = BLACK @@ -133,7 +133,7 @@ main::@1: scope:[main] from main main::@1 VARIABLE REGISTER WEIGHTS -interrupt(HARDWARE_ALL) void irq() +__interrupt(hardware_all) void irq() void main() Initial phi equivalence classes @@ -156,9 +156,9 @@ Uplift Scope [main] Uplift Scope [irq] Uplift Scope [] -Uplifting [main] best 302 combination -Uplifting [irq] best 302 combination -Uplifting [] best 302 combination +Uplifting [main] best 410 combination +Uplifting [irq] best 410 combination +Uplifting [] best 410 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -191,7 +191,7 @@ ASSEMBLER BEFORE OPTIMIZATION // irq // Interrupt Routine irq: { - // entry interrupt(HARDWARE_ALL) + // interrupt(isr_hardware_all_entry) -- isr_hardware_all_entry sta rega+1 stx regx+1 sty regy+1 @@ -208,13 +208,14 @@ irq: { jmp __breturn // irq::@return __breturn: - // [3] return - exit interrupt(HARDWARE_ALL) + // [3] return + // interrupt(isr_hardware_all_exit) -- isr_hardware_all_exit rega: - lda #00 + lda #0 regx: - ldx #00 + ldx #0 regy: - ldy #00 + ldy #0 rti } // main @@ -286,13 +287,13 @@ const nomodify byte PROCPORT_RAM_IO = $35 const nomodify byte* RASTER = (byte*) 53266 const nomodify byte* VIC_CONTROL = (byte*) 53265 const nomodify byte WHITE = 1 -interrupt(HARDWARE_ALL) void irq() +__interrupt(hardware_all) void irq() void main() FINAL ASSEMBLER -Score: 296 +Score: 404 // File Comments // A minimal working raster IRQ @@ -324,7 +325,7 @@ Score: 296 // irq // Interrupt Routine irq: { - // entry interrupt(HARDWARE_ALL) + // interrupt(isr_hardware_all_entry) -- isr_hardware_all_entry sta rega+1 stx regx+1 sty regy+1 @@ -343,13 +344,14 @@ irq: { sta IRQ_STATUS // irq::@return // } - // [3] return - exit interrupt(HARDWARE_ALL) + // [3] return + // interrupt(isr_hardware_all_exit) -- isr_hardware_all_exit rega: - lda #00 + lda #0 regx: - ldx #00 + ldx #0 regy: - ldy #00 + ldy #0 rti } // main diff --git a/src/test/ref/irq-hardware.sym b/src/test/ref/irq-hardware.sym index 0a66adef5..ce59ba768 100644 --- a/src/test/ref/irq-hardware.sym +++ b/src/test/ref/irq-hardware.sym @@ -14,6 +14,6 @@ const nomodify byte PROCPORT_RAM_IO = $35 const nomodify byte* RASTER = (byte*) 53266 const nomodify byte* VIC_CONTROL = (byte*) 53265 const nomodify byte WHITE = 1 -interrupt(HARDWARE_ALL) void irq() +__interrupt(hardware_all) void irq() void main() diff --git a/src/test/ref/irq-idx-problem.cfg b/src/test/ref/irq-idx-problem.cfg index 2ffbea696..e1005685f 100644 --- a/src/test/ref/irq-idx-problem.cfg +++ b/src/test/ref/irq-idx-problem.cfg @@ -14,7 +14,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(KERNEL_MIN) void table_driven_irq() +__interrupt(rom_min_c64) void table_driven_irq() table_driven_irq: scope:[table_driven_irq] from [5] phi() to:table_driven_irq::@1 diff --git a/src/test/ref/irq-idx-problem.log b/src/test/ref/irq-idx-problem.log index 4f4e87363..d1324b21a 100644 --- a/src/test/ref/irq-idx-problem.log +++ b/src/test/ref/irq-idx-problem.log @@ -1,4 +1,4 @@ -Resolved forward reference table_driven_irq to interrupt(KERNEL_MIN) void table_driven_irq() +Resolved forward reference table_driven_irq to __interrupt(rom_min_c64) void table_driven_irq() Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx Inlined call call __init @@ -19,7 +19,7 @@ main::@return: scope:[main] from main return to:@return -interrupt(KERNEL_MIN) void table_driven_irq() +__interrupt(rom_min_c64) void table_driven_irq() table_driven_irq: scope:[table_driven_irq] from to:table_driven_irq::@1 table_driven_irq::@1: scope:[table_driven_irq] from table_driven_irq table_driven_irq::@4 @@ -99,7 +99,7 @@ const nomodify byte VIC_SIZE = $30 void __start() volatile byte irq_idx loadstore void main() -interrupt(KERNEL_MIN) void table_driven_irq() +__interrupt(rom_min_c64) void table_driven_irq() bool~ table_driven_irq::$0 bool~ table_driven_irq::$1 bool~ table_driven_irq::$2 @@ -214,7 +214,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(KERNEL_MIN) void table_driven_irq() +__interrupt(rom_min_c64) void table_driven_irq() table_driven_irq: scope:[table_driven_irq] from [5] phi() to:table_driven_irq::@1 @@ -265,7 +265,7 @@ VARIABLE REGISTER WEIGHTS void __start() volatile byte irq_idx loadstore 6.0 void main() -interrupt(KERNEL_MIN) void table_driven_irq() +__interrupt(rom_min_c64) void table_driven_irq() byte table_driven_irq::idx byte table_driven_irq::idx#0 11.0 byte table_driven_irq::val @@ -324,15 +324,15 @@ Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [__start] -Uplifting [table_driven_irq] best 768 combination reg byte a [ table_driven_irq::idx#0 ] reg byte x [ table_driven_irq::val#0 ] -Uplifting [] best 768 combination zp[1]:2 [ irq_idx ] -Uplifting [MOS6526_CIA] best 768 combination -Uplifting [MOS6569_VICII] best 768 combination -Uplifting [MOS6581_SID] best 768 combination -Uplifting [main] best 768 combination -Uplifting [__start] best 768 combination +Uplifting [table_driven_irq] best 795 combination reg byte a [ table_driven_irq::idx#0 ] reg byte x [ table_driven_irq::val#0 ] +Uplifting [] best 795 combination zp[1]:2 [ irq_idx ] +Uplifting [MOS6526_CIA] best 795 combination +Uplifting [MOS6569_VICII] best 795 combination +Uplifting [MOS6581_SID] best 795 combination +Uplifting [main] best 795 combination +Uplifting [__start] best 795 combination Attempting to uplift remaining variables inzp[1]:2 [ irq_idx ] -Uplifting [] best 768 combination zp[1]:2 [ irq_idx ] +Uplifting [] best 795 combination zp[1]:2 [ irq_idx ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -388,7 +388,7 @@ __start: { } // table_driven_irq table_driven_irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry jmp __b1 // table_driven_irq::@1 __b1: @@ -431,7 +431,8 @@ table_driven_irq: { jmp __breturn // table_driven_irq::@return __breturn: - // [15] return - exit interrupt(KERNEL_MIN) + // [15] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 // table_driven_irq::@3 __b3: @@ -539,7 +540,7 @@ const nomodify byte VIC_SIZE = $30 void __start() volatile byte irq_idx loadstore zp[1]:2 6.0 void main() -interrupt(KERNEL_MIN) void table_driven_irq() +__interrupt(rom_min_c64) void table_driven_irq() byte table_driven_irq::idx byte table_driven_irq::idx#0 reg byte a 11.0 byte table_driven_irq::val @@ -551,7 +552,7 @@ reg byte x [ table_driven_irq::val#0 ] FINAL ASSEMBLER -Score: 604 +Score: 631 // File Comments // Test interrupt routine using a variable between calls (irq_idx) @@ -600,7 +601,7 @@ __start: { } // table_driven_irq table_driven_irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // table_driven_irq::@1 __b1: // idx = IRQ_CHANGE_IDX[irq_idx] @@ -645,7 +646,8 @@ table_driven_irq: { sta.z irq_idx // table_driven_irq::@return // } - // [15] return - exit interrupt(KERNEL_MIN) + // [15] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 // table_driven_irq::@3 __b3: diff --git a/src/test/ref/irq-idx-problem.sym b/src/test/ref/irq-idx-problem.sym index 6d626e851..5a8b7d594 100644 --- a/src/test/ref/irq-idx-problem.sym +++ b/src/test/ref/irq-idx-problem.sym @@ -16,7 +16,7 @@ const nomodify byte VIC_SIZE = $30 void __start() volatile byte irq_idx loadstore zp[1]:2 6.0 void main() -interrupt(KERNEL_MIN) void table_driven_irq() +__interrupt(rom_min_c64) void table_driven_irq() byte table_driven_irq::idx byte table_driven_irq::idx#0 reg byte a 11.0 byte table_driven_irq::val diff --git a/src/test/ref/irq-kernel-minimal.cfg b/src/test/ref/irq-kernel-minimal.cfg index f6ae2537a..5a0324dca 100644 --- a/src/test/ref/irq-kernel-minimal.cfg +++ b/src/test/ref/irq-kernel-minimal.cfg @@ -1,5 +1,5 @@ -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() irq: scope:[irq] from [0] *BG_COLOR = WHITE [1] *BG_COLOR = BLACK diff --git a/src/test/ref/irq-kernel-minimal.log b/src/test/ref/irq-kernel-minimal.log index 01c11543f..45446b602 100644 --- a/src/test/ref/irq-kernel-minimal.log +++ b/src/test/ref/irq-kernel-minimal.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(KERNEL_KEYBOARD) void irq() +Resolved forward reference irq to __interrupt(rom_sys_c64) void irq() Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -13,7 +13,7 @@ main::@return: scope:[main] from main return to:@return -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() irq: scope:[irq] from *BG_COLOR = WHITE *BG_COLOR = BLACK @@ -38,7 +38,7 @@ const nomodify byte BLACK = 0 const nomodify void()** KERNEL_IRQ = (void()**)$314 const nomodify byte WHITE = 1 void __start() -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() void main() Simplifying constant pointer cast (byte*) 53281 @@ -56,7 +56,7 @@ Coalesced down to 0 phi equivalence classes FINAL CONTROL FLOW GRAPH -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() irq: scope:[irq] from [0] *BG_COLOR = WHITE [1] *BG_COLOR = BLACK @@ -77,7 +77,7 @@ main::@return: scope:[main] from main VARIABLE REGISTER WEIGHTS -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() void main() Initial phi equivalence classes @@ -95,12 +95,12 @@ Uplift Scope [main] Uplift Scope [irq] Uplift Scope [] -Uplifting [MOS6526_CIA] best 43 combination -Uplifting [MOS6569_VICII] best 43 combination -Uplifting [MOS6581_SID] best 43 combination -Uplifting [main] best 43 combination -Uplifting [irq] best 43 combination -Uplifting [] best 43 combination +Uplifting [MOS6526_CIA] best 70 combination +Uplifting [MOS6569_VICII] best 70 combination +Uplifting [MOS6581_SID] best 70 combination +Uplifting [main] best 70 combination +Uplifting [irq] best 70 combination +Uplifting [] best 70 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -119,7 +119,7 @@ ASSEMBLER BEFORE OPTIMIZATION // irq // The Interrupt Handler irq: { - // entry interrupt(KERNEL_KEYBOARD) + // interrupt(isr_rom_sys_c64_entry) -- isr_rom_sys_c64_entry // [0] *BG_COLOR = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE sta BG_COLOR @@ -129,7 +129,8 @@ irq: { jmp __breturn // irq::@return __breturn: - // [2] return - exit interrupt(KERNEL_KEYBOARD) + // [2] return + // interrupt(isr_rom_sys_c64_exit) -- isr_rom_sys_c64_exit jmp $ea31 } // main @@ -165,13 +166,13 @@ const nomodify byte* BG_COLOR = (byte*) 53281 const nomodify byte BLACK = 0 const nomodify void()** KERNEL_IRQ = (void()**) 788 const nomodify byte WHITE = 1 -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() void main() FINAL ASSEMBLER -Score: 37 +Score: 64 // File Comments // A minimal working IRQ @@ -189,7 +190,7 @@ Score: 37 // irq // The Interrupt Handler irq: { - // entry interrupt(KERNEL_KEYBOARD) + // interrupt(isr_rom_sys_c64_entry) -- isr_rom_sys_c64_entry // *BG_COLOR = WHITE // [0] *BG_COLOR = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE @@ -200,7 +201,8 @@ irq: { sta BG_COLOR // irq::@return // } - // [2] return - exit interrupt(KERNEL_KEYBOARD) + // [2] return + // interrupt(isr_rom_sys_c64_exit) -- isr_rom_sys_c64_exit jmp $ea31 } // main diff --git a/src/test/ref/irq-kernel-minimal.sym b/src/test/ref/irq-kernel-minimal.sym index 5341a17fc..127c1bc6a 100644 --- a/src/test/ref/irq-kernel-minimal.sym +++ b/src/test/ref/irq-kernel-minimal.sym @@ -2,6 +2,6 @@ const nomodify byte* BG_COLOR = (byte*) 53281 const nomodify byte BLACK = 0 const nomodify void()** KERNEL_IRQ = (void()**) 788 const nomodify byte WHITE = 1 -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() void main() diff --git a/src/test/ref/irq-kernel.cfg b/src/test/ref/irq-kernel.cfg index 5c183ae6e..b32bf3d17 100644 --- a/src/test/ref/irq-kernel.cfg +++ b/src/test/ref/irq-kernel.cfg @@ -1,5 +1,5 @@ -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() irq: scope:[irq] from [0] *BG_COLOR = WHITE [1] *BG_COLOR = BLACK diff --git a/src/test/ref/irq-kernel.log b/src/test/ref/irq-kernel.log index 0c1bbde43..0d2e8e9b9 100644 --- a/src/test/ref/irq-kernel.log +++ b/src/test/ref/irq-kernel.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(KERNEL_KEYBOARD) void irq() +Resolved forward reference irq to __interrupt(rom_sys_c64) void irq() CONTROL FLOW GRAPH SSA @@ -16,7 +16,7 @@ main::@return: scope:[main] from main return to:@return -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() irq: scope:[irq] from *BG_COLOR = WHITE *BG_COLOR = BLACK @@ -49,7 +49,7 @@ const nomodify byte* RASTER = (byte*)$d012 const nomodify byte* VIC_CONTROL = (byte*)$d011 const nomodify byte WHITE = 1 void __start() -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() void main() Adding number conversion cast (unumber) $80 in *VIC_CONTROL = *VIC_CONTROL | $80 @@ -82,7 +82,7 @@ Coalesced down to 0 phi equivalence classes FINAL CONTROL FLOW GRAPH -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() irq: scope:[irq] from [0] *BG_COLOR = WHITE [1] *BG_COLOR = BLACK @@ -108,7 +108,7 @@ main::@return: scope:[main] from main VARIABLE REGISTER WEIGHTS -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() void main() Initial phi equivalence classes @@ -128,9 +128,9 @@ Uplift Scope [main] Uplift Scope [irq] Uplift Scope [] -Uplifting [main] best 77 combination -Uplifting [irq] best 77 combination -Uplifting [] best 77 combination +Uplifting [main] best 104 combination +Uplifting [irq] best 104 combination +Uplifting [] best 104 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -154,7 +154,7 @@ ASSEMBLER BEFORE OPTIMIZATION // irq // Interrupt Routine irq: { - // entry interrupt(KERNEL_KEYBOARD) + // interrupt(isr_rom_sys_c64_entry) -- isr_rom_sys_c64_entry // [0] *BG_COLOR = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE sta BG_COLOR @@ -168,7 +168,8 @@ irq: { jmp __breturn // irq::@return __breturn: - // [3] return - exit interrupt(KERNEL_KEYBOARD) + // [3] return + // interrupt(isr_rom_sys_c64_exit) -- isr_rom_sys_c64_exit jmp $ea31 } // main @@ -227,13 +228,13 @@ const nomodify void()** KERNEL_IRQ = (void()**) 788 const nomodify byte* RASTER = (byte*) 53266 const nomodify byte* VIC_CONTROL = (byte*) 53265 const nomodify byte WHITE = 1 -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() void main() FINAL ASSEMBLER -Score: 71 +Score: 98 // File Comments // A minimal working raster IRQ @@ -256,7 +257,7 @@ Score: 71 // irq // Interrupt Routine irq: { - // entry interrupt(KERNEL_KEYBOARD) + // interrupt(isr_rom_sys_c64_entry) -- isr_rom_sys_c64_entry // *BG_COLOR = WHITE // [0] *BG_COLOR = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE @@ -272,7 +273,8 @@ irq: { sta IRQ_STATUS // irq::@return // } - // [3] return - exit interrupt(KERNEL_KEYBOARD) + // [3] return + // interrupt(isr_rom_sys_c64_exit) -- isr_rom_sys_c64_exit jmp $ea31 } // main diff --git a/src/test/ref/irq-kernel.sym b/src/test/ref/irq-kernel.sym index 8b93ecfc4..cd90781a5 100644 --- a/src/test/ref/irq-kernel.sym +++ b/src/test/ref/irq-kernel.sym @@ -9,6 +9,6 @@ const nomodify void()** KERNEL_IRQ = (void()**) 788 const nomodify byte* RASTER = (byte*) 53266 const nomodify byte* VIC_CONTROL = (byte*) 53265 const nomodify byte WHITE = 1 -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() void main() diff --git a/src/test/ref/irq-local-var-overlap-problem.cfg b/src/test/ref/irq-local-var-overlap-problem.cfg index 5a37917ad..4391ab38d 100644 --- a/src/test/ref/irq-local-var-overlap-problem.cfg +++ b/src/test/ref/irq-local-var-overlap-problem.cfg @@ -1,5 +1,5 @@ -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from [0] *BG_COLOR = ++ *BG_COLOR to:irq::@1 diff --git a/src/test/ref/irq-local-var-overlap-problem.log b/src/test/ref/irq-local-var-overlap-problem.log index 9999e5ac3..71d6ccdcd 100644 --- a/src/test/ref/irq-local-var-overlap-problem.log +++ b/src/test/ref/irq-local-var-overlap-problem.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(KERNEL_MIN) void irq() +Resolved forward reference irq to __interrupt(rom_min_c64) void irq() CONTROL FLOW GRAPH SSA @@ -61,7 +61,7 @@ main::@return: scope:[main] from main::@1 return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from *BG_COLOR = ++ *BG_COLOR irq::i#0 = 0 @@ -217,7 +217,7 @@ const nomodify void()** KERNEL_IRQ = (void()**)$314 const nomodify byte* RASTER = (byte*)$d012 const nomodify byte* VIC_CONTROL = (byte*)$d011 void __start() -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() byte~ irq::$2 byte~ irq::$3 bool~ irq::$5 @@ -547,7 +547,7 @@ Adding NOP phi() at start of sub_main FINAL CONTROL FLOW GRAPH -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from [0] *BG_COLOR = ++ *BG_COLOR to:irq::@1 @@ -685,7 +685,7 @@ sub_main::@return: scope:[sub_main] from sub_main::@5 VARIABLE REGISTER WEIGHTS -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() byte~ irq::$2 2002.0 byte~ irq::$3 2002.0 byte irq::i @@ -865,31 +865,31 @@ Uplift Scope [main] 21,002.1: zp[1]:7 [ main::k#2 main::k#1 ] 20,002: zp[1]:16 [ Uplift Scope [irq] 2,102.1: zp[1]:4 [ irq::k#2 irq::k#1 ] 2,002: zp[1]:14 [ irq::$2 ] 2,002: zp[1]:15 [ irq::$3 ] 301.88: zp[1]:3 [ irq::j#4 irq::j#1 ] 109.5: zp[1]:2 [ irq::i#7 irq::i#1 ] Uplift Scope [] -Uplifting [sub_main] best 444207693 combination reg byte y [ sub_main::k#2 sub_main::k#1 ] reg byte a [ sub_main::$0 ] reg byte a [ sub_main::$1 ] reg byte x [ sub_main::j#4 sub_main::j#1 ] zp[1]:11 [ sub_main::i#6 sub_main::i#1 ] +Uplifting [sub_main] best 444207720 combination reg byte y [ sub_main::k#2 sub_main::k#1 ] reg byte a [ sub_main::$0 ] reg byte a [ sub_main::$1 ] reg byte x [ sub_main::j#4 sub_main::j#1 ] zp[1]:11 [ sub_main::i#6 sub_main::i#1 ] Limited combination testing to 100 combinations of 432 possible. -Uplifting [sub_irq] best 424307693 combination reg byte y [ sub_irq::k#2 sub_irq::k#1 ] reg byte a [ sub_irq::$0 ] reg byte a [ sub_irq::$1 ] reg byte x [ sub_irq::j#4 sub_irq::j#1 ] zp[1]:8 [ sub_irq::i#6 sub_irq::i#1 ] +Uplifting [sub_irq] best 424307720 combination reg byte y [ sub_irq::k#2 sub_irq::k#1 ] reg byte a [ sub_irq::$0 ] reg byte a [ sub_irq::$1 ] reg byte x [ sub_irq::j#4 sub_irq::j#1 ] zp[1]:8 [ sub_irq::i#6 sub_irq::i#1 ] Limited combination testing to 100 combinations of 432 possible. -Uplifting [main] best 424187693 combination zp[1]:7 [ main::k#2 main::k#1 ] reg byte a [ main::$0 ] reg byte a [ main::$1 ] zp[1]:6 [ main::j#4 main::j#1 ] zp[1]:5 [ main::i#7 main::i#1 ] +Uplifting [main] best 424187720 combination zp[1]:7 [ main::k#2 main::k#1 ] reg byte a [ main::$0 ] reg byte a [ main::$1 ] zp[1]:6 [ main::j#4 main::j#1 ] zp[1]:5 [ main::i#7 main::i#1 ] Limited combination testing to 100 combinations of 432 possible. -Uplifting [irq] best 424175693 combination zp[1]:4 [ irq::k#2 irq::k#1 ] reg byte a [ irq::$2 ] reg byte a [ irq::$3 ] zp[1]:3 [ irq::j#4 irq::j#1 ] zp[1]:2 [ irq::i#7 irq::i#1 ] +Uplifting [irq] best 424175720 combination zp[1]:4 [ irq::k#2 irq::k#1 ] reg byte a [ irq::$2 ] reg byte a [ irq::$3 ] zp[1]:3 [ irq::j#4 irq::j#1 ] zp[1]:2 [ irq::i#7 irq::i#1 ] Limited combination testing to 100 combinations of 432 possible. -Uplifting [] best 424175693 combination +Uplifting [] best 424175720 combination Attempting to uplift remaining variables inzp[1]:11 [ sub_main::i#6 sub_main::i#1 ] -Uplifting [sub_main] best 424175693 combination zp[1]:11 [ sub_main::i#6 sub_main::i#1 ] +Uplifting [sub_main] best 424175720 combination zp[1]:11 [ sub_main::i#6 sub_main::i#1 ] Attempting to uplift remaining variables inzp[1]:8 [ sub_irq::i#6 sub_irq::i#1 ] -Uplifting [sub_irq] best 424175693 combination zp[1]:8 [ sub_irq::i#6 sub_irq::i#1 ] +Uplifting [sub_irq] best 424175720 combination zp[1]:8 [ sub_irq::i#6 sub_irq::i#1 ] Attempting to uplift remaining variables inzp[1]:7 [ main::k#2 main::k#1 ] -Uplifting [main] best 424175693 combination zp[1]:7 [ main::k#2 main::k#1 ] +Uplifting [main] best 424175720 combination zp[1]:7 [ main::k#2 main::k#1 ] Attempting to uplift remaining variables inzp[1]:6 [ main::j#4 main::j#1 ] -Uplifting [main] best 424175693 combination zp[1]:6 [ main::j#4 main::j#1 ] +Uplifting [main] best 424175720 combination zp[1]:6 [ main::j#4 main::j#1 ] Attempting to uplift remaining variables inzp[1]:4 [ irq::k#2 irq::k#1 ] -Uplifting [irq] best 424175693 combination zp[1]:4 [ irq::k#2 irq::k#1 ] +Uplifting [irq] best 424175720 combination zp[1]:4 [ irq::k#2 irq::k#1 ] Attempting to uplift remaining variables inzp[1]:5 [ main::i#7 main::i#1 ] -Uplifting [main] best 424175693 combination zp[1]:5 [ main::i#7 main::i#1 ] +Uplifting [main] best 424175720 combination zp[1]:5 [ main::i#7 main::i#1 ] Attempting to uplift remaining variables inzp[1]:3 [ irq::j#4 irq::j#1 ] -Uplifting [irq] best 424175693 combination zp[1]:3 [ irq::j#4 irq::j#1 ] +Uplifting [irq] best 424175720 combination zp[1]:3 [ irq::j#4 irq::j#1 ] Attempting to uplift remaining variables inzp[1]:2 [ irq::i#7 irq::i#1 ] -Uplifting [irq] best 424175693 combination zp[1]:2 [ irq::i#7 irq::i#1 ] +Uplifting [irq] best 424175720 combination zp[1]:2 [ irq::i#7 irq::i#1 ] Allocated (was zp[1]:11) zp[1]:9 [ sub_main::i#6 sub_main::i#1 ] ASSEMBLER BEFORE OPTIMIZATION @@ -915,7 +915,7 @@ irq: { .label k = 4 .label j = 3 .label i = 2 - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // [0] *BG_COLOR = ++ *BG_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BG_COLOR // [1] phi from irq to irq::@1 [phi:irq->irq::@1] @@ -1005,7 +1005,8 @@ irq: { jmp __breturn // irq::@return __breturn: - // [16] return - exit interrupt(KERNEL_MIN) + // [16] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main @@ -1396,7 +1397,7 @@ const nomodify byte* IRQ_STATUS = (byte*) 53273 const nomodify void()** KERNEL_IRQ = (void()**) 788 const nomodify byte* RASTER = (byte*) 53266 const nomodify byte* VIC_CONTROL = (byte*) 53265 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() byte~ irq::$2 reg byte a 2002.0 byte~ irq::$3 reg byte a 2002.0 byte irq::i @@ -1468,7 +1469,7 @@ reg byte a [ sub_main::$1 ] FINAL ASSEMBLER -Score: 314173644 +Score: 314173671 // File Comments // Illustrates a problem where local variables inside an IRQ are assigned the same zeropage as a variable outside the IRQ @@ -1492,7 +1493,7 @@ irq: { .label k = 4 .label j = 3 .label i = 2 - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // (*BG_COLOR)++; // [0] *BG_COLOR = ++ *BG_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BG_COLOR @@ -1568,7 +1569,8 @@ irq: { dec BG_COLOR // irq::@return // } - // [16] return - exit interrupt(KERNEL_MIN) + // [16] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main diff --git a/src/test/ref/irq-local-var-overlap-problem.sym b/src/test/ref/irq-local-var-overlap-problem.sym index 4d01c74f5..e9d61c0ed 100644 --- a/src/test/ref/irq-local-var-overlap-problem.sym +++ b/src/test/ref/irq-local-var-overlap-problem.sym @@ -8,7 +8,7 @@ const nomodify byte* IRQ_STATUS = (byte*) 53273 const nomodify void()** KERNEL_IRQ = (void()**) 788 const nomodify byte* RASTER = (byte*) 53266 const nomodify byte* VIC_CONTROL = (byte*) 53265 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() byte~ irq::$2 reg byte a 2002.0 byte~ irq::$3 reg byte a 2002.0 byte irq::i diff --git a/src/test/ref/irq-pragma.asm b/src/test/ref/irq-pragma.asm new file mode 100644 index 000000000..45ee35b42 --- /dev/null +++ b/src/test/ref/irq-pragma.asm @@ -0,0 +1,32 @@ +// A minimal working IRQ with #pragma defining the type +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + // The vector used when the KERNAL serves IRQ interrupts + .label KERNEL_IRQ = $314 + .label BG_COLOR = $d021 +// The Interrupt Handler +irq: { + // *BG_COLOR = 1 + lda #1 + sta BG_COLOR + // *BG_COLOR = 0 + lda #0 + sta BG_COLOR + // } + jmp $ea31 +} +// Setup the IRQ routine +main: { + // asm + sei + // *KERNEL_IRQ = &irq + lda #irq + sta KERNEL_IRQ+1 + // asm + cli + // } + rts +} diff --git a/src/test/ref/irq-pragma.cfg b/src/test/ref/irq-pragma.cfg new file mode 100644 index 000000000..273a58107 --- /dev/null +++ b/src/test/ref/irq-pragma.cfg @@ -0,0 +1,19 @@ + +__interrupt(rom_sys_c64) void irq() +irq: scope:[irq] from + [0] *BG_COLOR = 1 + [1] *BG_COLOR = 0 + to:irq::@return +irq::@return: scope:[irq] from irq + [2] return + to:@return + +void main() +main: scope:[main] from + asm { sei } + [4] *KERNEL_IRQ = &irq + asm { cli } + to:main::@return +main::@return: scope:[main] from main + [6] return + to:@return diff --git a/src/test/ref/irq-pragma.log b/src/test/ref/irq-pragma.log new file mode 100644 index 000000000..b9a27afda --- /dev/null +++ b/src/test/ref/irq-pragma.log @@ -0,0 +1,223 @@ +Resolved forward reference irq to __interrupt(rom_sys_c64) void irq() + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + asm { sei } + *KERNEL_IRQ = &irq + asm { cli } + to:main::@return +main::@return: scope:[main] from main + return + to:@return + +__interrupt(rom_sys_c64) void irq() +irq: scope:[irq] from + *BG_COLOR = 1 + *BG_COLOR = 0 + to:irq::@return +irq::@return: scope:[irq] from irq + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +const nomodify byte* BG_COLOR = (byte*)$d021 +const nomodify void()** KERNEL_IRQ = (void()**)$314 +void __start() +__interrupt(rom_sys_c64) void irq() +void main() + +Adding number conversion cast (unumber) 1 in *BG_COLOR = 1 +Adding number conversion cast (unumber) 0 in *BG_COLOR = 0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast *BG_COLOR = (unumber)1 +Inlining cast *BG_COLOR = (unumber)0 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (void()**) 788 +Simplifying constant pointer cast (byte*) 53281 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +CALL GRAPH + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes + +FINAL CONTROL FLOW GRAPH + +__interrupt(rom_sys_c64) void irq() +irq: scope:[irq] from + [0] *BG_COLOR = 1 + [1] *BG_COLOR = 0 + to:irq::@return +irq::@return: scope:[irq] from irq + [2] return + to:@return + +void main() +main: scope:[main] from + asm { sei } + [4] *KERNEL_IRQ = &irq + asm { cli } + to:main::@return +main::@return: scope:[main] from main + [6] return + to:@return + + +VARIABLE REGISTER WEIGHTS +__interrupt(rom_sys_c64) void irq() +void main() + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] *BG_COLOR = 1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] *BG_COLOR = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [4] *KERNEL_IRQ = &irq [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [irq] +Uplift Scope [] + +Uplifting [main] best 70 combination +Uplifting [irq] best 70 combination +Uplifting [] best 70 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// A minimal working IRQ with #pragma defining the type + // Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + // Global Constants & labels + // The vector used when the KERNAL serves IRQ interrupts + .label KERNEL_IRQ = $314 + .label BG_COLOR = $d021 + // irq +// The Interrupt Handler +irq: { + // interrupt(isr_rom_sys_c64_entry) -- isr_rom_sys_c64_entry + // [0] *BG_COLOR = 1 -- _deref_pbuc1=vbuc2 + lda #1 + sta BG_COLOR + // [1] *BG_COLOR = 0 -- _deref_pbuc1=vbuc2 + lda #0 + sta BG_COLOR + jmp __breturn + // irq::@return + __breturn: + // [2] return + // interrupt(isr_rom_sys_c64_exit) -- isr_rom_sys_c64_exit + jmp $ea31 +} + // main +// Setup the IRQ routine +main: { + // asm { sei } + sei + // [4] *KERNEL_IRQ = &irq -- _deref_qprc1=pprc2 + lda #irq + sta KERNEL_IRQ+1 + // asm { cli } + cli + jmp __breturn + // main::@return + __breturn: + // [6] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +const nomodify byte* BG_COLOR = (byte*) 53281 +const nomodify void()** KERNEL_IRQ = (void()**) 788 +__interrupt(rom_sys_c64) void irq() +void main() + + + +FINAL ASSEMBLER +Score: 64 + + // File Comments +// A minimal working IRQ with #pragma defining the type + // Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + // Global Constants & labels + // The vector used when the KERNAL serves IRQ interrupts + .label KERNEL_IRQ = $314 + .label BG_COLOR = $d021 + // irq +// The Interrupt Handler +irq: { + // interrupt(isr_rom_sys_c64_entry) -- isr_rom_sys_c64_entry + // *BG_COLOR = 1 + // [0] *BG_COLOR = 1 -- _deref_pbuc1=vbuc2 + lda #1 + sta BG_COLOR + // *BG_COLOR = 0 + // [1] *BG_COLOR = 0 -- _deref_pbuc1=vbuc2 + lda #0 + sta BG_COLOR + // irq::@return + // } + // [2] return + // interrupt(isr_rom_sys_c64_exit) -- isr_rom_sys_c64_exit + jmp $ea31 +} + // main +// Setup the IRQ routine +main: { + // asm + // asm { sei } + sei + // *KERNEL_IRQ = &irq + // [4] *KERNEL_IRQ = &irq -- _deref_qprc1=pprc2 + lda #irq + sta KERNEL_IRQ+1 + // asm + // asm { cli } + cli + // main::@return + // } + // [6] return + rts +} + // File Data + diff --git a/src/test/ref/irq-pragma.sym b/src/test/ref/irq-pragma.sym new file mode 100644 index 000000000..60e181ab6 --- /dev/null +++ b/src/test/ref/irq-pragma.sym @@ -0,0 +1,5 @@ +const nomodify byte* BG_COLOR = (byte*) 53281 +const nomodify void()** KERNEL_IRQ = (void()**) 788 +__interrupt(rom_sys_c64) void irq() +void main() + diff --git a/src/test/ref/irq-raster.cfg b/src/test/ref/irq-raster.cfg index e48962ffa..68517c0f9 100644 --- a/src/test/ref/irq-raster.cfg +++ b/src/test/ref/irq-raster.cfg @@ -1,5 +1,5 @@ -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from [0] *BG_COLOR = WHITE [1] *BG_COLOR = BLACK diff --git a/src/test/ref/irq-raster.log b/src/test/ref/irq-raster.log index 6046aafdd..6d2bfff9a 100644 --- a/src/test/ref/irq-raster.log +++ b/src/test/ref/irq-raster.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(KERNEL_MIN) void irq() +Resolved forward reference irq to __interrupt(rom_min_c64) void irq() CONTROL FLOW GRAPH SSA @@ -16,7 +16,7 @@ main::@return: scope:[main] from main return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from *BG_COLOR = WHITE *BG_COLOR = BLACK @@ -49,7 +49,7 @@ const nomodify byte* RASTER = (byte*)$d012 const nomodify byte* VIC_CONTROL = (byte*)$d011 const nomodify byte WHITE = 1 void __start() -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() Adding number conversion cast (unumber) $80 in *VIC_CONTROL = *VIC_CONTROL | $80 @@ -82,7 +82,7 @@ Coalesced down to 0 phi equivalence classes FINAL CONTROL FLOW GRAPH -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from [0] *BG_COLOR = WHITE [1] *BG_COLOR = BLACK @@ -108,7 +108,7 @@ main::@return: scope:[main] from main VARIABLE REGISTER WEIGHTS -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() Initial phi equivalence classes @@ -128,9 +128,9 @@ Uplift Scope [main] Uplift Scope [irq] Uplift Scope [] -Uplifting [main] best 77 combination -Uplifting [irq] best 77 combination -Uplifting [] best 77 combination +Uplifting [main] best 104 combination +Uplifting [irq] best 104 combination +Uplifting [] best 104 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -154,7 +154,7 @@ ASSEMBLER BEFORE OPTIMIZATION // irq // Interrupt Routine irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // [0] *BG_COLOR = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE sta BG_COLOR @@ -168,7 +168,8 @@ irq: { jmp __breturn // irq::@return __breturn: - // [3] return - exit interrupt(KERNEL_MIN) + // [3] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main @@ -227,13 +228,13 @@ const nomodify void()** KERNEL_IRQ = (void()**) 788 const nomodify byte* RASTER = (byte*) 53266 const nomodify byte* VIC_CONTROL = (byte*) 53265 const nomodify byte WHITE = 1 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() FINAL ASSEMBLER -Score: 71 +Score: 98 // File Comments // A minimal working raster IRQ @@ -256,7 +257,7 @@ Score: 71 // irq // Interrupt Routine irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // *BG_COLOR = WHITE // [0] *BG_COLOR = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE @@ -272,7 +273,8 @@ irq: { sta IRQ_STATUS // irq::@return // } - // [3] return - exit interrupt(KERNEL_MIN) + // [3] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main diff --git a/src/test/ref/irq-raster.sym b/src/test/ref/irq-raster.sym index b9a1b086a..4a52e215c 100644 --- a/src/test/ref/irq-raster.sym +++ b/src/test/ref/irq-raster.sym @@ -9,6 +9,6 @@ const nomodify void()** KERNEL_IRQ = (void()**) 788 const nomodify byte* RASTER = (byte*) 53266 const nomodify byte* VIC_CONTROL = (byte*) 53265 const nomodify byte WHITE = 1 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() diff --git a/src/test/ref/irq-volatile-bool-problem.cfg b/src/test/ref/irq-volatile-bool-problem.cfg index 6a1bebfeb..5759df878 100644 --- a/src/test/ref/irq-volatile-bool-problem.cfg +++ b/src/test/ref/irq-volatile-bool-problem.cfg @@ -1,5 +1,5 @@ -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from [0] *BG_COLOR = ++ *BG_COLOR [1] *IRQ_STATUS = IRQ_RASTER diff --git a/src/test/ref/irq-volatile-bool-problem.log b/src/test/ref/irq-volatile-bool-problem.log index b1e303c9c..a0ed6a8db 100644 --- a/src/test/ref/irq-volatile-bool-problem.log +++ b/src/test/ref/irq-volatile-bool-problem.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(KERNEL_MIN) void irq() +Resolved forward reference irq to __interrupt(rom_min_c64) void irq() Resolved forward reference framedone to framedone Inlined call call __init @@ -28,7 +28,7 @@ main::@return: scope:[main] from main::@1 return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from *BG_COLOR = ++ *BG_COLOR *IRQ_STATUS = IRQ_RASTER @@ -70,7 +70,7 @@ const nomodify void()** KERNEL_IRQ = (void()**)$314 const nomodify byte* RASTER = (byte*)$d012 const nomodify byte* VIC_CONTROL = (byte*)$d011 void __start() -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() bool~ irq::$1 bool~ irq::$2 void main() @@ -142,7 +142,7 @@ Adding NOP phi() at start of main::@2 FINAL CONTROL FLOW GRAPH -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from [0] *BG_COLOR = ++ *BG_COLOR [1] *IRQ_STATUS = IRQ_RASTER @@ -177,7 +177,7 @@ main::@2: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() Initial phi equivalence classes @@ -197,9 +197,9 @@ Uplift Scope [main] Uplift Scope [irq] Uplift Scope [] -Uplifting [main] best 1022 combination -Uplifting [irq] best 1022 combination -Uplifting [] best 1022 combination +Uplifting [main] best 1049 combination +Uplifting [irq] best 1049 combination +Uplifting [] best 1049 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -221,7 +221,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label CIA1_INTERRUPT = $dc0d // irq irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // [0] *BG_COLOR = ++ *BG_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BG_COLOR // [1] *IRQ_STATUS = IRQ_RASTER -- _deref_pbuc1=vbuc2 @@ -244,7 +244,8 @@ irq: { jmp __breturn // irq::@return __breturn: - // [5] return - exit interrupt(KERNEL_MIN) + // [5] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main @@ -320,13 +321,13 @@ const nomodify byte* IRQ_STATUS = (byte*) 53273 const nomodify void()** KERNEL_IRQ = (void()**) 788 const nomodify byte* RASTER = (byte*) 53266 const nomodify byte* VIC_CONTROL = (byte*) 53265 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() FINAL ASSEMBLER -Score: 951 +Score: 978 // File Comments // Illustrates a problem where a volatile bool modified at the end of an IRQ is not stored properly @@ -347,7 +348,7 @@ Score: 951 .label CIA1_INTERRUPT = $dc0d // irq irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // (*BG_COLOR)++; // [0] *BG_COLOR = ++ *BG_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BG_COLOR @@ -367,7 +368,8 @@ irq: { dec BG_COLOR // irq::@return // } - // [5] return - exit interrupt(KERNEL_MIN) + // [5] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main diff --git a/src/test/ref/irq-volatile-bool-problem.sym b/src/test/ref/irq-volatile-bool-problem.sym index 0cccfbcda..988a17182 100644 --- a/src/test/ref/irq-volatile-bool-problem.sym +++ b/src/test/ref/irq-volatile-bool-problem.sym @@ -7,6 +7,6 @@ const nomodify byte* IRQ_STATUS = (byte*) 53273 const nomodify void()** KERNEL_IRQ = (void()**) 788 const nomodify byte* RASTER = (byte*) 53266 const nomodify byte* VIC_CONTROL = (byte*) 53265 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() diff --git a/src/test/ref/kickasm-uses-prevent-deletion.cfg b/src/test/ref/kickasm-uses-prevent-deletion.cfg index 5c02901e4..cacd882e9 100644 --- a/src/test/ref/kickasm-uses-prevent-deletion.cfg +++ b/src/test/ref/kickasm-uses-prevent-deletion.cfg @@ -1,5 +1,5 @@ -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() irq: scope:[irq] from [0] *BG_COLOR = WHITE [1] *BG_COLOR = BLACK diff --git a/src/test/ref/kickasm-uses-prevent-deletion.log b/src/test/ref/kickasm-uses-prevent-deletion.log index 023b89e13..0730fd941 100644 --- a/src/test/ref/kickasm-uses-prevent-deletion.log +++ b/src/test/ref/kickasm-uses-prevent-deletion.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(KERNEL_KEYBOARD) void irq() +Resolved forward reference irq to __interrupt(rom_sys_c64) void irq() CONTROL FLOW GRAPH SSA @@ -16,7 +16,7 @@ main::@return: scope:[main] from main return to:@return -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() irq: scope:[irq] from *BG_COLOR = WHITE *BG_COLOR = BLACK @@ -41,7 +41,7 @@ const nomodify byte BLACK = 0 const nomodify void()** KERNEL_IRQ = (void()**)$314 const nomodify byte WHITE = 1 void __start() -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() void main() Simplifying constant pointer cast (void()**) 788 @@ -59,7 +59,7 @@ Coalesced down to 0 phi equivalence classes FINAL CONTROL FLOW GRAPH -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() irq: scope:[irq] from [0] *BG_COLOR = WHITE [1] *BG_COLOR = BLACK @@ -84,7 +84,7 @@ main::@return: scope:[main] from main VARIABLE REGISTER WEIGHTS -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() void main() Initial phi equivalence classes @@ -98,9 +98,9 @@ Uplift Scope [main] Uplift Scope [irq] Uplift Scope [] -Uplifting [main] best 283 combination -Uplifting [irq] best 283 combination -Uplifting [] best 283 combination +Uplifting [main] best 310 combination +Uplifting [irq] best 310 combination +Uplifting [] best 310 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -118,7 +118,7 @@ ASSEMBLER BEFORE OPTIMIZATION // irq // The Interrupt Handler irq: { - // entry interrupt(KERNEL_KEYBOARD) + // interrupt(isr_rom_sys_c64_entry) -- isr_rom_sys_c64_entry // [0] *BG_COLOR = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE sta BG_COLOR @@ -128,7 +128,8 @@ irq: { jmp __breturn // irq::@return __breturn: - // [2] return - exit interrupt(KERNEL_KEYBOARD) + // [2] return + // interrupt(isr_rom_sys_c64_exit) -- isr_rom_sys_c64_exit jmp $ea31 } // main @@ -162,13 +163,13 @@ const nomodify byte* BG_COLOR = (byte*) 53281 const nomodify byte BLACK = 0 const nomodify void()** KERNEL_IRQ = (void()**) 788 const nomodify byte WHITE = 1 -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() void main() FINAL ASSEMBLER -Score: 277 +Score: 304 // File Comments // Ensure that an inline kickasm uses-clause is anough to prevent a function from being deleted @@ -185,7 +186,7 @@ Score: 277 // irq // The Interrupt Handler irq: { - // entry interrupt(KERNEL_KEYBOARD) + // interrupt(isr_rom_sys_c64_entry) -- isr_rom_sys_c64_entry // *BG_COLOR = WHITE // [0] *BG_COLOR = WHITE -- _deref_pbuc1=vbuc2 lda #WHITE @@ -196,7 +197,8 @@ irq: { sta BG_COLOR // irq::@return // } - // [2] return - exit interrupt(KERNEL_KEYBOARD) + // [2] return + // interrupt(isr_rom_sys_c64_exit) -- isr_rom_sys_c64_exit jmp $ea31 } // main diff --git a/src/test/ref/kickasm-uses-prevent-deletion.sym b/src/test/ref/kickasm-uses-prevent-deletion.sym index 5341a17fc..127c1bc6a 100644 --- a/src/test/ref/kickasm-uses-prevent-deletion.sym +++ b/src/test/ref/kickasm-uses-prevent-deletion.sym @@ -2,6 +2,6 @@ const nomodify byte* BG_COLOR = (byte*) 53281 const nomodify byte BLACK = 0 const nomodify void()** KERNEL_IRQ = (void()**) 788 const nomodify byte WHITE = 1 -interrupt(KERNEL_KEYBOARD) void irq() +__interrupt(rom_sys_c64) void irq() void main() diff --git a/src/test/ref/longbranch-interrupt-problem.cfg b/src/test/ref/longbranch-interrupt-problem.cfg index 904a31fe7..a8269d4a7 100644 --- a/src/test/ref/longbranch-interrupt-problem.cfg +++ b/src/test/ref/longbranch-interrupt-problem.cfg @@ -14,7 +14,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from asm { lda$dc0d } [6] *BG_COLOR = col diff --git a/src/test/ref/longbranch-interrupt-problem.log b/src/test/ref/longbranch-interrupt-problem.log index baa65a13f..99527cdeb 100644 --- a/src/test/ref/longbranch-interrupt-problem.log +++ b/src/test/ref/longbranch-interrupt-problem.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(KERNEL_MIN) void irq() +Resolved forward reference irq to __interrupt(rom_min_c64) void irq() Inlined call call __init CONTROL FLOW GRAPH SSA @@ -22,7 +22,7 @@ main::@return: scope:[main] from main::@1 return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from asm { lda$dc0d } *BG_COLOR = col @@ -57,7 +57,7 @@ const nomodify byte* BG_COLOR = (byte*)$d020 const nomodify void()** KERNEL_IRQ = (void()**)$314 void __start() volatile byte col loadstore -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() bool~ irq::$0 bool~ irq::$1 void main() @@ -132,7 +132,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from asm { lda$dc0d } [6] *BG_COLOR = col @@ -160,7 +160,7 @@ main::@2: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS void __start() volatile byte col loadstore 139.0 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() Initial phi equivalence classes @@ -184,12 +184,12 @@ Uplift Scope [main] Uplift Scope [irq] Uplift Scope [__start] -Uplifting [] best 1230 combination zp[1]:2 [ col ] -Uplifting [main] best 1230 combination -Uplifting [irq] best 1230 combination -Uplifting [__start] best 1230 combination +Uplifting [] best 1257 combination zp[1]:2 [ col ] +Uplifting [main] best 1257 combination +Uplifting [irq] best 1257 combination +Uplifting [__start] best 1257 combination Attempting to uplift remaining variables inzp[1]:2 [ col ] -Uplifting [] best 1230 combination zp[1]:2 [ col ] +Uplifting [] best 1257 combination zp[1]:2 [ col ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -225,7 +225,7 @@ __start: { } // irq irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // asm { lda$dc0d } lda $dc0d // [6] *BG_COLOR = col -- _deref_pbuc1=vbuz1 @@ -243,7 +243,8 @@ irq: { jmp __breturn // irq::@return __breturn: - // [9] return - exit interrupt(KERNEL_MIN) + // [9] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main @@ -298,14 +299,14 @@ const nomodify byte* BG_COLOR = (byte*) 53280 const nomodify void()** KERNEL_IRQ = (void()**) 788 void __start() volatile byte col loadstore zp[1]:2 139.0 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() zp[1]:2 [ col ] FINAL ASSEMBLER -Score: 888 +Score: 915 // File Comments // Tests that long branch fixing works with interrupt exits (to $ea81) @@ -334,7 +335,7 @@ __start: { } // irq irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // asm // asm { lda$dc0d } lda $dc0d @@ -355,7 +356,8 @@ irq: { inc.z col // irq::@return // } - // [9] return - exit interrupt(KERNEL_MIN) + // [9] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main diff --git a/src/test/ref/longbranch-interrupt-problem.sym b/src/test/ref/longbranch-interrupt-problem.sym index 2b8bd845b..133257cfc 100644 --- a/src/test/ref/longbranch-interrupt-problem.sym +++ b/src/test/ref/longbranch-interrupt-problem.sym @@ -2,7 +2,7 @@ const nomodify byte* BG_COLOR = (byte*) 53280 const nomodify void()** KERNEL_IRQ = (void()**) 788 void __start() volatile byte col loadstore zp[1]:2 139.0 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() zp[1]:2 [ col ] diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.cfg b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.cfg index 8bf41ead4..d0330f118 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.cfg +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.cfg @@ -19,7 +19,7 @@ __start::@return: scope:[__start] from __start::@1 [9] return to:@return -interrupt(KERNEL_MIN) void plex_irq() +__interrupt(rom_min_c64) void plex_irq() plex_irq: scope:[plex_irq] from asm { sei } [11] *BORDER_COLOR = WHITE diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log index e64b8d4ee..32ac1ec10 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log @@ -1,4 +1,4 @@ -Resolved forward reference plex_irq to interrupt(KERNEL_MIN) void plex_irq() +Resolved forward reference plex_irq to __interrupt(rom_min_c64) void plex_irq() Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx Inlined call call plexSetScreen plexInit::screen Inlined call call plexFreePrepare @@ -212,7 +212,7 @@ init::@return: scope:[init] from init::@4 return to:@return -interrupt(KERNEL_MIN) void plex_irq() +__interrupt(rom_min_c64) void plex_irq() plex_irq: scope:[plex_irq] from asm { sei } *BORDER_COLOR = WHITE @@ -480,7 +480,7 @@ byte plexSort::s#2 byte plexSort::s#3 byte plexSort::s#4 volatile byte plex_free_next loadstore -interrupt(KERNEL_MIN) void plex_irq() +__interrupt(rom_min_c64) void plex_irq() bool~ plex_irq::$0 byte~ plex_irq::$2 bool~ plex_irq::$3 @@ -921,7 +921,7 @@ __start::@return: scope:[__start] from __start::@1 [9] return to:@return -interrupt(KERNEL_MIN) void plex_irq() +__interrupt(rom_min_c64) void plex_irq() plex_irq: scope:[plex_irq] from asm { sei } [11] *BORDER_COLOR = WHITE @@ -1222,7 +1222,7 @@ byte plexSort::s#2 2000002.0 byte plexSort::s#3 2.05000025E7 byte plexSort::s#6 2000002.0 volatile byte plex_free_next loadstore 322.40625 -interrupt(KERNEL_MIN) void plex_irq() +__interrupt(rom_min_c64) void plex_irq() byte~ plex_irq::$4 11.0 byte plex_irq::plexFreeNextYpos1_return byte plex_irq::plexFreeNextYpos1_return#0 4.0 @@ -1575,66 +1575,66 @@ Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [__start] -Uplifting [plexSort] best 60293 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]:37 [ plexSort::s#2 ] zp[1]:10 [ plexSort::m#2 plexSort::m#1 ] zp[1]:36 [ plexSort::nxt_y#0 ] zp[1]:35 [ plexSort::nxt_idx#0 ] +Uplifting [plexSort] best 60320 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]:37 [ plexSort::s#2 ] zp[1]:10 [ plexSort::m#2 plexSort::m#1 ] zp[1]:36 [ plexSort::nxt_y#0 ] zp[1]:35 [ plexSort::nxt_idx#0 ] Limited combination testing to 10 combinations of 972 possible. -Uplifting [loop] best 58363 combination reg byte y [ loop::sy#2 loop::sy#1 ] reg byte x [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] zp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] +Uplifting [loop] best 58390 combination reg byte y [ loop::sy#2 loop::sy#1 ] reg byte x [ loop::y_idx#2 loop::y_idx#3 loop::y_idx#1 ] zp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] Limited combination testing to 10 combinations of 27 possible. -Uplifting [plexInit] best 58243 combination reg byte x [ plexInit::i#2 plexInit::i#1 ] -Uplifting [init] best 57993 combination reg byte x [ init::ss#2 init::ss#1 ] reg byte x [ init::sx#2 init::sx#1 ] zp[1]:34 [ init::$3 ] zp[2]:3 [ init::xp#2 init::xp#1 ] +Uplifting [plexInit] best 58270 combination reg byte x [ plexInit::i#2 plexInit::i#1 ] +Uplifting [init] best 58020 combination reg byte x [ init::ss#2 init::ss#1 ] reg byte x [ init::sx#2 init::sx#1 ] zp[1]:34 [ init::$3 ] zp[2]:3 [ init::xp#2 init::xp#1 ] Limited combination testing to 10 combinations of 36 possible. -Uplifting [] best 57993 combination zp[1]:19 [ framedone ] zp[1]:16 [ plex_sprite_idx ] zp[1]:18 [ plex_free_next ] zp[1]:17 [ plex_sprite_msb ] zp[1]:15 [ plex_show_idx ] zp[2]:13 [ PLEX_SCREEN_PTR ] -Uplifting [plexShowSprite] best 57983 combination reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte x [ plexShowSprite::plexFreeAdd1_$1 ] zp[1]:26 [ plexShowSprite::plexFreeAdd1_$2 ] zp[1]:27 [ plexShowSprite::xpos_idx#0 ] zp[1]:29 [ plexShowSprite::$2 ] zp[1]:30 [ plexShowSprite::$3 ] zp[1]:31 [ plexShowSprite::$9 ] zp[1]:32 [ plexShowSprite::$5 ] zp[1]:33 [ plexShowSprite::$6 ] zp[1]:23 [ plexShowSprite::plexFreeAdd1_ypos#0 ] zp[1]:28 [ plexShowSprite::$11 ] zp[1]:22 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplifting [] best 58020 combination zp[1]:19 [ framedone ] zp[1]:16 [ plex_sprite_idx ] zp[1]:18 [ plex_free_next ] zp[1]:17 [ plex_sprite_msb ] zp[1]:15 [ plex_show_idx ] zp[2]:13 [ PLEX_SCREEN_PTR ] +Uplifting [plexShowSprite] best 58010 combination reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte x [ plexShowSprite::plexFreeAdd1_$1 ] zp[1]:26 [ plexShowSprite::plexFreeAdd1_$2 ] zp[1]:27 [ plexShowSprite::xpos_idx#0 ] zp[1]:29 [ plexShowSprite::$2 ] zp[1]:30 [ plexShowSprite::$3 ] zp[1]:31 [ plexShowSprite::$9 ] zp[1]:32 [ plexShowSprite::$5 ] zp[1]:33 [ plexShowSprite::$6 ] zp[1]:23 [ plexShowSprite::plexFreeAdd1_ypos#0 ] zp[1]:28 [ plexShowSprite::$11 ] zp[1]:22 [ plexShowSprite::plex_sprite_idx2#0 ] Limited combination testing to 10 combinations of 1572864 possible. -Uplifting [plex_irq] best 57920 combination zp[1]:21 [ plex_irq::$4 ] reg byte x [ plex_irq::plexFreeNextYpos1_return#0 ] -Uplifting [MOS6526_CIA] best 57920 combination -Uplifting [MOS6569_VICII] best 57920 combination -Uplifting [MOS6581_SID] best 57920 combination -Uplifting [main] best 57920 combination -Uplifting [__start] best 57920 combination +Uplifting [plex_irq] best 57947 combination zp[1]:21 [ plex_irq::$4 ] reg byte x [ plex_irq::plexFreeNextYpos1_return#0 ] +Uplifting [MOS6526_CIA] best 57947 combination +Uplifting [MOS6569_VICII] best 57947 combination +Uplifting [MOS6581_SID] best 57947 combination +Uplifting [main] best 57947 combination +Uplifting [__start] best 57947 combination Attempting to uplift remaining variables inzp[1]:37 [ plexSort::s#2 ] -Uplifting [plexSort] best 57320 combination reg byte x [ plexSort::s#2 ] +Uplifting [plexSort] best 57347 combination reg byte x [ plexSort::s#2 ] Attempting to uplift remaining variables inzp[1]:10 [ plexSort::m#2 plexSort::m#1 ] -Uplifting [plexSort] best 57320 combination zp[1]:10 [ plexSort::m#2 plexSort::m#1 ] +Uplifting [plexSort] best 57347 combination zp[1]:10 [ plexSort::m#2 plexSort::m#1 ] Attempting to uplift remaining variables inzp[1]:36 [ plexSort::nxt_y#0 ] -Uplifting [plexSort] best 57320 combination zp[1]:36 [ plexSort::nxt_y#0 ] +Uplifting [plexSort] best 57347 combination zp[1]:36 [ plexSort::nxt_y#0 ] Attempting to uplift remaining variables inzp[1]:35 [ plexSort::nxt_idx#0 ] -Uplifting [plexSort] best 57320 combination zp[1]:35 [ plexSort::nxt_idx#0 ] +Uplifting [plexSort] best 57347 combination zp[1]:35 [ plexSort::nxt_idx#0 ] Attempting to uplift remaining variables inzp[1]:34 [ init::$3 ] -Uplifting [init] best 57280 combination reg byte a [ init::$3 ] +Uplifting [init] best 57307 combination reg byte a [ init::$3 ] Attempting to uplift remaining variables inzp[1]:19 [ framedone ] -Uplifting [] best 57280 combination zp[1]:19 [ framedone ] +Uplifting [] best 57307 combination zp[1]:19 [ framedone ] Attempting to uplift remaining variables inzp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] -Uplifting [loop] best 57280 combination zp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] +Uplifting [loop] best 57307 combination zp[1]:6 [ loop::sin_idx#6 loop::sin_idx#1 ] Attempting to uplift remaining variables inzp[1]:16 [ plex_sprite_idx ] -Uplifting [] best 57280 combination zp[1]:16 [ plex_sprite_idx ] +Uplifting [] best 57307 combination zp[1]:16 [ plex_sprite_idx ] Attempting to uplift remaining variables inzp[1]:18 [ plex_free_next ] -Uplifting [] best 57280 combination zp[1]:18 [ plex_free_next ] +Uplifting [] best 57307 combination zp[1]:18 [ plex_free_next ] Attempting to uplift remaining variables inzp[1]:17 [ plex_sprite_msb ] -Uplifting [] best 57280 combination zp[1]:17 [ plex_sprite_msb ] +Uplifting [] best 57307 combination zp[1]:17 [ plex_sprite_msb ] Attempting to uplift remaining variables inzp[1]:15 [ plex_show_idx ] -Uplifting [] best 57280 combination zp[1]:15 [ plex_show_idx ] +Uplifting [] best 57307 combination zp[1]:15 [ plex_show_idx ] Attempting to uplift remaining variables inzp[1]:26 [ plexShowSprite::plexFreeAdd1_$2 ] -Uplifting [plexShowSprite] best 57276 combination reg byte a [ plexShowSprite::plexFreeAdd1_$2 ] +Uplifting [plexShowSprite] best 57303 combination reg byte a [ plexShowSprite::plexFreeAdd1_$2 ] Attempting to uplift remaining variables inzp[1]:27 [ plexShowSprite::xpos_idx#0 ] -Uplifting [plexShowSprite] best 57270 combination reg byte a [ plexShowSprite::xpos_idx#0 ] +Uplifting [plexShowSprite] best 57297 combination reg byte a [ plexShowSprite::xpos_idx#0 ] Attempting to uplift remaining variables inzp[1]:29 [ plexShowSprite::$2 ] -Uplifting [plexShowSprite] best 57264 combination reg byte a [ plexShowSprite::$2 ] +Uplifting [plexShowSprite] best 57291 combination reg byte a [ plexShowSprite::$2 ] Attempting to uplift remaining variables inzp[1]:30 [ plexShowSprite::$3 ] -Uplifting [plexShowSprite] best 57258 combination reg byte a [ plexShowSprite::$3 ] +Uplifting [plexShowSprite] best 57285 combination reg byte a [ plexShowSprite::$3 ] Attempting to uplift remaining variables inzp[1]:31 [ plexShowSprite::$9 ] -Uplifting [plexShowSprite] best 57252 combination reg byte a [ plexShowSprite::$9 ] +Uplifting [plexShowSprite] best 57279 combination reg byte a [ plexShowSprite::$9 ] Attempting to uplift remaining variables inzp[1]:32 [ plexShowSprite::$5 ] -Uplifting [plexShowSprite] best 57246 combination reg byte x [ plexShowSprite::$5 ] +Uplifting [plexShowSprite] best 57273 combination reg byte x [ plexShowSprite::$5 ] Attempting to uplift remaining variables inzp[1]:33 [ plexShowSprite::$6 ] -Uplifting [plexShowSprite] best 57242 combination reg byte a [ plexShowSprite::$6 ] +Uplifting [plexShowSprite] best 57269 combination reg byte a [ plexShowSprite::$6 ] Attempting to uplift remaining variables inzp[1]:23 [ plexShowSprite::plexFreeAdd1_ypos#0 ] -Uplifting [plexShowSprite] best 57233 combination reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] +Uplifting [plexShowSprite] best 57260 combination reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ] Attempting to uplift remaining variables inzp[1]:28 [ plexShowSprite::$11 ] -Uplifting [plexShowSprite] best 57226 combination reg byte x [ plexShowSprite::$11 ] +Uplifting [plexShowSprite] best 57253 combination reg byte x [ plexShowSprite::$11 ] Attempting to uplift remaining variables inzp[1]:22 [ plexShowSprite::plex_sprite_idx2#0 ] -Uplifting [plexShowSprite] best 57226 combination zp[1]:22 [ plexShowSprite::plex_sprite_idx2#0 ] +Uplifting [plexShowSprite] best 57253 combination zp[1]:22 [ plexShowSprite::plex_sprite_idx2#0 ] Attempting to uplift remaining variables inzp[1]:21 [ plex_irq::$4 ] -Uplifting [plex_irq] best 57226 combination zp[1]:21 [ plex_irq::$4 ] +Uplifting [plex_irq] best 57253 combination zp[1]:21 [ plex_irq::$4 ] Allocated (was zp[2]:3) zp[2]:2 [ init::xp#2 init::xp#1 ] Allocated (was zp[1]:6) zp[1]:4 [ loop::sin_idx#6 loop::sin_idx#1 ] Allocated (was zp[1]:10) zp[1]:5 [ plexSort::m#2 plexSort::m#1 ] @@ -1743,7 +1743,7 @@ __start: { // plex_irq plex_irq: { .label __4 = $d - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // asm { sei } sei // [11] *BORDER_COLOR = WHITE -- _deref_pbuc1=vbuc2 @@ -1811,7 +1811,8 @@ plex_irq: { jmp __breturn // plex_irq::@return __breturn: - // [24] return - exit interrupt(KERNEL_MIN) + // [24] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 // plex_irq::@1 __b1: @@ -2558,7 +2559,7 @@ byte plexSort::s#2 reg byte x 2000002.0 byte plexSort::s#3 reg byte x 2.05000025E7 byte plexSort::s#6 reg byte x 2000002.0 volatile byte plex_free_next loadstore zp[1]:11 322.40625 -interrupt(KERNEL_MIN) void plex_irq() +__interrupt(rom_min_c64) void plex_irq() byte~ plex_irq::$4 zp[1]:13 11.0 byte plex_irq::plexFreeNextYpos1_return byte plex_irq::plexFreeNextYpos1_return#0 reg byte x 4.0 @@ -2604,7 +2605,7 @@ reg byte x [ plexSort::s#2 ] FINAL ASSEMBLER -Score: 43627 +Score: 43654 // File Comments // A simple usage of the flexible sprite multiplexer routine @@ -2697,7 +2698,7 @@ __start: { // plex_irq plex_irq: { .label __4 = $d - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // asm // asm { sei } sei @@ -2763,7 +2764,8 @@ plex_irq: { cli // plex_irq::@return // } - // [24] return - exit interrupt(KERNEL_MIN) + // [24] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 // plex_irq::@1 __b1: diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym index 474ceb9c9..5f6501d87 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym @@ -99,7 +99,7 @@ byte plexSort::s#2 reg byte x 2000002.0 byte plexSort::s#3 reg byte x 2.05000025E7 byte plexSort::s#6 reg byte x 2000002.0 volatile byte plex_free_next loadstore zp[1]:11 322.40625 -interrupt(KERNEL_MIN) void plex_irq() +__interrupt(rom_min_c64) void plex_irq() byte~ plex_irq::$4 zp[1]:13 11.0 byte plex_irq::plexFreeNextYpos1_return byte plex_irq::plexFreeNextYpos1_return#0 reg byte x 4.0 diff --git a/src/test/ref/test-interrupt-notype.cfg b/src/test/ref/test-interrupt-notype.cfg index 7a30af490..46e613e42 100644 --- a/src/test/ref/test-interrupt-notype.cfg +++ b/src/test/ref/test-interrupt-notype.cfg @@ -1,5 +1,5 @@ -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from [0] *BG_COLOR = ++ *BG_COLOR asm { lda$dc0d } diff --git a/src/test/ref/test-interrupt-notype.log b/src/test/ref/test-interrupt-notype.log index e23746f3b..b6eccfdbe 100644 --- a/src/test/ref/test-interrupt-notype.log +++ b/src/test/ref/test-interrupt-notype.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(KERNEL_MIN) void irq() +Resolved forward reference irq to __interrupt(rom_min_c64) void irq() CONTROL FLOW GRAPH SSA @@ -16,7 +16,7 @@ main::@return: scope:[main] from main::@1 return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from *BG_COLOR = ++ *BG_COLOR asm { lda$dc0d } @@ -40,7 +40,7 @@ const nomodify byte* BG_COLOR = (byte*)$d020 const nomodify byte* FGCOL = (byte*)$d021 const nomodify void()** KERNEL_IRQ = (void()**)$314 void __start() -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() Simplifying constant pointer cast (void()**) 788 @@ -66,7 +66,7 @@ Renumbering block main::@2 to main::@1 FINAL CONTROL FLOW GRAPH -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from [0] *BG_COLOR = ++ *BG_COLOR asm { lda$dc0d } @@ -85,7 +85,7 @@ main::@1: scope:[main] from main main::@1 VARIABLE REGISTER WEIGHTS -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() Initial phi equivalence classes @@ -99,9 +99,9 @@ Uplift Scope [main] Uplift Scope [irq] Uplift Scope [] -Uplifting [main] best 121 combination -Uplifting [irq] best 121 combination -Uplifting [] best 121 combination +Uplifting [main] best 148 combination +Uplifting [irq] best 148 combination +Uplifting [] best 148 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -115,7 +115,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label FGCOL = $d021 // irq irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // [0] *BG_COLOR = ++ *BG_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BG_COLOR // asm { lda$dc0d } @@ -123,7 +123,8 @@ irq: { jmp __breturn // irq::@return __breturn: - // [2] return - exit interrupt(KERNEL_MIN) + // [2] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main @@ -153,13 +154,13 @@ FINAL SYMBOL TABLE const nomodify byte* BG_COLOR = (byte*) 53280 const nomodify byte* FGCOL = (byte*) 53281 const nomodify void()** KERNEL_IRQ = (void()**) 788 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() FINAL ASSEMBLER -Score: 115 +Score: 142 // File Comments // Upstart @@ -172,7 +173,7 @@ Score: 115 .label FGCOL = $d021 // irq irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // (*BG_COLOR)++; // [0] *BG_COLOR = ++ *BG_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BG_COLOR @@ -181,7 +182,8 @@ irq: { lda $dc0d // irq::@return // } - // [2] return - exit interrupt(KERNEL_MIN) + // [2] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main diff --git a/src/test/ref/test-interrupt-notype.sym b/src/test/ref/test-interrupt-notype.sym index 6a4855657..1cc1f0549 100644 --- a/src/test/ref/test-interrupt-notype.sym +++ b/src/test/ref/test-interrupt-notype.sym @@ -1,6 +1,6 @@ const nomodify byte* BG_COLOR = (byte*) 53280 const nomodify byte* FGCOL = (byte*) 53281 const nomodify void()** KERNEL_IRQ = (void()**) 788 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() diff --git a/src/test/ref/test-interrupt-volatile-write.cfg b/src/test/ref/test-interrupt-volatile-write.cfg index a80dc6463..9f2ab3269 100644 --- a/src/test/ref/test-interrupt-volatile-write.cfg +++ b/src/test/ref/test-interrupt-volatile-write.cfg @@ -14,7 +14,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from asm { lda$dc0d } [6] *BG_COLOR = col diff --git a/src/test/ref/test-interrupt-volatile-write.log b/src/test/ref/test-interrupt-volatile-write.log index 86b655fcf..4806d11f0 100644 --- a/src/test/ref/test-interrupt-volatile-write.log +++ b/src/test/ref/test-interrupt-volatile-write.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(KERNEL_MIN) void irq() +Resolved forward reference irq to __interrupt(rom_min_c64) void irq() Inlined call call __init CONTROL FLOW GRAPH SSA @@ -22,7 +22,7 @@ main::@return: scope:[main] from main::@1 return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from asm { lda$dc0d } *BG_COLOR = col @@ -59,7 +59,7 @@ const nomodify byte* BG_COLOR = (byte*)$d020 const nomodify void()** KERNEL_IRQ = (void()**)$314 void __start() volatile byte col loadstore -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() bool~ irq::$0 void main() bool~ main::$0 @@ -135,7 +135,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from asm { lda$dc0d } [6] *BG_COLOR = col @@ -166,7 +166,7 @@ main::@2: scope:[main] from main::@1 VARIABLE REGISTER WEIGHTS void __start() volatile byte col loadstore 139.5 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() Initial phi equivalence classes @@ -191,12 +191,12 @@ Uplift Scope [main] Uplift Scope [irq] Uplift Scope [__start] -Uplifting [] best 1243 combination zp[1]:2 [ col ] -Uplifting [main] best 1243 combination -Uplifting [irq] best 1243 combination -Uplifting [__start] best 1243 combination +Uplifting [] best 1270 combination zp[1]:2 [ col ] +Uplifting [main] best 1270 combination +Uplifting [irq] best 1270 combination +Uplifting [__start] best 1270 combination Attempting to uplift remaining variables inzp[1]:2 [ col ] -Uplifting [] best 1243 combination zp[1]:2 [ col ] +Uplifting [] best 1270 combination zp[1]:2 [ col ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -233,7 +233,7 @@ __start: { } // irq irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // asm { lda$dc0d } lda $dc0d // [6] *BG_COLOR = col -- _deref_pbuc1=vbuz1 @@ -254,7 +254,8 @@ irq: { jmp __breturn // irq::@return __breturn: - // [9] return - exit interrupt(KERNEL_MIN) + // [9] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 // irq::@1 __b1: @@ -315,14 +316,14 @@ const nomodify byte* BG_COLOR = (byte*) 53280 const nomodify void()** KERNEL_IRQ = (void()**) 788 void __start() volatile byte col loadstore zp[1]:2 139.5 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() zp[1]:2 [ col ] FINAL ASSEMBLER -Score: 895 +Score: 922 // File Comments // Tests that volatile variables can be both read & written inside & outside interrupts @@ -352,7 +353,7 @@ __start: { } // irq irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // asm // asm { lda$dc0d } lda $dc0d @@ -373,7 +374,8 @@ irq: { sta.z col // irq::@return // } - // [9] return - exit interrupt(KERNEL_MIN) + // [9] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 // irq::@1 __b1: diff --git a/src/test/ref/test-interrupt-volatile-write.sym b/src/test/ref/test-interrupt-volatile-write.sym index 40d168524..5702edb63 100644 --- a/src/test/ref/test-interrupt-volatile-write.sym +++ b/src/test/ref/test-interrupt-volatile-write.sym @@ -2,7 +2,7 @@ const nomodify byte* BG_COLOR = (byte*) 53280 const nomodify void()** KERNEL_IRQ = (void()**) 788 void __start() volatile byte col loadstore zp[1]:2 139.5 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() zp[1]:2 [ col ] diff --git a/src/test/ref/test-interrupt-volatile.cfg b/src/test/ref/test-interrupt-volatile.cfg index ef98188e3..a6cb31bb3 100644 --- a/src/test/ref/test-interrupt-volatile.cfg +++ b/src/test/ref/test-interrupt-volatile.cfg @@ -14,7 +14,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from asm { lda$dc0d } [6] *BG_COLOR = col diff --git a/src/test/ref/test-interrupt-volatile.log b/src/test/ref/test-interrupt-volatile.log index 064017f98..2c77798c8 100644 --- a/src/test/ref/test-interrupt-volatile.log +++ b/src/test/ref/test-interrupt-volatile.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(KERNEL_MIN) void irq() +Resolved forward reference irq to __interrupt(rom_min_c64) void irq() Inlined call call __init CONTROL FLOW GRAPH SSA @@ -17,7 +17,7 @@ main::@return: scope:[main] from main::@1 return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from asm { lda$dc0d } *BG_COLOR = col @@ -46,7 +46,7 @@ const nomodify byte* BG_COLOR = (byte*)$d020 const nomodify void()** KERNEL_IRQ = (void()**)$314 void __start() volatile byte col loadstore -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() Simplifying constant pointer cast (void()**) 788 @@ -88,7 +88,7 @@ __start::@return: scope:[__start] from __start::@1 [4] return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from asm { lda$dc0d } [6] *BG_COLOR = col @@ -109,7 +109,7 @@ main::@1: scope:[main] from main main::@1 VARIABLE REGISTER WEIGHTS void __start() volatile byte col loadstore 41.2 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() Initial phi equivalence classes @@ -130,12 +130,12 @@ Uplift Scope [main] Uplift Scope [irq] Uplift Scope [__start] -Uplifting [] best 165 combination zp[1]:2 [ col ] -Uplifting [main] best 165 combination -Uplifting [irq] best 165 combination -Uplifting [__start] best 165 combination +Uplifting [] best 192 combination zp[1]:2 [ col ] +Uplifting [main] best 192 combination +Uplifting [irq] best 192 combination +Uplifting [__start] best 192 combination Attempting to uplift remaining variables inzp[1]:2 [ col ] -Uplifting [] best 165 combination zp[1]:2 [ col ] +Uplifting [] best 192 combination zp[1]:2 [ col ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -170,7 +170,7 @@ __start: { } // irq irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // asm { lda$dc0d } lda $dc0d // [6] *BG_COLOR = col -- _deref_pbuc1=vbuz1 @@ -179,7 +179,8 @@ irq: { jmp __breturn // irq::@return __breturn: - // [7] return - exit interrupt(KERNEL_MIN) + // [7] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main @@ -218,14 +219,14 @@ const nomodify byte* BG_COLOR = (byte*) 53280 const nomodify void()** KERNEL_IRQ = (void()**) 788 void __start() volatile byte col loadstore zp[1]:2 41.2 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() zp[1]:2 [ col ] FINAL ASSEMBLER -Score: 123 +Score: 150 // File Comments // Upstart @@ -253,7 +254,7 @@ __start: { } // irq irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // asm // asm { lda$dc0d } lda $dc0d @@ -263,7 +264,8 @@ irq: { sta BG_COLOR // irq::@return // } - // [7] return - exit interrupt(KERNEL_MIN) + // [7] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main diff --git a/src/test/ref/test-interrupt-volatile.sym b/src/test/ref/test-interrupt-volatile.sym index 456b798fb..c318d0052 100644 --- a/src/test/ref/test-interrupt-volatile.sym +++ b/src/test/ref/test-interrupt-volatile.sym @@ -2,7 +2,7 @@ const nomodify byte* BG_COLOR = (byte*) 53280 const nomodify void()** KERNEL_IRQ = (void()**) 788 void __start() volatile byte col loadstore zp[1]:2 41.2 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() zp[1]:2 [ col ] diff --git a/src/test/ref/test-interrupt.cfg b/src/test/ref/test-interrupt.cfg index 7a30af490..46e613e42 100644 --- a/src/test/ref/test-interrupt.cfg +++ b/src/test/ref/test-interrupt.cfg @@ -1,5 +1,5 @@ -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from [0] *BG_COLOR = ++ *BG_COLOR asm { lda$dc0d } diff --git a/src/test/ref/test-interrupt.log b/src/test/ref/test-interrupt.log index e23746f3b..b6eccfdbe 100644 --- a/src/test/ref/test-interrupt.log +++ b/src/test/ref/test-interrupt.log @@ -1,4 +1,4 @@ -Resolved forward reference irq to interrupt(KERNEL_MIN) void irq() +Resolved forward reference irq to __interrupt(rom_min_c64) void irq() CONTROL FLOW GRAPH SSA @@ -16,7 +16,7 @@ main::@return: scope:[main] from main::@1 return to:@return -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from *BG_COLOR = ++ *BG_COLOR asm { lda$dc0d } @@ -40,7 +40,7 @@ const nomodify byte* BG_COLOR = (byte*)$d020 const nomodify byte* FGCOL = (byte*)$d021 const nomodify void()** KERNEL_IRQ = (void()**)$314 void __start() -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() Simplifying constant pointer cast (void()**) 788 @@ -66,7 +66,7 @@ Renumbering block main::@2 to main::@1 FINAL CONTROL FLOW GRAPH -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() irq: scope:[irq] from [0] *BG_COLOR = ++ *BG_COLOR asm { lda$dc0d } @@ -85,7 +85,7 @@ main::@1: scope:[main] from main main::@1 VARIABLE REGISTER WEIGHTS -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() Initial phi equivalence classes @@ -99,9 +99,9 @@ Uplift Scope [main] Uplift Scope [irq] Uplift Scope [] -Uplifting [main] best 121 combination -Uplifting [irq] best 121 combination -Uplifting [] best 121 combination +Uplifting [main] best 148 combination +Uplifting [irq] best 148 combination +Uplifting [] best 148 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -115,7 +115,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label FGCOL = $d021 // irq irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // [0] *BG_COLOR = ++ *BG_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BG_COLOR // asm { lda$dc0d } @@ -123,7 +123,8 @@ irq: { jmp __breturn // irq::@return __breturn: - // [2] return - exit interrupt(KERNEL_MIN) + // [2] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main @@ -153,13 +154,13 @@ FINAL SYMBOL TABLE const nomodify byte* BG_COLOR = (byte*) 53280 const nomodify byte* FGCOL = (byte*) 53281 const nomodify void()** KERNEL_IRQ = (void()**) 788 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() FINAL ASSEMBLER -Score: 115 +Score: 142 // File Comments // Upstart @@ -172,7 +173,7 @@ Score: 115 .label FGCOL = $d021 // irq irq: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // (*BG_COLOR)++; // [0] *BG_COLOR = ++ *BG_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BG_COLOR @@ -181,7 +182,8 @@ irq: { lda $dc0d // irq::@return // } - // [2] return - exit interrupt(KERNEL_MIN) + // [2] return + // interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit jmp $ea81 } // main diff --git a/src/test/ref/test-interrupt.sym b/src/test/ref/test-interrupt.sym index 6a4855657..1cc1f0549 100644 --- a/src/test/ref/test-interrupt.sym +++ b/src/test/ref/test-interrupt.sym @@ -1,6 +1,6 @@ const nomodify byte* BG_COLOR = (byte*) 53280 const nomodify byte* FGCOL = (byte*) 53281 const nomodify void()** KERNEL_IRQ = (void()**) 788 -interrupt(KERNEL_MIN) void irq() +__interrupt(rom_min_c64) void irq() void main() diff --git a/src/test/ref/unused-irq.cfg b/src/test/ref/unused-irq.cfg index 5fad579a8..7d5663df6 100644 --- a/src/test/ref/unused-irq.cfg +++ b/src/test/ref/unused-irq.cfg @@ -1,5 +1,5 @@ -interrupt(KERNEL_MIN) void irq2() +__interrupt(rom_min_c64) void irq2() irq2: scope:[irq2] from [0] *HARDWARE_IRQ = &irq1 to:irq2::@return @@ -7,7 +7,7 @@ irq2::@return: scope:[irq2] from irq2 [1] return to:@return -interrupt(KERNEL_MIN) void irq1() +__interrupt(rom_min_c64) void irq1() irq1: scope:[irq1] from [2] *HARDWARE_IRQ = &irq2 to:irq1::@return diff --git a/src/test/ref/unused-irq.log b/src/test/ref/unused-irq.log index dfe435bcb..a5fd01d9e 100644 --- a/src/test/ref/unused-irq.log +++ b/src/test/ref/unused-irq.log @@ -1,4 +1,4 @@ -Resolved forward reference irq2 to interrupt(KERNEL_MIN) void irq2() +Resolved forward reference irq2 to __interrupt(rom_min_c64) void irq2() CONTROL FLOW GRAPH SSA @@ -10,7 +10,7 @@ main::@return: scope:[main] from main return to:@return -interrupt(KERNEL_MIN) void irq1() +__interrupt(rom_min_c64) void irq1() irq1: scope:[irq1] from *HARDWARE_IRQ = &irq2 to:irq1::@return @@ -18,7 +18,7 @@ irq1::@return: scope:[irq1] from irq1 return to:@return -interrupt(KERNEL_MIN) void irq2() +__interrupt(rom_min_c64) void irq2() irq2: scope:[irq2] from *HARDWARE_IRQ = &irq1 to:irq2::@return @@ -40,8 +40,8 @@ SYMBOL TABLE SSA const nomodify void()** HARDWARE_IRQ = (void()**)$fffe const nomodify byte* SCREEN = (byte*)$400 void __start() -interrupt(KERNEL_MIN) void irq1() -interrupt(KERNEL_MIN) void irq2() +__interrupt(rom_min_c64) void irq1() +__interrupt(rom_min_c64) void irq2() void main() Simplifying constant pointer cast (byte*) 1024 @@ -59,7 +59,7 @@ Coalesced down to 0 phi equivalence classes FINAL CONTROL FLOW GRAPH -interrupt(KERNEL_MIN) void irq2() +__interrupt(rom_min_c64) void irq2() irq2: scope:[irq2] from [0] *HARDWARE_IRQ = &irq1 to:irq2::@return @@ -67,7 +67,7 @@ irq2::@return: scope:[irq2] from irq2 [1] return to:@return -interrupt(KERNEL_MIN) void irq1() +__interrupt(rom_min_c64) void irq1() irq1: scope:[irq1] from [2] *HARDWARE_IRQ = &irq2 to:irq1::@return @@ -85,8 +85,8 @@ main::@return: scope:[main] from main VARIABLE REGISTER WEIGHTS -interrupt(KERNEL_MIN) void irq1() -interrupt(KERNEL_MIN) void irq2() +__interrupt(rom_min_c64) void irq1() +__interrupt(rom_min_c64) void irq2() void main() Initial phi equivalence classes @@ -102,10 +102,10 @@ Uplift Scope [irq1] Uplift Scope [irq2] Uplift Scope [] -Uplifting [main] best 51 combination -Uplifting [irq1] best 51 combination -Uplifting [irq2] best 51 combination -Uplifting [] best 51 combination +Uplifting [main] best 105 combination +Uplifting [irq1] best 105 combination +Uplifting [irq2] best 105 combination +Uplifting [] best 105 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -120,7 +120,7 @@ ASSEMBLER BEFORE OPTIMIZATION // irq2 // Unused Interrupt Routine irq2: { - // entry interrupt(KERNEL_MIN) + // interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry // [0] *HARDWARE_IRQ = &irq1 -- _deref_qprc1=pprc2 lda #